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