xref: /OK3568_Linux_fs/u-boot/arch/m68k/cpu/mcf532x/cpu_init.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  *
3*4882a593Smuzhiyun  * (C) Copyright 2000-2003
4*4882a593Smuzhiyun  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  * (C) Copyright 2004-2008, 2012 Freescale Semiconductor, Inc.
7*4882a593Smuzhiyun  * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * SPDX-License-Identifier:	GPL-2.0+
10*4882a593Smuzhiyun  */
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #include <common.h>
13*4882a593Smuzhiyun #include <watchdog.h>
14*4882a593Smuzhiyun #include <asm/immap.h>
15*4882a593Smuzhiyun #include <asm/io.h>
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #if defined(CONFIG_CMD_NET)
18*4882a593Smuzhiyun #include <config.h>
19*4882a593Smuzhiyun #include <net.h>
20*4882a593Smuzhiyun #include <asm/fec.h>
21*4882a593Smuzhiyun #endif
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun #ifdef CONFIG_MCF5301x
cpu_init_f(void)24*4882a593Smuzhiyun void cpu_init_f(void)
25*4882a593Smuzhiyun {
26*4882a593Smuzhiyun 	scm1_t *scm1 = (scm1_t *) MMAP_SCM1;
27*4882a593Smuzhiyun 	gpio_t *gpio = (gpio_t *) MMAP_GPIO;
28*4882a593Smuzhiyun 	fbcs_t *fbcs = (fbcs_t *) MMAP_FBCS;
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun 	out_be32(&scm1->mpr, 0x77777777);
31*4882a593Smuzhiyun 	out_be32(&scm1->pacra, 0);
32*4882a593Smuzhiyun 	out_be32(&scm1->pacrb, 0);
33*4882a593Smuzhiyun 	out_be32(&scm1->pacrc, 0);
34*4882a593Smuzhiyun 	out_be32(&scm1->pacrd, 0);
35*4882a593Smuzhiyun 	out_be32(&scm1->pacre, 0);
36*4882a593Smuzhiyun 	out_be32(&scm1->pacrf, 0);
37*4882a593Smuzhiyun 	out_be32(&scm1->pacrg, 0);
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun #if (defined(CONFIG_SYS_CS0_BASE) && defined(CONFIG_SYS_CS0_MASK) \
40*4882a593Smuzhiyun      && defined(CONFIG_SYS_CS0_CTRL))
41*4882a593Smuzhiyun 	setbits_8(&gpio->par_cs, GPIO_PAR_CS0_CS0);
42*4882a593Smuzhiyun 	out_be32(&fbcs->csar0, CONFIG_SYS_CS0_BASE);
43*4882a593Smuzhiyun 	out_be32(&fbcs->cscr0, CONFIG_SYS_CS0_CTRL);
44*4882a593Smuzhiyun 	out_be32(&fbcs->csmr0, CONFIG_SYS_CS0_MASK);
45*4882a593Smuzhiyun #endif
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun #if (defined(CONFIG_SYS_CS1_BASE) && defined(CONFIG_SYS_CS1_MASK) \
48*4882a593Smuzhiyun      && defined(CONFIG_SYS_CS1_CTRL))
49*4882a593Smuzhiyun 	setbits_8(&gpio->par_cs, GPIO_PAR_CS1_CS1);
50*4882a593Smuzhiyun 	out_be32(&fbcs->csar1, CONFIG_SYS_CS1_BASE);
51*4882a593Smuzhiyun 	out_be32(&fbcs->cscr1, CONFIG_SYS_CS1_CTRL);
52*4882a593Smuzhiyun 	out_be32(&fbcs->csmr1, CONFIG_SYS_CS1_MASK);
53*4882a593Smuzhiyun #endif
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun #if (defined(CONFIG_SYS_CS2_BASE) && defined(CONFIG_SYS_CS2_MASK) \
56*4882a593Smuzhiyun      && defined(CONFIG_SYS_CS2_CTRL))
57*4882a593Smuzhiyun 	out_be32(&fbcs->csar2, CONFIG_SYS_CS2_BASE);
58*4882a593Smuzhiyun 	out_be32(&fbcs->cscr2, CONFIG_SYS_CS2_CTRL);
59*4882a593Smuzhiyun 	out_be32(&fbcs->csmr2, CONFIG_SYS_CS2_MASK);
60*4882a593Smuzhiyun #endif
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun #if (defined(CONFIG_SYS_CS3_BASE) && defined(CONFIG_SYS_CS3_MASK) \
63*4882a593Smuzhiyun      && defined(CONFIG_SYS_CS3_CTRL))
64*4882a593Smuzhiyun 	out_be32(&fbcs->csar3, CONFIG_SYS_CS3_BASE);
65*4882a593Smuzhiyun 	out_be32(&fbcs->cscr3, CONFIG_SYS_CS3_CTRL);
66*4882a593Smuzhiyun 	out_be32(&fbcs->csmr3, CONFIG_SYS_CS3_MASK);
67*4882a593Smuzhiyun #endif
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun #if (defined(CONFIG_SYS_CS4_BASE) && defined(CONFIG_SYS_CS4_MASK) \
70*4882a593Smuzhiyun      && defined(CONFIG_SYS_CS4_CTRL))
71*4882a593Smuzhiyun 	setbits_8(&gpio->par_cs, GPIO_PAR_CS4);
72*4882a593Smuzhiyun 	out_be32(&fbcs->csar4, CONFIG_SYS_CS4_BASE);
73*4882a593Smuzhiyun 	out_be32(&fbcs->cscr4, CONFIG_SYS_CS4_CTRL);
74*4882a593Smuzhiyun 	out_be32(&fbcs->csmr4, CONFIG_SYS_CS4_MASK);
75*4882a593Smuzhiyun #endif
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun #if (defined(CONFIG_SYS_CS5_BASE) && defined(CONFIG_SYS_CS5_MASK) \
78*4882a593Smuzhiyun      && defined(CONFIG_SYS_CS5_CTRL))
79*4882a593Smuzhiyun 	setbits_8(&gpio->par_cs, GPIO_PAR_CS5);
80*4882a593Smuzhiyun 	out_be32(&fbcs->csar5, CONFIG_SYS_CS5_BASE);
81*4882a593Smuzhiyun 	out_be32(&fbcs->cscr5, CONFIG_SYS_CS5_CTRL);
82*4882a593Smuzhiyun 	out_be32(&fbcs->csmr5, CONFIG_SYS_CS5_MASK);
83*4882a593Smuzhiyun #endif
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun #ifdef CONFIG_SYS_I2C_FSL
86*4882a593Smuzhiyun 	out_8(&gpio->par_feci2c,
87*4882a593Smuzhiyun 		GPIO_PAR_FECI2C_SDA_SDA | GPIO_PAR_FECI2C_SCL_SCL);
88*4882a593Smuzhiyun #endif
89*4882a593Smuzhiyun 
90*4882a593Smuzhiyun 	icache_enable();
91*4882a593Smuzhiyun }
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun /* initialize higher level parts of CPU like timers */
cpu_init_r(void)94*4882a593Smuzhiyun int cpu_init_r(void)
95*4882a593Smuzhiyun {
96*4882a593Smuzhiyun #ifdef CONFIG_MCFFEC
97*4882a593Smuzhiyun 	ccm_t *ccm = (ccm_t *) MMAP_CCM;
98*4882a593Smuzhiyun #endif
99*4882a593Smuzhiyun #ifdef CONFIG_MCFRTC
100*4882a593Smuzhiyun 	rtc_t *rtc = (rtc_t *) (CONFIG_SYS_MCFRTC_BASE);
101*4882a593Smuzhiyun 	rtcex_t *rtcex = (rtcex_t *) &rtc->extended;
102*4882a593Smuzhiyun 
103*4882a593Smuzhiyun 	out_be32(&rtcex->gocu, CONFIG_SYS_RTC_CNT);
104*4882a593Smuzhiyun 	out_be32(&rtcex->gocl, CONFIG_SYS_RTC_SETUP);
105*4882a593Smuzhiyun 
106*4882a593Smuzhiyun #endif
107*4882a593Smuzhiyun #ifdef CONFIG_MCFFEC
108*4882a593Smuzhiyun 	if (CONFIG_SYS_FEC0_MIIBASE != CONFIG_SYS_FEC1_MIIBASE)
109*4882a593Smuzhiyun 		setbits_be16(&ccm->misccr, CCM_MISCCR_FECM);
110*4882a593Smuzhiyun 	else
111*4882a593Smuzhiyun 		clrbits_be16(&ccm->misccr, CCM_MISCCR_FECM);
112*4882a593Smuzhiyun #endif
113*4882a593Smuzhiyun 
114*4882a593Smuzhiyun 	return (0);
115*4882a593Smuzhiyun }
116*4882a593Smuzhiyun 
uart_port_conf(int port)117*4882a593Smuzhiyun void uart_port_conf(int port)
118*4882a593Smuzhiyun {
119*4882a593Smuzhiyun 	gpio_t *gpio = (gpio_t *) MMAP_GPIO;
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun 	/* Setup Ports: */
122*4882a593Smuzhiyun 	switch (port) {
123*4882a593Smuzhiyun 	case 0:
124*4882a593Smuzhiyun 		clrbits_8(&gpio->par_uart,
125*4882a593Smuzhiyun 			GPIO_PAR_UART_U0TXD | GPIO_PAR_UART_U0RXD);
126*4882a593Smuzhiyun 		setbits_8(&gpio->par_uart,
127*4882a593Smuzhiyun 			GPIO_PAR_UART_U0TXD | GPIO_PAR_UART_U0RXD);
128*4882a593Smuzhiyun 		break;
129*4882a593Smuzhiyun 	case 1:
130*4882a593Smuzhiyun #ifdef CONFIG_SYS_UART1_ALT1_GPIO
131*4882a593Smuzhiyun 		clrbits_8(&gpio->par_simp1h,
132*4882a593Smuzhiyun 			GPIO_PAR_SIMP1H_DATA1_UNMASK |
133*4882a593Smuzhiyun 			GPIO_PAR_SIMP1H_VEN1_UNMASK);
134*4882a593Smuzhiyun 		setbits_8(&gpio->par_simp1h,
135*4882a593Smuzhiyun 			GPIO_PAR_SIMP1H_DATA1_U1TXD |
136*4882a593Smuzhiyun 			GPIO_PAR_SIMP1H_VEN1_U1RXD);
137*4882a593Smuzhiyun #elif defined(CONFIG_SYS_UART1_ALT2_GPIO)
138*4882a593Smuzhiyun 		clrbits_8(&gpio->par_ssih,
139*4882a593Smuzhiyun 			GPIO_PAR_SSIH_RXD_UNMASK |
140*4882a593Smuzhiyun 			GPIO_PAR_SSIH_TXD_UNMASK);
141*4882a593Smuzhiyun 		setbits_8(&gpio->par_ssih,
142*4882a593Smuzhiyun 			GPIO_PAR_SSIH_RXD_U1RXD |
143*4882a593Smuzhiyun 			GPIO_PAR_SSIH_TXD_U1TXD);
144*4882a593Smuzhiyun #endif
145*4882a593Smuzhiyun 		break;
146*4882a593Smuzhiyun 	case 2:
147*4882a593Smuzhiyun #ifdef CONFIG_SYS_UART2_PRI_GPIO
148*4882a593Smuzhiyun 		setbits_8(&gpio->par_uart,
149*4882a593Smuzhiyun 			GPIO_PAR_UART_U2TXD |
150*4882a593Smuzhiyun 			GPIO_PAR_UART_U2RXD);
151*4882a593Smuzhiyun #elif defined(CONFIG_SYS_UART2_ALT1_GPIO)
152*4882a593Smuzhiyun 		clrbits_8(&gpio->par_dspih,
153*4882a593Smuzhiyun 			GPIO_PAR_DSPIH_SIN_UNMASK |
154*4882a593Smuzhiyun 			GPIO_PAR_DSPIH_SOUT_UNMASK);
155*4882a593Smuzhiyun 		setbits_8(&gpio->par_dspih,
156*4882a593Smuzhiyun 			GPIO_PAR_DSPIH_SIN_U2RXD |
157*4882a593Smuzhiyun 			GPIO_PAR_DSPIH_SOUT_U2TXD);
158*4882a593Smuzhiyun #elif defined(CONFIG_SYS_UART2_ALT2_GPIO)
159*4882a593Smuzhiyun 		clrbits_8(&gpio->par_feci2c,
160*4882a593Smuzhiyun 			GPIO_PAR_FECI2C_SDA_UNMASK |
161*4882a593Smuzhiyun 			GPIO_PAR_FECI2C_SCL_UNMASK);
162*4882a593Smuzhiyun 		setbits_8(&gpio->par_feci2c,
163*4882a593Smuzhiyun 			GPIO_PAR_FECI2C_SDA_U2TXD |
164*4882a593Smuzhiyun 			GPIO_PAR_FECI2C_SCL_U2RXD);
165*4882a593Smuzhiyun #endif
166*4882a593Smuzhiyun 		break;
167*4882a593Smuzhiyun 	}
168*4882a593Smuzhiyun }
169*4882a593Smuzhiyun 
170*4882a593Smuzhiyun #if defined(CONFIG_CMD_NET)
fecpin_setclear(struct eth_device * dev,int setclear)171*4882a593Smuzhiyun int fecpin_setclear(struct eth_device *dev, int setclear)
172*4882a593Smuzhiyun {
173*4882a593Smuzhiyun 	gpio_t *gpio = (gpio_t *) MMAP_GPIO;
174*4882a593Smuzhiyun 	struct fec_info_s *info = (struct fec_info_s *)dev->priv;
175*4882a593Smuzhiyun 
176*4882a593Smuzhiyun 	if (setclear) {
177*4882a593Smuzhiyun 		if (info->iobase == CONFIG_SYS_FEC0_IOBASE) {
178*4882a593Smuzhiyun 			setbits_8(&gpio->par_fec,
179*4882a593Smuzhiyun 				GPIO_PAR_FEC0_7W_FEC | GPIO_PAR_FEC0_RMII_FEC);
180*4882a593Smuzhiyun 			setbits_8(&gpio->par_feci2c,
181*4882a593Smuzhiyun 				GPIO_PAR_FECI2C_MDC0 | GPIO_PAR_FECI2C_MDIO0);
182*4882a593Smuzhiyun 		} else {
183*4882a593Smuzhiyun 			setbits_8(&gpio->par_fec,
184*4882a593Smuzhiyun 				GPIO_PAR_FEC1_7W_FEC | GPIO_PAR_FEC1_RMII_FEC);
185*4882a593Smuzhiyun 			setbits_8(&gpio->par_feci2c,
186*4882a593Smuzhiyun 				GPIO_PAR_FECI2C_MDC1 | GPIO_PAR_FECI2C_MDIO1);
187*4882a593Smuzhiyun 		}
188*4882a593Smuzhiyun 	} else {
189*4882a593Smuzhiyun 		if (info->iobase == CONFIG_SYS_FEC0_IOBASE) {
190*4882a593Smuzhiyun 			clrbits_8(&gpio->par_fec,
191*4882a593Smuzhiyun 				GPIO_PAR_FEC0_7W_FEC | GPIO_PAR_FEC0_RMII_FEC);
192*4882a593Smuzhiyun 			clrbits_8(&gpio->par_feci2c, ~GPIO_PAR_FECI2C_RMII0_UNMASK);
193*4882a593Smuzhiyun 		} else {
194*4882a593Smuzhiyun 			clrbits_8(&gpio->par_fec,
195*4882a593Smuzhiyun 				GPIO_PAR_FEC1_7W_FEC | GPIO_PAR_FEC1_RMII_FEC);
196*4882a593Smuzhiyun 			clrbits_8(&gpio->par_feci2c, ~GPIO_PAR_FECI2C_RMII1_UNMASK);
197*4882a593Smuzhiyun 		}
198*4882a593Smuzhiyun 	}
199*4882a593Smuzhiyun 	return 0;
200*4882a593Smuzhiyun }
201*4882a593Smuzhiyun #endif				/* CONFIG_CMD_NET */
202*4882a593Smuzhiyun #endif				/* CONFIG_MCF5301x */
203*4882a593Smuzhiyun 
204*4882a593Smuzhiyun #ifdef CONFIG_MCF532x
cpu_init_f(void)205*4882a593Smuzhiyun void cpu_init_f(void)
206*4882a593Smuzhiyun {
207*4882a593Smuzhiyun 	scm1_t *scm1 = (scm1_t *) MMAP_SCM1;
208*4882a593Smuzhiyun 	scm2_t *scm2 = (scm2_t *) MMAP_SCM2;
209*4882a593Smuzhiyun 	gpio_t *gpio = (gpio_t *) MMAP_GPIO;
210*4882a593Smuzhiyun 	fbcs_t *fbcs = (fbcs_t *) MMAP_FBCS;
211*4882a593Smuzhiyun #ifndef CONFIG_WATCHDOG
212*4882a593Smuzhiyun 	wdog_t *wdog = (wdog_t *) MMAP_WDOG;
213*4882a593Smuzhiyun 
214*4882a593Smuzhiyun 	/* watchdog is enabled by default - disable the watchdog */
215*4882a593Smuzhiyun 	out_be16(&wdog->cr, 0);
216*4882a593Smuzhiyun #endif
217*4882a593Smuzhiyun 
218*4882a593Smuzhiyun 	out_be32(&scm1->mpr0, 0x77777777);
219*4882a593Smuzhiyun 	out_be32(&scm2->pacra, 0);
220*4882a593Smuzhiyun 	out_be32(&scm2->pacrb, 0);
221*4882a593Smuzhiyun 	out_be32(&scm2->pacrc, 0);
222*4882a593Smuzhiyun 	out_be32(&scm2->pacrd, 0);
223*4882a593Smuzhiyun 	out_be32(&scm2->pacre, 0);
224*4882a593Smuzhiyun 	out_be32(&scm2->pacrf, 0);
225*4882a593Smuzhiyun 	out_be32(&scm2->pacrg, 0);
226*4882a593Smuzhiyun 	out_be32(&scm1->pacrh, 0);
227*4882a593Smuzhiyun 
228*4882a593Smuzhiyun 	/* Port configuration */
229*4882a593Smuzhiyun 	out_8(&gpio->par_cs, 0);
230*4882a593Smuzhiyun 
231*4882a593Smuzhiyun #if (defined(CONFIG_SYS_CS0_BASE) && defined(CONFIG_SYS_CS0_MASK) \
232*4882a593Smuzhiyun      && defined(CONFIG_SYS_CS0_CTRL))
233*4882a593Smuzhiyun 	out_be32(&fbcs->csar0, CONFIG_SYS_CS0_BASE);
234*4882a593Smuzhiyun 	out_be32(&fbcs->cscr0, CONFIG_SYS_CS0_CTRL);
235*4882a593Smuzhiyun 	out_be32(&fbcs->csmr0, CONFIG_SYS_CS0_MASK);
236*4882a593Smuzhiyun #endif
237*4882a593Smuzhiyun 
238*4882a593Smuzhiyun #if (defined(CONFIG_SYS_CS1_BASE) && defined(CONFIG_SYS_CS1_MASK) \
239*4882a593Smuzhiyun      && defined(CONFIG_SYS_CS1_CTRL))
240*4882a593Smuzhiyun 	/* Latch chipselect */
241*4882a593Smuzhiyun 	setbits_8(&gpio->par_cs, GPIO_PAR_CS1);
242*4882a593Smuzhiyun 	out_be32(&fbcs->csar1, CONFIG_SYS_CS1_BASE);
243*4882a593Smuzhiyun 	out_be32(&fbcs->cscr1, CONFIG_SYS_CS1_CTRL);
244*4882a593Smuzhiyun 	out_be32(&fbcs->csmr1, CONFIG_SYS_CS1_MASK);
245*4882a593Smuzhiyun #endif
246*4882a593Smuzhiyun 
247*4882a593Smuzhiyun #if (defined(CONFIG_SYS_CS2_BASE) && defined(CONFIG_SYS_CS2_MASK) \
248*4882a593Smuzhiyun      && defined(CONFIG_SYS_CS2_CTRL))
249*4882a593Smuzhiyun 	setbits_8(&gpio->par_cs, GPIO_PAR_CS2);
250*4882a593Smuzhiyun 	out_be32(&fbcs->csar2, CONFIG_SYS_CS2_BASE);
251*4882a593Smuzhiyun 	out_be32(&fbcs->cscr2, CONFIG_SYS_CS2_CTRL);
252*4882a593Smuzhiyun 	out_be32(&fbcs->csmr2, CONFIG_SYS_CS2_MASK);
253*4882a593Smuzhiyun #endif
254*4882a593Smuzhiyun 
255*4882a593Smuzhiyun #if (defined(CONFIG_SYS_CS3_BASE) && defined(CONFIG_SYS_CS3_MASK) \
256*4882a593Smuzhiyun      && defined(CONFIG_SYS_CS3_CTRL))
257*4882a593Smuzhiyun 	setbits_8(&gpio->par_cs, GPIO_PAR_CS3);
258*4882a593Smuzhiyun 	out_be32(&fbcs->csar3, CONFIG_SYS_CS3_BASE);
259*4882a593Smuzhiyun 	out_be32(&fbcs->cscr3, CONFIG_SYS_CS3_CTRL);
260*4882a593Smuzhiyun 	out_be32(&fbcs->csmr3, CONFIG_SYS_CS3_MASK);
261*4882a593Smuzhiyun #endif
262*4882a593Smuzhiyun 
263*4882a593Smuzhiyun #if (defined(CONFIG_SYS_CS4_BASE) && defined(CONFIG_SYS_CS4_MASK) \
264*4882a593Smuzhiyun      && defined(CONFIG_SYS_CS4_CTRL))
265*4882a593Smuzhiyun 	setbits_8(&gpio->par_cs, GPIO_PAR_CS4);
266*4882a593Smuzhiyun 	out_be32(&fbcs->csar4, CONFIG_SYS_CS4_BASE);
267*4882a593Smuzhiyun 	out_be32(&fbcs->cscr4, CONFIG_SYS_CS4_CTRL);
268*4882a593Smuzhiyun 	out_be32(&fbcs->csmr4, CONFIG_SYS_CS4_MASK);
269*4882a593Smuzhiyun #endif
270*4882a593Smuzhiyun 
271*4882a593Smuzhiyun #if (defined(CONFIG_SYS_CS5_BASE) && defined(CONFIG_SYS_CS5_MASK) \
272*4882a593Smuzhiyun      && defined(CONFIG_SYS_CS5_CTRL))
273*4882a593Smuzhiyun 	setbits_8(&gpio->par_cs, GPIO_PAR_CS5);
274*4882a593Smuzhiyun 	out_be32(&fbcs->csar5, CONFIG_SYS_CS5_BASE);
275*4882a593Smuzhiyun 	out_be32(&fbcs->cscr5, CONFIG_SYS_CS5_CTRL);
276*4882a593Smuzhiyun 	out_be32(&fbcs->csmr5, CONFIG_SYS_CS5_MASK);
277*4882a593Smuzhiyun #endif
278*4882a593Smuzhiyun 
279*4882a593Smuzhiyun #ifdef CONFIG_SYS_I2C_FSL
280*4882a593Smuzhiyun 	out_8(&gpio->par_feci2c,
281*4882a593Smuzhiyun 		GPIO_PAR_FECI2C_SCL_SCL | GPIO_PAR_FECI2C_SDA_SDA);
282*4882a593Smuzhiyun #endif
283*4882a593Smuzhiyun 
284*4882a593Smuzhiyun 	icache_enable();
285*4882a593Smuzhiyun }
286*4882a593Smuzhiyun 
287*4882a593Smuzhiyun /*
288*4882a593Smuzhiyun  * initialize higher level parts of CPU like timers
289*4882a593Smuzhiyun  */
cpu_init_r(void)290*4882a593Smuzhiyun int cpu_init_r(void)
291*4882a593Smuzhiyun {
292*4882a593Smuzhiyun 	return (0);
293*4882a593Smuzhiyun }
294*4882a593Smuzhiyun 
uart_port_conf(int port)295*4882a593Smuzhiyun void uart_port_conf(int port)
296*4882a593Smuzhiyun {
297*4882a593Smuzhiyun 	gpio_t *gpio = (gpio_t *) MMAP_GPIO;
298*4882a593Smuzhiyun 
299*4882a593Smuzhiyun 	/* Setup Ports: */
300*4882a593Smuzhiyun 	switch (port) {
301*4882a593Smuzhiyun 	case 0:
302*4882a593Smuzhiyun 		clrbits_be16(&gpio->par_uart,
303*4882a593Smuzhiyun 			GPIO_PAR_UART_TXD0 | GPIO_PAR_UART_RXD0);
304*4882a593Smuzhiyun 		setbits_be16(&gpio->par_uart,
305*4882a593Smuzhiyun 			GPIO_PAR_UART_TXD0 | GPIO_PAR_UART_RXD0);
306*4882a593Smuzhiyun 		break;
307*4882a593Smuzhiyun 	case 1:
308*4882a593Smuzhiyun 		clrbits_be16(&gpio->par_uart,
309*4882a593Smuzhiyun 			GPIO_PAR_UART_TXD1(3) | GPIO_PAR_UART_RXD1(3));
310*4882a593Smuzhiyun 		setbits_be16(&gpio->par_uart,
311*4882a593Smuzhiyun 			GPIO_PAR_UART_TXD1(3) | GPIO_PAR_UART_RXD1(3));
312*4882a593Smuzhiyun 		break;
313*4882a593Smuzhiyun 	case 2:
314*4882a593Smuzhiyun #ifdef CONFIG_SYS_UART2_ALT1_GPIO
315*4882a593Smuzhiyun 		clrbits_8(&gpio->par_timer, 0xf0);
316*4882a593Smuzhiyun 		setbits_8(&gpio->par_timer,
317*4882a593Smuzhiyun 			GPIO_PAR_TIN3_URXD2 | GPIO_PAR_TIN2_UTXD2);
318*4882a593Smuzhiyun #elif defined(CONFIG_SYS_UART2_ALT2_GPIO)
319*4882a593Smuzhiyun 		clrbits_8(&gpio->par_feci2c, 0x00ff);
320*4882a593Smuzhiyun 		setbits_8(&gpio->par_feci2c,
321*4882a593Smuzhiyun 			GPIO_PAR_FECI2C_SCL_UTXD2 | GPIO_PAR_FECI2C_SDA_URXD2);
322*4882a593Smuzhiyun #elif defined(CONFIG_SYS_UART2_ALT3_GPIO)
323*4882a593Smuzhiyun 		clrbits_be16(&gpio->par_ssi, 0x0f00);
324*4882a593Smuzhiyun 		setbits_be16(&gpio->par_ssi,
325*4882a593Smuzhiyun 			GPIO_PAR_SSI_RXD(2) | GPIO_PAR_SSI_TXD(2));
326*4882a593Smuzhiyun #endif
327*4882a593Smuzhiyun 		break;
328*4882a593Smuzhiyun 	}
329*4882a593Smuzhiyun }
330*4882a593Smuzhiyun 
331*4882a593Smuzhiyun #if defined(CONFIG_CMD_NET)
fecpin_setclear(struct eth_device * dev,int setclear)332*4882a593Smuzhiyun int fecpin_setclear(struct eth_device *dev, int setclear)
333*4882a593Smuzhiyun {
334*4882a593Smuzhiyun 	gpio_t *gpio = (gpio_t *) MMAP_GPIO;
335*4882a593Smuzhiyun 
336*4882a593Smuzhiyun 	if (setclear) {
337*4882a593Smuzhiyun 		setbits_8(&gpio->par_fec,
338*4882a593Smuzhiyun 			GPIO_PAR_FEC_7W_FEC | GPIO_PAR_FEC_MII_FEC);
339*4882a593Smuzhiyun 		setbits_8(&gpio->par_feci2c,
340*4882a593Smuzhiyun 			GPIO_PAR_FECI2C_MDC_EMDC | GPIO_PAR_FECI2C_MDIO_EMDIO);
341*4882a593Smuzhiyun 	} else {
342*4882a593Smuzhiyun 		clrbits_8(&gpio->par_fec,
343*4882a593Smuzhiyun 			GPIO_PAR_FEC_7W_FEC | GPIO_PAR_FEC_MII_FEC);
344*4882a593Smuzhiyun 		clrbits_8(&gpio->par_feci2c,
345*4882a593Smuzhiyun 			GPIO_PAR_FECI2C_MDC_EMDC | GPIO_PAR_FECI2C_MDIO_EMDIO);
346*4882a593Smuzhiyun 	}
347*4882a593Smuzhiyun 	return 0;
348*4882a593Smuzhiyun }
349*4882a593Smuzhiyun #endif
350*4882a593Smuzhiyun #endif				/* CONFIG_MCF532x */
351