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