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