blob: 7c6100c5287763c7dfb1c9545f5d69bf19ba3ed8 [file] [log] [blame]
wdenkbf9e3b32004-02-12 00:47:09 +00001/*
2 * (C) Copyright 2003
3 * Josef Baumgartner <josef.baumgartner@telex.de>
4 *
Heiko Schocher9acb6262006-04-20 08:42:42 +02005 * MCF5282 additionals
6 * (C) Copyright 2005
7 * BuS Elektronik GmbH & Co. KG <esw@bus-elektronik.de>
8 *
Matthew Fettkef71d9d92008-02-04 15:38:20 -06009 * MCF5275 additions
10 * Copyright (C) 2008 Arthur Shipkowski (art@videon-central.com)
11 *
Alison Wang32dbaaf2012-03-26 21:49:04 +000012 * Copyright (C) 2012 Freescale Semiconductor, Inc. All Rights Reserved.
13 *
wdenkbf9e3b32004-02-12 00:47:09 +000014 * See file CREDITS for list of people who contributed to this
15 * project.
16 *
17 * This program is free software; you can redistribute it and/or
18 * modify it under the terms of the GNU General Public License as
19 * published by the Free Software Foundation; either version 2 of
20 * the License, or (at your option) any later version.
21 *
22 * This program is distributed in the hope that it will be useful,
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 * GNU General Public License for more details.
26 *
27 * You should have received a copy of the GNU General Public License
28 * along with this program; if not, write to the Free Software
29 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
30 * MA 02111-1307 USA
31 */
32
33#include <common.h>
34#include <watchdog.h>
35#include <command.h>
TsiChungLiew83ec20b2007-08-15 19:21:21 -050036#include <asm/immap.h>
Alison Wang32dbaaf2012-03-26 21:49:04 +000037#include <asm/io.h>
Ben Warren89973f82008-08-31 22:22:04 -070038#include <netdev.h>
Richard Retanubunbb907ab2009-10-26 14:19:17 -040039#include "cpu.h"
wdenkbf9e3b32004-02-12 00:47:09 +000040
TsiChung Liewbf9a5212009-06-12 11:29:00 +000041DECLARE_GLOBAL_DATA_PTR;
42
43#ifdef CONFIG_M5208
Mike Frysinger882b7d72010-10-20 03:41:17 -040044int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
TsiChung Liewbf9a5212009-06-12 11:29:00 +000045{
Alison Wang32dbaaf2012-03-26 21:49:04 +000046 rcm_t *rcm = (rcm_t *)(MMAP_RCM);
TsiChung Liewbf9a5212009-06-12 11:29:00 +000047
48 udelay(1000);
49
Alison Wang32dbaaf2012-03-26 21:49:04 +000050 out_8(&rcm->rcr, RCM_RCR_SOFTRST);
TsiChung Liewbf9a5212009-06-12 11:29:00 +000051
52 /* we don't return! */
53 return 0;
54};
55
56int checkcpu(void)
57{
58 char buf1[32], buf2[32];
59
60 printf("CPU: Freescale Coldfire MCF5208\n"
61 " CPU CLK %s MHz BUS CLK %s MHz\n",
62 strmhz(buf1, gd->cpu_clk),
63 strmhz(buf2, gd->bus_clk));
64 return 0;
65};
66
67#if defined(CONFIG_WATCHDOG)
68/* Called by macro WATCHDOG_RESET */
69void watchdog_reset(void)
70{
Alison Wang32dbaaf2012-03-26 21:49:04 +000071 wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
72
73 out_be16(&wdt->sr, 0x5555);
74 out_be16(&wdt->sr, 0xaaaa);
TsiChung Liewbf9a5212009-06-12 11:29:00 +000075}
76
77int watchdog_disable(void)
78{
Alison Wang32dbaaf2012-03-26 21:49:04 +000079 wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
TsiChung Liewbf9a5212009-06-12 11:29:00 +000080
Alison Wang32dbaaf2012-03-26 21:49:04 +000081 /* reset watchdog counter */
82 out_be16(&wdt->sr, 0x5555);
83 out_be16(&wdt->sr, 0xaaaa);
84 /* disable watchdog timer */
85 out_be16(&wdt->cr, 0);
TsiChung Liewbf9a5212009-06-12 11:29:00 +000086
87 puts("WATCHDOG:disabled\n");
88 return (0);
89}
90
91int watchdog_init(void)
92{
Alison Wang32dbaaf2012-03-26 21:49:04 +000093 wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
TsiChung Liewbf9a5212009-06-12 11:29:00 +000094
Alison Wang32dbaaf2012-03-26 21:49:04 +000095 /* disable watchdog */
96 out_be16(&wdt->cr, 0);
TsiChung Liewbf9a5212009-06-12 11:29:00 +000097
98 /* set timeout and enable watchdog */
Alison Wang32dbaaf2012-03-26 21:49:04 +000099 out_be16(&wdt->mr,
100 (CONFIG_WATCHDOG_TIMEOUT * CONFIG_SYS_HZ) / (32768 * 1000) - 1);
101
102 /* reset watchdog counter */
103 out_be16(&wdt->sr, 0x5555);
104 out_be16(&wdt->sr, 0xaaaa);
TsiChung Liewbf9a5212009-06-12 11:29:00 +0000105
106 puts("WATCHDOG:enabled\n");
107 return (0);
108}
109#endif /* #ifdef CONFIG_WATCHDOG */
110#endif /* #ifdef CONFIG_M5208 */
111
Zachary P. Landaueacbd312006-01-26 17:35:56 -0500112#ifdef CONFIG_M5271
Bartlomiej Sieka363d1d82007-01-23 13:25:22 +0100113/*
114 * Both MCF5270 and MCF5271 are members of the MPC5271 family. Try to
115 * determine which one we are running on, based on the Chip Identification
116 * Register (CIR).
117 */
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500118int checkcpu(void)
Zachary P. Landaueacbd312006-01-26 17:35:56 -0500119{
Marian Balakowiczb75ef852006-05-09 11:45:31 +0200120 char buf[32];
Bartlomiej Sieka363d1d82007-01-23 13:25:22 +0100121 unsigned short cir; /* Chip Identification Register */
122 unsigned short pin; /* Part identification number */
123 unsigned char prn; /* Part revision number */
124 char *cpu_model;
Marian Balakowiczb75ef852006-05-09 11:45:31 +0200125
Bartlomiej Sieka363d1d82007-01-23 13:25:22 +0100126 cir = mbar_readShort(MCF_CCM_CIR);
127 pin = cir >> MCF_CCM_CIR_PIN_LEN;
128 prn = cir & MCF_CCM_CIR_PRN_MASK;
129
130 switch (pin) {
131 case MCF_CCM_CIR_PIN_MCF5270:
132 cpu_model = "5270";
133 break;
134 case MCF_CCM_CIR_PIN_MCF5271:
135 cpu_model = "5271";
136 break;
137 default:
138 cpu_model = NULL;
139 break;
140 }
141
142 if (cpu_model)
143 printf("CPU: Freescale ColdFire MCF%s rev. %hu, at %s MHz\n",
Jean-Christophe PLAGNIOL-VILLARD6d0f6bc2008-10-16 15:01:15 +0200144 cpu_model, prn, strmhz(buf, CONFIG_SYS_CLK));
Bartlomiej Sieka363d1d82007-01-23 13:25:22 +0100145 else
146 printf("CPU: Unknown - Freescale ColdFire MCF5271 family"
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500147 " (PIN: 0x%x) rev. %hu, at %s MHz\n",
Jean-Christophe PLAGNIOL-VILLARD6d0f6bc2008-10-16 15:01:15 +0200148 pin, prn, strmhz(buf, CONFIG_SYS_CLK));
Bartlomiej Sieka363d1d82007-01-23 13:25:22 +0100149
Zachary P. Landaueacbd312006-01-26 17:35:56 -0500150 return 0;
151}
152
Mike Frysinger882b7d72010-10-20 03:41:17 -0400153int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500154{
Richard Retanubunbb907ab2009-10-26 14:19:17 -0400155 /* Call the board specific reset actions first. */
156 if(board_reset) {
157 board_reset();
158 }
159
Zachary P. Landaueacbd312006-01-26 17:35:56 -0500160 mbar_writeByte(MCF_RCM_RCR,
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500161 MCF_RCM_RCR_SOFTRST | MCF_RCM_RCR_FRCRSTOUT);
Zachary P. Landaueacbd312006-01-26 17:35:56 -0500162 return 0;
163};
164
165#if defined(CONFIG_WATCHDOG)
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500166void watchdog_reset(void)
Zachary P. Landaueacbd312006-01-26 17:35:56 -0500167{
168 mbar_writeShort(MCF_WTM_WSR, 0x5555);
169 mbar_writeShort(MCF_WTM_WSR, 0xAAAA);
170}
171
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500172int watchdog_disable(void)
Zachary P. Landaueacbd312006-01-26 17:35:56 -0500173{
174 mbar_writeShort(MCF_WTM_WCR, 0);
175 return (0);
176}
177
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500178int watchdog_init(void)
Zachary P. Landaueacbd312006-01-26 17:35:56 -0500179{
Zachary P. Landaueacbd312006-01-26 17:35:56 -0500180 mbar_writeShort(MCF_WTM_WCR, MCF_WTM_WCR_EN);
181 return (0);
182}
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500183#endif /* #ifdef CONFIG_WATCHDOG */
Zachary P. Landaueacbd312006-01-26 17:35:56 -0500184
185#endif
wdenkbf9e3b32004-02-12 00:47:09 +0000186
187#ifdef CONFIG_M5272
Mike Frysinger882b7d72010-10-20 03:41:17 -0400188int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500189{
Alison Wang32dbaaf2012-03-26 21:49:04 +0000190 wdog_t *wdp = (wdog_t *) (MMAP_WDOG);
wdenkbf9e3b32004-02-12 00:47:09 +0000191
Alison Wang32dbaaf2012-03-26 21:49:04 +0000192 out_be16(&wdp->wdog_wrrr, 0);
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500193 udelay(1000);
wdenkbf9e3b32004-02-12 00:47:09 +0000194
195 /* enable watchdog, set timeout to 0 and wait */
Alison Wang32dbaaf2012-03-26 21:49:04 +0000196 out_be16(&wdp->wdog_wrrr, 1);
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500197 while (1) ;
wdenkbf9e3b32004-02-12 00:47:09 +0000198
199 /* we don't return! */
200 return 0;
201};
202
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500203int checkcpu(void)
204{
Alison Wang32dbaaf2012-03-26 21:49:04 +0000205 sysctrl_t *sysctrl = (sysctrl_t *) (MMAP_CFG);
wdenkbf9e3b32004-02-12 00:47:09 +0000206 uchar msk;
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500207 char *suf;
wdenkbf9e3b32004-02-12 00:47:09 +0000208
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500209 puts("CPU: ");
Alison Wang32dbaaf2012-03-26 21:49:04 +0000210 msk = (in_be32(&sysctrl->sc_dir) > 28) & 0xf;
wdenkbf9e3b32004-02-12 00:47:09 +0000211 switch (msk) {
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500212 case 0x2:
213 suf = "1K75N";
214 break;
215 case 0x4:
216 suf = "3K75N";
217 break;
218 default:
219 suf = NULL;
220 printf("Freescale MCF5272 (Mask:%01x)\n", msk);
221 break;
222 }
wdenkbf9e3b32004-02-12 00:47:09 +0000223
224 if (suf)
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500225 printf("Freescale MCF5272 %s\n", suf);
wdenkbf9e3b32004-02-12 00:47:09 +0000226 return 0;
227};
228
wdenkbf9e3b32004-02-12 00:47:09 +0000229#if defined(CONFIG_WATCHDOG)
230/* Called by macro WATCHDOG_RESET */
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500231void watchdog_reset(void)
wdenkbf9e3b32004-02-12 00:47:09 +0000232{
Alison Wang32dbaaf2012-03-26 21:49:04 +0000233 wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
234
235 out_be16(&wdt->wdog_wcr, 0);
wdenkbf9e3b32004-02-12 00:47:09 +0000236}
237
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500238int watchdog_disable(void)
wdenkbf9e3b32004-02-12 00:47:09 +0000239{
Alison Wang32dbaaf2012-03-26 21:49:04 +0000240 wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
wdenkbf9e3b32004-02-12 00:47:09 +0000241
Alison Wang32dbaaf2012-03-26 21:49:04 +0000242 /* reset watchdog counter */
243 out_be16(&wdt->wdog_wcr, 0);
244 /* disable watchdog interrupt */
245 out_be16(&wdt->wdog_wirr, 0);
246 /* disable watchdog timer */
247 out_be16(&wdt->wdog_wrrr, 0);
wdenkbf9e3b32004-02-12 00:47:09 +0000248
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500249 puts("WATCHDOG:disabled\n");
wdenkbf9e3b32004-02-12 00:47:09 +0000250 return (0);
251}
252
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500253int watchdog_init(void)
wdenkbf9e3b32004-02-12 00:47:09 +0000254{
Alison Wang32dbaaf2012-03-26 21:49:04 +0000255 wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
wdenkbf9e3b32004-02-12 00:47:09 +0000256
Alison Wang32dbaaf2012-03-26 21:49:04 +0000257 /* disable watchdog interrupt */
258 out_be16(&wdt->wdog_wirr, 0);
wdenkbf9e3b32004-02-12 00:47:09 +0000259
260 /* set timeout and enable watchdog */
Alison Wang32dbaaf2012-03-26 21:49:04 +0000261 out_be16(&wdt->wdog_wrrr,
262 (CONFIG_WATCHDOG_TIMEOUT * CONFIG_SYS_HZ) / (32768 * 1000) - 1);
263
264 /* reset watchdog counter */
265 out_be16(&wdt->wdog_wcr, 0);
wdenkbf9e3b32004-02-12 00:47:09 +0000266
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500267 puts("WATCHDOG:enabled\n");
wdenkbf9e3b32004-02-12 00:47:09 +0000268 return (0);
269}
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500270#endif /* #ifdef CONFIG_WATCHDOG */
wdenkbf9e3b32004-02-12 00:47:09 +0000271
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500272#endif /* #ifdef CONFIG_M5272 */
wdenkbf9e3b32004-02-12 00:47:09 +0000273
Matthew Fettkef71d9d92008-02-04 15:38:20 -0600274#ifdef CONFIG_M5275
Mike Frysinger882b7d72010-10-20 03:41:17 -0400275int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
Matthew Fettkef71d9d92008-02-04 15:38:20 -0600276{
Alison Wang32dbaaf2012-03-26 21:49:04 +0000277 rcm_t *rcm = (rcm_t *)(MMAP_RCM);
Matthew Fettkef71d9d92008-02-04 15:38:20 -0600278
279 udelay(1000);
280
Alison Wang32dbaaf2012-03-26 21:49:04 +0000281 out_8(&rcm->rcr, RCM_RCR_SOFTRST);
Matthew Fettkef71d9d92008-02-04 15:38:20 -0600282
283 /* we don't return! */
284 return 0;
285};
286
287int checkcpu(void)
288{
289 char buf[32];
290
291 printf("CPU: Freescale Coldfire MCF5275 at %s MHz\n",
Jean-Christophe PLAGNIOL-VILLARD6d0f6bc2008-10-16 15:01:15 +0200292 strmhz(buf, CONFIG_SYS_CLK));
Matthew Fettkef71d9d92008-02-04 15:38:20 -0600293 return 0;
294};
295
296
297#if defined(CONFIG_WATCHDOG)
298/* Called by macro WATCHDOG_RESET */
299void watchdog_reset(void)
300{
Alison Wang32dbaaf2012-03-26 21:49:04 +0000301 wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
302
303 out_be16(&wdt->wsr, 0x5555);
304 out_be16(&wdt->wsr, 0xaaaa);
Matthew Fettkef71d9d92008-02-04 15:38:20 -0600305}
306
307int watchdog_disable(void)
308{
Alison Wang32dbaaf2012-03-26 21:49:04 +0000309 wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
Matthew Fettkef71d9d92008-02-04 15:38:20 -0600310
Alison Wang32dbaaf2012-03-26 21:49:04 +0000311 /* reset watchdog counter */
312 out_be16(&wdt->wsr, 0x5555);
313 out_be16(&wdt->wsr, 0xaaaa);
314
315 /* disable watchdog timer */
316 out_be16(&wdt->wcr, 0);
Matthew Fettkef71d9d92008-02-04 15:38:20 -0600317
318 puts("WATCHDOG:disabled\n");
319 return (0);
320}
321
322int watchdog_init(void)
323{
Alison Wang32dbaaf2012-03-26 21:49:04 +0000324 wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
Matthew Fettkef71d9d92008-02-04 15:38:20 -0600325
Alison Wang32dbaaf2012-03-26 21:49:04 +0000326 /* disable watchdog */
327 out_be16(&wdt->wcr, 0);
Matthew Fettkef71d9d92008-02-04 15:38:20 -0600328
329 /* set timeout and enable watchdog */
Alison Wang32dbaaf2012-03-26 21:49:04 +0000330 out_be16(&wdt->wmr,
331 (CONFIG_WATCHDOG_TIMEOUT * CONFIG_SYS_HZ) / (32768 * 1000) - 1);
332
333 /* reset watchdog counter */
334 out_be16(&wdt->wsr, 0x5555);
335 out_be16(&wdt->wsr, 0xaaaa);
Matthew Fettkef71d9d92008-02-04 15:38:20 -0600336
337 puts("WATCHDOG:enabled\n");
338 return (0);
339}
340#endif /* #ifdef CONFIG_WATCHDOG */
341
342#endif /* #ifdef CONFIG_M5275 */
343
wdenkbf9e3b32004-02-12 00:47:09 +0000344#ifdef CONFIG_M5282
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500345int checkcpu(void)
wdenkbf9e3b32004-02-12 00:47:09 +0000346{
Wolfgang Denk4176c792006-06-10 19:27:47 +0200347 unsigned char resetsource = MCFRESET_RSR;
Heiko Schocher9acb6262006-04-20 08:42:42 +0200348
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500349 printf("CPU: Freescale Coldfire MCF5282 (PIN: %2.2x REV: %2.2x)\n",
350 MCFCCM_CIR >> 8, MCFCCM_CIR & MCFCCM_CIR_PRN_MASK);
351 printf("Reset:%s%s%s%s%s%s%s\n",
352 (resetsource & MCFRESET_RSR_LOL) ? " Loss of Lock" : "",
353 (resetsource & MCFRESET_RSR_LOC) ? " Loss of Clock" : "",
354 (resetsource & MCFRESET_RSR_EXT) ? " External" : "",
355 (resetsource & MCFRESET_RSR_POR) ? " Power On" : "",
356 (resetsource & MCFRESET_RSR_WDR) ? " Watchdog" : "",
357 (resetsource & MCFRESET_RSR_SOFT) ? " Software" : "",
358 (resetsource & MCFRESET_RSR_LVD) ? " Low Voltage" : "");
wdenkbf9e3b32004-02-12 00:47:09 +0000359 return 0;
360}
361
Mike Frysinger882b7d72010-10-20 03:41:17 -0400362int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
Heiko Schocher9acb6262006-04-20 08:42:42 +0200363{
364 MCFRESET_RCR = MCFRESET_RCR_SOFTRST;
wdenkbf9e3b32004-02-12 00:47:09 +0000365 return 0;
366};
367#endif
stroese8c725b92004-12-16 18:09:49 +0000368
TsiChungLiewa1436a82007-08-16 13:20:50 -0500369#ifdef CONFIG_M5249
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500370int checkcpu(void)
stroese8c725b92004-12-16 18:09:49 +0000371{
372 char buf[32];
373
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500374 printf("CPU: Freescale Coldfire MCF5249 at %s MHz\n",
Jean-Christophe PLAGNIOL-VILLARD6d0f6bc2008-10-16 15:01:15 +0200375 strmhz(buf, CONFIG_SYS_CLK));
stroese8c725b92004-12-16 18:09:49 +0000376 return 0;
377}
378
Mike Frysinger882b7d72010-10-20 03:41:17 -0400379int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500380{
stroese8c725b92004-12-16 18:09:49 +0000381 /* enable watchdog, set timeout to 0 and wait */
382 mbar_writeByte(MCFSIM_SYPCR, 0xc0);
TsiChungLiew83ec20b2007-08-15 19:21:21 -0500383 while (1) ;
stroese8c725b92004-12-16 18:09:49 +0000384
385 /* we don't return! */
386 return 0;
387};
388#endif
TsiChungLiewa1436a82007-08-16 13:20:50 -0500389
390#ifdef CONFIG_M5253
391int checkcpu(void)
392{
393 char buf[32];
394
395 unsigned char resetsource = mbar_readLong(SIM_RSR);
396 printf("CPU: Freescale Coldfire MCF5253 at %s MHz\n",
Jean-Christophe PLAGNIOL-VILLARD6d0f6bc2008-10-16 15:01:15 +0200397 strmhz(buf, CONFIG_SYS_CLK));
TsiChungLiewa1436a82007-08-16 13:20:50 -0500398
399 if ((resetsource & SIM_RSR_HRST) || (resetsource & SIM_RSR_SWTR)) {
400 printf("Reset:%s%s\n",
401 (resetsource & SIM_RSR_HRST) ? " Hardware/ System Reset"
402 : "",
403 (resetsource & SIM_RSR_SWTR) ? " Software Watchdog" :
404 "");
405 }
406 return 0;
407}
408
Mike Frysinger882b7d72010-10-20 03:41:17 -0400409int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
TsiChungLiewa1436a82007-08-16 13:20:50 -0500410{
411 /* enable watchdog, set timeout to 0 and wait */
412 mbar_writeByte(SIM_SYPCR, 0xc0);
413 while (1) ;
414
415 /* we don't return! */
416 return 0;
417};
418#endif
Ben Warren86882b82008-08-26 22:16:25 -0700419
420#if defined(CONFIG_MCFFEC)
421/* Default initializations for MCFFEC controllers. To override,
422 * create a board-specific function called:
423 * int board_eth_init(bd_t *bis)
424 */
425
Ben Warren86882b82008-08-26 22:16:25 -0700426int cpu_eth_init(bd_t *bis)
427{
428 return mcffec_initialize(bis);
429}
430#endif