1/* 2 * Copyright (c) 2009 Wind River Systems, Inc. 3 * Tom Rix <Tom.Rix@windriver.com> 4 * 5 * Derived from Zoom1 code by 6 * Nishanth Menon <nm@ti.com> 7 * Sunil Kumar <sunilsaini05@gmail.com> 8 * Shashi Ranjan <shashiranjanmca05@gmail.com> 9 * Richard Woodruff <r-woodruff2@ti.com> 10 * Syed Mohammed Khasim <khasim@ti.com> 11 * 12 * 13 * See file CREDITS for list of people who contributed to this 14 * project. 15 * 16 * This program is free software; you can redistribute it and/or 17 * modify it under the terms of the GNU General Public License as 18 * published by the Free Software Foundation; either version 2 of 19 * the License, or (at your option) any later version. 20 * 21 * This program is distributed in the hope that it will be useful, 22 * but WITHOUT ANY WARRANTY; without even the implied warranty of 23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 24 * GNU General Public License for more details. 25 * 26 * You should have received a copy of the GNU General Public License 27 * along with this program; if not, write to the Free Software 28 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 29 * MA 02111-1307 USA 30 */ 31#include <common.h> 32#include <netdev.h> 33#ifdef CONFIG_STATUS_LED 34#include <status_led.h> 35#endif 36#include <twl4030.h> 37#include <asm/io.h> 38#include <asm/arch/gpio.h> 39#include <asm/arch/mem.h> 40#include <asm/arch/mux.h> 41#include <asm/arch/sys_proto.h> 42#include <asm/mach-types.h> 43#include "zoom2.h" 44#include "zoom2_serial.h" 45 46DECLARE_GLOBAL_DATA_PTR; 47 48/* 49 * This the the zoom2, board specific, gpmc configuration for the 50 * quad uart on the debug board. The more general gpmc configurations 51 * are setup at the cpu level in arch/arm/cpu/armv7/omap3/mem.c 52 * 53 * The details of the setting of the serial gpmc setup are not available. 54 * The values were provided by another party. 55 */ 56static u32 gpmc_serial_TL16CP754C[GPMC_MAX_REG] = { 57 0x00011000, 58 0x001F1F01, 59 0x00080803, 60 0x1D091D09, 61 0x041D1F1F, 62 0x1D0904C4, 0 63}; 64 65/* Used to track the revision of the board */ 66static zoom2_revision revision = ZOOM2_REVISION_UNKNOWN; 67 68/* 69 * Routine: zoom2_get_revision 70 * Description: Return the revision of the Zoom2 this code is running on. 71 */ 72zoom2_revision zoom2_get_revision(void) 73{ 74 return revision; 75} 76 77/* 78 * Routine: zoom2_identify 79 * Description: Detect which version of Zoom2 we are running on. 80 */ 81void zoom2_identify(void) 82{ 83 /* 84 * To check for production board vs beta board, 85 * check if gpio 94 is clear. 86 * 87 * No way yet to check for alpha board identity. 88 * Alpha boards were produced in very limited quantities 89 * and they are not commonly used. They are mentioned here 90 * only for completeness. 91 */ 92 if (!omap_request_gpio(94)) { 93 unsigned int val; 94 95 omap_set_gpio_direction(94, 1); 96 val = omap_get_gpio_datain(94); 97 omap_free_gpio(94); 98 99 if (val) 100 revision = ZOOM2_REVISION_BETA; 101 else 102 revision = ZOOM2_REVISION_PRODUCTION; 103 } 104 105 printf("Board revision "); 106 switch (revision) { 107 case ZOOM2_REVISION_PRODUCTION: 108 printf("Production\n"); 109 break; 110 case ZOOM2_REVISION_BETA: 111 printf("Beta\n"); 112 break; 113 default: 114 printf("Unknown\n"); 115 break; 116 } 117} 118 119/* 120 * Routine: board_init 121 * Description: Early hardware init. 122 */ 123int board_init (void) 124{ 125 u32 *gpmc_config; 126 127 gpmc_init (); /* in SRAM or SDRAM, finish GPMC */ 128 129 /* Configure console support on zoom2 */ 130 gpmc_config = gpmc_serial_TL16CP754C; 131 enable_gpmc_cs_config(gpmc_config, &gpmc_cfg->cs[3], 132 SERIAL_TL16CP754C_BASE, GPMC_SIZE_16M); 133 134 /* board id for Linux */ 135 gd->bd->bi_arch_number = MACH_TYPE_OMAP_ZOOM2; 136 /* boot param addr */ 137 gd->bd->bi_boot_params = (OMAP34XX_SDRC_CS0 + 0x100); 138 139#if defined(CONFIG_STATUS_LED) && defined(STATUS_LED_BOOT) 140 status_led_set (STATUS_LED_BOOT, STATUS_LED_ON); 141#endif 142 return 0; 143} 144 145/* 146 * Routine: misc_init_r 147 * Description: Configure zoom board specific configurations 148 */ 149int misc_init_r(void) 150{ 151 zoom2_identify(); 152 twl4030_power_init(); 153 twl4030_led_init(TWL4030_LED_LEDEN_LEDAON | TWL4030_LED_LEDEN_LEDBON); 154 dieid_num_r(); 155 156 /* 157 * Board Reset 158 * The board is reset by holding the the large button 159 * on the top right side of the main board for 160 * eight seconds. 161 * 162 * There are reported problems of some beta boards 163 * continously resetting. For those boards, disable resetting. 164 */ 165 if (ZOOM2_REVISION_PRODUCTION <= zoom2_get_revision()) 166 twl4030_power_reset_init(); 167 168 return 0; 169} 170 171/* 172 * Routine: set_muxconf_regs 173 * Description: Setting up the configuration Mux registers specific to the 174 * hardware. Many pins need to be moved from protect to primary 175 * mode. 176 */ 177void set_muxconf_regs (void) 178{ 179 /* platform specific muxes */ 180 MUX_ZOOM2 (); 181} 182 183#ifdef CONFIG_CMD_NET 184int board_eth_init(bd_t *bis) 185{ 186 int rc = 0; 187#ifdef CONFIG_LAN91C96 188 rc = lan91c96_initialize(0, CONFIG_LAN91C96_BASE); 189#endif 190 return rc; 191} 192#endif 193