xref: /openbmc/u-boot/arch/m68k/cpu/mcf52x2/cpu.c (revision b9153fe3)
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  *
1232dbaafaSAlison Wang  * Copyright (C) 2012 Freescale Semiconductor, Inc. All Rights Reserved.
1332dbaafaSAlison Wang  *
141a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
15a4145534SPeter Tyser  */
16a4145534SPeter Tyser 
17a4145534SPeter Tyser #include <common.h>
18a4145534SPeter Tyser #include <watchdog.h>
19a4145534SPeter Tyser #include <command.h>
20a4145534SPeter Tyser #include <asm/immap.h>
2132dbaafaSAlison Wang #include <asm/io.h>
22a4145534SPeter Tyser #include <netdev.h>
23a4145534SPeter Tyser #include "cpu.h"
24a4145534SPeter Tyser 
25a4145534SPeter Tyser DECLARE_GLOBAL_DATA_PTR;
26a4145534SPeter Tyser 
27a4145534SPeter Tyser #ifdef	CONFIG_M5208
28882b7d72SMike Frysinger int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
29a4145534SPeter Tyser {
3032dbaafaSAlison Wang 	rcm_t *rcm = (rcm_t *)(MMAP_RCM);
31a4145534SPeter Tyser 
32a4145534SPeter Tyser 	udelay(1000);
33a4145534SPeter Tyser 
3432dbaafaSAlison Wang 	out_8(&rcm->rcr, RCM_RCR_SOFTRST);
35a4145534SPeter Tyser 
36a4145534SPeter Tyser 	/* we don't return! */
37a4145534SPeter Tyser 	return 0;
38a4145534SPeter Tyser };
39a4145534SPeter Tyser 
40*b9153fe3SAngelo Dureghello #if defined(CONFIG_DISPLAY_CPUINFO)
41*b9153fe3SAngelo Dureghello int print_cpuinfo(void)
42a4145534SPeter Tyser {
43a4145534SPeter Tyser 	char buf1[32], buf2[32];
44a4145534SPeter Tyser 
45a4145534SPeter Tyser 	printf("CPU:   Freescale Coldfire MCF5208\n"
46a4145534SPeter Tyser 	       "       CPU CLK %s MHz BUS CLK %s MHz\n",
47a4145534SPeter Tyser 	       strmhz(buf1, gd->cpu_clk),
48a4145534SPeter Tyser 	       strmhz(buf2, gd->bus_clk));
49a4145534SPeter Tyser 	return 0;
50a4145534SPeter Tyser };
51*b9153fe3SAngelo Dureghello #endif /* CONFIG_DISPLAY_CPUINFO */
52a4145534SPeter Tyser 
53a4145534SPeter Tyser #if defined(CONFIG_WATCHDOG)
54a4145534SPeter Tyser /* Called by macro WATCHDOG_RESET */
55a4145534SPeter Tyser void watchdog_reset(void)
56a4145534SPeter Tyser {
5732dbaafaSAlison Wang 	wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
5832dbaafaSAlison Wang 
5932dbaafaSAlison Wang 	out_be16(&wdt->sr, 0x5555);
6032dbaafaSAlison Wang 	out_be16(&wdt->sr, 0xaaaa);
61a4145534SPeter Tyser }
62a4145534SPeter Tyser 
63a4145534SPeter Tyser int watchdog_disable(void)
64a4145534SPeter Tyser {
6532dbaafaSAlison Wang 	wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
66a4145534SPeter Tyser 
6732dbaafaSAlison Wang 	/* reset watchdog counter */
6832dbaafaSAlison Wang 	out_be16(&wdt->sr, 0x5555);
6932dbaafaSAlison Wang 	out_be16(&wdt->sr, 0xaaaa);
7032dbaafaSAlison Wang 	/* disable watchdog timer */
7132dbaafaSAlison Wang 	out_be16(&wdt->cr, 0);
72a4145534SPeter Tyser 
73a4145534SPeter Tyser 	puts("WATCHDOG:disabled\n");
74a4145534SPeter Tyser 	return (0);
75a4145534SPeter Tyser }
76a4145534SPeter Tyser 
77a4145534SPeter Tyser int watchdog_init(void)
78a4145534SPeter Tyser {
7932dbaafaSAlison Wang 	wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
80a4145534SPeter Tyser 
8132dbaafaSAlison Wang 	/* disable watchdog */
8232dbaafaSAlison Wang 	out_be16(&wdt->cr, 0);
83a4145534SPeter Tyser 
84a4145534SPeter Tyser 	/* set timeout and enable watchdog */
8532dbaafaSAlison Wang 	out_be16(&wdt->mr,
8632dbaafaSAlison Wang 		(CONFIG_WATCHDOG_TIMEOUT * CONFIG_SYS_HZ) / (32768 * 1000) - 1);
8732dbaafaSAlison Wang 
8832dbaafaSAlison Wang 	/* reset watchdog counter */
8932dbaafaSAlison Wang 	out_be16(&wdt->sr, 0x5555);
9032dbaafaSAlison Wang 	out_be16(&wdt->sr, 0xaaaa);
91a4145534SPeter Tyser 
92a4145534SPeter Tyser 	puts("WATCHDOG:enabled\n");
93a4145534SPeter Tyser 	return (0);
94a4145534SPeter Tyser }
95a4145534SPeter Tyser #endif				/* #ifdef CONFIG_WATCHDOG */
96a4145534SPeter Tyser #endif				/* #ifdef CONFIG_M5208 */
97a4145534SPeter Tyser 
98a4145534SPeter Tyser #ifdef  CONFIG_M5271
99*b9153fe3SAngelo Dureghello #if defined(CONFIG_DISPLAY_CPUINFO)
100a4145534SPeter Tyser /*
101a4145534SPeter Tyser  * Both MCF5270 and MCF5271 are members of the MPC5271 family. Try to
102a4145534SPeter Tyser  * determine which one we are running on, based on the Chip Identification
103a4145534SPeter Tyser  * Register (CIR).
104a4145534SPeter Tyser  */
105*b9153fe3SAngelo Dureghello int print_cpuinfo(void)
106a4145534SPeter Tyser {
107a4145534SPeter Tyser 	char buf[32];
108a4145534SPeter Tyser 	unsigned short cir;	/* Chip Identification Register */
109a4145534SPeter Tyser 	unsigned short pin;	/* Part identification number */
110a4145534SPeter Tyser 	unsigned char prn;	/* Part revision number */
111a4145534SPeter Tyser 	char *cpu_model;
112a4145534SPeter Tyser 
113a4145534SPeter Tyser 	cir = mbar_readShort(MCF_CCM_CIR);
114a4145534SPeter Tyser 	pin = cir >> MCF_CCM_CIR_PIN_LEN;
115a4145534SPeter Tyser 	prn = cir & MCF_CCM_CIR_PRN_MASK;
116a4145534SPeter Tyser 
117a4145534SPeter Tyser 	switch (pin) {
118a4145534SPeter Tyser 	case MCF_CCM_CIR_PIN_MCF5270:
119a4145534SPeter Tyser 		cpu_model = "5270";
120a4145534SPeter Tyser 		break;
121a4145534SPeter Tyser 	case MCF_CCM_CIR_PIN_MCF5271:
122a4145534SPeter Tyser 		cpu_model = "5271";
123a4145534SPeter Tyser 		break;
124a4145534SPeter Tyser 	default:
125a4145534SPeter Tyser 		cpu_model = NULL;
126a4145534SPeter Tyser 		break;
127a4145534SPeter Tyser 	}
128a4145534SPeter Tyser 
129a4145534SPeter Tyser 	if (cpu_model)
130a4145534SPeter Tyser 		printf("CPU:   Freescale ColdFire MCF%s rev. %hu, at %s MHz\n",
131a4145534SPeter Tyser 		       cpu_model, prn, strmhz(buf, CONFIG_SYS_CLK));
132a4145534SPeter Tyser 	else
133a4145534SPeter Tyser 		printf("CPU:   Unknown - Freescale ColdFire MCF5271 family"
134a4145534SPeter Tyser 		       " (PIN: 0x%x) rev. %hu, at %s MHz\n",
135a4145534SPeter Tyser 		       pin, prn, strmhz(buf, CONFIG_SYS_CLK));
136a4145534SPeter Tyser 
137a4145534SPeter Tyser 	return 0;
138a4145534SPeter Tyser }
139*b9153fe3SAngelo Dureghello #endif /* CONFIG_DISPLAY_CPUINFO */
140a4145534SPeter Tyser 
141882b7d72SMike Frysinger int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
142a4145534SPeter Tyser {
143a4145534SPeter Tyser 	/* Call the board specific reset actions first. */
144a4145534SPeter Tyser 	if(board_reset) {
145a4145534SPeter Tyser 		board_reset();
146a4145534SPeter Tyser 	}
147a4145534SPeter Tyser 
148a4145534SPeter Tyser 	mbar_writeByte(MCF_RCM_RCR,
149a4145534SPeter Tyser 		       MCF_RCM_RCR_SOFTRST | MCF_RCM_RCR_FRCRSTOUT);
150a4145534SPeter Tyser 	return 0;
151a4145534SPeter Tyser };
152a4145534SPeter Tyser 
153a4145534SPeter Tyser #if defined(CONFIG_WATCHDOG)
154a4145534SPeter Tyser void watchdog_reset(void)
155a4145534SPeter Tyser {
156a4145534SPeter Tyser 	mbar_writeShort(MCF_WTM_WSR, 0x5555);
157a4145534SPeter Tyser 	mbar_writeShort(MCF_WTM_WSR, 0xAAAA);
158a4145534SPeter Tyser }
159a4145534SPeter Tyser 
160a4145534SPeter Tyser int watchdog_disable(void)
161a4145534SPeter Tyser {
162a4145534SPeter Tyser 	mbar_writeShort(MCF_WTM_WCR, 0);
163a4145534SPeter Tyser 	return (0);
164a4145534SPeter Tyser }
165a4145534SPeter Tyser 
166a4145534SPeter Tyser int watchdog_init(void)
167a4145534SPeter Tyser {
168a4145534SPeter Tyser 	mbar_writeShort(MCF_WTM_WCR, MCF_WTM_WCR_EN);
169a4145534SPeter Tyser 	return (0);
170a4145534SPeter Tyser }
171a4145534SPeter Tyser #endif				/* #ifdef CONFIG_WATCHDOG */
172a4145534SPeter Tyser 
173a4145534SPeter Tyser #endif
174a4145534SPeter Tyser 
175a4145534SPeter Tyser #ifdef	CONFIG_M5272
176882b7d72SMike Frysinger int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
177a4145534SPeter Tyser {
17832dbaafaSAlison Wang 	wdog_t *wdp = (wdog_t *) (MMAP_WDOG);
179a4145534SPeter Tyser 
18032dbaafaSAlison Wang 	out_be16(&wdp->wdog_wrrr, 0);
181a4145534SPeter Tyser 	udelay(1000);
182a4145534SPeter Tyser 
183a4145534SPeter Tyser 	/* enable watchdog, set timeout to 0 and wait */
18432dbaafaSAlison Wang 	out_be16(&wdp->wdog_wrrr, 1);
185a4145534SPeter Tyser 	while (1) ;
186a4145534SPeter Tyser 
187a4145534SPeter Tyser 	/* we don't return! */
188a4145534SPeter Tyser 	return 0;
189a4145534SPeter Tyser };
190a4145534SPeter Tyser 
191*b9153fe3SAngelo Dureghello #if defined(CONFIG_DISPLAY_CPUINFO)
192*b9153fe3SAngelo Dureghello int print_cpuinfo(void)
193a4145534SPeter Tyser {
19432dbaafaSAlison Wang 	sysctrl_t *sysctrl = (sysctrl_t *) (MMAP_CFG);
195a4145534SPeter Tyser 	uchar msk;
196a4145534SPeter Tyser 	char *suf;
197a4145534SPeter Tyser 
198a4145534SPeter Tyser 	puts("CPU:   ");
19932dbaafaSAlison Wang 	msk = (in_be32(&sysctrl->sc_dir) > 28) & 0xf;
200a4145534SPeter Tyser 	switch (msk) {
201a4145534SPeter Tyser 	case 0x2:
202a4145534SPeter Tyser 		suf = "1K75N";
203a4145534SPeter Tyser 		break;
204a4145534SPeter Tyser 	case 0x4:
205a4145534SPeter Tyser 		suf = "3K75N";
206a4145534SPeter Tyser 		break;
207a4145534SPeter Tyser 	default:
208a4145534SPeter Tyser 		suf = NULL;
209a4145534SPeter Tyser 		printf("Freescale MCF5272 (Mask:%01x)\n", msk);
210a4145534SPeter Tyser 		break;
211a4145534SPeter Tyser 	}
212a4145534SPeter Tyser 
213a4145534SPeter Tyser 	if (suf)
214a4145534SPeter Tyser 		printf("Freescale MCF5272 %s\n", suf);
215a4145534SPeter Tyser 	return 0;
216a4145534SPeter Tyser };
217*b9153fe3SAngelo Dureghello #endif /* CONFIG_DISPLAY_CPUINFO */
218a4145534SPeter Tyser 
219a4145534SPeter Tyser #if defined(CONFIG_WATCHDOG)
220a4145534SPeter Tyser /* Called by macro WATCHDOG_RESET */
221a4145534SPeter Tyser void watchdog_reset(void)
222a4145534SPeter Tyser {
22332dbaafaSAlison Wang 	wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
22432dbaafaSAlison Wang 
22532dbaafaSAlison Wang 	out_be16(&wdt->wdog_wcr, 0);
226a4145534SPeter Tyser }
227a4145534SPeter Tyser 
228a4145534SPeter Tyser int watchdog_disable(void)
229a4145534SPeter Tyser {
23032dbaafaSAlison Wang 	wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
231a4145534SPeter Tyser 
23232dbaafaSAlison Wang 	/* reset watchdog counter */
23332dbaafaSAlison Wang 	out_be16(&wdt->wdog_wcr, 0);
23432dbaafaSAlison Wang 	/* disable watchdog interrupt */
23532dbaafaSAlison Wang 	out_be16(&wdt->wdog_wirr, 0);
23632dbaafaSAlison Wang 	/* disable watchdog timer */
23732dbaafaSAlison Wang 	out_be16(&wdt->wdog_wrrr, 0);
238a4145534SPeter Tyser 
239a4145534SPeter Tyser 	puts("WATCHDOG:disabled\n");
240a4145534SPeter Tyser 	return (0);
241a4145534SPeter Tyser }
242a4145534SPeter Tyser 
243a4145534SPeter Tyser int watchdog_init(void)
244a4145534SPeter Tyser {
24532dbaafaSAlison Wang 	wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
246a4145534SPeter Tyser 
24732dbaafaSAlison Wang 	/* disable watchdog interrupt */
24832dbaafaSAlison Wang 	out_be16(&wdt->wdog_wirr, 0);
249a4145534SPeter Tyser 
250a4145534SPeter Tyser 	/* set timeout and enable watchdog */
25132dbaafaSAlison Wang 	out_be16(&wdt->wdog_wrrr,
25232dbaafaSAlison Wang 		(CONFIG_WATCHDOG_TIMEOUT * CONFIG_SYS_HZ) / (32768 * 1000) - 1);
25332dbaafaSAlison Wang 
25432dbaafaSAlison Wang 	/* reset watchdog counter */
25532dbaafaSAlison Wang 	out_be16(&wdt->wdog_wcr, 0);
256a4145534SPeter Tyser 
257a4145534SPeter Tyser 	puts("WATCHDOG:enabled\n");
258a4145534SPeter Tyser 	return (0);
259a4145534SPeter Tyser }
260a4145534SPeter Tyser #endif				/* #ifdef CONFIG_WATCHDOG */
261a4145534SPeter Tyser 
262a4145534SPeter Tyser #endif				/* #ifdef CONFIG_M5272 */
263a4145534SPeter Tyser 
264a4145534SPeter Tyser #ifdef	CONFIG_M5275
265882b7d72SMike Frysinger int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
266a4145534SPeter Tyser {
26732dbaafaSAlison Wang 	rcm_t *rcm = (rcm_t *)(MMAP_RCM);
268a4145534SPeter Tyser 
269a4145534SPeter Tyser 	udelay(1000);
270a4145534SPeter Tyser 
27132dbaafaSAlison Wang 	out_8(&rcm->rcr, RCM_RCR_SOFTRST);
272a4145534SPeter Tyser 
273a4145534SPeter Tyser 	/* we don't return! */
274a4145534SPeter Tyser 	return 0;
275a4145534SPeter Tyser };
276a4145534SPeter Tyser 
277*b9153fe3SAngelo Dureghello #if defined(CONFIG_DISPLAY_CPUINFO)
278*b9153fe3SAngelo Dureghello int print_cpuinfo(void)
279a4145534SPeter Tyser {
280a4145534SPeter Tyser 	char buf[32];
281a4145534SPeter Tyser 
282a4145534SPeter Tyser 	printf("CPU:   Freescale Coldfire MCF5275 at %s MHz\n",
283a4145534SPeter Tyser 			strmhz(buf, CONFIG_SYS_CLK));
284a4145534SPeter Tyser 	return 0;
285a4145534SPeter Tyser };
286*b9153fe3SAngelo Dureghello #endif /* CONFIG_DISPLAY_CPUINFO */
287a4145534SPeter Tyser 
288a4145534SPeter Tyser #if defined(CONFIG_WATCHDOG)
289a4145534SPeter Tyser /* Called by macro WATCHDOG_RESET */
290a4145534SPeter Tyser void watchdog_reset(void)
291a4145534SPeter Tyser {
29232dbaafaSAlison Wang 	wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
29332dbaafaSAlison Wang 
29432dbaafaSAlison Wang 	out_be16(&wdt->wsr, 0x5555);
29532dbaafaSAlison Wang 	out_be16(&wdt->wsr, 0xaaaa);
296a4145534SPeter Tyser }
297a4145534SPeter Tyser 
298a4145534SPeter Tyser int watchdog_disable(void)
299a4145534SPeter Tyser {
30032dbaafaSAlison Wang 	wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
301a4145534SPeter Tyser 
30232dbaafaSAlison Wang 	/* reset watchdog counter */
30332dbaafaSAlison Wang 	out_be16(&wdt->wsr, 0x5555);
30432dbaafaSAlison Wang 	out_be16(&wdt->wsr, 0xaaaa);
30532dbaafaSAlison Wang 
30632dbaafaSAlison Wang 	/* disable watchdog timer */
30732dbaafaSAlison Wang 	out_be16(&wdt->wcr, 0);
308a4145534SPeter Tyser 
309a4145534SPeter Tyser 	puts("WATCHDOG:disabled\n");
310a4145534SPeter Tyser 	return (0);
311a4145534SPeter Tyser }
312a4145534SPeter Tyser 
313a4145534SPeter Tyser int watchdog_init(void)
314a4145534SPeter Tyser {
31532dbaafaSAlison Wang 	wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
316a4145534SPeter Tyser 
31732dbaafaSAlison Wang 	/* disable watchdog */
31832dbaafaSAlison Wang 	out_be16(&wdt->wcr, 0);
319a4145534SPeter Tyser 
320a4145534SPeter Tyser 	/* set timeout and enable watchdog */
32132dbaafaSAlison Wang 	out_be16(&wdt->wmr,
32232dbaafaSAlison Wang 		(CONFIG_WATCHDOG_TIMEOUT * CONFIG_SYS_HZ) / (32768 * 1000) - 1);
32332dbaafaSAlison Wang 
32432dbaafaSAlison Wang 	/* reset watchdog counter */
32532dbaafaSAlison Wang 	out_be16(&wdt->wsr, 0x5555);
32632dbaafaSAlison Wang 	out_be16(&wdt->wsr, 0xaaaa);
327a4145534SPeter Tyser 
328a4145534SPeter Tyser 	puts("WATCHDOG:enabled\n");
329a4145534SPeter Tyser 	return (0);
330a4145534SPeter Tyser }
331a4145534SPeter Tyser #endif				/* #ifdef CONFIG_WATCHDOG */
332a4145534SPeter Tyser 
333a4145534SPeter Tyser #endif				/* #ifdef CONFIG_M5275 */
334a4145534SPeter Tyser 
335a4145534SPeter Tyser #ifdef	CONFIG_M5282
336*b9153fe3SAngelo Dureghello #if defined(CONFIG_DISPLAY_CPUINFO)
337*b9153fe3SAngelo Dureghello int print_cpuinfo(void)
338a4145534SPeter Tyser {
339a4145534SPeter Tyser 	unsigned char resetsource = MCFRESET_RSR;
340a4145534SPeter Tyser 
341a4145534SPeter Tyser 	printf("CPU:   Freescale Coldfire MCF5282 (PIN: %2.2x REV: %2.2x)\n",
342a4145534SPeter Tyser 	       MCFCCM_CIR >> 8, MCFCCM_CIR & MCFCCM_CIR_PRN_MASK);
343a4145534SPeter Tyser 	printf("Reset:%s%s%s%s%s%s%s\n",
344a4145534SPeter Tyser 	       (resetsource & MCFRESET_RSR_LOL) ? " Loss of Lock" : "",
345a4145534SPeter Tyser 	       (resetsource & MCFRESET_RSR_LOC) ? " Loss of Clock" : "",
346a4145534SPeter Tyser 	       (resetsource & MCFRESET_RSR_EXT) ? " External" : "",
347a4145534SPeter Tyser 	       (resetsource & MCFRESET_RSR_POR) ? " Power On" : "",
348a4145534SPeter Tyser 	       (resetsource & MCFRESET_RSR_WDR) ? " Watchdog" : "",
349a4145534SPeter Tyser 	       (resetsource & MCFRESET_RSR_SOFT) ? " Software" : "",
350a4145534SPeter Tyser 	       (resetsource & MCFRESET_RSR_LVD) ? " Low Voltage" : "");
351a4145534SPeter Tyser 	return 0;
352a4145534SPeter Tyser }
353*b9153fe3SAngelo Dureghello #endif /* CONFIG_DISPLAY_CPUINFO */
354a4145534SPeter Tyser 
355882b7d72SMike Frysinger int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
356a4145534SPeter Tyser {
357a4145534SPeter Tyser 	MCFRESET_RCR = MCFRESET_RCR_SOFTRST;
358a4145534SPeter Tyser 	return 0;
359a4145534SPeter Tyser };
360a4145534SPeter Tyser #endif
361a4145534SPeter Tyser 
362a4145534SPeter Tyser #ifdef CONFIG_M5249
363*b9153fe3SAngelo Dureghello #if defined(CONFIG_DISPLAY_CPUINFO)
364*b9153fe3SAngelo Dureghello int print_cpuinfo(void)
365a4145534SPeter Tyser {
366a4145534SPeter Tyser 	char buf[32];
367a4145534SPeter Tyser 
368a4145534SPeter Tyser 	printf("CPU:   Freescale Coldfire MCF5249 at %s MHz\n",
369a4145534SPeter Tyser 	       strmhz(buf, CONFIG_SYS_CLK));
370a4145534SPeter Tyser 	return 0;
371a4145534SPeter Tyser }
372*b9153fe3SAngelo Dureghello #endif /* CONFIG_DISPLAY_CPUINFO */
373a4145534SPeter Tyser 
374882b7d72SMike Frysinger int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
375a4145534SPeter Tyser {
376a4145534SPeter Tyser 	/* enable watchdog, set timeout to 0 and wait */
377a4145534SPeter Tyser 	mbar_writeByte(MCFSIM_SYPCR, 0xc0);
378a4145534SPeter Tyser 	while (1) ;
379a4145534SPeter Tyser 
380a4145534SPeter Tyser 	/* we don't return! */
381a4145534SPeter Tyser 	return 0;
382a4145534SPeter Tyser };
383a4145534SPeter Tyser #endif
384a4145534SPeter Tyser 
385a4145534SPeter Tyser #ifdef CONFIG_M5253
386*b9153fe3SAngelo Dureghello #if defined(CONFIG_DISPLAY_CPUINFO)
387*b9153fe3SAngelo Dureghello int print_cpuinfo(void)
388a4145534SPeter Tyser {
389a4145534SPeter Tyser 	char buf[32];
390a4145534SPeter Tyser 
391a4145534SPeter Tyser 	unsigned char resetsource = mbar_readLong(SIM_RSR);
392a4145534SPeter Tyser 	printf("CPU:   Freescale Coldfire MCF5253 at %s MHz\n",
393a4145534SPeter Tyser 	       strmhz(buf, CONFIG_SYS_CLK));
394a4145534SPeter Tyser 
395a4145534SPeter Tyser 	if ((resetsource & SIM_RSR_HRST) || (resetsource & SIM_RSR_SWTR)) {
396a4145534SPeter Tyser 		printf("Reset:%s%s\n",
397a4145534SPeter Tyser 		       (resetsource & SIM_RSR_HRST) ? " Hardware/ System Reset"
398a4145534SPeter Tyser 		       : "",
399a4145534SPeter Tyser 		       (resetsource & SIM_RSR_SWTR) ? " Software Watchdog" :
400a4145534SPeter Tyser 		       "");
401a4145534SPeter Tyser 	}
402a4145534SPeter Tyser 	return 0;
403a4145534SPeter Tyser }
404*b9153fe3SAngelo Dureghello #endif /* CONFIG_DISPLAY_CPUINFO */
405a4145534SPeter Tyser 
406882b7d72SMike Frysinger int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
407a4145534SPeter Tyser {
408a4145534SPeter Tyser 	/* enable watchdog, set timeout to 0 and wait */
409a4145534SPeter Tyser 	mbar_writeByte(SIM_SYPCR, 0xc0);
410a4145534SPeter Tyser 	while (1) ;
411a4145534SPeter Tyser 
412a4145534SPeter Tyser 	/* we don't return! */
413a4145534SPeter Tyser 	return 0;
414a4145534SPeter Tyser };
415a4145534SPeter Tyser #endif
416a4145534SPeter Tyser 
417a4145534SPeter Tyser #if defined(CONFIG_MCFFEC)
418a4145534SPeter Tyser /* Default initializations for MCFFEC controllers.  To override,
419a4145534SPeter Tyser  * create a board-specific function called:
420a4145534SPeter Tyser  * 	int board_eth_init(bd_t *bis)
421a4145534SPeter Tyser  */
422a4145534SPeter Tyser 
423a4145534SPeter Tyser int cpu_eth_init(bd_t *bis)
424a4145534SPeter Tyser {
425a4145534SPeter Tyser 	return mcffec_initialize(bis);
426a4145534SPeter Tyser }
427a4145534SPeter Tyser #endif
428