1 /***************************************************************************/
4 * m5249.c -- platform support for ColdFire 5249 based boards
6 * Copyright (C) 2002, Greg Ungerer (gerg@snapgear.com)
9 /***************************************************************************/
11 #include <linux/kernel.h>
12 #include <linux/param.h>
13 #include <linux/init.h>
15 #include <linux/platform_device.h>
16 #include <asm/machdep.h>
17 #include <asm/coldfire.h>
18 #include <asm/mcfsim.h>
19 #include <asm/mcfclk.h>
21 /***************************************************************************/
23 DEFINE_CLK(pll
, "pll.0", MCF_CLK
);
24 DEFINE_CLK(sys
, "sys.0", MCF_BUSCLK
);
25 DEFINE_CLK(mcftmr0
, "mcftmr.0", MCF_BUSCLK
);
26 DEFINE_CLK(mcftmr1
, "mcftmr.1", MCF_BUSCLK
);
27 DEFINE_CLK(mcfuart0
, "mcfuart.0", MCF_BUSCLK
);
28 DEFINE_CLK(mcfuart1
, "mcfuart.1", MCF_BUSCLK
);
29 DEFINE_CLK(mcfqspi0
, "mcfqspi.0", MCF_BUSCLK
);
30 DEFINE_CLK(mcfi2c0
, "imx1-i2c.0", MCF_BUSCLK
);
31 DEFINE_CLK(mcfi2c1
, "imx1-i2c.1", MCF_BUSCLK
);
33 struct clk
*mcf_clks
[] = {
46 /***************************************************************************/
50 static struct resource m5249_smc91x_resources
[] = {
53 .end
= 0xe0000300 + 0x100,
54 .flags
= IORESOURCE_MEM
,
57 .start
= MCF_IRQ_GPIO6
,
59 .flags
= IORESOURCE_IRQ
,
63 static struct platform_device m5249_smc91x
= {
66 .num_resources
= ARRAY_SIZE(m5249_smc91x_resources
),
67 .resource
= m5249_smc91x_resources
,
70 #endif /* CONFIG_M5249C3 */
72 static struct platform_device
*m5249_devices
[] __initdata
= {
78 /***************************************************************************/
80 static void __init
m5249_qspi_init(void)
82 #if IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI)
84 writeb(MCFSIM_ICR_AUTOVEC
| MCFSIM_ICR_LEVEL4
| MCFSIM_ICR_PRI0
,
86 mcf_mapirq2imr(MCF_IRQ_QSPI
, MCFINTC_QSPI
);
87 #endif /* IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI) */
90 /***************************************************************************/
92 static void __init
m5249_i2c_init(void)
94 #if IS_ENABLED(CONFIG_I2C_IMX)
97 /* first I2C controller uses regular irq setup */
98 writeb(MCFSIM_ICR_AUTOVEC
| MCFSIM_ICR_LEVEL5
| MCFSIM_ICR_PRI0
,
100 mcf_mapirq2imr(MCF_IRQ_I2C0
, MCFINTC_I2C
);
102 /* second I2C controller is completely different */
103 r
= readl(MCFINTC2_INTPRI_REG(MCF_IRQ_I2C1
));
104 r
&= ~MCFINTC2_INTPRI_BITS(0xf, MCF_IRQ_I2C1
);
105 r
|= MCFINTC2_INTPRI_BITS(0x5, MCF_IRQ_I2C1
);
106 writel(r
, MCFINTC2_INTPRI_REG(MCF_IRQ_I2C1
));
107 #endif /* CONFIG_I2C_IMX */
110 /***************************************************************************/
112 #ifdef CONFIG_M5249C3
114 static void __init
m5249_smc91x_init(void)
118 /* Set the GPIO line as interrupt source for smc91x device */
119 gpio
= readl(MCFSIM2_GPIOINTENABLE
);
120 writel(gpio
| 0x40, MCFSIM2_GPIOINTENABLE
);
122 gpio
= readl(MCFINTC2_INTPRI5
);
123 writel(gpio
| 0x04000000, MCFINTC2_INTPRI5
);
126 #endif /* CONFIG_M5249C3 */
128 /***************************************************************************/
130 void __init
config_BSP(char *commandp
, int size
)
132 mach_sched_init
= hw_timer_init
;
134 #ifdef CONFIG_M5249C3
141 /***************************************************************************/
143 static int __init
init_BSP(void)
145 platform_add_devices(m5249_devices
, ARRAY_SIZE(m5249_devices
));
149 arch_initcall(init_BSP
);
151 /***************************************************************************/