1 /* 2 * (C) Copyright 2004-2008 3 * Texas Instruments, <www.ti.com> 4 * 5 * Author : 6 * Sunil Kumar <sunilsaini05@gmail.com> 7 * Shashi Ranjan <shashiranjanmca05@gmail.com> 8 * 9 * Derived from Beagle Board and 3430 SDP code by 10 * Richard Woodruff <r-woodruff2@ti.com> 11 * Syed Mohammed Khasim <khasim@ti.com> 12 * 13 * 14 * See file CREDITS for list of people who contributed to this 15 * project. 16 * 17 * This program is free software; you can redistribute it and/or 18 * modify it under the terms of the GNU General Public License as 19 * published by the Free Software Foundation; either version 2 of 20 * the License, or (at your option) any later version. 21 * 22 * This program is distributed in the hope that it will be useful, 23 * but WITHOUT ANY WARRANTY; without even the implied warranty of 24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 25 * GNU General Public License for more details. 26 * 27 * You should have received a copy of the GNU General Public License 28 * along with this program; if not, write to the Free Software 29 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 30 * MA 02111-1307 USA 31 */ 32 #include <common.h> 33 #include <twl4030.h> 34 #include <asm/io.h> 35 #include <asm/arch/mux.h> 36 #include <asm/arch/sys_proto.h> 37 #include <asm/arch/gpio.h> 38 #include <asm/mach-types.h> 39 #include "beagle.h" 40 41 /* 42 * Routine: board_init 43 * Description: Early hardware init. 44 */ 45 int board_init(void) 46 { 47 DECLARE_GLOBAL_DATA_PTR; 48 49 gpmc_init(); /* in SRAM or SDRAM, finish GPMC */ 50 /* board id for Linux */ 51 gd->bd->bi_arch_number = MACH_TYPE_OMAP3_BEAGLE; 52 /* boot param addr */ 53 gd->bd->bi_boot_params = (OMAP34XX_SDRC_CS0 + 0x100); 54 55 return 0; 56 } 57 58 /* 59 * Routine: get_board_revision 60 * Description: Detect if we are running on a Beagle revision Ax/Bx, 61 * C1/2/3, or C4. This can be done by reading 62 * the level of GPIO173, GPIO172 and GPIO171. This should 63 * result in 64 * GPIO173, GPIO172, GPIO171: 1 1 1 => Ax/Bx 65 * GPIO173, GPIO172, GPIO171: 1 1 0 => C1/2/3 66 * GPIO173, GPIO172, GPIO171: 1 0 1 => C4 67 */ 68 int get_board_revision(void) 69 { 70 int revision; 71 72 if (!omap_request_gpio(171) && 73 !omap_request_gpio(172) && 74 !omap_request_gpio(173)) { 75 76 omap_set_gpio_direction(171, 1); 77 omap_set_gpio_direction(172, 1); 78 omap_set_gpio_direction(173, 1); 79 80 revision = omap_get_gpio_datain(173) << 2 | 81 omap_get_gpio_datain(172) << 1 | 82 omap_get_gpio_datain(171); 83 84 omap_free_gpio(171); 85 omap_free_gpio(172); 86 omap_free_gpio(173); 87 } else { 88 printf("Error: unable to acquire board revision GPIOs\n"); 89 revision = -1; 90 } 91 92 return revision; 93 } 94 95 /* 96 * Routine: misc_init_r 97 * Description: Configure board specific parts 98 */ 99 int misc_init_r(void) 100 { 101 struct gpio *gpio5_base = (struct gpio *)OMAP34XX_GPIO5_BASE; 102 struct gpio *gpio6_base = (struct gpio *)OMAP34XX_GPIO6_BASE; 103 104 switch (get_board_revision()) { 105 case REVISION_AXBX: 106 printf("Beagle Rev Ax/Bx\n"); 107 setenv("beaglerev", "AxBx"); 108 setenv("mpurate", "600"); 109 break; 110 case REVISION_CX: 111 printf("Beagle Rev C1/C2/C3\n"); 112 setenv("beaglerev", "Cx"); 113 setenv("mpurate", "600"); 114 MUX_BEAGLE_C(); 115 break; 116 case REVISION_C4: 117 printf("Beagle Rev C4\n"); 118 setenv("beaglerev", "Cx"); 119 setenv("mpurate", "720"); 120 MUX_BEAGLE_C(); 121 /* Set VAUX2 to 1.8V for EHCI PHY */ 122 twl4030_pmrecv_vsel_cfg(TWL4030_PM_RECEIVER_VAUX2_DEDICATED, 123 TWL4030_PM_RECEIVER_VAUX2_VSEL_18, 124 TWL4030_PM_RECEIVER_VAUX2_DEV_GRP, 125 TWL4030_PM_RECEIVER_DEV_GRP_P1); 126 break; 127 default: 128 printf("Beagle unknown 0x%02x\n", get_board_revision()); 129 } 130 131 twl4030_power_init(); 132 twl4030_led_init(TWL4030_LED_LEDEN_LEDAON | TWL4030_LED_LEDEN_LEDBON); 133 134 /* Configure GPIOs to output */ 135 writel(~(GPIO23 | GPIO10 | GPIO8 | GPIO2 | GPIO1), &gpio6_base->oe); 136 writel(~(GPIO31 | GPIO30 | GPIO29 | GPIO28 | GPIO22 | GPIO21 | 137 GPIO15 | GPIO14 | GPIO13 | GPIO12), &gpio5_base->oe); 138 139 /* Set GPIOs */ 140 writel(GPIO23 | GPIO10 | GPIO8 | GPIO2 | GPIO1, 141 &gpio6_base->setdataout); 142 writel(GPIO31 | GPIO30 | GPIO29 | GPIO28 | GPIO22 | GPIO21 | 143 GPIO15 | GPIO14 | GPIO13 | GPIO12, &gpio5_base->setdataout); 144 145 dieid_num_r(); 146 147 return 0; 148 } 149 150 /* 151 * Routine: set_muxconf_regs 152 * Description: Setting up the configuration Mux registers specific to the 153 * hardware. Many pins need to be moved from protect to primary 154 * mode. 155 */ 156 void set_muxconf_regs(void) 157 { 158 MUX_BEAGLE(); 159 } 160