1 // SPDX-License-Identifier: GPL-2.0
2 /***************************************************************************/
5 * m5249.c -- platform support for ColdFire 5249 based boards
7 * Copyright (C) 2002, Greg Ungerer (gerg@snapgear.com)
10 /***************************************************************************/
12 #include <linux/kernel.h>
13 #include <linux/param.h>
14 #include <linux/init.h>
16 #include <linux/platform_device.h>
17 #include <asm/machdep.h>
18 #include <asm/coldfire.h>
19 #include <asm/mcfsim.h>
20 #include <asm/mcfclk.h>
22 /***************************************************************************/
24 DEFINE_CLK(pll
, "pll.0", MCF_CLK
);
25 DEFINE_CLK(sys
, "sys.0", MCF_BUSCLK
);
26 DEFINE_CLK(mcftmr0
, "mcftmr.0", MCF_BUSCLK
);
27 DEFINE_CLK(mcftmr1
, "mcftmr.1", MCF_BUSCLK
);
28 DEFINE_CLK(mcfuart0
, "mcfuart.0", MCF_BUSCLK
);
29 DEFINE_CLK(mcfuart1
, "mcfuart.1", MCF_BUSCLK
);
30 DEFINE_CLK(mcfqspi0
, "mcfqspi.0", MCF_BUSCLK
);
31 DEFINE_CLK(mcfi2c0
, "imx1-i2c.0", MCF_BUSCLK
);
32 DEFINE_CLK(mcfi2c1
, "imx1-i2c.1", MCF_BUSCLK
);
34 struct clk
*mcf_clks
[] = {
47 /***************************************************************************/
51 static struct resource m5249_smc91x_resources
[] = {
54 .end
= 0xe0000300 + 0x100,
55 .flags
= IORESOURCE_MEM
,
58 .start
= MCF_IRQ_GPIO6
,
60 .flags
= IORESOURCE_IRQ
,
64 static struct platform_device m5249_smc91x
= {
67 .num_resources
= ARRAY_SIZE(m5249_smc91x_resources
),
68 .resource
= m5249_smc91x_resources
,
71 #endif /* CONFIG_M5249C3 */
73 static struct platform_device
*m5249_devices
[] __initdata
= {
79 /***************************************************************************/
81 static void __init
m5249_qspi_init(void)
83 #if IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI)
85 writeb(MCFSIM_ICR_AUTOVEC
| MCFSIM_ICR_LEVEL4
| MCFSIM_ICR_PRI0
,
87 mcf_mapirq2imr(MCF_IRQ_QSPI
, MCFINTC_QSPI
);
88 #endif /* IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI) */
91 /***************************************************************************/
93 static void __init
m5249_i2c_init(void)
95 #if IS_ENABLED(CONFIG_I2C_IMX)
98 /* first I2C controller uses regular irq setup */
99 writeb(MCFSIM_ICR_AUTOVEC
| MCFSIM_ICR_LEVEL5
| MCFSIM_ICR_PRI0
,
101 mcf_mapirq2imr(MCF_IRQ_I2C0
, MCFINTC_I2C
);
103 /* second I2C controller is completely different */
104 r
= readl(MCFINTC2_INTPRI_REG(MCF_IRQ_I2C1
));
105 r
&= ~MCFINTC2_INTPRI_BITS(0xf, MCF_IRQ_I2C1
);
106 r
|= MCFINTC2_INTPRI_BITS(0x5, MCF_IRQ_I2C1
);
107 writel(r
, MCFINTC2_INTPRI_REG(MCF_IRQ_I2C1
));
108 #endif /* CONFIG_I2C_IMX */
111 /***************************************************************************/
113 #ifdef CONFIG_M5249C3
115 static void __init
m5249_smc91x_init(void)
119 /* Set the GPIO line as interrupt source for smc91x device */
120 gpio
= readl(MCFSIM2_GPIOINTENABLE
);
121 writel(gpio
| 0x40, MCFSIM2_GPIOINTENABLE
);
123 gpio
= readl(MCFINTC2_INTPRI5
);
124 writel(gpio
| 0x04000000, MCFINTC2_INTPRI5
);
127 #endif /* CONFIG_M5249C3 */
129 /***************************************************************************/
131 void __init
config_BSP(char *commandp
, int size
)
133 mach_sched_init
= hw_timer_init
;
135 #ifdef CONFIG_M5249C3
142 /***************************************************************************/
144 static int __init
init_BSP(void)
146 platform_add_devices(m5249_devices
, ARRAY_SIZE(m5249_devices
));
150 arch_initcall(init_BSP
);
152 /***************************************************************************/