xref: /OK3568_Linux_fs/u-boot/arch/m68k/cpu/mcf52x2/cpu.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * (C) Copyright 2003
3*4882a593Smuzhiyun  * Josef Baumgartner <josef.baumgartner@telex.de>
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * MCF5282 additionals
6*4882a593Smuzhiyun  * (C) Copyright 2005
7*4882a593Smuzhiyun  * BuS Elektronik GmbH & Co. KG <esw@bus-elektronik.de>
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * MCF5275 additions
10*4882a593Smuzhiyun  * Copyright (C) 2008 Arthur Shipkowski (art@videon-central.com)
11*4882a593Smuzhiyun  *
12*4882a593Smuzhiyun  * Copyright (C) 2012 Freescale Semiconductor, Inc. All Rights Reserved.
13*4882a593Smuzhiyun  *
14*4882a593Smuzhiyun  * SPDX-License-Identifier:	GPL-2.0+
15*4882a593Smuzhiyun  */
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #include <common.h>
18*4882a593Smuzhiyun #include <watchdog.h>
19*4882a593Smuzhiyun #include <command.h>
20*4882a593Smuzhiyun #include <asm/immap.h>
21*4882a593Smuzhiyun #include <asm/io.h>
22*4882a593Smuzhiyun #include <netdev.h>
23*4882a593Smuzhiyun #include "cpu.h"
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun DECLARE_GLOBAL_DATA_PTR;
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun #ifdef	CONFIG_M5208
do_reset(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])28*4882a593Smuzhiyun int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
29*4882a593Smuzhiyun {
30*4882a593Smuzhiyun 	rcm_t *rcm = (rcm_t *)(MMAP_RCM);
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun 	udelay(1000);
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun 	out_8(&rcm->rcr, RCM_RCR_SOFTRST);
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun 	/* we don't return! */
37*4882a593Smuzhiyun 	return 0;
38*4882a593Smuzhiyun };
39*4882a593Smuzhiyun 
checkcpu(void)40*4882a593Smuzhiyun int checkcpu(void)
41*4882a593Smuzhiyun {
42*4882a593Smuzhiyun 	char buf1[32], buf2[32];
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun 	printf("CPU:   Freescale Coldfire MCF5208\n"
45*4882a593Smuzhiyun 	       "       CPU CLK %s MHz BUS CLK %s MHz\n",
46*4882a593Smuzhiyun 	       strmhz(buf1, gd->cpu_clk),
47*4882a593Smuzhiyun 	       strmhz(buf2, gd->bus_clk));
48*4882a593Smuzhiyun 	return 0;
49*4882a593Smuzhiyun };
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun #if defined(CONFIG_WATCHDOG)
52*4882a593Smuzhiyun /* Called by macro WATCHDOG_RESET */
watchdog_reset(void)53*4882a593Smuzhiyun void watchdog_reset(void)
54*4882a593Smuzhiyun {
55*4882a593Smuzhiyun 	wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun 	out_be16(&wdt->sr, 0x5555);
58*4882a593Smuzhiyun 	out_be16(&wdt->sr, 0xaaaa);
59*4882a593Smuzhiyun }
60*4882a593Smuzhiyun 
watchdog_disable(void)61*4882a593Smuzhiyun int watchdog_disable(void)
62*4882a593Smuzhiyun {
63*4882a593Smuzhiyun 	wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
64*4882a593Smuzhiyun 
65*4882a593Smuzhiyun 	/* reset watchdog counter */
66*4882a593Smuzhiyun 	out_be16(&wdt->sr, 0x5555);
67*4882a593Smuzhiyun 	out_be16(&wdt->sr, 0xaaaa);
68*4882a593Smuzhiyun 	/* disable watchdog timer */
69*4882a593Smuzhiyun 	out_be16(&wdt->cr, 0);
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun 	puts("WATCHDOG:disabled\n");
72*4882a593Smuzhiyun 	return (0);
73*4882a593Smuzhiyun }
74*4882a593Smuzhiyun 
watchdog_init(void)75*4882a593Smuzhiyun int watchdog_init(void)
76*4882a593Smuzhiyun {
77*4882a593Smuzhiyun 	wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun 	/* disable watchdog */
80*4882a593Smuzhiyun 	out_be16(&wdt->cr, 0);
81*4882a593Smuzhiyun 
82*4882a593Smuzhiyun 	/* set timeout and enable watchdog */
83*4882a593Smuzhiyun 	out_be16(&wdt->mr,
84*4882a593Smuzhiyun 		(CONFIG_WATCHDOG_TIMEOUT * CONFIG_SYS_HZ) / (32768 * 1000) - 1);
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun 	/* reset watchdog counter */
87*4882a593Smuzhiyun 	out_be16(&wdt->sr, 0x5555);
88*4882a593Smuzhiyun 	out_be16(&wdt->sr, 0xaaaa);
89*4882a593Smuzhiyun 
90*4882a593Smuzhiyun 	puts("WATCHDOG:enabled\n");
91*4882a593Smuzhiyun 	return (0);
92*4882a593Smuzhiyun }
93*4882a593Smuzhiyun #endif				/* #ifdef CONFIG_WATCHDOG */
94*4882a593Smuzhiyun #endif				/* #ifdef CONFIG_M5208 */
95*4882a593Smuzhiyun 
96*4882a593Smuzhiyun #ifdef  CONFIG_M5271
97*4882a593Smuzhiyun /*
98*4882a593Smuzhiyun  * Both MCF5270 and MCF5271 are members of the MPC5271 family. Try to
99*4882a593Smuzhiyun  * determine which one we are running on, based on the Chip Identification
100*4882a593Smuzhiyun  * Register (CIR).
101*4882a593Smuzhiyun  */
checkcpu(void)102*4882a593Smuzhiyun int checkcpu(void)
103*4882a593Smuzhiyun {
104*4882a593Smuzhiyun 	char buf[32];
105*4882a593Smuzhiyun 	unsigned short cir;	/* Chip Identification Register */
106*4882a593Smuzhiyun 	unsigned short pin;	/* Part identification number */
107*4882a593Smuzhiyun 	unsigned char prn;	/* Part revision number */
108*4882a593Smuzhiyun 	char *cpu_model;
109*4882a593Smuzhiyun 
110*4882a593Smuzhiyun 	cir = mbar_readShort(MCF_CCM_CIR);
111*4882a593Smuzhiyun 	pin = cir >> MCF_CCM_CIR_PIN_LEN;
112*4882a593Smuzhiyun 	prn = cir & MCF_CCM_CIR_PRN_MASK;
113*4882a593Smuzhiyun 
114*4882a593Smuzhiyun 	switch (pin) {
115*4882a593Smuzhiyun 	case MCF_CCM_CIR_PIN_MCF5270:
116*4882a593Smuzhiyun 		cpu_model = "5270";
117*4882a593Smuzhiyun 		break;
118*4882a593Smuzhiyun 	case MCF_CCM_CIR_PIN_MCF5271:
119*4882a593Smuzhiyun 		cpu_model = "5271";
120*4882a593Smuzhiyun 		break;
121*4882a593Smuzhiyun 	default:
122*4882a593Smuzhiyun 		cpu_model = NULL;
123*4882a593Smuzhiyun 		break;
124*4882a593Smuzhiyun 	}
125*4882a593Smuzhiyun 
126*4882a593Smuzhiyun 	if (cpu_model)
127*4882a593Smuzhiyun 		printf("CPU:   Freescale ColdFire MCF%s rev. %hu, at %s MHz\n",
128*4882a593Smuzhiyun 		       cpu_model, prn, strmhz(buf, CONFIG_SYS_CLK));
129*4882a593Smuzhiyun 	else
130*4882a593Smuzhiyun 		printf("CPU:   Unknown - Freescale ColdFire MCF5271 family"
131*4882a593Smuzhiyun 		       " (PIN: 0x%x) rev. %hu, at %s MHz\n",
132*4882a593Smuzhiyun 		       pin, prn, strmhz(buf, CONFIG_SYS_CLK));
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun 	return 0;
135*4882a593Smuzhiyun }
136*4882a593Smuzhiyun 
do_reset(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])137*4882a593Smuzhiyun int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
138*4882a593Smuzhiyun {
139*4882a593Smuzhiyun 	/* Call the board specific reset actions first. */
140*4882a593Smuzhiyun 	if(board_reset) {
141*4882a593Smuzhiyun 		board_reset();
142*4882a593Smuzhiyun 	}
143*4882a593Smuzhiyun 
144*4882a593Smuzhiyun 	mbar_writeByte(MCF_RCM_RCR,
145*4882a593Smuzhiyun 		       MCF_RCM_RCR_SOFTRST | MCF_RCM_RCR_FRCRSTOUT);
146*4882a593Smuzhiyun 	return 0;
147*4882a593Smuzhiyun };
148*4882a593Smuzhiyun 
149*4882a593Smuzhiyun #if defined(CONFIG_WATCHDOG)
watchdog_reset(void)150*4882a593Smuzhiyun void watchdog_reset(void)
151*4882a593Smuzhiyun {
152*4882a593Smuzhiyun 	mbar_writeShort(MCF_WTM_WSR, 0x5555);
153*4882a593Smuzhiyun 	mbar_writeShort(MCF_WTM_WSR, 0xAAAA);
154*4882a593Smuzhiyun }
155*4882a593Smuzhiyun 
watchdog_disable(void)156*4882a593Smuzhiyun int watchdog_disable(void)
157*4882a593Smuzhiyun {
158*4882a593Smuzhiyun 	mbar_writeShort(MCF_WTM_WCR, 0);
159*4882a593Smuzhiyun 	return (0);
160*4882a593Smuzhiyun }
161*4882a593Smuzhiyun 
watchdog_init(void)162*4882a593Smuzhiyun int watchdog_init(void)
163*4882a593Smuzhiyun {
164*4882a593Smuzhiyun 	mbar_writeShort(MCF_WTM_WCR, MCF_WTM_WCR_EN);
165*4882a593Smuzhiyun 	return (0);
166*4882a593Smuzhiyun }
167*4882a593Smuzhiyun #endif				/* #ifdef CONFIG_WATCHDOG */
168*4882a593Smuzhiyun 
169*4882a593Smuzhiyun #endif
170*4882a593Smuzhiyun 
171*4882a593Smuzhiyun #ifdef	CONFIG_M5272
do_reset(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])172*4882a593Smuzhiyun int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
173*4882a593Smuzhiyun {
174*4882a593Smuzhiyun 	wdog_t *wdp = (wdog_t *) (MMAP_WDOG);
175*4882a593Smuzhiyun 
176*4882a593Smuzhiyun 	out_be16(&wdp->wdog_wrrr, 0);
177*4882a593Smuzhiyun 	udelay(1000);
178*4882a593Smuzhiyun 
179*4882a593Smuzhiyun 	/* enable watchdog, set timeout to 0 and wait */
180*4882a593Smuzhiyun 	out_be16(&wdp->wdog_wrrr, 1);
181*4882a593Smuzhiyun 	while (1) ;
182*4882a593Smuzhiyun 
183*4882a593Smuzhiyun 	/* we don't return! */
184*4882a593Smuzhiyun 	return 0;
185*4882a593Smuzhiyun };
186*4882a593Smuzhiyun 
checkcpu(void)187*4882a593Smuzhiyun int checkcpu(void)
188*4882a593Smuzhiyun {
189*4882a593Smuzhiyun 	sysctrl_t *sysctrl = (sysctrl_t *) (MMAP_CFG);
190*4882a593Smuzhiyun 	uchar msk;
191*4882a593Smuzhiyun 	char *suf;
192*4882a593Smuzhiyun 
193*4882a593Smuzhiyun 	puts("CPU:   ");
194*4882a593Smuzhiyun 	msk = (in_be32(&sysctrl->sc_dir) > 28) & 0xf;
195*4882a593Smuzhiyun 	switch (msk) {
196*4882a593Smuzhiyun 	case 0x2:
197*4882a593Smuzhiyun 		suf = "1K75N";
198*4882a593Smuzhiyun 		break;
199*4882a593Smuzhiyun 	case 0x4:
200*4882a593Smuzhiyun 		suf = "3K75N";
201*4882a593Smuzhiyun 		break;
202*4882a593Smuzhiyun 	default:
203*4882a593Smuzhiyun 		suf = NULL;
204*4882a593Smuzhiyun 		printf("Freescale MCF5272 (Mask:%01x)\n", msk);
205*4882a593Smuzhiyun 		break;
206*4882a593Smuzhiyun 	}
207*4882a593Smuzhiyun 
208*4882a593Smuzhiyun 	if (suf)
209*4882a593Smuzhiyun 		printf("Freescale MCF5272 %s\n", suf);
210*4882a593Smuzhiyun 	return 0;
211*4882a593Smuzhiyun };
212*4882a593Smuzhiyun 
213*4882a593Smuzhiyun #if defined(CONFIG_WATCHDOG)
214*4882a593Smuzhiyun /* Called by macro WATCHDOG_RESET */
watchdog_reset(void)215*4882a593Smuzhiyun void watchdog_reset(void)
216*4882a593Smuzhiyun {
217*4882a593Smuzhiyun 	wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
218*4882a593Smuzhiyun 
219*4882a593Smuzhiyun 	out_be16(&wdt->wdog_wcr, 0);
220*4882a593Smuzhiyun }
221*4882a593Smuzhiyun 
watchdog_disable(void)222*4882a593Smuzhiyun int watchdog_disable(void)
223*4882a593Smuzhiyun {
224*4882a593Smuzhiyun 	wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
225*4882a593Smuzhiyun 
226*4882a593Smuzhiyun 	/* reset watchdog counter */
227*4882a593Smuzhiyun 	out_be16(&wdt->wdog_wcr, 0);
228*4882a593Smuzhiyun 	/* disable watchdog interrupt */
229*4882a593Smuzhiyun 	out_be16(&wdt->wdog_wirr, 0);
230*4882a593Smuzhiyun 	/* disable watchdog timer */
231*4882a593Smuzhiyun 	out_be16(&wdt->wdog_wrrr, 0);
232*4882a593Smuzhiyun 
233*4882a593Smuzhiyun 	puts("WATCHDOG:disabled\n");
234*4882a593Smuzhiyun 	return (0);
235*4882a593Smuzhiyun }
236*4882a593Smuzhiyun 
watchdog_init(void)237*4882a593Smuzhiyun int watchdog_init(void)
238*4882a593Smuzhiyun {
239*4882a593Smuzhiyun 	wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
240*4882a593Smuzhiyun 
241*4882a593Smuzhiyun 	/* disable watchdog interrupt */
242*4882a593Smuzhiyun 	out_be16(&wdt->wdog_wirr, 0);
243*4882a593Smuzhiyun 
244*4882a593Smuzhiyun 	/* set timeout and enable watchdog */
245*4882a593Smuzhiyun 	out_be16(&wdt->wdog_wrrr,
246*4882a593Smuzhiyun 		(CONFIG_WATCHDOG_TIMEOUT * CONFIG_SYS_HZ) / (32768 * 1000) - 1);
247*4882a593Smuzhiyun 
248*4882a593Smuzhiyun 	/* reset watchdog counter */
249*4882a593Smuzhiyun 	out_be16(&wdt->wdog_wcr, 0);
250*4882a593Smuzhiyun 
251*4882a593Smuzhiyun 	puts("WATCHDOG:enabled\n");
252*4882a593Smuzhiyun 	return (0);
253*4882a593Smuzhiyun }
254*4882a593Smuzhiyun #endif				/* #ifdef CONFIG_WATCHDOG */
255*4882a593Smuzhiyun 
256*4882a593Smuzhiyun #endif				/* #ifdef CONFIG_M5272 */
257*4882a593Smuzhiyun 
258*4882a593Smuzhiyun #ifdef	CONFIG_M5275
do_reset(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])259*4882a593Smuzhiyun int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
260*4882a593Smuzhiyun {
261*4882a593Smuzhiyun 	rcm_t *rcm = (rcm_t *)(MMAP_RCM);
262*4882a593Smuzhiyun 
263*4882a593Smuzhiyun 	udelay(1000);
264*4882a593Smuzhiyun 
265*4882a593Smuzhiyun 	out_8(&rcm->rcr, RCM_RCR_SOFTRST);
266*4882a593Smuzhiyun 
267*4882a593Smuzhiyun 	/* we don't return! */
268*4882a593Smuzhiyun 	return 0;
269*4882a593Smuzhiyun };
270*4882a593Smuzhiyun 
checkcpu(void)271*4882a593Smuzhiyun int checkcpu(void)
272*4882a593Smuzhiyun {
273*4882a593Smuzhiyun 	char buf[32];
274*4882a593Smuzhiyun 
275*4882a593Smuzhiyun 	printf("CPU:   Freescale Coldfire MCF5275 at %s MHz\n",
276*4882a593Smuzhiyun 			strmhz(buf, CONFIG_SYS_CLK));
277*4882a593Smuzhiyun 	return 0;
278*4882a593Smuzhiyun };
279*4882a593Smuzhiyun 
280*4882a593Smuzhiyun 
281*4882a593Smuzhiyun #if defined(CONFIG_WATCHDOG)
282*4882a593Smuzhiyun /* Called by macro WATCHDOG_RESET */
watchdog_reset(void)283*4882a593Smuzhiyun void watchdog_reset(void)
284*4882a593Smuzhiyun {
285*4882a593Smuzhiyun 	wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
286*4882a593Smuzhiyun 
287*4882a593Smuzhiyun 	out_be16(&wdt->wsr, 0x5555);
288*4882a593Smuzhiyun 	out_be16(&wdt->wsr, 0xaaaa);
289*4882a593Smuzhiyun }
290*4882a593Smuzhiyun 
watchdog_disable(void)291*4882a593Smuzhiyun int watchdog_disable(void)
292*4882a593Smuzhiyun {
293*4882a593Smuzhiyun 	wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
294*4882a593Smuzhiyun 
295*4882a593Smuzhiyun 	/* reset watchdog counter */
296*4882a593Smuzhiyun 	out_be16(&wdt->wsr, 0x5555);
297*4882a593Smuzhiyun 	out_be16(&wdt->wsr, 0xaaaa);
298*4882a593Smuzhiyun 
299*4882a593Smuzhiyun 	/* disable watchdog timer */
300*4882a593Smuzhiyun 	out_be16(&wdt->wcr, 0);
301*4882a593Smuzhiyun 
302*4882a593Smuzhiyun 	puts("WATCHDOG:disabled\n");
303*4882a593Smuzhiyun 	return (0);
304*4882a593Smuzhiyun }
305*4882a593Smuzhiyun 
watchdog_init(void)306*4882a593Smuzhiyun int watchdog_init(void)
307*4882a593Smuzhiyun {
308*4882a593Smuzhiyun 	wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
309*4882a593Smuzhiyun 
310*4882a593Smuzhiyun 	/* disable watchdog */
311*4882a593Smuzhiyun 	out_be16(&wdt->wcr, 0);
312*4882a593Smuzhiyun 
313*4882a593Smuzhiyun 	/* set timeout and enable watchdog */
314*4882a593Smuzhiyun 	out_be16(&wdt->wmr,
315*4882a593Smuzhiyun 		(CONFIG_WATCHDOG_TIMEOUT * CONFIG_SYS_HZ) / (32768 * 1000) - 1);
316*4882a593Smuzhiyun 
317*4882a593Smuzhiyun 	/* reset watchdog counter */
318*4882a593Smuzhiyun 	out_be16(&wdt->wsr, 0x5555);
319*4882a593Smuzhiyun 	out_be16(&wdt->wsr, 0xaaaa);
320*4882a593Smuzhiyun 
321*4882a593Smuzhiyun 	puts("WATCHDOG:enabled\n");
322*4882a593Smuzhiyun 	return (0);
323*4882a593Smuzhiyun }
324*4882a593Smuzhiyun #endif				/* #ifdef CONFIG_WATCHDOG */
325*4882a593Smuzhiyun 
326*4882a593Smuzhiyun #endif				/* #ifdef CONFIG_M5275 */
327*4882a593Smuzhiyun 
328*4882a593Smuzhiyun #ifdef	CONFIG_M5282
checkcpu(void)329*4882a593Smuzhiyun int checkcpu(void)
330*4882a593Smuzhiyun {
331*4882a593Smuzhiyun 	unsigned char resetsource = MCFRESET_RSR;
332*4882a593Smuzhiyun 
333*4882a593Smuzhiyun 	printf("CPU:   Freescale Coldfire MCF5282 (PIN: %2.2x REV: %2.2x)\n",
334*4882a593Smuzhiyun 	       MCFCCM_CIR >> 8, MCFCCM_CIR & MCFCCM_CIR_PRN_MASK);
335*4882a593Smuzhiyun 	printf("Reset:%s%s%s%s%s%s%s\n",
336*4882a593Smuzhiyun 	       (resetsource & MCFRESET_RSR_LOL) ? " Loss of Lock" : "",
337*4882a593Smuzhiyun 	       (resetsource & MCFRESET_RSR_LOC) ? " Loss of Clock" : "",
338*4882a593Smuzhiyun 	       (resetsource & MCFRESET_RSR_EXT) ? " External" : "",
339*4882a593Smuzhiyun 	       (resetsource & MCFRESET_RSR_POR) ? " Power On" : "",
340*4882a593Smuzhiyun 	       (resetsource & MCFRESET_RSR_WDR) ? " Watchdog" : "",
341*4882a593Smuzhiyun 	       (resetsource & MCFRESET_RSR_SOFT) ? " Software" : "",
342*4882a593Smuzhiyun 	       (resetsource & MCFRESET_RSR_LVD) ? " Low Voltage" : "");
343*4882a593Smuzhiyun 	return 0;
344*4882a593Smuzhiyun }
345*4882a593Smuzhiyun 
do_reset(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])346*4882a593Smuzhiyun int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
347*4882a593Smuzhiyun {
348*4882a593Smuzhiyun 	MCFRESET_RCR = MCFRESET_RCR_SOFTRST;
349*4882a593Smuzhiyun 	return 0;
350*4882a593Smuzhiyun };
351*4882a593Smuzhiyun #endif
352*4882a593Smuzhiyun 
353*4882a593Smuzhiyun #ifdef CONFIG_M5249
checkcpu(void)354*4882a593Smuzhiyun int checkcpu(void)
355*4882a593Smuzhiyun {
356*4882a593Smuzhiyun 	char buf[32];
357*4882a593Smuzhiyun 
358*4882a593Smuzhiyun 	printf("CPU:   Freescale Coldfire MCF5249 at %s MHz\n",
359*4882a593Smuzhiyun 	       strmhz(buf, CONFIG_SYS_CLK));
360*4882a593Smuzhiyun 	return 0;
361*4882a593Smuzhiyun }
362*4882a593Smuzhiyun 
do_reset(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])363*4882a593Smuzhiyun int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
364*4882a593Smuzhiyun {
365*4882a593Smuzhiyun 	/* enable watchdog, set timeout to 0 and wait */
366*4882a593Smuzhiyun 	mbar_writeByte(MCFSIM_SYPCR, 0xc0);
367*4882a593Smuzhiyun 	while (1) ;
368*4882a593Smuzhiyun 
369*4882a593Smuzhiyun 	/* we don't return! */
370*4882a593Smuzhiyun 	return 0;
371*4882a593Smuzhiyun };
372*4882a593Smuzhiyun #endif
373*4882a593Smuzhiyun 
374*4882a593Smuzhiyun #ifdef CONFIG_M5253
checkcpu(void)375*4882a593Smuzhiyun int checkcpu(void)
376*4882a593Smuzhiyun {
377*4882a593Smuzhiyun 	char buf[32];
378*4882a593Smuzhiyun 
379*4882a593Smuzhiyun 	unsigned char resetsource = mbar_readLong(SIM_RSR);
380*4882a593Smuzhiyun 	printf("CPU:   Freescale Coldfire MCF5253 at %s MHz\n",
381*4882a593Smuzhiyun 	       strmhz(buf, CONFIG_SYS_CLK));
382*4882a593Smuzhiyun 
383*4882a593Smuzhiyun 	if ((resetsource & SIM_RSR_HRST) || (resetsource & SIM_RSR_SWTR)) {
384*4882a593Smuzhiyun 		printf("Reset:%s%s\n",
385*4882a593Smuzhiyun 		       (resetsource & SIM_RSR_HRST) ? " Hardware/ System Reset"
386*4882a593Smuzhiyun 		       : "",
387*4882a593Smuzhiyun 		       (resetsource & SIM_RSR_SWTR) ? " Software Watchdog" :
388*4882a593Smuzhiyun 		       "");
389*4882a593Smuzhiyun 	}
390*4882a593Smuzhiyun 	return 0;
391*4882a593Smuzhiyun }
392*4882a593Smuzhiyun 
do_reset(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])393*4882a593Smuzhiyun int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
394*4882a593Smuzhiyun {
395*4882a593Smuzhiyun 	/* enable watchdog, set timeout to 0 and wait */
396*4882a593Smuzhiyun 	mbar_writeByte(SIM_SYPCR, 0xc0);
397*4882a593Smuzhiyun 	while (1) ;
398*4882a593Smuzhiyun 
399*4882a593Smuzhiyun 	/* we don't return! */
400*4882a593Smuzhiyun 	return 0;
401*4882a593Smuzhiyun };
402*4882a593Smuzhiyun #endif
403*4882a593Smuzhiyun 
404*4882a593Smuzhiyun #if defined(CONFIG_MCFFEC)
405*4882a593Smuzhiyun /* Default initializations for MCFFEC controllers.  To override,
406*4882a593Smuzhiyun  * create a board-specific function called:
407*4882a593Smuzhiyun  * 	int board_eth_init(bd_t *bis)
408*4882a593Smuzhiyun  */
409*4882a593Smuzhiyun 
cpu_eth_init(bd_t * bis)410*4882a593Smuzhiyun int cpu_eth_init(bd_t *bis)
411*4882a593Smuzhiyun {
412*4882a593Smuzhiyun 	return mcffec_initialize(bis);
413*4882a593Smuzhiyun }
414*4882a593Smuzhiyun #endif
415