2005-04-17 02:20:36 +04:00
/***************************************************************************/
/*
2014-08-19 05:55:24 +04:00
* m5249 . c - - platform support for ColdFire 5249 based boards
2005-04-17 02:20:36 +04:00
*
* Copyright ( C ) 2002 , Greg Ungerer ( gerg @ snapgear . com )
*/
/***************************************************************************/
# include <linux/kernel.h>
# include <linux/param.h>
# include <linux/init.h>
2008-02-01 10:34:30 +03:00
# include <linux/io.h>
2011-12-24 06:56:10 +04:00
# include <linux/platform_device.h>
2005-04-17 02:20:36 +04:00
# include <asm/machdep.h>
# include <asm/coldfire.h>
# include <asm/mcfsim.h>
2012-07-13 09:58:41 +04:00
# include <asm/mcfclk.h>
/***************************************************************************/
DEFINE_CLK ( pll , " pll.0 " , MCF_CLK ) ;
DEFINE_CLK ( sys , " sys.0 " , MCF_BUSCLK ) ;
DEFINE_CLK ( mcftmr0 , " mcftmr.0 " , MCF_BUSCLK ) ;
DEFINE_CLK ( mcftmr1 , " mcftmr.1 " , MCF_BUSCLK ) ;
DEFINE_CLK ( mcfuart0 , " mcfuart.0 " , MCF_BUSCLK ) ;
DEFINE_CLK ( mcfuart1 , " mcfuart.1 " , MCF_BUSCLK ) ;
2014-05-14 21:06:29 +04:00
DEFINE_CLK ( mcfqspi0 , " mcfqspi.0 " , MCF_BUSCLK ) ;
2014-06-30 20:53:19 +04:00
DEFINE_CLK ( mcfi2c0 , " imx1-i2c.0 " , MCF_BUSCLK ) ;
DEFINE_CLK ( mcfi2c1 , " imx1-i2c.1 " , MCF_BUSCLK ) ;
2012-07-13 09:58:41 +04:00
struct clk * mcf_clks [ ] = {
& clk_pll ,
& clk_sys ,
& clk_mcftmr0 ,
& clk_mcftmr1 ,
& clk_mcfuart0 ,
& clk_mcfuart1 ,
2014-05-14 21:06:29 +04:00
& clk_mcfqspi0 ,
2014-06-30 20:53:19 +04:00
& clk_mcfi2c0 ,
& clk_mcfi2c1 ,
2012-07-13 09:58:41 +04:00
NULL
} ;
2005-04-17 02:20:36 +04:00
/***************************************************************************/
2009-06-12 10:17:20 +04:00
# ifdef CONFIG_M5249C3
static struct resource m5249_smc91x_resources [ ] = {
{
. start = 0xe0000300 ,
. end = 0xe0000300 + 0x100 ,
. flags = IORESOURCE_MEM ,
} ,
{
2012-09-19 07:52:12 +04:00
. start = MCF_IRQ_GPIO6 ,
. end = MCF_IRQ_GPIO6 ,
2009-06-12 10:17:20 +04:00
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct platform_device m5249_smc91x = {
. name = " smc91x " ,
. id = 0 ,
. num_resources = ARRAY_SIZE ( m5249_smc91x_resources ) ,
. resource = m5249_smc91x_resources ,
} ;
# endif /* CONFIG_M5249C3 */
2011-12-24 06:56:10 +04:00
static struct platform_device * m5249_devices [ ] __initdata = {
# ifdef CONFIG_M5249C3
& m5249_smc91x ,
# endif
2010-01-22 23:43:03 +03:00
} ;
2011-12-24 06:56:10 +04:00
/***************************************************************************/
2010-01-22 23:43:03 +03:00
static void __init m5249_qspi_init ( void )
{
2014-05-14 21:07:55 +04:00
# if IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI)
2010-01-22 23:43:03 +03:00
/* QSPI irq setup */
writeb ( MCFSIM_ICR_AUTOVEC | MCFSIM_ICR_LEVEL4 | MCFSIM_ICR_PRI0 ,
2012-08-17 10:48:16 +04:00
MCFSIM_QSPIICR ) ;
2010-01-22 23:43:03 +03:00
mcf_mapirq2imr ( MCF_IRQ_QSPI , MCFINTC_QSPI ) ;
2012-05-06 23:22:53 +04:00
# endif /* IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI) */
2014-05-14 21:07:55 +04:00
}
2008-02-01 10:34:30 +03:00
/***************************************************************************/
2014-06-30 20:53:19 +04:00
static void __init m5249_i2c_init ( void )
{
# if IS_ENABLED(CONFIG_I2C_IMX)
u32 r ;
/* first I2C controller uses regular irq setup */
writeb ( MCFSIM_ICR_AUTOVEC | MCFSIM_ICR_LEVEL5 | MCFSIM_ICR_PRI0 ,
MCFSIM_I2CICR ) ;
mcf_mapirq2imr ( MCF_IRQ_I2C0 , MCFINTC_I2C ) ;
/* second I2C controller is completely different */
r = readl ( MCFINTC2_INTPRI_REG ( MCF_IRQ_I2C1 ) ) ;
r & = ~ MCFINTC2_INTPRI_BITS ( 0xf , MCF_IRQ_I2C1 ) ;
r | = MCFINTC2_INTPRI_BITS ( 0x5 , MCF_IRQ_I2C1 ) ;
writel ( r , MCFINTC2_INTPRI_REG ( MCF_IRQ_I2C1 ) ) ;
# endif /* CONFIG_I2C_IMX */
}
/***************************************************************************/
2009-06-12 10:17:20 +04:00
# ifdef CONFIG_M5249C3
static void __init m5249_smc91x_init ( void )
{
u32 gpio ;
/* Set the GPIO line as interrupt source for smc91x device */
2012-09-14 17:57:39 +04:00
gpio = readl ( MCFSIM2_GPIOINTENABLE ) ;
writel ( gpio | 0x40 , MCFSIM2_GPIOINTENABLE ) ;
2009-06-12 10:17:20 +04:00
2012-09-19 07:52:12 +04:00
gpio = readl ( MCFINTC2_INTPRI5 ) ;
writel ( gpio | 0x04000000 , MCFINTC2_INTPRI5 ) ;
2009-06-12 10:17:20 +04:00
}
# endif /* CONFIG_M5249C3 */
/***************************************************************************/
2008-02-01 10:34:30 +03:00
void __init config_BSP ( char * commandp , int size )
2005-04-17 02:20:36 +04:00
{
2012-01-23 09:34:58 +04:00
mach_sched_init = hw_timer_init ;
2012-02-19 10:16:58 +04:00
2009-06-12 10:17:20 +04:00
# ifdef CONFIG_M5249C3
m5249_smc91x_init ( ) ;
# endif
2010-01-22 23:43:03 +03:00
m5249_qspi_init ( ) ;
2014-06-30 20:53:19 +04:00
m5249_i2c_init ( ) ;
2005-04-17 02:20:36 +04:00
}
/***************************************************************************/
2008-02-01 10:34:30 +03:00
static int __init init_BSP ( void )
{
platform_add_devices ( m5249_devices , ARRAY_SIZE ( m5249_devices ) ) ;
return 0 ;
}
arch_initcall ( init_BSP ) ;
/***************************************************************************/