xref: /rk3399_rockchip-uboot/arch/m68k/cpu/mcf52x2/cpu.c (revision 326ea986ac150acdc7656d57fca647db80b50158)
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  *
14*1a459660SWolfgang 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
do_reset(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])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 
checkcpu(void)40a4145534SPeter Tyser int checkcpu(void)
41a4145534SPeter Tyser {
42a4145534SPeter Tyser 	char buf1[32], buf2[32];
43a4145534SPeter Tyser 
44a4145534SPeter Tyser 	printf("CPU:   Freescale Coldfire MCF5208\n"
45a4145534SPeter Tyser 	       "       CPU CLK %s MHz BUS CLK %s MHz\n",
46a4145534SPeter Tyser 	       strmhz(buf1, gd->cpu_clk),
47a4145534SPeter Tyser 	       strmhz(buf2, gd->bus_clk));
48a4145534SPeter Tyser 	return 0;
49a4145534SPeter Tyser };
50a4145534SPeter Tyser 
51a4145534SPeter Tyser #if defined(CONFIG_WATCHDOG)
52a4145534SPeter Tyser /* Called by macro WATCHDOG_RESET */
watchdog_reset(void)53a4145534SPeter Tyser void watchdog_reset(void)
54a4145534SPeter Tyser {
5532dbaafaSAlison Wang 	wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
5632dbaafaSAlison Wang 
5732dbaafaSAlison Wang 	out_be16(&wdt->sr, 0x5555);
5832dbaafaSAlison Wang 	out_be16(&wdt->sr, 0xaaaa);
59a4145534SPeter Tyser }
60a4145534SPeter Tyser 
watchdog_disable(void)61a4145534SPeter Tyser int watchdog_disable(void)
62a4145534SPeter Tyser {
6332dbaafaSAlison Wang 	wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
64a4145534SPeter Tyser 
6532dbaafaSAlison Wang 	/* reset watchdog counter */
6632dbaafaSAlison Wang 	out_be16(&wdt->sr, 0x5555);
6732dbaafaSAlison Wang 	out_be16(&wdt->sr, 0xaaaa);
6832dbaafaSAlison Wang 	/* disable watchdog timer */
6932dbaafaSAlison Wang 	out_be16(&wdt->cr, 0);
70a4145534SPeter Tyser 
71a4145534SPeter Tyser 	puts("WATCHDOG:disabled\n");
72a4145534SPeter Tyser 	return (0);
73a4145534SPeter Tyser }
74a4145534SPeter Tyser 
watchdog_init(void)75a4145534SPeter Tyser int watchdog_init(void)
76a4145534SPeter Tyser {
7732dbaafaSAlison Wang 	wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
78a4145534SPeter Tyser 
7932dbaafaSAlison Wang 	/* disable watchdog */
8032dbaafaSAlison Wang 	out_be16(&wdt->cr, 0);
81a4145534SPeter Tyser 
82a4145534SPeter Tyser 	/* set timeout and enable watchdog */
8332dbaafaSAlison Wang 	out_be16(&wdt->mr,
8432dbaafaSAlison Wang 		(CONFIG_WATCHDOG_TIMEOUT * CONFIG_SYS_HZ) / (32768 * 1000) - 1);
8532dbaafaSAlison Wang 
8632dbaafaSAlison Wang 	/* reset watchdog counter */
8732dbaafaSAlison Wang 	out_be16(&wdt->sr, 0x5555);
8832dbaafaSAlison Wang 	out_be16(&wdt->sr, 0xaaaa);
89a4145534SPeter Tyser 
90a4145534SPeter Tyser 	puts("WATCHDOG:enabled\n");
91a4145534SPeter Tyser 	return (0);
92a4145534SPeter Tyser }
93a4145534SPeter Tyser #endif				/* #ifdef CONFIG_WATCHDOG */
94a4145534SPeter Tyser #endif				/* #ifdef CONFIG_M5208 */
95a4145534SPeter Tyser 
96a4145534SPeter Tyser #ifdef  CONFIG_M5271
97a4145534SPeter Tyser /*
98a4145534SPeter Tyser  * Both MCF5270 and MCF5271 are members of the MPC5271 family. Try to
99a4145534SPeter Tyser  * determine which one we are running on, based on the Chip Identification
100a4145534SPeter Tyser  * Register (CIR).
101a4145534SPeter Tyser  */
checkcpu(void)102a4145534SPeter Tyser int checkcpu(void)
103a4145534SPeter Tyser {
104a4145534SPeter Tyser 	char buf[32];
105a4145534SPeter Tyser 	unsigned short cir;	/* Chip Identification Register */
106a4145534SPeter Tyser 	unsigned short pin;	/* Part identification number */
107a4145534SPeter Tyser 	unsigned char prn;	/* Part revision number */
108a4145534SPeter Tyser 	char *cpu_model;
109a4145534SPeter Tyser 
110a4145534SPeter Tyser 	cir = mbar_readShort(MCF_CCM_CIR);
111a4145534SPeter Tyser 	pin = cir >> MCF_CCM_CIR_PIN_LEN;
112a4145534SPeter Tyser 	prn = cir & MCF_CCM_CIR_PRN_MASK;
113a4145534SPeter Tyser 
114a4145534SPeter Tyser 	switch (pin) {
115a4145534SPeter Tyser 	case MCF_CCM_CIR_PIN_MCF5270:
116a4145534SPeter Tyser 		cpu_model = "5270";
117a4145534SPeter Tyser 		break;
118a4145534SPeter Tyser 	case MCF_CCM_CIR_PIN_MCF5271:
119a4145534SPeter Tyser 		cpu_model = "5271";
120a4145534SPeter Tyser 		break;
121a4145534SPeter Tyser 	default:
122a4145534SPeter Tyser 		cpu_model = NULL;
123a4145534SPeter Tyser 		break;
124a4145534SPeter Tyser 	}
125a4145534SPeter Tyser 
126a4145534SPeter Tyser 	if (cpu_model)
127a4145534SPeter Tyser 		printf("CPU:   Freescale ColdFire MCF%s rev. %hu, at %s MHz\n",
128a4145534SPeter Tyser 		       cpu_model, prn, strmhz(buf, CONFIG_SYS_CLK));
129a4145534SPeter Tyser 	else
130a4145534SPeter Tyser 		printf("CPU:   Unknown - Freescale ColdFire MCF5271 family"
131a4145534SPeter Tyser 		       " (PIN: 0x%x) rev. %hu, at %s MHz\n",
132a4145534SPeter Tyser 		       pin, prn, strmhz(buf, CONFIG_SYS_CLK));
133a4145534SPeter Tyser 
134a4145534SPeter Tyser 	return 0;
135a4145534SPeter Tyser }
136a4145534SPeter Tyser 
do_reset(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])137882b7d72SMike Frysinger int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
138a4145534SPeter Tyser {
139a4145534SPeter Tyser 	/* Call the board specific reset actions first. */
140a4145534SPeter Tyser 	if(board_reset) {
141a4145534SPeter Tyser 		board_reset();
142a4145534SPeter Tyser 	}
143a4145534SPeter Tyser 
144a4145534SPeter Tyser 	mbar_writeByte(MCF_RCM_RCR,
145a4145534SPeter Tyser 		       MCF_RCM_RCR_SOFTRST | MCF_RCM_RCR_FRCRSTOUT);
146a4145534SPeter Tyser 	return 0;
147a4145534SPeter Tyser };
148a4145534SPeter Tyser 
149a4145534SPeter Tyser #if defined(CONFIG_WATCHDOG)
watchdog_reset(void)150a4145534SPeter Tyser void watchdog_reset(void)
151a4145534SPeter Tyser {
152a4145534SPeter Tyser 	mbar_writeShort(MCF_WTM_WSR, 0x5555);
153a4145534SPeter Tyser 	mbar_writeShort(MCF_WTM_WSR, 0xAAAA);
154a4145534SPeter Tyser }
155a4145534SPeter Tyser 
watchdog_disable(void)156a4145534SPeter Tyser int watchdog_disable(void)
157a4145534SPeter Tyser {
158a4145534SPeter Tyser 	mbar_writeShort(MCF_WTM_WCR, 0);
159a4145534SPeter Tyser 	return (0);
160a4145534SPeter Tyser }
161a4145534SPeter Tyser 
watchdog_init(void)162a4145534SPeter Tyser int watchdog_init(void)
163a4145534SPeter Tyser {
164a4145534SPeter Tyser 	mbar_writeShort(MCF_WTM_WCR, MCF_WTM_WCR_EN);
165a4145534SPeter Tyser 	return (0);
166a4145534SPeter Tyser }
167a4145534SPeter Tyser #endif				/* #ifdef CONFIG_WATCHDOG */
168a4145534SPeter Tyser 
169a4145534SPeter Tyser #endif
170a4145534SPeter Tyser 
171a4145534SPeter Tyser #ifdef	CONFIG_M5272
do_reset(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])172882b7d72SMike Frysinger int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
173a4145534SPeter Tyser {
17432dbaafaSAlison Wang 	wdog_t *wdp = (wdog_t *) (MMAP_WDOG);
175a4145534SPeter Tyser 
17632dbaafaSAlison Wang 	out_be16(&wdp->wdog_wrrr, 0);
177a4145534SPeter Tyser 	udelay(1000);
178a4145534SPeter Tyser 
179a4145534SPeter Tyser 	/* enable watchdog, set timeout to 0 and wait */
18032dbaafaSAlison Wang 	out_be16(&wdp->wdog_wrrr, 1);
181a4145534SPeter Tyser 	while (1) ;
182a4145534SPeter Tyser 
183a4145534SPeter Tyser 	/* we don't return! */
184a4145534SPeter Tyser 	return 0;
185a4145534SPeter Tyser };
186a4145534SPeter Tyser 
checkcpu(void)187a4145534SPeter Tyser int checkcpu(void)
188a4145534SPeter Tyser {
18932dbaafaSAlison Wang 	sysctrl_t *sysctrl = (sysctrl_t *) (MMAP_CFG);
190a4145534SPeter Tyser 	uchar msk;
191a4145534SPeter Tyser 	char *suf;
192a4145534SPeter Tyser 
193a4145534SPeter Tyser 	puts("CPU:   ");
19432dbaafaSAlison Wang 	msk = (in_be32(&sysctrl->sc_dir) > 28) & 0xf;
195a4145534SPeter Tyser 	switch (msk) {
196a4145534SPeter Tyser 	case 0x2:
197a4145534SPeter Tyser 		suf = "1K75N";
198a4145534SPeter Tyser 		break;
199a4145534SPeter Tyser 	case 0x4:
200a4145534SPeter Tyser 		suf = "3K75N";
201a4145534SPeter Tyser 		break;
202a4145534SPeter Tyser 	default:
203a4145534SPeter Tyser 		suf = NULL;
204a4145534SPeter Tyser 		printf("Freescale MCF5272 (Mask:%01x)\n", msk);
205a4145534SPeter Tyser 		break;
206a4145534SPeter Tyser 	}
207a4145534SPeter Tyser 
208a4145534SPeter Tyser 	if (suf)
209a4145534SPeter Tyser 		printf("Freescale MCF5272 %s\n", suf);
210a4145534SPeter Tyser 	return 0;
211a4145534SPeter Tyser };
212a4145534SPeter Tyser 
213a4145534SPeter Tyser #if defined(CONFIG_WATCHDOG)
214a4145534SPeter Tyser /* Called by macro WATCHDOG_RESET */
watchdog_reset(void)215a4145534SPeter Tyser void watchdog_reset(void)
216a4145534SPeter Tyser {
21732dbaafaSAlison Wang 	wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
21832dbaafaSAlison Wang 
21932dbaafaSAlison Wang 	out_be16(&wdt->wdog_wcr, 0);
220a4145534SPeter Tyser }
221a4145534SPeter Tyser 
watchdog_disable(void)222a4145534SPeter Tyser int watchdog_disable(void)
223a4145534SPeter Tyser {
22432dbaafaSAlison Wang 	wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
225a4145534SPeter Tyser 
22632dbaafaSAlison Wang 	/* reset watchdog counter */
22732dbaafaSAlison Wang 	out_be16(&wdt->wdog_wcr, 0);
22832dbaafaSAlison Wang 	/* disable watchdog interrupt */
22932dbaafaSAlison Wang 	out_be16(&wdt->wdog_wirr, 0);
23032dbaafaSAlison Wang 	/* disable watchdog timer */
23132dbaafaSAlison Wang 	out_be16(&wdt->wdog_wrrr, 0);
232a4145534SPeter Tyser 
233a4145534SPeter Tyser 	puts("WATCHDOG:disabled\n");
234a4145534SPeter Tyser 	return (0);
235a4145534SPeter Tyser }
236a4145534SPeter Tyser 
watchdog_init(void)237a4145534SPeter Tyser int watchdog_init(void)
238a4145534SPeter Tyser {
23932dbaafaSAlison Wang 	wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
240a4145534SPeter Tyser 
24132dbaafaSAlison Wang 	/* disable watchdog interrupt */
24232dbaafaSAlison Wang 	out_be16(&wdt->wdog_wirr, 0);
243a4145534SPeter Tyser 
244a4145534SPeter Tyser 	/* set timeout and enable watchdog */
24532dbaafaSAlison Wang 	out_be16(&wdt->wdog_wrrr,
24632dbaafaSAlison Wang 		(CONFIG_WATCHDOG_TIMEOUT * CONFIG_SYS_HZ) / (32768 * 1000) - 1);
24732dbaafaSAlison Wang 
24832dbaafaSAlison Wang 	/* reset watchdog counter */
24932dbaafaSAlison Wang 	out_be16(&wdt->wdog_wcr, 0);
250a4145534SPeter Tyser 
251a4145534SPeter Tyser 	puts("WATCHDOG:enabled\n");
252a4145534SPeter Tyser 	return (0);
253a4145534SPeter Tyser }
254a4145534SPeter Tyser #endif				/* #ifdef CONFIG_WATCHDOG */
255a4145534SPeter Tyser 
256a4145534SPeter Tyser #endif				/* #ifdef CONFIG_M5272 */
257a4145534SPeter Tyser 
258a4145534SPeter Tyser #ifdef	CONFIG_M5275
do_reset(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])259882b7d72SMike Frysinger int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
260a4145534SPeter Tyser {
26132dbaafaSAlison Wang 	rcm_t *rcm = (rcm_t *)(MMAP_RCM);
262a4145534SPeter Tyser 
263a4145534SPeter Tyser 	udelay(1000);
264a4145534SPeter Tyser 
26532dbaafaSAlison Wang 	out_8(&rcm->rcr, RCM_RCR_SOFTRST);
266a4145534SPeter Tyser 
267a4145534SPeter Tyser 	/* we don't return! */
268a4145534SPeter Tyser 	return 0;
269a4145534SPeter Tyser };
270a4145534SPeter Tyser 
checkcpu(void)271a4145534SPeter Tyser int checkcpu(void)
272a4145534SPeter Tyser {
273a4145534SPeter Tyser 	char buf[32];
274a4145534SPeter Tyser 
275a4145534SPeter Tyser 	printf("CPU:   Freescale Coldfire MCF5275 at %s MHz\n",
276a4145534SPeter Tyser 			strmhz(buf, CONFIG_SYS_CLK));
277a4145534SPeter Tyser 	return 0;
278a4145534SPeter Tyser };
279a4145534SPeter Tyser 
280a4145534SPeter Tyser 
281a4145534SPeter Tyser #if defined(CONFIG_WATCHDOG)
282a4145534SPeter Tyser /* Called by macro WATCHDOG_RESET */
watchdog_reset(void)283a4145534SPeter Tyser void watchdog_reset(void)
284a4145534SPeter Tyser {
28532dbaafaSAlison Wang 	wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
28632dbaafaSAlison Wang 
28732dbaafaSAlison Wang 	out_be16(&wdt->wsr, 0x5555);
28832dbaafaSAlison Wang 	out_be16(&wdt->wsr, 0xaaaa);
289a4145534SPeter Tyser }
290a4145534SPeter Tyser 
watchdog_disable(void)291a4145534SPeter Tyser int watchdog_disable(void)
292a4145534SPeter Tyser {
29332dbaafaSAlison Wang 	wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
294a4145534SPeter Tyser 
29532dbaafaSAlison Wang 	/* reset watchdog counter */
29632dbaafaSAlison Wang 	out_be16(&wdt->wsr, 0x5555);
29732dbaafaSAlison Wang 	out_be16(&wdt->wsr, 0xaaaa);
29832dbaafaSAlison Wang 
29932dbaafaSAlison Wang 	/* disable watchdog timer */
30032dbaafaSAlison Wang 	out_be16(&wdt->wcr, 0);
301a4145534SPeter Tyser 
302a4145534SPeter Tyser 	puts("WATCHDOG:disabled\n");
303a4145534SPeter Tyser 	return (0);
304a4145534SPeter Tyser }
305a4145534SPeter Tyser 
watchdog_init(void)306a4145534SPeter Tyser int watchdog_init(void)
307a4145534SPeter Tyser {
30832dbaafaSAlison Wang 	wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
309a4145534SPeter Tyser 
31032dbaafaSAlison Wang 	/* disable watchdog */
31132dbaafaSAlison Wang 	out_be16(&wdt->wcr, 0);
312a4145534SPeter Tyser 
313a4145534SPeter Tyser 	/* set timeout and enable watchdog */
31432dbaafaSAlison Wang 	out_be16(&wdt->wmr,
31532dbaafaSAlison Wang 		(CONFIG_WATCHDOG_TIMEOUT * CONFIG_SYS_HZ) / (32768 * 1000) - 1);
31632dbaafaSAlison Wang 
31732dbaafaSAlison Wang 	/* reset watchdog counter */
31832dbaafaSAlison Wang 	out_be16(&wdt->wsr, 0x5555);
31932dbaafaSAlison Wang 	out_be16(&wdt->wsr, 0xaaaa);
320a4145534SPeter Tyser 
321a4145534SPeter Tyser 	puts("WATCHDOG:enabled\n");
322a4145534SPeter Tyser 	return (0);
323a4145534SPeter Tyser }
324a4145534SPeter Tyser #endif				/* #ifdef CONFIG_WATCHDOG */
325a4145534SPeter Tyser 
326a4145534SPeter Tyser #endif				/* #ifdef CONFIG_M5275 */
327a4145534SPeter Tyser 
328a4145534SPeter Tyser #ifdef	CONFIG_M5282
checkcpu(void)329a4145534SPeter Tyser int checkcpu(void)
330a4145534SPeter Tyser {
331a4145534SPeter Tyser 	unsigned char resetsource = MCFRESET_RSR;
332a4145534SPeter Tyser 
333a4145534SPeter Tyser 	printf("CPU:   Freescale Coldfire MCF5282 (PIN: %2.2x REV: %2.2x)\n",
334a4145534SPeter Tyser 	       MCFCCM_CIR >> 8, MCFCCM_CIR & MCFCCM_CIR_PRN_MASK);
335a4145534SPeter Tyser 	printf("Reset:%s%s%s%s%s%s%s\n",
336a4145534SPeter Tyser 	       (resetsource & MCFRESET_RSR_LOL) ? " Loss of Lock" : "",
337a4145534SPeter Tyser 	       (resetsource & MCFRESET_RSR_LOC) ? " Loss of Clock" : "",
338a4145534SPeter Tyser 	       (resetsource & MCFRESET_RSR_EXT) ? " External" : "",
339a4145534SPeter Tyser 	       (resetsource & MCFRESET_RSR_POR) ? " Power On" : "",
340a4145534SPeter Tyser 	       (resetsource & MCFRESET_RSR_WDR) ? " Watchdog" : "",
341a4145534SPeter Tyser 	       (resetsource & MCFRESET_RSR_SOFT) ? " Software" : "",
342a4145534SPeter Tyser 	       (resetsource & MCFRESET_RSR_LVD) ? " Low Voltage" : "");
343a4145534SPeter Tyser 	return 0;
344a4145534SPeter Tyser }
345a4145534SPeter Tyser 
do_reset(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])346882b7d72SMike Frysinger int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
347a4145534SPeter Tyser {
348a4145534SPeter Tyser 	MCFRESET_RCR = MCFRESET_RCR_SOFTRST;
349a4145534SPeter Tyser 	return 0;
350a4145534SPeter Tyser };
351a4145534SPeter Tyser #endif
352a4145534SPeter Tyser 
353a4145534SPeter Tyser #ifdef CONFIG_M5249
checkcpu(void)354a4145534SPeter Tyser int checkcpu(void)
355a4145534SPeter Tyser {
356a4145534SPeter Tyser 	char buf[32];
357a4145534SPeter Tyser 
358a4145534SPeter Tyser 	printf("CPU:   Freescale Coldfire MCF5249 at %s MHz\n",
359a4145534SPeter Tyser 	       strmhz(buf, CONFIG_SYS_CLK));
360a4145534SPeter Tyser 	return 0;
361a4145534SPeter Tyser }
362a4145534SPeter Tyser 
do_reset(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])363882b7d72SMike Frysinger int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
364a4145534SPeter Tyser {
365a4145534SPeter Tyser 	/* enable watchdog, set timeout to 0 and wait */
366a4145534SPeter Tyser 	mbar_writeByte(MCFSIM_SYPCR, 0xc0);
367a4145534SPeter Tyser 	while (1) ;
368a4145534SPeter Tyser 
369a4145534SPeter Tyser 	/* we don't return! */
370a4145534SPeter Tyser 	return 0;
371a4145534SPeter Tyser };
372a4145534SPeter Tyser #endif
373a4145534SPeter Tyser 
374a4145534SPeter Tyser #ifdef CONFIG_M5253
checkcpu(void)375a4145534SPeter Tyser int checkcpu(void)
376a4145534SPeter Tyser {
377a4145534SPeter Tyser 	char buf[32];
378a4145534SPeter Tyser 
379a4145534SPeter Tyser 	unsigned char resetsource = mbar_readLong(SIM_RSR);
380a4145534SPeter Tyser 	printf("CPU:   Freescale Coldfire MCF5253 at %s MHz\n",
381a4145534SPeter Tyser 	       strmhz(buf, CONFIG_SYS_CLK));
382a4145534SPeter Tyser 
383a4145534SPeter Tyser 	if ((resetsource & SIM_RSR_HRST) || (resetsource & SIM_RSR_SWTR)) {
384a4145534SPeter Tyser 		printf("Reset:%s%s\n",
385a4145534SPeter Tyser 		       (resetsource & SIM_RSR_HRST) ? " Hardware/ System Reset"
386a4145534SPeter Tyser 		       : "",
387a4145534SPeter Tyser 		       (resetsource & SIM_RSR_SWTR) ? " Software Watchdog" :
388a4145534SPeter Tyser 		       "");
389a4145534SPeter Tyser 	}
390a4145534SPeter Tyser 	return 0;
391a4145534SPeter Tyser }
392a4145534SPeter Tyser 
do_reset(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])393882b7d72SMike Frysinger int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
394a4145534SPeter Tyser {
395a4145534SPeter Tyser 	/* enable watchdog, set timeout to 0 and wait */
396a4145534SPeter Tyser 	mbar_writeByte(SIM_SYPCR, 0xc0);
397a4145534SPeter Tyser 	while (1) ;
398a4145534SPeter Tyser 
399a4145534SPeter Tyser 	/* we don't return! */
400a4145534SPeter Tyser 	return 0;
401a4145534SPeter Tyser };
402a4145534SPeter Tyser #endif
403a4145534SPeter Tyser 
404a4145534SPeter Tyser #if defined(CONFIG_MCFFEC)
405a4145534SPeter Tyser /* Default initializations for MCFFEC controllers.  To override,
406a4145534SPeter Tyser  * create a board-specific function called:
407a4145534SPeter Tyser  * 	int board_eth_init(bd_t *bis)
408a4145534SPeter Tyser  */
409a4145534SPeter Tyser 
cpu_eth_init(bd_t * bis)410a4145534SPeter Tyser int cpu_eth_init(bd_t *bis)
411a4145534SPeter Tyser {
412a4145534SPeter Tyser 	return mcffec_initialize(bis);
413a4145534SPeter Tyser }
414a4145534SPeter Tyser #endif
415