env: Move env_set() to env.h
[oweals/u-boot.git] / board / ti / evm / evm.c
index 8a3aa0c5bfdad3234d424f0b98e34e58ab3b3791..d0b9bafbd1b675fe544e5693ebd2f8ffe04026f8 100644 (file)
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * (C) Copyright 2004-2011
  * Texas Instruments, <www.ti.com>
@@ -8,26 +9,11 @@
  * Derived from Beagle Board and 3430 SDP code by
  *     Richard Woodruff <r-woodruff2@ti.com>
  *     Syed Mohammed Khasim <khasim@ti.com>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
  */
 #include <common.h>
+#include <dm.h>
+#include <env.h>
+#include <ns16550.h>
 #include <netdev.h>
 #include <asm/io.h>
 #include <asm/arch/mem.h>
 #include <asm/arch/mmc_host_def.h>
 #include <asm/gpio.h>
 #include <i2c.h>
+#include <twl4030.h>
 #include <asm/mach-types.h>
-#include <linux/mtd/nand.h>
+#include <asm/omap_musb.h>
+#include <linux/mtd/rawnand.h>
+#include <linux/usb/ch9.h>
+#include <linux/usb/gadget.h>
+#include <linux/usb/musb.h>
 #include "evm.h"
 
-#define OMAP3EVM_GPIO_ETH_RST_GEN1             64
-#define OMAP3EVM_GPIO_ETH_RST_GEN2             7
+#define OMAP3EVM_GPIO_ETH_RST_GEN1 64
+#define OMAP3EVM_GPIO_ETH_RST_GEN2 7
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -75,25 +66,19 @@ static void omap3_evm_get_revision(void)
        default:
                omap3_evm_version = OMAP3EVM_BOARD_GEN_2;
        }
-#else
+#else /* !CONFIG_CMD_NET */
 #if defined(CONFIG_STATIC_BOARD_REV)
-       /*
-        * Look for static defintion of the board revision
-        */
+       /* Look for static defintion of the board revision */
        omap3_evm_version = CONFIG_STATIC_BOARD_REV;
 #else
-       /*
-        * Fallback to the default above.
-        */
+       /* Fallback to the default above */
        omap3_evm_version = OMAP3EVM_BOARD_GEN_2;
-#endif
-#endif /* CONFIG_CMD_NET */
+#endif /* CONFIG_STATIC_BOARD_REV */
+#endif /* CONFIG_CMD_NET */
 }
 
-#ifdef CONFIG_USB_OMAP3
-/*
- * MUSB port on OMAP3EVM Rev >= E requires extvbus programming.
- */
+#if defined(CONFIG_USB_MUSB_GADGET) || defined(CONFIG_USB_MUSB_HOST)
+/* MUSB port on OMAP3EVM Rev >= E requires extvbus programming. */
 u8 omap3_evm_need_extvbus(void)
 {
        u8 retval = 0;
@@ -103,7 +88,7 @@ u8 omap3_evm_need_extvbus(void)
 
        return retval;
 }
