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