10a0e4badSJean-Christophe PLAGNIOL-VILLARD /* 2673283f3STom Rini * (C) Copyright 2004-2011 30a0e4badSJean-Christophe PLAGNIOL-VILLARD * Texas Instruments, <www.ti.com> 40a0e4badSJean-Christophe PLAGNIOL-VILLARD * 50a0e4badSJean-Christophe PLAGNIOL-VILLARD * Author : 60a0e4badSJean-Christophe PLAGNIOL-VILLARD * Manikandan Pillai <mani.pillai@ti.com> 70a0e4badSJean-Christophe PLAGNIOL-VILLARD * 80a0e4badSJean-Christophe PLAGNIOL-VILLARD * Derived from Beagle Board and 3430 SDP code by 90a0e4badSJean-Christophe PLAGNIOL-VILLARD * Richard Woodruff <r-woodruff2@ti.com> 100a0e4badSJean-Christophe PLAGNIOL-VILLARD * Syed Mohammed Khasim <khasim@ti.com> 110a0e4badSJean-Christophe PLAGNIOL-VILLARD * 121a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 130a0e4badSJean-Christophe PLAGNIOL-VILLARD */ 140a0e4badSJean-Christophe PLAGNIOL-VILLARD #include <common.h> 150d43fdedSDerald D. Woods #include <dm.h> 160d43fdedSDerald D. Woods #include <ns16550.h> 170a0e4badSJean-Christophe PLAGNIOL-VILLARD #include <netdev.h> 180a0e4badSJean-Christophe PLAGNIOL-VILLARD #include <asm/io.h> 190a0e4badSJean-Christophe PLAGNIOL-VILLARD #include <asm/arch/mem.h> 200a0e4badSJean-Christophe PLAGNIOL-VILLARD #include <asm/arch/mux.h> 210a0e4badSJean-Christophe PLAGNIOL-VILLARD #include <asm/arch/sys_proto.h> 22dcc4f38bSVaibhav Hiremath #include <asm/arch/mmc_host_def.h> 2384c3b631SSanjeev Premi #include <asm/gpio.h> 240a0e4badSJean-Christophe PLAGNIOL-VILLARD #include <i2c.h> 25aac5450eSPaul Kocialkowski #include <twl4030.h> 260a0e4badSJean-Christophe PLAGNIOL-VILLARD #include <asm/mach-types.h> 270d43fdedSDerald D. Woods #include <asm/omap_musb.h> 28673283f3STom Rini #include <linux/mtd/nand.h> 290d43fdedSDerald D. Woods #include <linux/usb/ch9.h> 300d43fdedSDerald D. Woods #include <linux/usb/gadget.h> 310d43fdedSDerald D. Woods #include <linux/usb/musb.h> 320a0e4badSJean-Christophe PLAGNIOL-VILLARD #include "evm.h" 330a0e4badSJean-Christophe PLAGNIOL-VILLARD 340d43fdedSDerald D. Woods #ifdef CONFIG_USB_EHCI_HCD 350d43fdedSDerald D. Woods #include <usb.h> 360d43fdedSDerald D. Woods #include <asm/ehci-omap.h> 370d43fdedSDerald D. Woods #endif 380d43fdedSDerald D. Woods 39c0682587SSriramakrishnan #define OMAP3EVM_GPIO_ETH_RST_GEN1 64 40c0682587SSriramakrishnan #define OMAP3EVM_GPIO_ETH_RST_GEN2 7 41c0682587SSriramakrishnan 4229565326SJohn Rigby DECLARE_GLOBAL_DATA_PTR; 4329565326SJohn Rigby 440d43fdedSDerald D. Woods static const struct ns16550_platdata omap3_evm_serial = { 450d43fdedSDerald D. Woods .base = OMAP34XX_UART1, 460d43fdedSDerald D. Woods .reg_shift = 2, 470d43fdedSDerald D. Woods .clock = V_NS16550_CLK, 480d43fdedSDerald D. Woods .fcr = UART_FCR_DEFVAL, 490d43fdedSDerald D. Woods }; 500d43fdedSDerald D. Woods 510d43fdedSDerald D. Woods U_BOOT_DEVICE(omap3_evm_uart) = { 520d43fdedSDerald D. Woods "ns16550_serial", 530d43fdedSDerald D. Woods &omap3_evm_serial 540d43fdedSDerald D. Woods }; 550d43fdedSDerald D. Woods 56b606ef41SDirk Behme static u32 omap3_evm_version; 57b5abf644SAjay Kumar Gupta 58b606ef41SDirk Behme u32 get_omap3_evm_rev(void) 59b5abf644SAjay Kumar Gupta { 60b5abf644SAjay Kumar Gupta return omap3_evm_version; 61b5abf644SAjay Kumar Gupta } 62b5abf644SAjay Kumar Gupta 63b5abf644SAjay Kumar Gupta static void omap3_evm_get_revision(void) 64b5abf644SAjay Kumar Gupta { 6576ee9a2cSSanjeev Premi #if defined(CONFIG_CMD_NET) 6676ee9a2cSSanjeev Premi /* 6776ee9a2cSSanjeev Premi * Board revision can be ascertained only by identifying 6876ee9a2cSSanjeev Premi * the Ethernet chipset. 6976ee9a2cSSanjeev Premi */ 70b5abf644SAjay Kumar Gupta unsigned int smsc_id; 71b5abf644SAjay Kumar Gupta 72b5abf644SAjay Kumar Gupta /* Ethernet PHY ID is stored at ID_REV register */ 73b5abf644SAjay Kumar Gupta smsc_id = readl(CONFIG_SMC911X_BASE + 0x50) & 0xFFFF0000; 74b5abf644SAjay Kumar Gupta printf("Read back SMSC id 0x%x\n", smsc_id); 75b5abf644SAjay Kumar Gupta 76b5abf644SAjay Kumar Gupta switch (smsc_id) { 77b5abf644SAjay Kumar Gupta /* SMSC9115 chipset */ 78b5abf644SAjay Kumar Gupta case 0x01150000: 79b5abf644SAjay Kumar Gupta omap3_evm_version = OMAP3EVM_BOARD_GEN_1; 80b5abf644SAjay Kumar Gupta break; 81b5abf644SAjay Kumar Gupta /* SMSC 9220 chipset */ 82b5abf644SAjay Kumar Gupta case 0x92200000: 83b5abf644SAjay Kumar Gupta default: 84b5abf644SAjay Kumar Gupta omap3_evm_version = OMAP3EVM_BOARD_GEN_2; 85b5abf644SAjay Kumar Gupta } 860d43fdedSDerald D. Woods #else /* !CONFIG_CMD_NET */ 8776ee9a2cSSanjeev Premi #if defined(CONFIG_STATIC_BOARD_REV) 880d43fdedSDerald D. Woods /* Look for static defintion of the board revision */ 8976ee9a2cSSanjeev Premi omap3_evm_version = CONFIG_STATIC_BOARD_REV; 9076ee9a2cSSanjeev Premi #else 910d43fdedSDerald D. Woods /* Fallback to the default above */ 9276ee9a2cSSanjeev Premi omap3_evm_version = OMAP3EVM_BOARD_GEN_2; 930d43fdedSDerald D. Woods #endif /* CONFIG_STATIC_BOARD_REV */ 9476ee9a2cSSanjeev Premi #endif /* CONFIG_CMD_NET */ 95b5abf644SAjay Kumar Gupta } 96b5abf644SAjay Kumar Gupta 970d43fdedSDerald D. Woods #if defined(CONFIG_USB_MUSB_GADGET) || defined(CONFIG_USB_MUSB_HOST) 980d43fdedSDerald D. Woods /* MUSB port on OMAP3EVM Rev >= E requires extvbus programming. */ 99944a4894SAjay Kumar Gupta u8 omap3_evm_need_extvbus(void) 100944a4894SAjay Kumar Gupta { 101944a4894SAjay Kumar Gupta u8 retval = 0; 102944a4894SAjay Kumar Gupta 103944a4894SAjay Kumar Gupta if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2) 104944a4894SAjay Kumar Gupta retval = 1; 105944a4894SAjay Kumar Gupta 106944a4894SAjay Kumar Gupta return retval; 107944a4894SAjay Kumar Gupta } 1080d43fdedSDerald D. Woods #endif /* CONFIG_USB_MUSB_{GADGET,HOST} */ 109944a4894SAjay Kumar Gupta 110944a4894SAjay Kumar Gupta /* 1110a0e4badSJean-Christophe PLAGNIOL-VILLARD * Routine: board_init 1120a0e4badSJean-Christophe PLAGNIOL-VILLARD * Description: Early hardware init. 1130a0e4badSJean-Christophe PLAGNIOL-VILLARD */ 1140a0e4badSJean-Christophe PLAGNIOL-VILLARD int board_init(void) 1150a0e4badSJean-Christophe PLAGNIOL-VILLARD { 1160a0e4badSJean-Christophe PLAGNIOL-VILLARD gpmc_init(); /* in SRAM or SDRAM, finish GPMC */ 1170a0e4badSJean-Christophe PLAGNIOL-VILLARD /* board id for Linux */ 1180a0e4badSJean-Christophe PLAGNIOL-VILLARD gd->bd->bi_arch_number = MACH_TYPE_OMAP3EVM; 1190a0e4badSJean-Christophe PLAGNIOL-VILLARD /* boot param addr */ 1200a0e4badSJean-Christophe PLAGNIOL-VILLARD gd->bd->bi_boot_params = (OMAP34XX_SDRC_CS0 + 0x100); 1210a0e4badSJean-Christophe PLAGNIOL-VILLARD 1220a0e4badSJean-Christophe PLAGNIOL-VILLARD return 0; 1230a0e4badSJean-Christophe PLAGNIOL-VILLARD } 1240a0e4badSJean-Christophe PLAGNIOL-VILLARD 1250d43fdedSDerald D. Woods #if defined(CONFIG_SPL_BUILD) 126673283f3STom Rini /* 127673283f3STom Rini * Routine: get_board_mem_timings 128673283f3STom Rini * Description: If we use SPL then there is no x-loader nor config header 129673283f3STom Rini * so we have to setup the DDR timings ourself on the first bank. This 130673283f3STom Rini * provides the timing values back to the function that configures 131673283f3STom Rini * the memory. 132673283f3STom Rini */ 1338c4445d2SPeter Barada void get_board_mem_timings(struct board_sdrc_timings *timings) 134673283f3STom Rini { 135673283f3STom Rini int pop_mfr, pop_id; 136673283f3STom Rini 137673283f3STom Rini /* 138673283f3STom Rini * We need to identify what PoP memory is on the board so that 139673283f3STom Rini * we know what timings to use. To map the ID values please see 140673283f3STom Rini * nand_ids.c 141673283f3STom Rini */ 142673283f3STom Rini identify_nand_chip(&pop_mfr, &pop_id); 143673283f3STom Rini 144673283f3STom Rini if (pop_mfr == NAND_MFR_HYNIX && pop_id == 0xbc) { 145673283f3STom Rini /* 256MB DDR */ 1468c4445d2SPeter Barada timings->mcfg = HYNIX_V_MCFG_200(256 << 20); 1478c4445d2SPeter Barada timings->ctrla = HYNIX_V_ACTIMA_200; 1488c4445d2SPeter Barada timings->ctrlb = HYNIX_V_ACTIMB_200; 149673283f3STom Rini } else { 150673283f3STom Rini /* 128MB DDR */ 1518c4445d2SPeter Barada timings->mcfg = MICRON_V_MCFG_165(128 << 20); 1528c4445d2SPeter Barada timings->ctrla = MICRON_V_ACTIMA_165; 1538c4445d2SPeter Barada timings->ctrlb = MICRON_V_ACTIMB_165; 154673283f3STom Rini } 1558c4445d2SPeter Barada timings->rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_165MHz; 1568c4445d2SPeter Barada timings->mr = MICRON_V_MR_165; 157673283f3STom Rini } 1580d43fdedSDerald D. Woods #endif /* CONFIG_SPL_BUILD */ 1590d43fdedSDerald D. Woods 1600d43fdedSDerald D. Woods #if defined(CONFIG_USB_MUSB_OMAP2PLUS) 1610d43fdedSDerald D. Woods static struct musb_hdrc_config musb_config = { 1620d43fdedSDerald D. Woods .multipoint = 1, 1630d43fdedSDerald D. Woods .dyn_fifo = 1, 1640d43fdedSDerald D. Woods .num_eps = 16, 1650d43fdedSDerald D. Woods .ram_bits = 12, 1660d43fdedSDerald D. Woods }; 1670d43fdedSDerald D. Woods 1680d43fdedSDerald D. Woods static struct omap_musb_board_data musb_board_data = { 1690d43fdedSDerald D. Woods .interface_type = MUSB_INTERFACE_ULPI, 1700d43fdedSDerald D. Woods }; 1710d43fdedSDerald D. Woods 1720d43fdedSDerald D. Woods static struct musb_hdrc_platform_data musb_plat = { 1730d43fdedSDerald D. Woods #if defined(CONFIG_USB_MUSB_HOST) 1740d43fdedSDerald D. Woods .mode = MUSB_HOST, 1750d43fdedSDerald D. Woods #elif defined(CONFIG_USB_MUSB_GADGET) 1760d43fdedSDerald D. Woods .mode = MUSB_PERIPHERAL, 1770d43fdedSDerald D. Woods #else 1780d43fdedSDerald D. Woods #error "Please define either CONFIG_USB_MUSB_HOST or CONFIG_USB_MUSB_GADGET" 1790d43fdedSDerald D. Woods #endif /* CONFIG_USB_MUSB_{GADGET,HOST} */ 1800d43fdedSDerald D. Woods .config = &musb_config, 1810d43fdedSDerald D. Woods .power = 100, 1820d43fdedSDerald D. Woods .platform_ops = &omap2430_ops, 1830d43fdedSDerald D. Woods .board_data = &musb_board_data, 1840d43fdedSDerald D. Woods }; 1850d43fdedSDerald D. Woods #endif /* CONFIG_USB_MUSB_OMAP2PLUS */ 186673283f3STom Rini 1870a0e4badSJean-Christophe PLAGNIOL-VILLARD /* 1880a0e4badSJean-Christophe PLAGNIOL-VILLARD * Routine: misc_init_r 1890a0e4badSJean-Christophe PLAGNIOL-VILLARD * Description: Init ethernet (done here so udelay works) 1900a0e4badSJean-Christophe PLAGNIOL-VILLARD */ 1910a0e4badSJean-Christophe PLAGNIOL-VILLARD int misc_init_r(void) 1920a0e4badSJean-Christophe PLAGNIOL-VILLARD { 1930d43fdedSDerald D. Woods twl4030_power_init(); 1940a0e4badSJean-Christophe PLAGNIOL-VILLARD 19594d50bedSAdam Ford #ifdef CONFIG_SYS_I2C_OMAP24XX 1966789e84eSHeiko Schocher i2c_init(CONFIG_SYS_OMAP24_I2C_SPEED, CONFIG_SYS_OMAP24_I2C_SLAVE); 1970a0e4badSJean-Christophe PLAGNIOL-VILLARD #endif 1980a0e4badSJean-Christophe PLAGNIOL-VILLARD 1990a0e4badSJean-Christophe PLAGNIOL-VILLARD #if defined(CONFIG_CMD_NET) 2000a0e4badSJean-Christophe PLAGNIOL-VILLARD setup_net_chip(); 2010a0e4badSJean-Christophe PLAGNIOL-VILLARD #endif 20276ee9a2cSSanjeev Premi omap3_evm_get_revision(); 2030a0e4badSJean-Christophe PLAGNIOL-VILLARD 2046921b314SSanjeev Premi #if defined(CONFIG_CMD_NET) 2056921b314SSanjeev Premi reset_net_chip(); 2066921b314SSanjeev Premi #endif 207679f82c3SPaul Kocialkowski omap_die_id_display(); 2080a0e4badSJean-Christophe PLAGNIOL-VILLARD 2090d43fdedSDerald D. Woods #if defined(CONFIG_USB_MUSB_OMAP2PLUS) 2100d43fdedSDerald D. Woods musb_register(&musb_plat, &musb_board_data, (void *)MUSB_BASE); 2110d43fdedSDerald D. Woods #endif 2120d43fdedSDerald D. Woods 2130d43fdedSDerald D. Woods #if defined(CONFIG_USB_ETHER) && defined(CONFIG_USB_MUSB_GADGET) 2140d43fdedSDerald D. Woods omap_die_id_usbethaddr(); 2150d43fdedSDerald D. Woods #endif 2160a0e4badSJean-Christophe PLAGNIOL-VILLARD return 0; 2170a0e4badSJean-Christophe PLAGNIOL-VILLARD } 2180a0e4badSJean-Christophe PLAGNIOL-VILLARD 2190a0e4badSJean-Christophe PLAGNIOL-VILLARD /* 2200a0e4badSJean-Christophe PLAGNIOL-VILLARD * Routine: set_muxconf_regs 2210a0e4badSJean-Christophe PLAGNIOL-VILLARD * Description: Setting up the configuration Mux registers specific to the 2220a0e4badSJean-Christophe PLAGNIOL-VILLARD * hardware. Many pins need to be moved from protect to primary 2230a0e4badSJean-Christophe PLAGNIOL-VILLARD * mode. 2240a0e4badSJean-Christophe PLAGNIOL-VILLARD */ 2250a0e4badSJean-Christophe PLAGNIOL-VILLARD void set_muxconf_regs(void) 2260a0e4badSJean-Christophe PLAGNIOL-VILLARD { 2270a0e4badSJean-Christophe PLAGNIOL-VILLARD MUX_EVM(); 2280a0e4badSJean-Christophe PLAGNIOL-VILLARD } 2290a0e4badSJean-Christophe PLAGNIOL-VILLARD 2300d43fdedSDerald D. Woods #if defined(CONFIG_CMD_NET) 2310a0e4badSJean-Christophe PLAGNIOL-VILLARD /* 2320a0e4badSJean-Christophe PLAGNIOL-VILLARD * Routine: setup_net_chip 2330a0e4badSJean-Christophe PLAGNIOL-VILLARD * Description: Setting up the configuration GPMC registers specific to the 2340a0e4badSJean-Christophe PLAGNIOL-VILLARD * Ethernet hardware. 2350a0e4badSJean-Christophe PLAGNIOL-VILLARD */ 2360a0e4badSJean-Christophe PLAGNIOL-VILLARD static void setup_net_chip(void) 2370a0e4badSJean-Christophe PLAGNIOL-VILLARD { 2380a0e4badSJean-Christophe PLAGNIOL-VILLARD struct ctrl *ctrl_base = (struct ctrl *)OMAP34XX_CTRL_BASE; 2390a0e4badSJean-Christophe PLAGNIOL-VILLARD 2400a0e4badSJean-Christophe PLAGNIOL-VILLARD /* Configure GPMC registers */ 2410a0e4badSJean-Christophe PLAGNIOL-VILLARD writel(NET_GPMC_CONFIG1, &gpmc_cfg->cs[5].config1); 2420a0e4badSJean-Christophe PLAGNIOL-VILLARD writel(NET_GPMC_CONFIG2, &gpmc_cfg->cs[5].config2); 2430a0e4badSJean-Christophe PLAGNIOL-VILLARD writel(NET_GPMC_CONFIG3, &gpmc_cfg->cs[5].config3); 2440a0e4badSJean-Christophe PLAGNIOL-VILLARD writel(NET_GPMC_CONFIG4, &gpmc_cfg->cs[5].config4); 2450a0e4badSJean-Christophe PLAGNIOL-VILLARD writel(NET_GPMC_CONFIG5, &gpmc_cfg->cs[5].config5); 2460a0e4badSJean-Christophe PLAGNIOL-VILLARD writel(NET_GPMC_CONFIG6, &gpmc_cfg->cs[5].config6); 2470a0e4badSJean-Christophe PLAGNIOL-VILLARD writel(NET_GPMC_CONFIG7, &gpmc_cfg->cs[5].config7); 2480a0e4badSJean-Christophe PLAGNIOL-VILLARD 2490a0e4badSJean-Christophe PLAGNIOL-VILLARD /* Enable off mode for NWE in PADCONF_GPMC_NWE register */ 2500a0e4badSJean-Christophe PLAGNIOL-VILLARD writew(readw(&ctrl_base ->gpmc_nwe) | 0x0E00, &ctrl_base->gpmc_nwe); 2510a0e4badSJean-Christophe PLAGNIOL-VILLARD /* Enable off mode for NOE in PADCONF_GPMC_NADV_ALE register */ 2520a0e4badSJean-Christophe PLAGNIOL-VILLARD writew(readw(&ctrl_base->gpmc_noe) | 0x0E00, &ctrl_base->gpmc_noe); 2530a0e4badSJean-Christophe PLAGNIOL-VILLARD /* Enable off mode for ALE in PADCONF_GPMC_NADV_ALE register */ 2540a0e4badSJean-Christophe PLAGNIOL-VILLARD writew(readw(&ctrl_base->gpmc_nadv_ale) | 0x0E00, 2550a0e4badSJean-Christophe PLAGNIOL-VILLARD &ctrl_base->gpmc_nadv_ale); 2566921b314SSanjeev Premi } 2576921b314SSanjeev Premi 2586921b314SSanjeev Premi /** 2596921b314SSanjeev Premi * Reset the ethernet chip. 2606921b314SSanjeev Premi */ 2616921b314SSanjeev Premi static void reset_net_chip(void) 2626921b314SSanjeev Premi { 263c0682587SSriramakrishnan int ret; 264c0682587SSriramakrishnan int rst_gpio; 2650a0e4badSJean-Christophe PLAGNIOL-VILLARD 266c0682587SSriramakrishnan if (get_omap3_evm_rev() == OMAP3EVM_BOARD_GEN_1) { 267c0682587SSriramakrishnan rst_gpio = OMAP3EVM_GPIO_ETH_RST_GEN1; 268c0682587SSriramakrishnan } else { 269c0682587SSriramakrishnan rst_gpio = OMAP3EVM_GPIO_ETH_RST_GEN2; 270c0682587SSriramakrishnan } 2710a0e4badSJean-Christophe PLAGNIOL-VILLARD 27284c3b631SSanjeev Premi ret = gpio_request(rst_gpio, ""); 273c0682587SSriramakrishnan if (ret < 0) { 274c0682587SSriramakrishnan printf("Unable to get GPIO %d\n", rst_gpio); 275c0682587SSriramakrishnan return ; 276c0682587SSriramakrishnan } 277c0682587SSriramakrishnan 278c0682587SSriramakrishnan /* Configure as output */ 27984c3b631SSanjeev Premi gpio_direction_output(rst_gpio, 0); 280c0682587SSriramakrishnan 281c0682587SSriramakrishnan /* Send a pulse on the GPIO pin */ 28284c3b631SSanjeev Premi gpio_set_value(rst_gpio, 1); 2830a0e4badSJean-Christophe PLAGNIOL-VILLARD udelay(1); 28484c3b631SSanjeev Premi gpio_set_value(rst_gpio, 0); 2850a0e4badSJean-Christophe PLAGNIOL-VILLARD udelay(1); 28684c3b631SSanjeev Premi gpio_set_value(rst_gpio, 1); 2870a0e4badSJean-Christophe PLAGNIOL-VILLARD } 2880a0e4badSJean-Christophe PLAGNIOL-VILLARD 2890a0e4badSJean-Christophe PLAGNIOL-VILLARD int board_eth_init(bd_t *bis) 2900a0e4badSJean-Christophe PLAGNIOL-VILLARD { 2910a0e4badSJean-Christophe PLAGNIOL-VILLARD int rc = 0; 2920d43fdedSDerald D. Woods #if defined(CONFIG_SMC911X) 2935e463a24SSanjeev Premi #define STR_ENV_ETHADDR "ethaddr" 2945e463a24SSanjeev Premi 2955e463a24SSanjeev Premi struct eth_device *dev; 2965e463a24SSanjeev Premi uchar eth_addr[6]; 2975e463a24SSanjeev Premi 2980a0e4badSJean-Christophe PLAGNIOL-VILLARD rc = smc911x_initialize(0, CONFIG_SMC911X_BASE); 2995e463a24SSanjeev Premi 3005e463a24SSanjeev Premi if (!eth_getenv_enetaddr(STR_ENV_ETHADDR, eth_addr)) { 3015e463a24SSanjeev Premi dev = eth_get_dev_by_index(0); 3025e463a24SSanjeev Premi if (dev) { 303*fd1e959eSSimon Glass eth_env_set_enetaddr(STR_ENV_ETHADDR, dev->enetaddr); 3045e463a24SSanjeev Premi } else { 3055e463a24SSanjeev Premi printf("omap3evm: Couldn't get eth device\n"); 3065e463a24SSanjeev Premi rc = -1; 3075e463a24SSanjeev Premi } 3085e463a24SSanjeev Premi } 3090d43fdedSDerald D. Woods #endif /* CONFIG_SMC911X */ 3100a0e4badSJean-Christophe PLAGNIOL-VILLARD return rc; 3110a0e4badSJean-Christophe PLAGNIOL-VILLARD } 3125626f336SSanjeev Premi #endif /* CONFIG_CMD_NET */ 313dcc4f38bSVaibhav Hiremath 3144aa2ba3aSMasahiro Yamada #if defined(CONFIG_MMC) 315dcc4f38bSVaibhav Hiremath int board_mmc_init(bd_t *bis) 316dcc4f38bSVaibhav Hiremath { 317e3913f56SNikita Kiryanov return omap_mmc_init(0, 0, 0, -1, -1); 318dcc4f38bSVaibhav Hiremath } 319aac5450eSPaul Kocialkowski 320aac5450eSPaul Kocialkowski void board_mmc_power_init(void) 321aac5450eSPaul Kocialkowski { 322aac5450eSPaul Kocialkowski twl4030_power_mmc_init(0); 323aac5450eSPaul Kocialkowski } 3240d43fdedSDerald D. Woods #endif /* CONFIG_MMC */ 3250d43fdedSDerald D. Woods 3260d43fdedSDerald D. Woods #if defined(CONFIG_USB_EHCI_HCD) 3270d43fdedSDerald D. Woods static struct omap_usbhs_board_data usbhs_bdata = { 3280d43fdedSDerald D. Woods .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED, 3290d43fdedSDerald D. Woods .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, 3300d43fdedSDerald D. Woods .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED 3310d43fdedSDerald D. Woods }; 3320d43fdedSDerald D. Woods 3330d43fdedSDerald D. Woods int ehci_hcd_init(int index, enum usb_init_type init, 3340d43fdedSDerald D. Woods struct ehci_hccr **hccr, struct ehci_hcor **hcor) 3350d43fdedSDerald D. Woods { 3360d43fdedSDerald D. Woods return omap_ehci_hcd_init(index, &usbhs_bdata, hccr, hcor); 3370d43fdedSDerald D. Woods } 3380d43fdedSDerald D. Woods 3390d43fdedSDerald D. Woods int ehci_hcd_stop(int index) 3400d43fdedSDerald D. Woods { 3410d43fdedSDerald D. Woods return omap_ehci_hcd_stop(); 3420d43fdedSDerald D. Woods } 3430d43fdedSDerald D. Woods #endif /* CONFIG_USB_EHCI_HCD */ 3440d43fdedSDerald D. Woods 3450d43fdedSDerald D. Woods #if defined(CONFIG_USB_ETHER) && defined(CONFIG_USB_MUSB_GADGET) && !defined(CONFIG_CMD_NET) 3460d43fdedSDerald D. Woods int board_eth_init(bd_t *bis) 3470d43fdedSDerald D. Woods { 3480d43fdedSDerald D. Woods return usb_eth_initialize(bis); 3490d43fdedSDerald D. Woods } 3500d43fdedSDerald D. Woods #endif /* CONFIG_USB_ETHER */ 351