-#endif
+#endif /* CONFIG_USB_MUSB_{GADGET,HOST} */
 
 /*
  * Routine: board_init
@@ -120,7 +105,18 @@ int board_init(void)
        return 0;
 }
 
-#ifdef CONFIG_SPL_BUILD
+#if defined(CONFIG_SPL_OS_BOOT)
+int spl_start_uboot(void)
+{
+       /* break into full u-boot on 'c' */
+       if (serial_tstc() && serial_getc() == 'c')
+               return 1;
+
+       return 0;
+}
+#endif /* CONFIG_SPL_OS_BOOT */
+
+#if defined(CONFIG_SPL_BUILD)
 /*
  * Routine: get_board_mem_timings
  * Description: If we use SPL then there is no x-loader nor config header
@@ -153,7 +149,34 @@ void get_board_mem_timings(struct board_sdrc_timings *timings)
        timings->rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_165MHz;
        timings->mr = MICRON_V_MR_165;
 }
-#endif
+#endif /* CONFIG_SPL_BUILD */
+
+#if defined(CONFIG_USB_MUSB_OMAP2PLUS)
+static struct musb_hdrc_config musb_config = {
+       .multipoint     = 1,
+       .dyn_fifo       = 1,
+       .num_eps        = 16,
+       .ram_bits       = 12,
+};
+
+static struct omap_musb_board_data musb_board_data = {
+       .interface_type = MUSB_INTERFACE_ULPI,
+};
+
+static struct musb_hdrc_platform_data musb_plat = {
+#if defined(CONFIG_USB_MUSB_HOST)
+       .mode           = MUSB_HOST,
+#elif defined(CONFIG_USB_MUSB_GADGET)
+       .mode           = MUSB_PERIPHERAL,
+#else
+#error "Please define either CONFIG_USB_MUSB_HOST or CONFIG_USB_MUSB_GADGET"
+#endif /* CONFIG_USB_MUSB_{GADGET,HOST} */
+       .config         = &musb_config,
+       .power          = 100,
+       .platform_ops   = &omap2430_ops,
+       .board_data     = &musb_board_data,
+};
+#endif /* CONFIG_USB_MUSB_OMAP2PLUS */
 
 /*
  * Routine: misc_init_r
@@ -161,9 +184,10 @@ void get_board_mem_timings(struct board_sdrc_timings *timings)
  */
 int misc_init_r(void)
 {
+       twl4030_power_init();
 
-#ifdef CONFIG_DRIVER_OMAP34XX_I2C
-       i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
+#ifdef CONFIG_SYS_I2C_OMAP24XX
+       i2c_init(CONFIG_SYS_OMAP24_I2C_SPEED, CONFIG_SYS_OMAP24_I2C_SLAVE);
 #endif
 
 #if defined(CONFIG_CMD_NET)
@@ -174,8 +198,15 @@ int misc_init_r(void)
 #if defined(CONFIG_CMD_NET)
        reset_net_chip();
 #endif
-       dieid_num_r();
+       omap_die_id_display();
 
+#if defined(CONFIG_USB_MUSB_OMAP2PLUS)
+       musb_register(&musb_plat, &musb_board_data, (void *)MUSB_BASE);
+#endif
+
+#if defined(CONFIG_USB_ETHER) && defined(CONFIG_USB_MUSB_GADGET)
+       omap_die_id_usbethaddr();
+#endif
        return 0;
 }
 
@@ -190,7 +221,7 @@ void set_muxconf_regs(void)
        MUX_EVM();
 }
 
-#ifdef CONFIG_CMD_NET
+#if defined(CONFIG_CMD_NET)
 /*
  * Routine: setup_net_chip
  * Description: Setting up the configuration GPMC registers specific to the
@@ -251,33 +282,30 @@ static void reset_net_chip(void)
 
 int board_eth_init(bd_t *bis)
 {
-       int rc = 0;
-#ifdef CONFIG_SMC911X
-#define STR_ENV_ETHADDR        "ethaddr"
-
-       struct eth_device *dev;
-       uchar eth_addr[6];
-
-       rc = smc911x_initialize(0, CONFIG_SMC911X_BASE);
-
-       if (!eth_getenv_enetaddr(STR_ENV_ETHADDR, eth_addr)) {
-               dev = eth_get_dev_by_index(0);
-               if (dev) {
-                       eth_setenv_enetaddr(STR_ENV_ETHADDR, dev->enetaddr);
-               } else {
-                       printf("omap3evm: Couldn't get eth device\n");
-                       rc = -1;
-               }
-       }
+#if defined(CONFIG_SMC911X)
+       env_set("ethaddr", NULL);
+       return smc911x_initialize(0, CONFIG_SMC911X_BASE);
+#else
+       return 0;
 #endif
-       return rc;
 }
 #endif /* CONFIG_CMD_NET */
 
-#if defined(CONFIG_GENERIC_MMC) && !defined(CONFIG_SPL_BUILD)
+#if defined(CONFIG_MMC)
 int board_mmc_init(bd_t *bis)
 {
-       omap_mmc_init(0, 0, 0);
-       return 0;
+       return omap_mmc_init(0, 0, 0, -1, -1);
 }
-#endif
+
+void board_mmc_power_init(void)
+{
+       twl4030_power_mmc_init(0);
+}
+#endif /* CONFIG_MMC */
+
+#if defined(CONFIG_USB_ETHER) && defined(CONFIG_USB_MUSB_GADGET) && !defined(CONFIG_CMD_NET)
+int board_eth_init(bd_t *bis)
+{
+       return usb_eth_initialize(bis);
+}
+#endif /* CONFIG_USB_ETHER */