1*a4145534SPeter Tyser /* 2*a4145534SPeter Tyser * 3*a4145534SPeter Tyser * (C) Copyright 2000-2003 4*a4145534SPeter Tyser * Wolfgang Denk, DENX Software Engineering, wd@denx.de. 5*a4145534SPeter Tyser * 6*a4145534SPeter Tyser * Copyright (C) 2004-2007 Freescale Semiconductor, Inc. 7*a4145534SPeter Tyser * TsiChung Liew (Tsi-Chung.Liew@freescale.com) 8*a4145534SPeter Tyser * 9*a4145534SPeter Tyser * See file CREDITS for list of people who contributed to this 10*a4145534SPeter Tyser * project. 11*a4145534SPeter Tyser * 12*a4145534SPeter Tyser * This program is free software; you can redistribute it and/or 13*a4145534SPeter Tyser * modify it under the terms of the GNU General Public License as 14*a4145534SPeter Tyser * published by the Free Software Foundation; either version 2 of 15*a4145534SPeter Tyser * the License, or (at your option) any later version. 16*a4145534SPeter Tyser * 17*a4145534SPeter Tyser * This program is distributed in the hope that it will be useful, 18*a4145534SPeter Tyser * but WITHOUT ANY WARRANTY; without even the implied warranty of 19*a4145534SPeter Tyser * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20*a4145534SPeter Tyser * GNU General Public License for more details. 21*a4145534SPeter Tyser * 22*a4145534SPeter Tyser * You should have received a copy of the GNU General Public License 23*a4145534SPeter Tyser * along with this program; if not, write to the Free Software 24*a4145534SPeter Tyser * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 25*a4145534SPeter Tyser * MA 02111-1307 USA 26*a4145534SPeter Tyser */ 27*a4145534SPeter Tyser 28*a4145534SPeter Tyser #include <common.h> 29*a4145534SPeter Tyser #include <watchdog.h> 30*a4145534SPeter Tyser #include <command.h> 31*a4145534SPeter Tyser #include <netdev.h> 32*a4145534SPeter Tyser 33*a4145534SPeter Tyser #include <asm/immap.h> 34*a4145534SPeter Tyser 35*a4145534SPeter Tyser DECLARE_GLOBAL_DATA_PTR; 36*a4145534SPeter Tyser 37*a4145534SPeter Tyser int do_reset(cmd_tbl_t * cmdtp, bd_t * bd, int flag, int argc, char *argv[]) 38*a4145534SPeter Tyser { 39*a4145534SPeter Tyser volatile gptmr_t *gptmr = (gptmr_t *) (MMAP_GPTMR); 40*a4145534SPeter Tyser 41*a4145534SPeter Tyser gptmr->pre = 10; 42*a4145534SPeter Tyser gptmr->cnt = 1; 43*a4145534SPeter Tyser 44*a4145534SPeter Tyser /* enable watchdog, set timeout to 0 and wait */ 45*a4145534SPeter Tyser gptmr->mode = GPT_TMS_SGPIO; 46*a4145534SPeter Tyser gptmr->ctrl = GPT_CTRL_WDEN | GPT_CTRL_CE; 47*a4145534SPeter Tyser 48*a4145534SPeter Tyser /* we don't return! */ 49*a4145534SPeter Tyser return 1; 50*a4145534SPeter Tyser }; 51*a4145534SPeter Tyser 52*a4145534SPeter Tyser int checkcpu(void) 53*a4145534SPeter Tyser { 54*a4145534SPeter Tyser volatile siu_t *siu = (siu_t *) MMAP_SIU; 55*a4145534SPeter Tyser u16 id = 0; 56*a4145534SPeter Tyser 57*a4145534SPeter Tyser puts("CPU: "); 58*a4145534SPeter Tyser 59*a4145534SPeter Tyser switch ((siu->jtagid & 0x000FF000) >> 12) { 60*a4145534SPeter Tyser case 0x0C: 61*a4145534SPeter Tyser id = 5485; 62*a4145534SPeter Tyser break; 63*a4145534SPeter Tyser case 0x0D: 64*a4145534SPeter Tyser id = 5484; 65*a4145534SPeter Tyser break; 66*a4145534SPeter Tyser case 0x0E: 67*a4145534SPeter Tyser id = 5483; 68*a4145534SPeter Tyser break; 69*a4145534SPeter Tyser case 0x0F: 70*a4145534SPeter Tyser id = 5482; 71*a4145534SPeter Tyser break; 72*a4145534SPeter Tyser case 0x10: 73*a4145534SPeter Tyser id = 5481; 74*a4145534SPeter Tyser break; 75*a4145534SPeter Tyser case 0x11: 76*a4145534SPeter Tyser id = 5480; 77*a4145534SPeter Tyser break; 78*a4145534SPeter Tyser case 0x12: 79*a4145534SPeter Tyser id = 5475; 80*a4145534SPeter Tyser break; 81*a4145534SPeter Tyser case 0x13: 82*a4145534SPeter Tyser id = 5474; 83*a4145534SPeter Tyser break; 84*a4145534SPeter Tyser case 0x14: 85*a4145534SPeter Tyser id = 5473; 86*a4145534SPeter Tyser break; 87*a4145534SPeter Tyser case 0x15: 88*a4145534SPeter Tyser id = 5472; 89*a4145534SPeter Tyser break; 90*a4145534SPeter Tyser case 0x16: 91*a4145534SPeter Tyser id = 5471; 92*a4145534SPeter Tyser break; 93*a4145534SPeter Tyser case 0x17: 94*a4145534SPeter Tyser id = 5470; 95*a4145534SPeter Tyser break; 96*a4145534SPeter Tyser } 97*a4145534SPeter Tyser 98*a4145534SPeter Tyser if (id) { 99*a4145534SPeter Tyser char buf1[32], buf2[32]; 100*a4145534SPeter Tyser 101*a4145534SPeter Tyser printf("Freescale MCF%d\n", id); 102*a4145534SPeter Tyser printf(" CPU CLK %s MHz BUS CLK %s MHz\n", 103*a4145534SPeter Tyser strmhz(buf1, gd->cpu_clk), 104*a4145534SPeter Tyser strmhz(buf2, gd->bus_clk)); 105*a4145534SPeter Tyser } 106*a4145534SPeter Tyser 107*a4145534SPeter Tyser return 0; 108*a4145534SPeter Tyser }; 109*a4145534SPeter Tyser 110*a4145534SPeter Tyser #if defined(CONFIG_HW_WATCHDOG) 111*a4145534SPeter Tyser /* Called by macro WATCHDOG_RESET */ 112*a4145534SPeter Tyser void hw_watchdog_reset(void) 113*a4145534SPeter Tyser { 114*a4145534SPeter Tyser volatile gptmr_t *gptmr = (gptmr_t *) (MMAP_GPTMR); 115*a4145534SPeter Tyser 116*a4145534SPeter Tyser gptmr->ocpw = 0xa5; 117*a4145534SPeter Tyser } 118*a4145534SPeter Tyser 119*a4145534SPeter Tyser int watchdog_disable(void) 120*a4145534SPeter Tyser { 121*a4145534SPeter Tyser volatile gptmr_t *gptmr = (gptmr_t *) (MMAP_GPTMR); 122*a4145534SPeter Tyser 123*a4145534SPeter Tyser /* UserManual, once the wdog is disabled, wdog cannot be re-enabled */ 124*a4145534SPeter Tyser gptmr->mode = 0; 125*a4145534SPeter Tyser gptmr->ctrl = 0; 126*a4145534SPeter Tyser 127*a4145534SPeter Tyser puts("WATCHDOG:disabled\n"); 128*a4145534SPeter Tyser 129*a4145534SPeter Tyser return (0); 130*a4145534SPeter Tyser } 131*a4145534SPeter Tyser 132*a4145534SPeter Tyser int watchdog_init(void) 133*a4145534SPeter Tyser { 134*a4145534SPeter Tyser 135*a4145534SPeter Tyser volatile gptmr_t *gptmr = (gptmr_t *) (MMAP_GPTMR); 136*a4145534SPeter Tyser 137*a4145534SPeter Tyser gptmr->pre = CONFIG_WATCHDOG_TIMEOUT; 138*a4145534SPeter Tyser gptmr->cnt = CONFIG_SYS_TIMER_PRESCALER * 1000; 139*a4145534SPeter Tyser 140*a4145534SPeter Tyser gptmr->mode = GPT_TMS_SGPIO; 141*a4145534SPeter Tyser gptmr->ctrl = GPT_CTRL_CE | GPT_CTRL_WDEN; 142*a4145534SPeter Tyser puts("WATCHDOG:enabled\n"); 143*a4145534SPeter Tyser 144*a4145534SPeter Tyser return (0); 145*a4145534SPeter Tyser } 146*a4145534SPeter Tyser #endif /* CONFIG_HW_WATCHDOG */ 147*a4145534SPeter Tyser 148*a4145534SPeter Tyser #if defined(CONFIG_FSLDMAFEC) || defined(CONFIG_MCFFEC) 149*a4145534SPeter Tyser /* Default initializations for MCFFEC controllers. To override, 150*a4145534SPeter Tyser * create a board-specific function called: 151*a4145534SPeter Tyser * int board_eth_init(bd_t *bis) 152*a4145534SPeter Tyser */ 153*a4145534SPeter Tyser 154*a4145534SPeter Tyser int cpu_eth_init(bd_t *bis) 155*a4145534SPeter Tyser { 156*a4145534SPeter Tyser #if defined(CONFIG_FSLDMAFEC) 157*a4145534SPeter Tyser mcdmafec_initialize(bis); 158*a4145534SPeter Tyser #endif 159*a4145534SPeter Tyser #if defined(CONFIG_MCFFEC) 160*a4145534SPeter Tyser mcffec_initialize(bis); 161*a4145534SPeter Tyser #endif 162*a4145534SPeter Tyser return 0; 163*a4145534SPeter Tyser } 164*a4145534SPeter Tyser #endif 165