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