1576afd4fSJean-Christophe PLAGNIOL-VILLARD /* 2576afd4fSJean-Christophe PLAGNIOL-VILLARD * (C) Copyright 2002 3576afd4fSJean-Christophe PLAGNIOL-VILLARD * Sysgo Real-Time Solutions, GmbH <www.elinos.com> 4576afd4fSJean-Christophe PLAGNIOL-VILLARD * Marius Groeger <mgroeger@sysgo.de> 5576afd4fSJean-Christophe PLAGNIOL-VILLARD * 6576afd4fSJean-Christophe PLAGNIOL-VILLARD * (C) Copyright 2002 7576afd4fSJean-Christophe PLAGNIOL-VILLARD * David Mueller, ELSOFT AG, <d.mueller@elsoft.ch> 8576afd4fSJean-Christophe PLAGNIOL-VILLARD * 9576afd4fSJean-Christophe PLAGNIOL-VILLARD * (C) Copyright 2003 10576afd4fSJean-Christophe PLAGNIOL-VILLARD * Texas Instruments, <www.ti.com> 11576afd4fSJean-Christophe PLAGNIOL-VILLARD * Kshitij Gupta <Kshitij@ti.com> 12576afd4fSJean-Christophe PLAGNIOL-VILLARD * 13576afd4fSJean-Christophe PLAGNIOL-VILLARD * (C) Copyright 2004 14576afd4fSJean-Christophe PLAGNIOL-VILLARD * ARM Ltd. 15576afd4fSJean-Christophe PLAGNIOL-VILLARD * Philippe Robin, <philippe.robin@arm.com> 16576afd4fSJean-Christophe PLAGNIOL-VILLARD * 17576afd4fSJean-Christophe PLAGNIOL-VILLARD * See file CREDITS for list of people who contributed to this 18576afd4fSJean-Christophe PLAGNIOL-VILLARD * project. 19576afd4fSJean-Christophe PLAGNIOL-VILLARD * 20576afd4fSJean-Christophe PLAGNIOL-VILLARD * This program is free software; you can redistribute it and/or 21576afd4fSJean-Christophe PLAGNIOL-VILLARD * modify it under the terms of the GNU General Public License as 22576afd4fSJean-Christophe PLAGNIOL-VILLARD * published by the Free Software Foundation; either version 2 of 23576afd4fSJean-Christophe PLAGNIOL-VILLARD * the License, or (at your option) any later version. 24576afd4fSJean-Christophe PLAGNIOL-VILLARD * 25576afd4fSJean-Christophe PLAGNIOL-VILLARD * This program is distributed in the hope that it will be useful, 26576afd4fSJean-Christophe PLAGNIOL-VILLARD * but WITHOUT ANY WARRANTY; without even the implied warranty of 27576afd4fSJean-Christophe PLAGNIOL-VILLARD * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 28576afd4fSJean-Christophe PLAGNIOL-VILLARD * GNU General Public License for more details. 29576afd4fSJean-Christophe PLAGNIOL-VILLARD * 30576afd4fSJean-Christophe PLAGNIOL-VILLARD * You should have received a copy of the GNU General Public License 31576afd4fSJean-Christophe PLAGNIOL-VILLARD * along with this program; if not, write to the Free Software 32576afd4fSJean-Christophe PLAGNIOL-VILLARD * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 33576afd4fSJean-Christophe PLAGNIOL-VILLARD * MA 02111-1307 USA 34576afd4fSJean-Christophe PLAGNIOL-VILLARD */ 35576afd4fSJean-Christophe PLAGNIOL-VILLARD 36576afd4fSJean-Christophe PLAGNIOL-VILLARD #include <common.h> 37576afd4fSJean-Christophe PLAGNIOL-VILLARD #include <netdev.h> 38576afd4fSJean-Christophe PLAGNIOL-VILLARD 39576afd4fSJean-Christophe PLAGNIOL-VILLARD DECLARE_GLOBAL_DATA_PTR; 40576afd4fSJean-Christophe PLAGNIOL-VILLARD 41576afd4fSJean-Christophe PLAGNIOL-VILLARD void peripheral_power_enable (void); 42576afd4fSJean-Christophe PLAGNIOL-VILLARD 43576afd4fSJean-Christophe PLAGNIOL-VILLARD #if defined(CONFIG_SHOW_BOOT_PROGRESS) 44576afd4fSJean-Christophe PLAGNIOL-VILLARD void show_boot_progress(int progress) 45576afd4fSJean-Christophe PLAGNIOL-VILLARD { 46576afd4fSJean-Christophe PLAGNIOL-VILLARD printf("Boot reached stage %d\n", progress); 47576afd4fSJean-Christophe PLAGNIOL-VILLARD } 48576afd4fSJean-Christophe PLAGNIOL-VILLARD #endif 49576afd4fSJean-Christophe PLAGNIOL-VILLARD 50576afd4fSJean-Christophe PLAGNIOL-VILLARD #define COMP_MODE_ENABLE ((unsigned int)0x0000EAEF) 51576afd4fSJean-Christophe PLAGNIOL-VILLARD 52576afd4fSJean-Christophe PLAGNIOL-VILLARD /* 53576afd4fSJean-Christophe PLAGNIOL-VILLARD * Miscellaneous platform dependent initialisations 54576afd4fSJean-Christophe PLAGNIOL-VILLARD */ 55576afd4fSJean-Christophe PLAGNIOL-VILLARD 56576afd4fSJean-Christophe PLAGNIOL-VILLARD int board_init (void) 57576afd4fSJean-Christophe PLAGNIOL-VILLARD { 58576afd4fSJean-Christophe PLAGNIOL-VILLARD /* arch number of Integrator Board */ 59576afd4fSJean-Christophe PLAGNIOL-VILLARD #ifdef CONFIG_ARCH_CINTEGRATOR 60576afd4fSJean-Christophe PLAGNIOL-VILLARD gd->bd->bi_arch_number = MACH_TYPE_CINTEGRATOR; 61576afd4fSJean-Christophe PLAGNIOL-VILLARD #else 62576afd4fSJean-Christophe PLAGNIOL-VILLARD gd->bd->bi_arch_number = MACH_TYPE_INTEGRATOR; 63576afd4fSJean-Christophe PLAGNIOL-VILLARD #endif 64576afd4fSJean-Christophe PLAGNIOL-VILLARD 65576afd4fSJean-Christophe PLAGNIOL-VILLARD /* adress of boot parameters */ 66576afd4fSJean-Christophe PLAGNIOL-VILLARD gd->bd->bi_boot_params = 0x00000100; 67576afd4fSJean-Christophe PLAGNIOL-VILLARD 68576afd4fSJean-Christophe PLAGNIOL-VILLARD gd->flags = 0; 69576afd4fSJean-Christophe PLAGNIOL-VILLARD 70576afd4fSJean-Christophe PLAGNIOL-VILLARD #ifdef CONFIG_CM_REMAP 71576afd4fSJean-Christophe PLAGNIOL-VILLARD extern void cm_remap(void); 72576afd4fSJean-Christophe PLAGNIOL-VILLARD cm_remap(); /* remaps writeable memory to 0x00000000 */ 73576afd4fSJean-Christophe PLAGNIOL-VILLARD #endif 74576afd4fSJean-Christophe PLAGNIOL-VILLARD 75576afd4fSJean-Christophe PLAGNIOL-VILLARD icache_enable (); 76576afd4fSJean-Christophe PLAGNIOL-VILLARD 77576afd4fSJean-Christophe PLAGNIOL-VILLARD return 0; 78576afd4fSJean-Christophe PLAGNIOL-VILLARD } 79576afd4fSJean-Christophe PLAGNIOL-VILLARD 80576afd4fSJean-Christophe PLAGNIOL-VILLARD int misc_init_r (void) 81576afd4fSJean-Christophe PLAGNIOL-VILLARD { 82576afd4fSJean-Christophe PLAGNIOL-VILLARD #ifdef CONFIG_PCI 83576afd4fSJean-Christophe PLAGNIOL-VILLARD pci_init(); 84576afd4fSJean-Christophe PLAGNIOL-VILLARD #endif 85576afd4fSJean-Christophe PLAGNIOL-VILLARD setenv("verify", "n"); 86576afd4fSJean-Christophe PLAGNIOL-VILLARD return (0); 87576afd4fSJean-Christophe PLAGNIOL-VILLARD } 88576afd4fSJean-Christophe PLAGNIOL-VILLARD 89*46b5ccbfSLinus Walleij /* 90*46b5ccbfSLinus Walleij * The Integrator remaps the Flash memory to 0x00000000 and executes U-Boot 91*46b5ccbfSLinus Walleij * from there, which means we cannot test the RAM underneath the ROM at this 92*46b5ccbfSLinus Walleij * point. It will be unmapped later on, when we are executing from the 93*46b5ccbfSLinus Walleij * relocated in RAM U-Boot. We simply assume that this RAM is usable if the 94*46b5ccbfSLinus Walleij * RAM on higher addresses works fine. 95*46b5ccbfSLinus Walleij */ 96*46b5ccbfSLinus Walleij #define REMAPPED_FLASH_SZ 0x40000 97*46b5ccbfSLinus Walleij 98576afd4fSJean-Christophe PLAGNIOL-VILLARD int dram_init (void) 99576afd4fSJean-Christophe PLAGNIOL-VILLARD { 10026c82638SLinus Walleij gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE; 101576afd4fSJean-Christophe PLAGNIOL-VILLARD #ifdef CONFIG_CM_SPD_DETECT 102576afd4fSJean-Christophe PLAGNIOL-VILLARD { 103576afd4fSJean-Christophe PLAGNIOL-VILLARD extern void dram_query(void); 104576afd4fSJean-Christophe PLAGNIOL-VILLARD unsigned long cm_reg_sdram; 105576afd4fSJean-Christophe PLAGNIOL-VILLARD unsigned long sdram_shift; 106576afd4fSJean-Christophe PLAGNIOL-VILLARD 107576afd4fSJean-Christophe PLAGNIOL-VILLARD dram_query(); /* Assembler accesses to CM registers */ 108576afd4fSJean-Christophe PLAGNIOL-VILLARD /* Queries the SPD values */ 109576afd4fSJean-Christophe PLAGNIOL-VILLARD 110576afd4fSJean-Christophe PLAGNIOL-VILLARD /* Obtain the SDRAM size from the CM SDRAM register */ 111576afd4fSJean-Christophe PLAGNIOL-VILLARD 112576afd4fSJean-Christophe PLAGNIOL-VILLARD cm_reg_sdram = *(volatile ulong *)(CM_BASE + OS_SDRAM); 113576afd4fSJean-Christophe PLAGNIOL-VILLARD /* Register SDRAM size 114576afd4fSJean-Christophe PLAGNIOL-VILLARD * 115576afd4fSJean-Christophe PLAGNIOL-VILLARD * 0xXXXXXXbbb000bb 16 MB 116576afd4fSJean-Christophe PLAGNIOL-VILLARD * 0xXXXXXXbbb001bb 32 MB 117576afd4fSJean-Christophe PLAGNIOL-VILLARD * 0xXXXXXXbbb010bb 64 MB 118576afd4fSJean-Christophe PLAGNIOL-VILLARD * 0xXXXXXXbbb011bb 128 MB 119576afd4fSJean-Christophe PLAGNIOL-VILLARD * 0xXXXXXXbbb100bb 256 MB 120576afd4fSJean-Christophe PLAGNIOL-VILLARD * 121576afd4fSJean-Christophe PLAGNIOL-VILLARD */ 122576afd4fSJean-Christophe PLAGNIOL-VILLARD sdram_shift = ((cm_reg_sdram & 0x0000001C)/4)%4; 123*46b5ccbfSLinus Walleij gd->ram_size = get_ram_size((long *) CONFIG_SYS_SDRAM_BASE + 124*46b5ccbfSLinus Walleij REMAPPED_FLASH_SZ, 12526c82638SLinus Walleij 0x01000000 << sdram_shift); 126576afd4fSJean-Christophe PLAGNIOL-VILLARD } 12726c82638SLinus Walleij #else 128*46b5ccbfSLinus Walleij gd->ram_size = get_ram_size((long *) CONFIG_SYS_SDRAM_BASE + 129*46b5ccbfSLinus Walleij REMAPPED_FLASH_SZ, 13026c82638SLinus Walleij PHYS_SDRAM_1_SIZE); 131576afd4fSJean-Christophe PLAGNIOL-VILLARD #endif /* CM_SPD_DETECT */ 132*46b5ccbfSLinus Walleij /* We only have one bank of RAM, set it to whatever was detected */ 133*46b5ccbfSLinus Walleij gd->bd->bi_dram[0].size = gd->ram_size; 134576afd4fSJean-Christophe PLAGNIOL-VILLARD 135576afd4fSJean-Christophe PLAGNIOL-VILLARD return 0; 136576afd4fSJean-Christophe PLAGNIOL-VILLARD } 137576afd4fSJean-Christophe PLAGNIOL-VILLARD 1387194ab80SBen Warren #ifdef CONFIG_CMD_NET 139576afd4fSJean-Christophe PLAGNIOL-VILLARD int board_eth_init(bd_t *bis) 140576afd4fSJean-Christophe PLAGNIOL-VILLARD { 1417194ab80SBen Warren int rc = 0; 1427194ab80SBen Warren #ifdef CONFIG_SMC91111 1437194ab80SBen Warren rc = smc91111_initialize(0, CONFIG_SMC91111_BASE); 1447194ab80SBen Warren #endif 1457194ab80SBen Warren rc += pci_eth_init(bis); 1467194ab80SBen Warren return rc; 147576afd4fSJean-Christophe PLAGNIOL-VILLARD } 148576afd4fSJean-Christophe PLAGNIOL-VILLARD #endif 149