3 * (C) Copyright 2000-2003
4 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
6 * (C) Copyright 2004-2007, 2012 Freescale Semiconductor, Inc.
7 * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
9 * SPDX-License-Identifier: GPL-2.0+
14 #include <asm/immap.h>
15 #include <asm/processor.h>
18 #include <linux/compiler.h>
20 #if defined(CONFIG_CMD_NET)
28 fbcs_t
*fbcs __maybe_unused
= (fbcs_t
*) MMAP_FBCS
;
30 #if !defined(CONFIG_SERIAL_BOOT)
31 #if (defined(CONFIG_SYS_CS0_BASE) && defined(CONFIG_SYS_CS0_MASK) && defined(CONFIG_SYS_CS0_CTRL))
32 out_be32(&fbcs
->csar0
, CONFIG_SYS_CS0_BASE
);
33 out_be32(&fbcs
->cscr0
, CONFIG_SYS_CS0_CTRL
);
34 out_be32(&fbcs
->csmr0
, CONFIG_SYS_CS0_MASK
);
38 #if (defined(CONFIG_SYS_CS1_BASE) && defined(CONFIG_SYS_CS1_MASK) && defined(CONFIG_SYS_CS1_CTRL))
39 /* Latch chipselect */
40 out_be32(&fbcs
->csar1
, CONFIG_SYS_CS1_BASE
);
41 out_be32(&fbcs
->cscr1
, CONFIG_SYS_CS1_CTRL
);
42 out_be32(&fbcs
->csmr1
, CONFIG_SYS_CS1_MASK
);
45 #if (defined(CONFIG_SYS_CS2_BASE) && defined(CONFIG_SYS_CS2_MASK) && defined(CONFIG_SYS_CS2_CTRL))
46 out_be32(&fbcs
->csar2
, CONFIG_SYS_CS2_BASE
);
47 out_be32(&fbcs
->cscr2
, CONFIG_SYS_CS2_CTRL
);
48 out_be32(&fbcs
->csmr2
, CONFIG_SYS_CS2_MASK
);
51 #if (defined(CONFIG_SYS_CS3_BASE) && defined(CONFIG_SYS_CS3_MASK) && defined(CONFIG_SYS_CS3_CTRL))
52 out_be32(&fbcs
->csar3
, CONFIG_SYS_CS3_BASE
);
53 out_be32(&fbcs
->cscr3
, CONFIG_SYS_CS3_CTRL
);
54 out_be32(&fbcs
->csmr3
, CONFIG_SYS_CS3_MASK
);
57 #if (defined(CONFIG_SYS_CS4_BASE) && defined(CONFIG_SYS_CS4_MASK) && defined(CONFIG_SYS_CS4_CTRL))
58 out_be32(&fbcs
->csar4
, CONFIG_SYS_CS4_BASE
);
59 out_be32(&fbcs
->cscr4
, CONFIG_SYS_CS4_CTRL
);
60 out_be32(&fbcs
->csmr4
, CONFIG_SYS_CS4_MASK
);
63 #if (defined(CONFIG_SYS_CS5_BASE) && defined(CONFIG_SYS_CS5_MASK) && defined(CONFIG_SYS_CS5_CTRL))
64 out_be32(&fbcs
->csar5
, CONFIG_SYS_CS5_BASE
);
65 out_be32(&fbcs
->cscr5
, CONFIG_SYS_CS5_CTRL
);
66 out_be32(&fbcs
->csmr5
, CONFIG_SYS_CS5_MASK
);
71 * Breath some life into the CPU...
73 * Set up the memory map,
74 * initialize a bunch of registers,
75 * initialize the UPM's
79 gpio_t
*gpio
= (gpio_t
*) MMAP_GPIO
;
81 #ifdef CONFIG_MCF5441x
82 scm_t
*scm
= (scm_t
*) MMAP_SCM
;
83 pm_t
*pm
= (pm_t
*) MMAP_PM
;
86 *(unsigned long *)(MMAP_L2_SW0
+ 0x00000024) = 0;
88 /* Disable core watchdog */
89 out_be16(&scm
->cwcr
, 0);
90 out_8(&gpio
->par_fbctl
,
91 GPIO_PAR_FBCTL_ALE_FB_ALE
| GPIO_PAR_FBCTL_OE_FB_OE
|
92 GPIO_PAR_FBCTL_FBCLK
| GPIO_PAR_FBCTL_RW
|
93 GPIO_PAR_FBCTL_TA_TA
);
95 GPIO_PAR_BE_BE3_BE3
| GPIO_PAR_BE_BE2_BE2
|
96 GPIO_PAR_BE_BE1_BE1
| GPIO_PAR_BE_BE0_BE0
);
99 out_8(&pm
->pmcr0
, 17);
102 out_8(&pm
->pmcr0
, 18);
103 out_8(&pm
->pmcr0
, 19);
104 out_8(&pm
->pmcr0
, 20);
107 out_8(&pm
->pmcr0
, 22);
108 out_8(&pm
->pmcr1
, 4);
109 out_8(&pm
->pmcr1
, 7);
112 out_8(&pm
->pmcr0
, 28);
113 out_8(&pm
->pmcr0
, 29);
114 out_8(&pm
->pmcr0
, 30);
115 out_8(&pm
->pmcr0
, 31);
118 out_8(&pm
->pmcr0
, 32);
119 out_8(&pm
->pmcr0
, 33);
120 out_8(&pm
->pmcr0
, 34);
121 out_8(&pm
->pmcr0
, 35);
124 out_8(&pm
->pmcr0
, 36);
125 out_8(&pm
->pmcr0
, 37);
128 out_8(&pm
->pmcr0
, 44);
130 out_8(&pm
->pmcr0
, 45);
133 out_8(&pm
->pmcr0
, 51);
136 out_8(&pm
->pmcr0
, 53);
137 out_8(&pm
->pmcr0
, 54);
140 out_8(&pm
->pmcr0
, 63);
142 #ifdef CONFIG_SYS_I2C_0
143 out_8(&gpio
->par_cani2c
, 0xF0);
145 out_be16(&gpio
->pcr_b
, 0x003C);
147 out_8(&gpio
->srcr_cani2c
, 0x03);
149 #ifdef CONFIG_SYS_I2C_2
151 out_8(&gpio
->par_ssi0h
, 0xA0);
153 out_8(&gpio
->par_ssi0h
, 0xA8);
155 out_8(&gpio
->par_ssi0l
, 0x2);
157 out_8(&gpio
->par_cani2c
, 0xAA);
159 out_8(&gpio
->par_uart0
, 0xAF);
161 out_8(&gpio
->par_uart1
, 0xAF);
163 out_8(&gpio
->par_uart2
, 0xAF);
165 out_be16(&gpio
->pcr_h
, 0xF000);
167 #ifdef CONFIG_SYS_I2C_5
169 out_8(&gpio
->par_uart1
, 0x0A);
171 out_be16(&gpio
->pcr_e
, 0x0003);
172 out_be16(&gpio
->pcr_f
, 0xC000);
175 /* Lowest slew rate for UART0,1,2 */
176 out_8(&gpio
->srcr_uart
, 0x00);
177 #endif /* CONFIG_MCF5441x */
179 #ifdef CONFIG_MCF5445x
180 scm1_t
*scm1
= (scm1_t
*) MMAP_SCM1
;
182 out_be32(&scm1
->mpr
, 0x77777777);
183 out_be32(&scm1
->pacra
, 0);
184 out_be32(&scm1
->pacrb
, 0);
185 out_be32(&scm1
->pacrc
, 0);
186 out_be32(&scm1
->pacrd
, 0);
187 out_be32(&scm1
->pacre
, 0);
188 out_be32(&scm1
->pacrf
, 0);
189 out_be32(&scm1
->pacrg
, 0);
193 GPIO_PAR_BE_BE3_BE3
| GPIO_PAR_BE_BE2_BE2
|
194 GPIO_PAR_BE_BE1_BE1
| GPIO_PAR_BE_BE0_BE0
);
195 out_8(&gpio
->par_fbctl
,
196 GPIO_PAR_FBCTL_OE
| GPIO_PAR_FBCTL_TA_TA
|
197 GPIO_PAR_FBCTL_RW_RW
| GPIO_PAR_FBCTL_TS_TS
);
199 #ifdef CONFIG_SYS_FSL_I2C
200 out_be16(&gpio
->par_feci2c
,
201 GPIO_PAR_FECI2C_SCL_SCL
| GPIO_PAR_FECI2C_SDA_SDA
);
203 #endif /* CONFIG_MCF5445x */
205 /* FlexBus Chipselect */
209 * now the flash base address is no longer at 0 (Newer ColdFire family
210 * boot at address 0 instead of 0xFFnn_nnnn). The vector table must
211 * also move to the new location.
213 if (CONFIG_SYS_CS0_BASE
!= 0)
214 setvbr(CONFIG_SYS_CS0_BASE
);
220 * initialize higher level parts of CPU like timers
225 rtc_t
*rtc
= (rtc_t
*)(CONFIG_SYS_MCFRTC_BASE
);
226 rtcex_t
*rtcex
= (rtcex_t
*)&rtc
->extended
;
228 out_be32(&rtcex
->gocu
, (CONFIG_SYS_RTC_OSCILLATOR
>> 16) & 0xffff);
229 out_be32(&rtcex
->gocl
, CONFIG_SYS_RTC_OSCILLATOR
& 0xffff);
235 void uart_port_conf(int port
)
237 gpio_t
*gpio
= (gpio_t
*) MMAP_GPIO
;
238 #ifdef CONFIG_MCF5441x
239 pm_t
*pm
= (pm_t
*) MMAP_PM
;
244 #ifdef CONFIG_MCF5441x
247 out_8(&pm
->pmcr0
, 24);
248 clrbits_8(&gpio
->par_uart0
,
249 ~(GPIO_PAR_UART0_U0RXD_MASK
| GPIO_PAR_UART0_U0TXD_MASK
));
250 setbits_8(&gpio
->par_uart0
,
251 GPIO_PAR_UART0_U0RXD_U0RXD
| GPIO_PAR_UART0_U0TXD_U0TXD
);
255 out_8(&pm
->pmcr0
, 25);
256 clrbits_8(&gpio
->par_uart1
,
257 ~(GPIO_PAR_UART1_U1RXD_MASK
| GPIO_PAR_UART1_U1TXD_MASK
));
258 setbits_8(&gpio
->par_uart1
,
259 GPIO_PAR_UART1_U1RXD_U1RXD
| GPIO_PAR_UART1_U1TXD_U1TXD
);
263 out_8(&pm
->pmcr0
, 26);
264 clrbits_8(&gpio
->par_uart2
,
265 ~(GPIO_PAR_UART2_U2RXD_MASK
| GPIO_PAR_UART2_U2TXD_MASK
));
266 setbits_8(&gpio
->par_uart2
,
267 GPIO_PAR_UART2_U2RXD_U2RXD
| GPIO_PAR_UART2_U2TXD_U2TXD
);
271 out_8(&pm
->pmcr0
, 27);
272 clrbits_8(&gpio
->par_dspi0
,
273 ~(GPIO_PAR_DSPI0_SIN_MASK
| GPIO_PAR_DSPI0_SOUT_MASK
));
274 setbits_8(&gpio
->par_dspi0
,
275 GPIO_PAR_DSPI0_SIN_U3RXD
| GPIO_PAR_DSPI0_SOUT_U3TXD
);
279 out_8(&pm
->pmcr1
, 24);
280 clrbits_8(&gpio
->par_uart0
,
281 ~(GPIO_PAR_UART0_U0CTS_MASK
| GPIO_PAR_UART0_U0RTS_MASK
));
282 setbits_8(&gpio
->par_uart0
,
283 GPIO_PAR_UART0_U0CTS_U4TXD
| GPIO_PAR_UART0_U0RTS_U4RXD
);
287 out_8(&pm
->pmcr1
, 25);
288 clrbits_8(&gpio
->par_uart1
,
289 ~(GPIO_PAR_UART1_U1CTS_MASK
| GPIO_PAR_UART1_U1RTS_MASK
));
290 setbits_8(&gpio
->par_uart1
,
291 GPIO_PAR_UART1_U1CTS_U5TXD
| GPIO_PAR_UART1_U1RTS_U5RXD
);
295 out_8(&pm
->pmcr1
, 26);
296 clrbits_8(&gpio
->par_uart2
,
297 ~(GPIO_PAR_UART2_U2CTS_MASK
| GPIO_PAR_UART2_U2RTS_MASK
));
298 setbits_8(&gpio
->par_uart2
,
299 GPIO_PAR_UART2_U2CTS_U6TXD
| GPIO_PAR_UART2_U2RTS_U6RXD
);
303 out_8(&pm
->pmcr1
, 27);
304 clrbits_8(&gpio
->par_ssi0h
, ~GPIO_PAR_SSI0H_RXD_MASK
);
305 clrbits_8(&gpio
->par_ssi0l
, ~GPIO_PAR_SSI0L_BCLK_MASK
);
306 setbits_8(&gpio
->par_ssi0h
, GPIO_PAR_SSI0H_FS_U7TXD
);
307 setbits_8(&gpio
->par_ssi0l
, GPIO_PAR_SSI0L_BCLK_U7RXD
);
311 out_8(&pm
->pmcr0
, 28);
312 clrbits_8(&gpio
->par_cani2c
,
313 ~(GPIO_PAR_CANI2C_I2C0SCL_MASK
| GPIO_PAR_CANI2C_I2C0SDA_MASK
));
314 setbits_8(&gpio
->par_cani2c
,
315 GPIO_PAR_CANI2C_I2C0SCL_U8TXD
| GPIO_PAR_CANI2C_I2C0SDA_U8RXD
);
319 out_8(&pm
->pmcr1
, 29);
320 clrbits_8(&gpio
->par_cani2c
,
321 ~(GPIO_PAR_CANI2C_CAN1TX_MASK
| GPIO_PAR_CANI2C_CAN1RX_MASK
));
322 setbits_8(&gpio
->par_cani2c
,
323 GPIO_PAR_CANI2C_CAN1TX_U9TXD
| GPIO_PAR_CANI2C_CAN1RX_U9RXD
);
326 #ifdef CONFIG_MCF5445x
328 clrbits_8(&gpio
->par_uart
,
329 GPIO_PAR_UART_U0TXD_U0TXD
| GPIO_PAR_UART_U0RXD_U0RXD
);
330 setbits_8(&gpio
->par_uart
,
331 GPIO_PAR_UART_U0TXD_U0TXD
| GPIO_PAR_UART_U0RXD_U0RXD
);
334 #ifdef CONFIG_SYS_UART1_PRI_GPIO
335 clrbits_8(&gpio
->par_uart
,
336 GPIO_PAR_UART_U1TXD_U1TXD
| GPIO_PAR_UART_U1RXD_U1RXD
);
337 setbits_8(&gpio
->par_uart
,
338 GPIO_PAR_UART_U1TXD_U1TXD
| GPIO_PAR_UART_U1RXD_U1RXD
);
339 #elif defined(CONFIG_SYS_UART1_ALT1_GPIO)
340 clrbits_be16(&gpio
->par_ssi
,
341 ~(GPIO_PAR_SSI_SRXD_UNMASK
| GPIO_PAR_SSI_STXD_UNMASK
));
342 setbits_be16(&gpio
->par_ssi
,
343 GPIO_PAR_SSI_SRXD_U1RXD
| GPIO_PAR_SSI_STXD_U1TXD
);
347 #if defined(CONFIG_SYS_UART2_ALT1_GPIO)
348 clrbits_8(&gpio
->par_timer
,
349 ~(GPIO_PAR_TIMER_T3IN_UNMASK
| GPIO_PAR_TIMER_T2IN_UNMASK
));
350 setbits_8(&gpio
->par_timer
,
351 GPIO_PAR_TIMER_T3IN_U2RXD
| GPIO_PAR_TIMER_T2IN_U2TXD
);
352 #elif defined(CONFIG_SYS_UART2_ALT2_GPIO)
353 clrbits_8(&gpio
->par_timer
,
354 ~(GPIO_PAR_FECI2C_SCL_UNMASK
| GPIO_PAR_FECI2C_SDA_UNMASK
));
355 setbits_8(&gpio
->par_timer
,
356 GPIO_PAR_FECI2C_SCL_U2TXD
| GPIO_PAR_FECI2C_SDA_U2RXD
);
359 #endif /* CONFIG_MCF5445x */
363 #if defined(CONFIG_CMD_NET)
364 int fecpin_setclear(struct eth_device
*dev
, int setclear
)
366 gpio_t
*gpio
= (gpio_t
*) MMAP_GPIO
;
367 struct fec_info_s
*info
= (struct fec_info_s
*)dev
->priv
;
369 #ifdef CONFIG_MCF5445x
371 #ifdef CONFIG_SYS_FEC_NO_SHARED_PHY
372 if (info
->iobase
== CONFIG_SYS_FEC0_IOBASE
)
373 setbits_be16(&gpio
->par_feci2c
,
374 GPIO_PAR_FECI2C_MDC0_MDC0
|
375 GPIO_PAR_FECI2C_MDIO0_MDIO0
);
377 setbits_be16(&gpio
->par_feci2c
,
378 GPIO_PAR_FECI2C_MDC1_MDC1
|
379 GPIO_PAR_FECI2C_MDIO1_MDIO1
);
381 setbits_be16(&gpio
->par_feci2c
,
382 GPIO_PAR_FECI2C_MDC0_MDC0
| GPIO_PAR_FECI2C_MDIO0_MDIO0
);
385 if (info
->iobase
== CONFIG_SYS_FEC0_IOBASE
)
386 setbits_8(&gpio
->par_fec
, GPIO_PAR_FEC_FEC0_RMII_GPIO
);
388 setbits_8(&gpio
->par_fec
, GPIO_PAR_FEC_FEC1_RMII_ATA
);
390 clrbits_be16(&gpio
->par_feci2c
,
391 GPIO_PAR_FECI2C_MDC0_MDC0
| GPIO_PAR_FECI2C_MDIO0_MDIO0
);
393 if (info
->iobase
== CONFIG_SYS_FEC0_IOBASE
) {
394 #ifdef CONFIG_SYS_FEC_FULL_MII
395 setbits_8(&gpio
->par_fec
, GPIO_PAR_FEC_FEC0_MII
);
397 clrbits_8(&gpio
->par_fec
, ~GPIO_PAR_FEC_FEC0_UNMASK
);
400 #ifdef CONFIG_SYS_FEC_FULL_MII
401 setbits_8(&gpio
->par_fec
, GPIO_PAR_FEC_FEC1_MII
);
403 clrbits_8(&gpio
->par_fec
, ~GPIO_PAR_FEC_FEC1_UNMASK
);
407 #endif /* CONFIG_MCF5445x */
409 #ifdef CONFIG_MCF5441x
411 out_8(&gpio
->par_fec
, 0x03);
412 out_8(&gpio
->srcr_fec
, 0x0F);
413 clrsetbits_8(&gpio
->par_simp0h
, ~GPIO_PAR_SIMP0H_DAT_MASK
,
414 GPIO_PAR_SIMP0H_DAT_GPIO
);
415 clrsetbits_8(&gpio
->pddr_g
, ~GPIO_PDDR_G4_MASK
,
416 GPIO_PDDR_G4_OUTPUT
);
417 clrbits_8(&gpio
->podr_g
, ~GPIO_PODR_G4_MASK
);
420 clrbits_8(&gpio
->par_fec
, ~GPIO_PAR_FEC_FEC_MASK
);
426 #ifdef CONFIG_CF_DSPI
427 void cfspi_port_conf(void)
429 gpio_t
*gpio
= (gpio_t
*) MMAP_GPIO
;
431 #ifdef CONFIG_MCF5445x
432 out_8(&gpio
->par_dspi
,
433 GPIO_PAR_DSPI_SIN_SIN
|
434 GPIO_PAR_DSPI_SOUT_SOUT
|
435 GPIO_PAR_DSPI_SCK_SCK
);
438 #ifdef CONFIG_MCF5441x
439 pm_t
*pm
= (pm_t
*) MMAP_PM
;
441 out_8(&gpio
->par_dspi0
,
442 GPIO_PAR_DSPI0_SIN_DSPI0SIN
| GPIO_PAR_DSPI0_SOUT_DSPI0SOUT
|
443 GPIO_PAR_DSPI0_SCK_DSPI0SCK
);
444 out_8(&gpio
->srcr_dspiow
, 3);
447 out_8(&pm
->pmcr0
, 23);
451 int cfspi_claim_bus(uint bus
, uint cs
)
453 dspi_t
*dspi
= (dspi_t
*) MMAP_DSPI
;
454 gpio_t
*gpio
= (gpio_t
*) MMAP_GPIO
;
456 if ((in_be32(&dspi
->sr
) & DSPI_SR_TXRXS
) != DSPI_SR_TXRXS
)
459 /* Clear FIFO and resume transfer */
460 clrbits_be32(&dspi
->mcr
, DSPI_MCR_CTXF
| DSPI_MCR_CRXF
);
462 #ifdef CONFIG_MCF5445x
465 clrbits_8(&gpio
->par_dspi
, GPIO_PAR_DSPI_PCS0_PCS0
);
466 setbits_8(&gpio
->par_dspi
, GPIO_PAR_DSPI_PCS0_PCS0
);
469 clrbits_8(&gpio
->par_dspi
, GPIO_PAR_DSPI_PCS1_PCS1
);
470 setbits_8(&gpio
->par_dspi
, GPIO_PAR_DSPI_PCS1_PCS1
);
473 clrbits_8(&gpio
->par_dspi
, GPIO_PAR_DSPI_PCS2_PCS2
);
474 setbits_8(&gpio
->par_dspi
, GPIO_PAR_DSPI_PCS2_PCS2
);
477 clrbits_8(&gpio
->par_dma
, ~GPIO_PAR_DMA_DACK0_UNMASK
);
478 setbits_8(&gpio
->par_dma
, GPIO_PAR_DMA_DACK0_PCS3
);
481 clrbits_8(&gpio
->par_dspi
, GPIO_PAR_DSPI_PCS5_PCS5
);
482 setbits_8(&gpio
->par_dspi
, GPIO_PAR_DSPI_PCS5_PCS5
);
487 #ifdef CONFIG_MCF5441x
490 clrbits_8(&gpio
->par_dspi0
, ~GPIO_PAR_DSPI0_PCS0_MASK
);
491 setbits_8(&gpio
->par_dspi0
, GPIO_PAR_DSPI0_PCS0_DSPI0PCS0
);
494 clrbits_8(&gpio
->par_dspiow
, GPIO_PAR_DSPIOW_DSPI0PSC1
);
495 setbits_8(&gpio
->par_dspiow
, GPIO_PAR_DSPIOW_DSPI0PSC1
);
503 void cfspi_release_bus(uint bus
, uint cs
)
505 dspi_t
*dspi
= (dspi_t
*) MMAP_DSPI
;
506 gpio_t
*gpio
= (gpio_t
*) MMAP_GPIO
;
509 clrbits_be32(&dspi
->mcr
, DSPI_MCR_CTXF
| DSPI_MCR_CRXF
);
511 #ifdef CONFIG_MCF5445x
514 clrbits_8(&gpio
->par_dspi
, GPIO_PAR_DSPI_PCS0_PCS0
);
517 clrbits_8(&gpio
->par_dspi
, GPIO_PAR_DSPI_PCS1_PCS1
);
520 clrbits_8(&gpio
->par_dspi
, GPIO_PAR_DSPI_PCS2_PCS2
);
523 clrbits_8(&gpio
->par_dma
, ~GPIO_PAR_DMA_DACK0_UNMASK
);
526 clrbits_8(&gpio
->par_dspi
, GPIO_PAR_DSPI_PCS5_PCS5
);
531 #ifdef CONFIG_MCF5441x
533 clrbits_8(&gpio
->par_dspiow
, GPIO_PAR_DSPIOW_DSPI0PSC1
);