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