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 * 141a459660SWolfgang 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 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 40*b9153fe3SAngelo Dureghello #if defined(CONFIG_DISPLAY_CPUINFO) 41*b9153fe3SAngelo Dureghello int print_cpuinfo(void) 42a4145534SPeter Tyser { 43a4145534SPeter Tyser char buf1[32], buf2[32]; 44a4145534SPeter Tyser 45a4145534SPeter Tyser printf("CPU: Freescale Coldfire MCF5208\n" 46a4145534SPeter Tyser " CPU CLK %s MHz BUS CLK %s MHz\n", 47a4145534SPeter Tyser strmhz(buf1, gd->cpu_clk), 48a4145534SPeter Tyser strmhz(buf2, gd->bus_clk)); 49a4145534SPeter Tyser return 0; 50a4145534SPeter Tyser }; 51*b9153fe3SAngelo Dureghello #endif /* CONFIG_DISPLAY_CPUINFO */ 52a4145534SPeter Tyser 53a4145534SPeter Tyser #if defined(CONFIG_WATCHDOG) 54a4145534SPeter Tyser /* Called by macro WATCHDOG_RESET */ 55a4145534SPeter Tyser void watchdog_reset(void) 56a4145534SPeter Tyser { 5732dbaafaSAlison Wang wdog_t *wdt = (wdog_t *)(MMAP_WDOG); 5832dbaafaSAlison Wang 5932dbaafaSAlison Wang out_be16(&wdt->sr, 0x5555); 6032dbaafaSAlison Wang out_be16(&wdt->sr, 0xaaaa); 61a4145534SPeter Tyser } 62a4145534SPeter Tyser 63a4145534SPeter Tyser int watchdog_disable(void) 64a4145534SPeter Tyser { 6532dbaafaSAlison Wang wdog_t *wdt = (wdog_t *)(MMAP_WDOG); 66a4145534SPeter Tyser 6732dbaafaSAlison Wang /* reset watchdog counter */ 6832dbaafaSAlison Wang out_be16(&wdt->sr, 0x5555); 6932dbaafaSAlison Wang out_be16(&wdt->sr, 0xaaaa); 7032dbaafaSAlison Wang /* disable watchdog timer */ 7132dbaafaSAlison Wang out_be16(&wdt->cr, 0); 72a4145534SPeter Tyser 73a4145534SPeter Tyser puts("WATCHDOG:disabled\n"); 74a4145534SPeter Tyser return (0); 75a4145534SPeter Tyser } 76a4145534SPeter Tyser 77a4145534SPeter Tyser int watchdog_init(void) 78a4145534SPeter Tyser { 7932dbaafaSAlison Wang wdog_t *wdt = (wdog_t *)(MMAP_WDOG); 80a4145534SPeter Tyser 8132dbaafaSAlison Wang /* disable watchdog */ 8232dbaafaSAlison Wang out_be16(&wdt->cr, 0); 83a4145534SPeter Tyser 84a4145534SPeter Tyser /* set timeout and enable watchdog */ 8532dbaafaSAlison Wang out_be16(&wdt->mr, 8632dbaafaSAlison Wang (CONFIG_WATCHDOG_TIMEOUT * CONFIG_SYS_HZ) / (32768 * 1000) - 1); 8732dbaafaSAlison Wang 8832dbaafaSAlison Wang /* reset watchdog counter */ 8932dbaafaSAlison Wang out_be16(&wdt->sr, 0x5555); 9032dbaafaSAlison Wang out_be16(&wdt->sr, 0xaaaa); 91a4145534SPeter Tyser 92a4145534SPeter Tyser puts("WATCHDOG:enabled\n"); 93a4145534SPeter Tyser return (0); 94a4145534SPeter Tyser } 95a4145534SPeter Tyser #endif /* #ifdef CONFIG_WATCHDOG */ 96a4145534SPeter Tyser #endif /* #ifdef CONFIG_M5208 */ 97a4145534SPeter Tyser 98a4145534SPeter Tyser #ifdef CONFIG_M5271 99*b9153fe3SAngelo Dureghello #if defined(CONFIG_DISPLAY_CPUINFO) 100a4145534SPeter Tyser /* 101a4145534SPeter Tyser * Both MCF5270 and MCF5271 are members of the MPC5271 family. Try to 102a4145534SPeter Tyser * determine which one we are running on, based on the Chip Identification 103a4145534SPeter Tyser * Register (CIR). 104a4145534SPeter Tyser */ 105*b9153fe3SAngelo Dureghello int print_cpuinfo(void) 106a4145534SPeter Tyser { 107a4145534SPeter Tyser char buf[32]; 108a4145534SPeter Tyser unsigned short cir; /* Chip Identification Register */ 109a4145534SPeter Tyser unsigned short pin; /* Part identification number */ 110a4145534SPeter Tyser unsigned char prn; /* Part revision number */ 111a4145534SPeter Tyser char *cpu_model; 112a4145534SPeter Tyser 113a4145534SPeter Tyser cir = mbar_readShort(MCF_CCM_CIR); 114a4145534SPeter Tyser pin = cir >> MCF_CCM_CIR_PIN_LEN; 115a4145534SPeter Tyser prn = cir & MCF_CCM_CIR_PRN_MASK; 116a4145534SPeter Tyser 117a4145534SPeter Tyser switch (pin) { 118a4145534SPeter Tyser case MCF_CCM_CIR_PIN_MCF5270: 119a4145534SPeter Tyser cpu_model = "5270"; 120a4145534SPeter Tyser break; 121a4145534SPeter Tyser case MCF_CCM_CIR_PIN_MCF5271: 122a4145534SPeter Tyser cpu_model = "5271"; 123a4145534SPeter Tyser break; 124a4145534SPeter Tyser default: 125a4145534SPeter Tyser cpu_model = NULL; 126a4145534SPeter Tyser break; 127a4145534SPeter Tyser } 128a4145534SPeter Tyser 129a4145534SPeter Tyser if (cpu_model) 130a4145534SPeter Tyser printf("CPU: Freescale ColdFire MCF%s rev. %hu, at %s MHz\n", 131a4145534SPeter Tyser cpu_model, prn, strmhz(buf, CONFIG_SYS_CLK)); 132a4145534SPeter Tyser else 133a4145534SPeter Tyser printf("CPU: Unknown - Freescale ColdFire MCF5271 family" 134a4145534SPeter Tyser " (PIN: 0x%x) rev. %hu, at %s MHz\n", 135a4145534SPeter Tyser pin, prn, strmhz(buf, CONFIG_SYS_CLK)); 136a4145534SPeter Tyser 137a4145534SPeter Tyser return 0; 138a4145534SPeter Tyser } 139*b9153fe3SAngelo Dureghello #endif /* CONFIG_DISPLAY_CPUINFO */ 140a4145534SPeter Tyser 141882b7d72SMike Frysinger int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 142a4145534SPeter Tyser { 143a4145534SPeter Tyser /* Call the board specific reset actions first. */ 144a4145534SPeter Tyser if(board_reset) { 145a4145534SPeter Tyser board_reset(); 146a4145534SPeter Tyser } 147a4145534SPeter Tyser 148a4145534SPeter Tyser mbar_writeByte(MCF_RCM_RCR, 149a4145534SPeter Tyser MCF_RCM_RCR_SOFTRST | MCF_RCM_RCR_FRCRSTOUT); 150a4145534SPeter Tyser return 0; 151a4145534SPeter Tyser }; 152a4145534SPeter Tyser 153a4145534SPeter Tyser #if defined(CONFIG_WATCHDOG) 154a4145534SPeter Tyser void watchdog_reset(void) 155a4145534SPeter Tyser { 156a4145534SPeter Tyser mbar_writeShort(MCF_WTM_WSR, 0x5555); 157a4145534SPeter Tyser mbar_writeShort(MCF_WTM_WSR, 0xAAAA); 158a4145534SPeter Tyser } 159a4145534SPeter Tyser 160a4145534SPeter Tyser int watchdog_disable(void) 161a4145534SPeter Tyser { 162a4145534SPeter Tyser mbar_writeShort(MCF_WTM_WCR, 0); 163a4145534SPeter Tyser return (0); 164a4145534SPeter Tyser } 165a4145534SPeter Tyser 166a4145534SPeter Tyser int watchdog_init(void) 167a4145534SPeter Tyser { 168a4145534SPeter Tyser mbar_writeShort(MCF_WTM_WCR, MCF_WTM_WCR_EN); 169a4145534SPeter Tyser return (0); 170a4145534SPeter Tyser } 171a4145534SPeter Tyser #endif /* #ifdef CONFIG_WATCHDOG */ 172a4145534SPeter Tyser 173a4145534SPeter Tyser #endif 174a4145534SPeter Tyser 175a4145534SPeter Tyser #ifdef CONFIG_M5272 176882b7d72SMike Frysinger int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 177a4145534SPeter Tyser { 17832dbaafaSAlison Wang wdog_t *wdp = (wdog_t *) (MMAP_WDOG); 179a4145534SPeter Tyser 18032dbaafaSAlison Wang out_be16(&wdp->wdog_wrrr, 0); 181a4145534SPeter Tyser udelay(1000); 182a4145534SPeter Tyser 183a4145534SPeter Tyser /* enable watchdog, set timeout to 0 and wait */ 18432dbaafaSAlison Wang out_be16(&wdp->wdog_wrrr, 1); 185a4145534SPeter Tyser while (1) ; 186a4145534SPeter Tyser 187a4145534SPeter Tyser /* we don't return! */ 188a4145534SPeter Tyser return 0; 189a4145534SPeter Tyser }; 190a4145534SPeter Tyser 191*b9153fe3SAngelo Dureghello #if defined(CONFIG_DISPLAY_CPUINFO) 192*b9153fe3SAngelo Dureghello int print_cpuinfo(void) 193a4145534SPeter Tyser { 19432dbaafaSAlison Wang sysctrl_t *sysctrl = (sysctrl_t *) (MMAP_CFG); 195a4145534SPeter Tyser uchar msk; 196a4145534SPeter Tyser char *suf; 197a4145534SPeter Tyser 198a4145534SPeter Tyser puts("CPU: "); 19932dbaafaSAlison Wang msk = (in_be32(&sysctrl->sc_dir) > 28) & 0xf; 200a4145534SPeter Tyser switch (msk) { 201a4145534SPeter Tyser case 0x2: 202a4145534SPeter Tyser suf = "1K75N"; 203a4145534SPeter Tyser break; 204a4145534SPeter Tyser case 0x4: 205a4145534SPeter Tyser suf = "3K75N"; 206a4145534SPeter Tyser break; 207a4145534SPeter Tyser default: 208a4145534SPeter Tyser suf = NULL; 209a4145534SPeter Tyser printf("Freescale MCF5272 (Mask:%01x)\n", msk); 210a4145534SPeter Tyser break; 211a4145534SPeter Tyser } 212a4145534SPeter Tyser 213a4145534SPeter Tyser if (suf) 214a4145534SPeter Tyser printf("Freescale MCF5272 %s\n", suf); 215a4145534SPeter Tyser return 0; 216a4145534SPeter Tyser }; 217*b9153fe3SAngelo Dureghello #endif /* CONFIG_DISPLAY_CPUINFO */ 218a4145534SPeter Tyser 219a4145534SPeter Tyser #if defined(CONFIG_WATCHDOG) 220a4145534SPeter Tyser /* Called by macro WATCHDOG_RESET */ 221a4145534SPeter Tyser void watchdog_reset(void) 222a4145534SPeter Tyser { 22332dbaafaSAlison Wang wdog_t *wdt = (wdog_t *)(MMAP_WDOG); 22432dbaafaSAlison Wang 22532dbaafaSAlison Wang out_be16(&wdt->wdog_wcr, 0); 226a4145534SPeter Tyser } 227a4145534SPeter Tyser 228a4145534SPeter Tyser int watchdog_disable(void) 229a4145534SPeter Tyser { 23032dbaafaSAlison Wang wdog_t *wdt = (wdog_t *)(MMAP_WDOG); 231a4145534SPeter Tyser 23232dbaafaSAlison Wang /* reset watchdog counter */ 23332dbaafaSAlison Wang out_be16(&wdt->wdog_wcr, 0); 23432dbaafaSAlison Wang /* disable watchdog interrupt */ 23532dbaafaSAlison Wang out_be16(&wdt->wdog_wirr, 0); 23632dbaafaSAlison Wang /* disable watchdog timer */ 23732dbaafaSAlison Wang out_be16(&wdt->wdog_wrrr, 0); 238a4145534SPeter Tyser 239a4145534SPeter Tyser puts("WATCHDOG:disabled\n"); 240a4145534SPeter Tyser return (0); 241a4145534SPeter Tyser } 242a4145534SPeter Tyser 243a4145534SPeter Tyser int watchdog_init(void) 244a4145534SPeter Tyser { 24532dbaafaSAlison Wang wdog_t *wdt = (wdog_t *)(MMAP_WDOG); 246a4145534SPeter Tyser 24732dbaafaSAlison Wang /* disable watchdog interrupt */ 24832dbaafaSAlison Wang out_be16(&wdt->wdog_wirr, 0); 249a4145534SPeter Tyser 250a4145534SPeter Tyser /* set timeout and enable watchdog */ 25132dbaafaSAlison Wang out_be16(&wdt->wdog_wrrr, 25232dbaafaSAlison Wang (CONFIG_WATCHDOG_TIMEOUT * CONFIG_SYS_HZ) / (32768 * 1000) - 1); 25332dbaafaSAlison Wang 25432dbaafaSAlison Wang /* reset watchdog counter */ 25532dbaafaSAlison Wang out_be16(&wdt->wdog_wcr, 0); 256a4145534SPeter Tyser 257a4145534SPeter Tyser puts("WATCHDOG:enabled\n"); 258a4145534SPeter Tyser return (0); 259a4145534SPeter Tyser } 260a4145534SPeter Tyser #endif /* #ifdef CONFIG_WATCHDOG */ 261a4145534SPeter Tyser 262a4145534SPeter Tyser #endif /* #ifdef CONFIG_M5272 */ 263a4145534SPeter Tyser 264a4145534SPeter Tyser #ifdef CONFIG_M5275 265882b7d72SMike Frysinger int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 266a4145534SPeter Tyser { 26732dbaafaSAlison Wang rcm_t *rcm = (rcm_t *)(MMAP_RCM); 268a4145534SPeter Tyser 269a4145534SPeter Tyser udelay(1000); 270a4145534SPeter Tyser 27132dbaafaSAlison Wang out_8(&rcm->rcr, RCM_RCR_SOFTRST); 272a4145534SPeter Tyser 273a4145534SPeter Tyser /* we don't return! */ 274a4145534SPeter Tyser return 0; 275a4145534SPeter Tyser }; 276a4145534SPeter Tyser 277*b9153fe3SAngelo Dureghello #if defined(CONFIG_DISPLAY_CPUINFO) 278*b9153fe3SAngelo Dureghello int print_cpuinfo(void) 279a4145534SPeter Tyser { 280a4145534SPeter Tyser char buf[32]; 281a4145534SPeter Tyser 282a4145534SPeter Tyser printf("CPU: Freescale Coldfire MCF5275 at %s MHz\n", 283a4145534SPeter Tyser strmhz(buf, CONFIG_SYS_CLK)); 284a4145534SPeter Tyser return 0; 285a4145534SPeter Tyser }; 286*b9153fe3SAngelo Dureghello #endif /* CONFIG_DISPLAY_CPUINFO */ 287a4145534SPeter Tyser 288a4145534SPeter Tyser #if defined(CONFIG_WATCHDOG) 289a4145534SPeter Tyser /* Called by macro WATCHDOG_RESET */ 290a4145534SPeter Tyser void watchdog_reset(void) 291a4145534SPeter Tyser { 29232dbaafaSAlison Wang wdog_t *wdt = (wdog_t *)(MMAP_WDOG); 29332dbaafaSAlison Wang 29432dbaafaSAlison Wang out_be16(&wdt->wsr, 0x5555); 29532dbaafaSAlison Wang out_be16(&wdt->wsr, 0xaaaa); 296a4145534SPeter Tyser } 297a4145534SPeter Tyser 298a4145534SPeter Tyser int watchdog_disable(void) 299a4145534SPeter Tyser { 30032dbaafaSAlison Wang wdog_t *wdt = (wdog_t *)(MMAP_WDOG); 301a4145534SPeter Tyser 30232dbaafaSAlison Wang /* reset watchdog counter */ 30332dbaafaSAlison Wang out_be16(&wdt->wsr, 0x5555); 30432dbaafaSAlison Wang out_be16(&wdt->wsr, 0xaaaa); 30532dbaafaSAlison Wang 30632dbaafaSAlison Wang /* disable watchdog timer */ 30732dbaafaSAlison Wang out_be16(&wdt->wcr, 0); 308a4145534SPeter Tyser 309a4145534SPeter Tyser puts("WATCHDOG:disabled\n"); 310a4145534SPeter Tyser return (0); 311a4145534SPeter Tyser } 312a4145534SPeter Tyser 313a4145534SPeter Tyser int watchdog_init(void) 314a4145534SPeter Tyser { 31532dbaafaSAlison Wang wdog_t *wdt = (wdog_t *)(MMAP_WDOG); 316a4145534SPeter Tyser 31732dbaafaSAlison Wang /* disable watchdog */ 31832dbaafaSAlison Wang out_be16(&wdt->wcr, 0); 319a4145534SPeter Tyser 320a4145534SPeter Tyser /* set timeout and enable watchdog */ 32132dbaafaSAlison Wang out_be16(&wdt->wmr, 32232dbaafaSAlison Wang (CONFIG_WATCHDOG_TIMEOUT * CONFIG_SYS_HZ) / (32768 * 1000) - 1); 32332dbaafaSAlison Wang 32432dbaafaSAlison Wang /* reset watchdog counter */ 32532dbaafaSAlison Wang out_be16(&wdt->wsr, 0x5555); 32632dbaafaSAlison Wang out_be16(&wdt->wsr, 0xaaaa); 327a4145534SPeter Tyser 328a4145534SPeter Tyser puts("WATCHDOG:enabled\n"); 329a4145534SPeter Tyser return (0); 330a4145534SPeter Tyser } 331a4145534SPeter Tyser #endif /* #ifdef CONFIG_WATCHDOG */ 332a4145534SPeter Tyser 333a4145534SPeter Tyser #endif /* #ifdef CONFIG_M5275 */ 334a4145534SPeter Tyser 335a4145534SPeter Tyser #ifdef CONFIG_M5282 336*b9153fe3SAngelo Dureghello #if defined(CONFIG_DISPLAY_CPUINFO) 337*b9153fe3SAngelo Dureghello int print_cpuinfo(void) 338a4145534SPeter Tyser { 339a4145534SPeter Tyser unsigned char resetsource = MCFRESET_RSR; 340a4145534SPeter Tyser 341a4145534SPeter Tyser printf("CPU: Freescale Coldfire MCF5282 (PIN: %2.2x REV: %2.2x)\n", 342a4145534SPeter Tyser MCFCCM_CIR >> 8, MCFCCM_CIR & MCFCCM_CIR_PRN_MASK); 343a4145534SPeter Tyser printf("Reset:%s%s%s%s%s%s%s\n", 344a4145534SPeter Tyser (resetsource & MCFRESET_RSR_LOL) ? " Loss of Lock" : "", 345a4145534SPeter Tyser (resetsource & MCFRESET_RSR_LOC) ? " Loss of Clock" : "", 346a4145534SPeter Tyser (resetsource & MCFRESET_RSR_EXT) ? " External" : "", 347a4145534SPeter Tyser (resetsource & MCFRESET_RSR_POR) ? " Power On" : "", 348a4145534SPeter Tyser (resetsource & MCFRESET_RSR_WDR) ? " Watchdog" : "", 349a4145534SPeter Tyser (resetsource & MCFRESET_RSR_SOFT) ? " Software" : "", 350a4145534SPeter Tyser (resetsource & MCFRESET_RSR_LVD) ? " Low Voltage" : ""); 351a4145534SPeter Tyser return 0; 352a4145534SPeter Tyser } 353*b9153fe3SAngelo Dureghello #endif /* CONFIG_DISPLAY_CPUINFO */ 354a4145534SPeter Tyser 355882b7d72SMike Frysinger int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 356a4145534SPeter Tyser { 357a4145534SPeter Tyser MCFRESET_RCR = MCFRESET_RCR_SOFTRST; 358a4145534SPeter Tyser return 0; 359a4145534SPeter Tyser }; 360a4145534SPeter Tyser #endif 361a4145534SPeter Tyser 362a4145534SPeter Tyser #ifdef CONFIG_M5249 363*b9153fe3SAngelo Dureghello #if defined(CONFIG_DISPLAY_CPUINFO) 364*b9153fe3SAngelo Dureghello int print_cpuinfo(void) 365a4145534SPeter Tyser { 366a4145534SPeter Tyser char buf[32]; 367a4145534SPeter Tyser 368a4145534SPeter Tyser printf("CPU: Freescale Coldfire MCF5249 at %s MHz\n", 369a4145534SPeter Tyser strmhz(buf, CONFIG_SYS_CLK)); 370a4145534SPeter Tyser return 0; 371a4145534SPeter Tyser } 372*b9153fe3SAngelo Dureghello #endif /* CONFIG_DISPLAY_CPUINFO */ 373a4145534SPeter Tyser 374882b7d72SMike Frysinger int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 375a4145534SPeter Tyser { 376a4145534SPeter Tyser /* enable watchdog, set timeout to 0 and wait */ 377a4145534SPeter Tyser mbar_writeByte(MCFSIM_SYPCR, 0xc0); 378a4145534SPeter Tyser while (1) ; 379a4145534SPeter Tyser 380a4145534SPeter Tyser /* we don't return! */ 381a4145534SPeter Tyser return 0; 382a4145534SPeter Tyser }; 383a4145534SPeter Tyser #endif 384a4145534SPeter Tyser 385a4145534SPeter Tyser #ifdef CONFIG_M5253 386*b9153fe3SAngelo Dureghello #if defined(CONFIG_DISPLAY_CPUINFO) 387*b9153fe3SAngelo Dureghello int print_cpuinfo(void) 388a4145534SPeter Tyser { 389a4145534SPeter Tyser char buf[32]; 390a4145534SPeter Tyser 391a4145534SPeter Tyser unsigned char resetsource = mbar_readLong(SIM_RSR); 392a4145534SPeter Tyser printf("CPU: Freescale Coldfire MCF5253 at %s MHz\n", 393a4145534SPeter Tyser strmhz(buf, CONFIG_SYS_CLK)); 394a4145534SPeter Tyser 395a4145534SPeter Tyser if ((resetsource & SIM_RSR_HRST) || (resetsource & SIM_RSR_SWTR)) { 396a4145534SPeter Tyser printf("Reset:%s%s\n", 397a4145534SPeter Tyser (resetsource & SIM_RSR_HRST) ? " Hardware/ System Reset" 398a4145534SPeter Tyser : "", 399a4145534SPeter Tyser (resetsource & SIM_RSR_SWTR) ? " Software Watchdog" : 400a4145534SPeter Tyser ""); 401a4145534SPeter Tyser } 402a4145534SPeter Tyser return 0; 403a4145534SPeter Tyser } 404*b9153fe3SAngelo Dureghello #endif /* CONFIG_DISPLAY_CPUINFO */ 405a4145534SPeter Tyser 406882b7d72SMike Frysinger int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 407a4145534SPeter Tyser { 408a4145534SPeter Tyser /* enable watchdog, set timeout to 0 and wait */ 409a4145534SPeter Tyser mbar_writeByte(SIM_SYPCR, 0xc0); 410a4145534SPeter Tyser while (1) ; 411a4145534SPeter Tyser 412a4145534SPeter Tyser /* we don't return! */ 413a4145534SPeter Tyser return 0; 414a4145534SPeter Tyser }; 415a4145534SPeter Tyser #endif 416a4145534SPeter Tyser 417a4145534SPeter Tyser #if defined(CONFIG_MCFFEC) 418a4145534SPeter Tyser /* Default initializations for MCFFEC controllers. To override, 419a4145534SPeter Tyser * create a board-specific function called: 420a4145534SPeter Tyser * int board_eth_init(bd_t *bis) 421a4145534SPeter Tyser */ 422a4145534SPeter Tyser 423a4145534SPeter Tyser int cpu_eth_init(bd_t *bis) 424a4145534SPeter Tyser { 425a4145534SPeter Tyser return mcffec_initialize(bis); 426a4145534SPeter Tyser } 427a4145534SPeter Tyser #endif 428