1a4145534SPeter Tyser /* 2a4145534SPeter Tyser * 3a4145534SPeter Tyser * (C) Copyright 2000-2003 4a4145534SPeter Tyser * Wolfgang Denk, DENX Software Engineering, wd@denx.de. 5a4145534SPeter Tyser * 6*198cafbfSAlison 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*198cafbfSAlison 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*198cafbfSAlison Wang rcm_t *rcm = (rcm_t *) (MMAP_RCM); 41a4145534SPeter Tyser udelay(1000); 42*198cafbfSAlison Wang setbits_8(&rcm->rcr, RCM_RCR_SOFTRST); 43a4145534SPeter Tyser 44a4145534SPeter Tyser /* we don't return! */ 45a4145534SPeter Tyser return 0; 46a4145534SPeter Tyser }; 47a4145534SPeter Tyser 48a4145534SPeter Tyser int checkcpu(void) 49a4145534SPeter Tyser { 50*198cafbfSAlison Wang ccm_t *ccm = (ccm_t *) MMAP_CCM; 51a4145534SPeter Tyser u16 msk; 52a4145534SPeter Tyser u16 id = 0; 53a4145534SPeter Tyser u8 ver; 54a4145534SPeter Tyser 55a4145534SPeter Tyser puts("CPU: "); 56*198cafbfSAlison Wang msk = (in_be16(&ccm->cir) >> 6); 57*198cafbfSAlison Wang ver = (in_be16(&ccm->cir) & 0x003f); 58a4145534SPeter Tyser switch (msk) { 59a4145534SPeter Tyser case 0x48: 60a4145534SPeter Tyser id = 54455; 61a4145534SPeter Tyser break; 62a4145534SPeter Tyser case 0x49: 63a4145534SPeter Tyser id = 54454; 64a4145534SPeter Tyser break; 65a4145534SPeter Tyser case 0x4a: 66a4145534SPeter Tyser id = 54453; 67a4145534SPeter Tyser break; 68a4145534SPeter Tyser case 0x4b: 69a4145534SPeter Tyser id = 54452; 70a4145534SPeter Tyser break; 71a4145534SPeter Tyser case 0x4d: 72a4145534SPeter Tyser id = 54451; 73a4145534SPeter Tyser break; 74a4145534SPeter Tyser case 0x4f: 75a4145534SPeter Tyser id = 54450; 76a4145534SPeter Tyser break; 77a4145534SPeter Tyser } 78a4145534SPeter Tyser 79a4145534SPeter Tyser if (id) { 80a4145534SPeter Tyser char buf1[32], buf2[32], buf3[32]; 81a4145534SPeter Tyser 82a4145534SPeter Tyser printf("Freescale MCF%d (Mask:%01x Version:%x)\n", id, msk, 83a4145534SPeter Tyser ver); 84a4145534SPeter Tyser printf(" CPU CLK %s MHz BUS CLK %s MHz FLB CLK %s MHz\n", 85a4145534SPeter Tyser strmhz(buf1, gd->cpu_clk), 86a4145534SPeter Tyser strmhz(buf2, gd->bus_clk), 87a4145534SPeter Tyser strmhz(buf3, gd->flb_clk)); 88a4145534SPeter Tyser #ifdef CONFIG_PCI 89a4145534SPeter Tyser printf(" PCI CLK %s MHz INP CLK %s MHz VCO CLK %s MHz\n", 90a4145534SPeter Tyser strmhz(buf1, gd->pci_clk), 91a4145534SPeter Tyser strmhz(buf2, gd->inp_clk), 92a4145534SPeter Tyser strmhz(buf3, gd->vco_clk)); 93a4145534SPeter Tyser #else 94a4145534SPeter Tyser printf(" INP CLK %s MHz VCO CLK %s MHz\n", 95a4145534SPeter Tyser strmhz(buf1, gd->inp_clk), 96a4145534SPeter Tyser strmhz(buf2, gd->vco_clk)); 97a4145534SPeter Tyser #endif 98a4145534SPeter Tyser } 99a4145534SPeter Tyser 100a4145534SPeter Tyser return 0; 101a4145534SPeter Tyser } 102a4145534SPeter Tyser 103a4145534SPeter Tyser #if defined(CONFIG_MCFFEC) 104a4145534SPeter Tyser /* Default initializations for MCFFEC controllers. To override, 105a4145534SPeter Tyser * create a board-specific function called: 106a4145534SPeter Tyser * int board_eth_init(bd_t *bis) 107a4145534SPeter Tyser */ 108a4145534SPeter Tyser 109a4145534SPeter Tyser int cpu_eth_init(bd_t *bis) 110a4145534SPeter Tyser { 111a4145534SPeter Tyser return mcffec_initialize(bis); 112a4145534SPeter Tyser } 113a4145534SPeter Tyser #endif 114