1127f9ae5SJean-Christophe PLAGNIOL-VILLARD /* 2127f9ae5SJean-Christophe PLAGNIOL-VILLARD * Maintainer : Steve Sakoman <steve@sakoman.com> 3127f9ae5SJean-Christophe PLAGNIOL-VILLARD * 4127f9ae5SJean-Christophe PLAGNIOL-VILLARD * Derived from Beagle Board, 3430 SDP, and OMAP3EVM code by 5127f9ae5SJean-Christophe PLAGNIOL-VILLARD * Richard Woodruff <r-woodruff2@ti.com> 6127f9ae5SJean-Christophe PLAGNIOL-VILLARD * Syed Mohammed Khasim <khasim@ti.com> 7127f9ae5SJean-Christophe PLAGNIOL-VILLARD * Sunil Kumar <sunilsaini05@gmail.com> 8127f9ae5SJean-Christophe PLAGNIOL-VILLARD * Shashi Ranjan <shashiranjanmca05@gmail.com> 9127f9ae5SJean-Christophe PLAGNIOL-VILLARD * 10127f9ae5SJean-Christophe PLAGNIOL-VILLARD * (C) Copyright 2004-2008 11127f9ae5SJean-Christophe PLAGNIOL-VILLARD * Texas Instruments, <www.ti.com> 12127f9ae5SJean-Christophe PLAGNIOL-VILLARD * 13127f9ae5SJean-Christophe PLAGNIOL-VILLARD * See file CREDITS for list of people who contributed to this 14127f9ae5SJean-Christophe PLAGNIOL-VILLARD * project. 15127f9ae5SJean-Christophe PLAGNIOL-VILLARD * 16127f9ae5SJean-Christophe PLAGNIOL-VILLARD * This program is free software; you can redistribute it and/or 17127f9ae5SJean-Christophe PLAGNIOL-VILLARD * modify it under the terms of the GNU General Public License as 18127f9ae5SJean-Christophe PLAGNIOL-VILLARD * published by the Free Software Foundation; either version 2 of 19127f9ae5SJean-Christophe PLAGNIOL-VILLARD * the License, or (at your option) any later version. 20127f9ae5SJean-Christophe PLAGNIOL-VILLARD * 21127f9ae5SJean-Christophe PLAGNIOL-VILLARD * This program is distributed in the hope that it will be useful, 22127f9ae5SJean-Christophe PLAGNIOL-VILLARD * but WITHOUT ANY WARRANTY; without even the implied warranty of 23127f9ae5SJean-Christophe PLAGNIOL-VILLARD * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 24127f9ae5SJean-Christophe PLAGNIOL-VILLARD * GNU General Public License for more details. 25127f9ae5SJean-Christophe PLAGNIOL-VILLARD * 26127f9ae5SJean-Christophe PLAGNIOL-VILLARD * You should have received a copy of the GNU General Public License 27127f9ae5SJean-Christophe PLAGNIOL-VILLARD * along with this program; if not, write to the Free Software 28127f9ae5SJean-Christophe PLAGNIOL-VILLARD * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 29127f9ae5SJean-Christophe PLAGNIOL-VILLARD * MA 02111-1307 USA 30127f9ae5SJean-Christophe PLAGNIOL-VILLARD */ 31127f9ae5SJean-Christophe PLAGNIOL-VILLARD #include <common.h> 32df382626SOlof Johansson #include <netdev.h> 33127f9ae5SJean-Christophe PLAGNIOL-VILLARD #include <twl4030.h> 34127f9ae5SJean-Christophe PLAGNIOL-VILLARD #include <asm/io.h> 35127f9ae5SJean-Christophe PLAGNIOL-VILLARD #include <asm/arch/mux.h> 36df382626SOlof Johansson #include <asm/arch/mem.h> 37127f9ae5SJean-Christophe PLAGNIOL-VILLARD #include <asm/arch/sys_proto.h> 38df382626SOlof Johansson #include <asm/arch/gpio.h> 39127f9ae5SJean-Christophe PLAGNIOL-VILLARD #include <asm/mach-types.h> 40127f9ae5SJean-Christophe PLAGNIOL-VILLARD #include "overo.h" 41127f9ae5SJean-Christophe PLAGNIOL-VILLARD 42df382626SOlof Johansson #if defined(CONFIG_CMD_NET) 43df382626SOlof Johansson static void setup_net_chip(void); 44df382626SOlof Johansson #endif 45df382626SOlof Johansson 46*ba9a11e4SSteve Sakoman /* GPMC definitions for LAN9221 chips on Tobi expansion boards */ 47*ba9a11e4SSteve Sakoman static const u32 gpmc_lan_config[] = { 48*ba9a11e4SSteve Sakoman NET_LAN9221_GPMC_CONFIG1, 49*ba9a11e4SSteve Sakoman NET_LAN9221_GPMC_CONFIG2, 50*ba9a11e4SSteve Sakoman NET_LAN9221_GPMC_CONFIG3, 51*ba9a11e4SSteve Sakoman NET_LAN9221_GPMC_CONFIG4, 52*ba9a11e4SSteve Sakoman NET_LAN9221_GPMC_CONFIG5, 53*ba9a11e4SSteve Sakoman NET_LAN9221_GPMC_CONFIG6, 54*ba9a11e4SSteve Sakoman /*CONFIG7- computed as params */ 55*ba9a11e4SSteve Sakoman }; 56*ba9a11e4SSteve Sakoman 57127f9ae5SJean-Christophe PLAGNIOL-VILLARD /* 58127f9ae5SJean-Christophe PLAGNIOL-VILLARD * Routine: board_init 59127f9ae5SJean-Christophe PLAGNIOL-VILLARD * Description: Early hardware init. 60127f9ae5SJean-Christophe PLAGNIOL-VILLARD */ 61127f9ae5SJean-Christophe PLAGNIOL-VILLARD int board_init(void) 62127f9ae5SJean-Christophe PLAGNIOL-VILLARD { 63127f9ae5SJean-Christophe PLAGNIOL-VILLARD DECLARE_GLOBAL_DATA_PTR; 64127f9ae5SJean-Christophe PLAGNIOL-VILLARD 65127f9ae5SJean-Christophe PLAGNIOL-VILLARD gpmc_init(); /* in SRAM or SDRAM, finish GPMC */ 66127f9ae5SJean-Christophe PLAGNIOL-VILLARD /* board id for Linux */ 67127f9ae5SJean-Christophe PLAGNIOL-VILLARD gd->bd->bi_arch_number = MACH_TYPE_OVERO; 68127f9ae5SJean-Christophe PLAGNIOL-VILLARD /* boot param addr */ 69127f9ae5SJean-Christophe PLAGNIOL-VILLARD gd->bd->bi_boot_params = (OMAP34XX_SDRC_CS0 + 0x100); 70127f9ae5SJean-Christophe PLAGNIOL-VILLARD 71127f9ae5SJean-Christophe PLAGNIOL-VILLARD return 0; 72127f9ae5SJean-Christophe PLAGNIOL-VILLARD } 73127f9ae5SJean-Christophe PLAGNIOL-VILLARD 74127f9ae5SJean-Christophe PLAGNIOL-VILLARD /* 75c2d5b341SSteve Sakoman * Routine: get_board_revision 76c2d5b341SSteve Sakoman * Description: Returns the board revision 77c2d5b341SSteve Sakoman */ 78c2d5b341SSteve Sakoman int get_board_revision(void) 79c2d5b341SSteve Sakoman { 80c2d5b341SSteve Sakoman int revision; 81c2d5b341SSteve Sakoman 82c2d5b341SSteve Sakoman if (!omap_request_gpio(112) && 83c2d5b341SSteve Sakoman !omap_request_gpio(113) && 84c2d5b341SSteve Sakoman !omap_request_gpio(115)) { 85c2d5b341SSteve Sakoman 86c2d5b341SSteve Sakoman omap_set_gpio_direction(112, 1); 87c2d5b341SSteve Sakoman omap_set_gpio_direction(113, 1); 88c2d5b341SSteve Sakoman omap_set_gpio_direction(115, 1); 89c2d5b341SSteve Sakoman 90c2d5b341SSteve Sakoman revision = omap_get_gpio_datain(115) << 2 | 91c2d5b341SSteve Sakoman omap_get_gpio_datain(113) << 1 | 92c2d5b341SSteve Sakoman omap_get_gpio_datain(112); 93c2d5b341SSteve Sakoman 94c2d5b341SSteve Sakoman omap_free_gpio(112); 95c2d5b341SSteve Sakoman omap_free_gpio(113); 96c2d5b341SSteve Sakoman omap_free_gpio(115); 97c2d5b341SSteve Sakoman } else { 98c2d5b341SSteve Sakoman printf("Error: unable to acquire board revision GPIOs\n"); 99c2d5b341SSteve Sakoman revision = -1; 100c2d5b341SSteve Sakoman } 101c2d5b341SSteve Sakoman 102c2d5b341SSteve Sakoman return revision; 103c2d5b341SSteve Sakoman } 104c2d5b341SSteve Sakoman 105c2d5b341SSteve Sakoman /* 106127f9ae5SJean-Christophe PLAGNIOL-VILLARD * Routine: misc_init_r 107127f9ae5SJean-Christophe PLAGNIOL-VILLARD * Description: Configure board specific parts 108127f9ae5SJean-Christophe PLAGNIOL-VILLARD */ 109127f9ae5SJean-Christophe PLAGNIOL-VILLARD int misc_init_r(void) 110127f9ae5SJean-Christophe PLAGNIOL-VILLARD { 111127f9ae5SJean-Christophe PLAGNIOL-VILLARD twl4030_power_init(); 112ead39d7aSGrazvydas Ignotas twl4030_led_init(TWL4030_LED_LEDEN_LEDAON | TWL4030_LED_LEDEN_LEDBON); 113127f9ae5SJean-Christophe PLAGNIOL-VILLARD 114df382626SOlof Johansson #if defined(CONFIG_CMD_NET) 115df382626SOlof Johansson setup_net_chip(); 116df382626SOlof Johansson #endif 117df382626SOlof Johansson 118c2d5b341SSteve Sakoman printf("Board revision: %d\n", get_board_revision()); 119127f9ae5SJean-Christophe PLAGNIOL-VILLARD dieid_num_r(); 120127f9ae5SJean-Christophe PLAGNIOL-VILLARD 121127f9ae5SJean-Christophe PLAGNIOL-VILLARD return 0; 122127f9ae5SJean-Christophe PLAGNIOL-VILLARD } 123127f9ae5SJean-Christophe PLAGNIOL-VILLARD 124127f9ae5SJean-Christophe PLAGNIOL-VILLARD /* 125127f9ae5SJean-Christophe PLAGNIOL-VILLARD * Routine: set_muxconf_regs 126127f9ae5SJean-Christophe PLAGNIOL-VILLARD * Description: Setting up the configuration Mux registers specific to the 127127f9ae5SJean-Christophe PLAGNIOL-VILLARD * hardware. Many pins need to be moved from protect to primary 128127f9ae5SJean-Christophe PLAGNIOL-VILLARD * mode. 129127f9ae5SJean-Christophe PLAGNIOL-VILLARD */ 130127f9ae5SJean-Christophe PLAGNIOL-VILLARD void set_muxconf_regs(void) 131127f9ae5SJean-Christophe PLAGNIOL-VILLARD { 132127f9ae5SJean-Christophe PLAGNIOL-VILLARD MUX_OVERO(); 133127f9ae5SJean-Christophe PLAGNIOL-VILLARD } 134df382626SOlof Johansson 135df382626SOlof Johansson #if defined(CONFIG_CMD_NET) 136df382626SOlof Johansson /* 137df382626SOlof Johansson * Routine: setup_net_chip 138df382626SOlof Johansson * Description: Setting up the configuration GPMC registers specific to the 139df382626SOlof Johansson * Ethernet hardware. 140df382626SOlof Johansson */ 141df382626SOlof Johansson static void setup_net_chip(void) 142df382626SOlof Johansson { 143df382626SOlof Johansson struct ctrl *ctrl_base = (struct ctrl *)OMAP34XX_CTRL_BASE; 144df382626SOlof Johansson 145*ba9a11e4SSteve Sakoman /* first lan chip */ 146*ba9a11e4SSteve Sakoman enable_gpmc_cs_config(gpmc_lan_config, &gpmc_cfg->cs[5], 0x2C000000, 147*ba9a11e4SSteve Sakoman GPMC_SIZE_16M); 148*ba9a11e4SSteve Sakoman 149*ba9a11e4SSteve Sakoman /* second lan chip */ 150*ba9a11e4SSteve Sakoman enable_gpmc_cs_config(gpmc_lan_config, &gpmc_cfg->cs[4], 0x2B000000, 151*ba9a11e4SSteve Sakoman GPMC_SIZE_16M); 152df382626SOlof Johansson 153df382626SOlof Johansson /* Enable off mode for NWE in PADCONF_GPMC_NWE register */ 154df382626SOlof Johansson writew(readw(&ctrl_base ->gpmc_nwe) | 0x0E00, &ctrl_base->gpmc_nwe); 155df382626SOlof Johansson /* Enable off mode for NOE in PADCONF_GPMC_NADV_ALE register */ 156df382626SOlof Johansson writew(readw(&ctrl_base->gpmc_noe) | 0x0E00, &ctrl_base->gpmc_noe); 157df382626SOlof Johansson /* Enable off mode for ALE in PADCONF_GPMC_NADV_ALE register */ 158df382626SOlof Johansson writew(readw(&ctrl_base->gpmc_nadv_ale) | 0x0E00, 159df382626SOlof Johansson &ctrl_base->gpmc_nadv_ale); 160df382626SOlof Johansson 161df382626SOlof Johansson /* Make GPIO 64 as output pin and send a magic pulse through it */ 162df382626SOlof Johansson if (!omap_request_gpio(64)) { 163df382626SOlof Johansson omap_set_gpio_direction(64, 0); 164df382626SOlof Johansson omap_set_gpio_dataout(64, 1); 165df382626SOlof Johansson udelay(1); 166df382626SOlof Johansson omap_set_gpio_dataout(64, 0); 167df382626SOlof Johansson udelay(1); 168df382626SOlof Johansson omap_set_gpio_dataout(64, 1); 169df382626SOlof Johansson } 170df382626SOlof Johansson } 171df382626SOlof Johansson #endif 172df382626SOlof Johansson 173df382626SOlof Johansson int board_eth_init(bd_t *bis) 174df382626SOlof Johansson { 175df382626SOlof Johansson int rc = 0; 176df382626SOlof Johansson #ifdef CONFIG_SMC911X 177df382626SOlof Johansson rc = smc911x_initialize(0, CONFIG_SMC911X_BASE); 178df382626SOlof Johansson #endif 179df382626SOlof Johansson return rc; 180df382626SOlof Johansson } 181