1 // SPDX-License-Identifier: GPL-2.0
2 /***************************************************************************/
5 * m527x.c -- platform support for ColdFire 527x based boards
7 * Sub-architcture dependent initialization code for the Freescale
8 * 5270/5271 and 5274/5275 CPUs.
10 * Copyright (C) 1999-2004, Greg Ungerer (gerg@snapgear.com)
11 * Copyright (C) 2001-2004, SnapGear Inc. (www.snapgear.com)
14 /***************************************************************************/
16 #include <linux/kernel.h>
17 #include <linux/param.h>
18 #include <linux/init.h>
20 #include <asm/machdep.h>
21 #include <asm/coldfire.h>
22 #include <asm/mcfsim.h>
23 #include <asm/mcfuart.h>
24 #include <asm/mcfclk.h>
26 /***************************************************************************/
28 DEFINE_CLK(pll
, "pll.0", MCF_CLK
);
29 DEFINE_CLK(sys
, "sys.0", MCF_BUSCLK
);
30 DEFINE_CLK(mcfpit0
, "mcfpit.0", MCF_CLK
);
31 DEFINE_CLK(mcfpit1
, "mcfpit.1", MCF_CLK
);
32 DEFINE_CLK(mcfpit2
, "mcfpit.2", MCF_CLK
);
33 DEFINE_CLK(mcfpit3
, "mcfpit.3", MCF_CLK
);
34 DEFINE_CLK(mcfuart0
, "mcfuart.0", MCF_BUSCLK
);
35 DEFINE_CLK(mcfuart1
, "mcfuart.1", MCF_BUSCLK
);
36 DEFINE_CLK(mcfuart2
, "mcfuart.2", MCF_BUSCLK
);
37 DEFINE_CLK(mcfqspi0
, "mcfqspi.0", MCF_BUSCLK
);
38 DEFINE_CLK(fec0
, "fec.0", MCF_BUSCLK
);
39 DEFINE_CLK(fec1
, "fec.1", MCF_BUSCLK
);
40 DEFINE_CLK(mcfi2c0
, "imx1-i2c.0", MCF_BUSCLK
);
42 struct clk
*mcf_clks
[] = {
59 /***************************************************************************/
61 static void __init
m527x_qspi_init(void)
63 #if IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI)
64 #if defined(CONFIG_M5271)
67 /* setup QSPS pins for QSPI with gpio CS control */
68 writeb(0x1f, MCFGPIO_PAR_QSPI
);
69 /* and CS2 & CS3 as gpio */
70 par
= readw(MCFGPIO_PAR_TIMER
);
72 writew(par
, MCFGPIO_PAR_TIMER
);
73 #elif defined(CONFIG_M5275)
74 /* setup QSPS pins for QSPI with gpio CS control */
75 writew(0x003e, MCFGPIO_PAR_QSPI
);
77 #endif /* IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI) */
80 /***************************************************************************/
82 static void __init
m527x_i2c_init(void)
84 #if IS_ENABLED(CONFIG_I2C_IMX)
85 #if defined(CONFIG_M5271)
88 /* setup Port FECI2C Pin Assignment Register for I2C */
89 /* set PAR_SCL to SCL and PAR_SDA to SDA */
90 par
= readb(MCFGPIO_PAR_FECI2C
);
92 writeb(par
, MCFGPIO_PAR_FECI2C
);
93 #elif defined(CONFIG_M5275)
96 /* setup Port FECI2C Pin Assignment Register for I2C */
97 /* set PAR_SCL to SCL and PAR_SDA to SDA */
98 par
= readw(MCFGPIO_PAR_FECI2C
);
100 writew(par
, MCFGPIO_PAR_FECI2C
);
102 #endif /* IS_ENABLED(CONFIG_I2C_IMX) */
105 /***************************************************************************/
107 static void __init
m527x_uarts_init(void)
112 * External Pin Mask Setting & Enable External Pin for Interface
114 sepmask
= readw(MCFGPIO_PAR_UART
);
115 sepmask
|= UART0_ENABLE_MASK
| UART1_ENABLE_MASK
| UART2_ENABLE_MASK
;
116 writew(sepmask
, MCFGPIO_PAR_UART
);
119 /***************************************************************************/
121 static void __init
m527x_fec_init(void)
125 /* Set multi-function pins to ethernet mode for fec0 */
126 #if defined(CONFIG_M5271)
127 v
= readb(MCFGPIO_PAR_FECI2C
);
128 writeb(v
| 0xf0, MCFGPIO_PAR_FECI2C
);
132 par
= readw(MCFGPIO_PAR_FECI2C
);
133 writew(par
| 0xf00, MCFGPIO_PAR_FECI2C
);
134 v
= readb(MCFGPIO_PAR_FEC0HL
);
135 writeb(v
| 0xc0, MCFGPIO_PAR_FEC0HL
);
137 /* Set multi-function pins to ethernet mode for fec1 */
138 par
= readw(MCFGPIO_PAR_FECI2C
);
139 writew(par
| 0xa0, MCFGPIO_PAR_FECI2C
);
140 v
= readb(MCFGPIO_PAR_FEC1HL
);
141 writeb(v
| 0xc0, MCFGPIO_PAR_FEC1HL
);
145 /***************************************************************************/
147 void __init
config_BSP(char *commandp
, int size
)
149 mach_sched_init
= hw_timer_init
;
156 /***************************************************************************/