]> git.sur5r.net Git - u-boot/blobdiff - board/gateworks/gw_ventana/gw_ventana.c
env: Rename getenv/_f() to env_get()
[u-boot] / board / gateworks / gw_ventana / gw_ventana.c
index 5d871ceed91a882db6f4cd6ac8418335f96d541b..4ddc7e1fa218613c023360c886b1fcda91b5c0fe 100644 (file)
 #include <asm/arch/mxc_hdmi.h>
 #include <asm/arch/sys_proto.h>
 #include <asm/gpio.h>
-#include <asm/imx-common/boot_mode.h>
-#include <asm/imx-common/sata.h>
-#include <asm/imx-common/spi.h>
-#include <asm/imx-common/video.h>
+#include <asm/mach-imx/boot_mode.h>
+#include <asm/mach-imx/sata.h>
+#include <asm/mach-imx/spi.h>
+#include <asm/mach-imx/video.h>
 #include <asm/io.h>
+#include <asm/setup.h>
 #include <dm.h>
 #include <dm/platform_data/serial_mxc.h>
 #include <hwconfig.h>
@@ -52,17 +53,6 @@ struct ventana_board_info ventana_info;
 
 static int board_type;
 
-/* MMC */
-static iomux_v3_cfg_t const usdhc3_pads[] = {
-       IOMUX_PADS(PAD_SD3_CLK__SD3_CLK    | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
-       IOMUX_PADS(PAD_SD3_CMD__SD3_CMD    | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
-       IOMUX_PADS(PAD_SD3_DAT0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
-       IOMUX_PADS(PAD_SD3_DAT1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
-       IOMUX_PADS(PAD_SD3_DAT2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
-       IOMUX_PADS(PAD_SD3_DAT3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
-       IOMUX_PADS(PAD_SD3_DAT5__GPIO7_IO00  | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
-};
-
 /* ENET */
 static iomux_v3_cfg_t const enet_pads[] = {
        IOMUX_PADS(PAD_ENET_MDIO__ENET_MDIO  | MUX_PAD_CTRL(ENET_PAD_CTRL)),
@@ -87,7 +77,7 @@ static iomux_v3_cfg_t const enet_pads[] = {
        IOMUX_PADS(PAD_ENET_TXD0__GPIO1_IO30 | DIO_PAD_CFG),
 };
 
-/* NAND */
+#ifdef CONFIG_CMD_NAND
 static iomux_v3_cfg_t const nfc_pads[] = {
        IOMUX_PADS(PAD_NANDF_CLE__NAND_CLE     | MUX_PAD_CTRL(NO_PAD_CTRL)),
        IOMUX_PADS(PAD_NANDF_ALE__NAND_ALE     | MUX_PAD_CTRL(NO_PAD_CTRL)),
@@ -106,7 +96,6 @@ static iomux_v3_cfg_t const nfc_pads[] = {
        IOMUX_PADS(PAD_NANDF_D7__NAND_DATA07   | MUX_PAD_CTRL(NO_PAD_CTRL)),
 };
 
-#ifdef CONFIG_CMD_NAND
 static void setup_gpmi_nand(void)
 {
        struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
@@ -143,8 +132,9 @@ static void setup_iomux_enet(int gpio)
        /* toggle PHY_RST# */
        gpio_request(gpio, "phy_rst#");
        gpio_direction_output(gpio, 0);
-       mdelay(2);
+       mdelay(10);
        gpio_set_value(gpio, 1);
+       mdelay(100);
 }
 
 #ifdef CONFIG_USB_EHCI_MX6
@@ -186,35 +176,15 @@ int board_ehci_hcd_init(int port)
 
 int board_ehci_power(int port, int on)
 {
-       if (port)
-               return 0;
-       gpio_set_value(GP_USB_OTG_PWR, on);
+       /* enable OTG VBUS */
+       if (!port && board_type < GW_UNKNOWN) {
+               if (gpio_cfg[board_type].otgpwr_en)
+                       gpio_set_value(gpio_cfg[board_type].otgpwr_en, on);
+       }
        return 0;
 }
 #endif /* CONFIG_USB_EHCI_MX6 */
 
-#ifdef CONFIG_FSL_ESDHC
-static struct fsl_esdhc_cfg usdhc_cfg = { USDHC3_BASE_ADDR };
-
-int board_mmc_getcd(struct mmc *mmc)
-{
-       /* Card Detect */
-       gpio_request(GP_SD3_CD, "sd_cd");
-       gpio_direction_input(GP_SD3_CD);
-       return !gpio_get_value(GP_SD3_CD);
-}
-
-int board_mmc_init(bd_t *bis)
-{
-       /* Only one USDHC controller on Ventana */
-       SETUP_IOMUX_PADS(usdhc3_pads);
-       usdhc_cfg.sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
-       usdhc_cfg.max_bus_width = 4;
-
-       return fsl_esdhc_initialize(bis, &usdhc_cfg);
-}
-#endif /* CONFIG_FSL_ESDHC */
-
 #ifdef CONFIG_MXC_SPI
 iomux_v3_cfg_t const ecspi1_pads[] = {
        /* SS1 */
@@ -257,12 +227,56 @@ int board_phy_config(struct phy_device *phydev)
                phy_write(phydev, MDIO_DEVAD_NONE, 22, 0);
        }
 
+       /* TI DP83867 */
+       else if (phydev->phy_id == 0x2000a231) {
+               /* configure register 0x170 for ref CLKOUT */
+               phy_write(phydev, MDIO_DEVAD_NONE, 13, 0x001f);
+               phy_write(phydev, MDIO_DEVAD_NONE, 14, 0x0170);
+               phy_write(phydev, MDIO_DEVAD_NONE, 13, 0x401f);
+               val = phy_read(phydev, MDIO_DEVAD_NONE, 14);
+               val &= ~0x1f00;
+               val |= 0x0b00; /* chD tx clock*/
+               phy_write(phydev, MDIO_DEVAD_NONE, 14, val);
+       }
+
        if (phydev->drv->config)
                phydev->drv->config(phydev);
 
        return 0;
 }
 
+#ifdef CONFIG_MV88E61XX_SWITCH
+int mv88e61xx_hw_reset(struct phy_device *phydev)
+{
+       struct mii_dev *bus = phydev->bus;
+
+       /* GPIO[0] output, CLK125 */
+       debug("enabling RGMII_REFCLK\n");
+       bus->write(bus, 0x1c /*MV_GLOBAL2*/, 0,
+                  0x1a /*MV_SCRATCH_MISC*/,
+                  (1 << 15) | (0x62 /*MV_GPIO_DIR*/ << 8) | 0xfe);
+       bus->write(bus, 0x1c /*MV_GLOBAL2*/, 0,
+                  0x1a /*MV_SCRATCH_MISC*/,
+                  (1 << 15) | (0x68 /*MV_GPIO01_CNTL*/ << 8) | 7);
+
+       /* RGMII delay - Physical Control register bit[15:14] */
+       debug("setting port%d RGMII rx/tx delay\n", CONFIG_MV88E61XX_CPU_PORT);
+       /* forced 1000mbps full-duplex link */
+       bus->write(bus, 0x10 + CONFIG_MV88E61XX_CPU_PORT, 0, 1, 0xc0fe);
+       phydev->autoneg = AUTONEG_DISABLE;
+       phydev->speed = SPEED_1000;
+       phydev->duplex = DUPLEX_FULL;
+
+       /* LED configuration: 7:4-green (8=Activity)  3:0 amber (9=10Link) */
+       bus->write(bus, 0x10, 0, 0x16, 0x8089);
+       bus->write(bus, 0x11, 0, 0x16, 0x8089);
+       bus->write(bus, 0x12, 0, 0x16, 0x8089);
+       bus->write(bus, 0x13, 0, 0x16, 0x8089);
+
+       return 0;
+}
+#endif // CONFIG_MV88E61XX_SWITCH
+
 int board_eth_init(bd_t *bis)
 {
 #ifdef CONFIG_FEC_MXC
@@ -284,11 +298,11 @@ int board_eth_init(bd_t *bis)
 #endif
 
        /* default to the first detected enet dev */
-       if (!getenv("ethprime")) {
+       if (!env_get("ethprime")) {
                struct eth_device *dev = eth_get_dev_by_index(0);
                if (dev) {
-                       setenv("ethprime", dev->name);
-                       printf("set ethprime to %s\n", getenv("ethprime"));
+                       env_set("ethprime", dev->name);
+                       printf("set ethprime to %s\n", env_get("ethprime"));
                }
        }
 
@@ -565,7 +579,7 @@ void board_pci_fixup_dev(struct pci_controller *hose, pci_dev_t dev,
  */
 void get_board_serial(struct tag_serialnr *serialnr)
 {
-       char *serial = getenv("serial#");
+       char *serial = env_get("serial#");
 
        if (serial) {
                serialnr->high = 0;
@@ -619,7 +633,7 @@ int board_init(void)
 #endif
        setup_ventana_i2c();
 
-#ifdef CONFIG_CMD_SATA
+#ifdef CONFIG_SATA
        setup_sata();
 #endif
        /* read Gateworks EEPROM into global struct (used later) */
@@ -644,11 +658,11 @@ int checkboard(void)
        int quiet; /* Quiet or minimal output mode */
 
        quiet = 0;
-       p = getenv("quiet");
+       p = env_get("quiet");
        if (p)
                quiet = simple_strtol(p, NULL, 10);
        else
-               setenv("quiet", "0");
+               env_set("quiet", "0");
 
        puts("\nGateworks Corporation Copyright 2014\n");
        if (info->model[0]) {
@@ -692,6 +706,8 @@ int checkboard(void)
 static const struct boot_mode board_boot_modes[] = {
        /* NAND: 64pages per block, 3 row addr cycles, 2 copies of FCB/DBBT */
        { "nand", MAKE_CFGVAL(0x80, 0x02, 0x00, 0x00) },
+       { "emmc2", MAKE_CFGVAL(0x60, 0x48, 0x00, 0x00) }, /* GW5600 */
+       { "emmc3", MAKE_CFGVAL(0x60, 0x50, 0x00, 0x00) }, /* GW5903/GW5904 */
        { NULL, 0 },
 };
 #endif
@@ -721,58 +737,59 @@ int misc_init_r(void)
                else if (is_cpu_type(MXC_CPU_MX6DL) ||
                         is_cpu_type(MXC_CPU_MX6SOLO))
                        cputype = "imx6dl";
-               setenv("soctype", cputype);
+               env_set("soctype", cputype);
                if (8 << (ventana_info.nand_flash_size-1) >= 2048)
-                       setenv("flash_layout", "large");
+                       env_set("flash_layout", "large");
                else
-                       setenv("flash_layout", "normal");
+                       env_set("flash_layout", "normal");
                memset(str, 0, sizeof(str));
                for (i = 0; i < (sizeof(str)-1) && info->model[i]; i++)
                        str[i] = tolower(info->model[i]);
-               setenv("model", str);
-               if (!getenv("fdt_file")) {
+               env_set("model", str);
+               if (!env_get("fdt_file")) {
                        sprintf(fdt, "%s-%s.dtb", cputype, str);
-                       setenv("fdt_file", fdt);
+                       env_set("fdt_file", fdt);
                }
                p = strchr(str, '-');
                if (p) {
                        *p++ = 0;
 
-                       setenv("model_base", str);
+                       env_set("model_base", str);
                        sprintf(fdt, "%s-%s.dtb", cputype, str);
-                       setenv("fdt_file1", fdt);
+                       env_set("fdt_file1", fdt);
                        if (board_type != GW551x &&
                            board_type != GW552x &&
-                           board_type != GW553x)
+                           board_type != GW553x &&
+                           board_type != GW560x)
                                str[4] = 'x';
                        str[5] = 'x';
                        str[6] = 0;
                        sprintf(fdt, "%s-%s.dtb", cputype, str);
-                       setenv("fdt_file2", fdt);
+                       env_set("fdt_file2", fdt);
                }
 
                /* initialize env from EEPROM */
                if (test_bit(EECONFIG_ETH0, info->config) &&
-                   !getenv("ethaddr")) {
-                       eth_setenv_enetaddr("ethaddr", info->mac0);
+                   !env_get("ethaddr")) {
+                       eth_env_set_enetaddr("ethaddr", info->mac0);
                }
                if (test_bit(EECONFIG_ETH1, info->config) &&
-                   !getenv("eth1addr")) {
-                       eth_setenv_enetaddr("eth1addr", info->mac1);
+                   !env_get("eth1addr")) {
+                       eth_env_set_enetaddr("eth1addr", info->mac1);
                }
 
                /* board serial-number */
                sprintf(str, "%6d", info->serial);
-               setenv("serial#", str);
+               env_set("serial#", str);
 
                /* memory MB */
                sprintf(str, "%d", (int) (gd->ram_size >> 20));
-               setenv("mem_mb", str);
+               env_set("mem_mb", str);
        }
 
        /* Set a non-initialized hwconfig based on board configuration */
-       if (!strcmp(getenv("hwconfig"), "_UNKNOWN_")) {
-               sprintf(buf, "hwconfig=");
+       if (!strcmp(env_get("hwconfig"), "_UNKNOWN_")) {
+               buf[0] = 0;
                if (gpio_cfg[board_type].rs232_en)
                        strcat(buf, "rs232;");
                for (i = 0; i < gpio_cfg[board_type].dio_num; i++) {
@@ -781,7 +798,7 @@ int misc_init_r(void)
                        if (strlen(buf) + strlen(buf1) < sizeof(buf))
                                strcat(buf, buf1);
                }
-               setenv("hwconfig", buf);
+               env_set("hwconfig", buf);
        }
 
        /* setup baseboard specific GPIO based on board and env */
@@ -1018,7 +1035,7 @@ int fdt_fixup_sky2(void *blob, int np, struct pci_dev *dev)
        int j;
 
        sprintf(mac, "eth1addr");
-       tmp = getenv(mac);
+       tmp = env_get(mac);
        if (tmp) {
                for (j = 0; j < 6; j++) {
                        mac_addr[j] = tmp ?
@@ -1074,6 +1091,12 @@ void ft_board_pci_fixup(void *blob, bd_t *bd)
 }
 #endif /* if defined(CONFIG_CMD_PCI) */
 
+void ft_board_wdog_fixup(void *blob, const char *path)
+{
+       ft_delprop_path(blob, path, "ext-reset-output");
+       ft_delprop_path(blob, path, "fsl,ext-reset-output");
+}
+
 /*
  * called prior to booting kernel or by 'fdt boardsetup' command
  *
@@ -1095,8 +1118,8 @@ int ft_board_setup(void *blob, bd_t *bd)
                { "sst,w25q256",          MTD_DEV_TYPE_NOR, },  /* SPI flash */
                { "fsl,imx6q-gpmi-nand",  MTD_DEV_TYPE_NAND, }, /* NAND flash */
        };
-       const char *model = getenv("model");
-       const char *display = getenv("display");
+       const char *model = env_get("model");
+       const char *display = env_get("display");
        int i;
        char rev = 0;
 
@@ -1108,7 +1131,7 @@ int ft_board_setup(void *blob, bd_t *bd)
                }
        }
 
-       if (getenv("fdt_noauto")) {
+       if (env_get("fdt_noauto")) {
                puts("   Skiping ft_board_setup (fdt_noauto defined)\n");
                return 0;
        }
@@ -1129,15 +1152,15 @@ int ft_board_setup(void *blob, bd_t *bd)
        printf("   Adjusting FDT per EEPROM for %s...\n", model);
 
        /* board serial number */
-       fdt_setprop(blob, 0, "system-serial", getenv("serial#"),
-                   strlen(getenv("serial#")) + 1);
+       fdt_setprop(blob, 0, "system-serial", env_get("serial#"),
+                   strlen(env_get("serial#")) + 1);
 
        /* board (model contains model from device-tree) */
        fdt_setprop(blob, 0, "board", info->model,
                    strlen((const char *)info->model) + 1);
 
        /* set desired digital video capture format */
-       ft_sethdmiinfmt(blob, getenv("hdmiinfmt"));
+       ft_sethdmiinfmt(blob, env_get("hdmiinfmt"));
 
        /*
         * Board model specific fixups
@@ -1156,8 +1179,7 @@ int ft_board_setup(void *blob, bd_t *bd)
 
                /* GW51xx-E adds WDOG1_B external reset */
                if (rev < 'E')
-                       ft_delprop_path(blob, WDOG1_PATH,
-                                       "fsl,ext-reset-output");
+                       ft_board_wdog_fixup(blob, WDOG1_PATH);
                break;
 
        case GW52xx:
@@ -1187,23 +1209,19 @@ int ft_board_setup(void *blob, bd_t *bd)
                            strstr((const char *)info->model, "SP331-B"))
                                gpio_cfg[board_type].usd_vsel = 0;
 
-                       /* GW520x-E adds WDOG1_B external reset */
-                       if (info->model[4] == '0' && rev < 'E')
-                               ft_delprop_path(blob, WDOG1_PATH,
-                                               "fsl,ext-reset-output");
-
                        /* GW522x-B adds WDOG1_B external reset */
-                       if (info->model[4] == '2' && rev < 'B')
-                               ft_delprop_path(blob, WDOG1_PATH,
-                                               "fsl,ext-reset-output");
+                       ft_board_wdog_fixup(blob, WDOG1_PATH);
                }
+
+               /* GW520x-E adds WDOG1_B external reset */
+               else if (info->model[4] == '0' && rev < 'E')
+                       ft_board_wdog_fixup(blob, WDOG1_PATH);
                break;
 
        case GW53xx:
                /* GW53xx-E adds WDOG1_B external reset */
                if (rev < 'E')
-                       ft_delprop_path(blob, WDOG1_PATH,
-                                       "fsl,ext-reset-output");
+                       ft_board_wdog_fixup(blob, WDOG1_PATH);
                break;
 
        case GW54xx:
@@ -1217,8 +1235,7 @@ int ft_board_setup(void *blob, bd_t *bd)
 
                /* GW54xx-E adds WDOG2_B external reset */
                if (rev < 'E')
-                       ft_delprop_path(blob, WDOG2_PATH,
-                                       "fsl,ext-reset-output");
+                       ft_board_wdog_fixup(blob, WDOG2_PATH);
                break;
 
        case GW551x:
@@ -1267,8 +1284,7 @@ int ft_board_setup(void *blob, bd_t *bd)
 
                /* GW551x-C adds WDOG1_B external reset */
                if (rev < 'C')
-                       ft_delprop_path(blob, WDOG1_PATH,
-                                       "fsl,ext-reset-output");
+                       ft_board_wdog_fixup(blob, WDOG1_PATH);
                break;
        }
 
@@ -1299,7 +1315,7 @@ int ft_board_setup(void *blob, bd_t *bd)
        }
 
 #if defined(CONFIG_CMD_PCI)
-       if (!getenv("nopcifixup"))
+       if (!env_get("nopcifixup"))
                ft_board_pci_fixup(blob, bd);
 #endif
 
@@ -1308,7 +1324,7 @@ int ft_board_setup(void *blob, bd_t *bd)
         *  remove nodes by alias path if EEPROM config tells us the
         *  peripheral is not loaded on the board.
         */
-       if (getenv("fdt_noconfig")) {
+       if (env_get("fdt_noconfig")) {
                puts("   Skiping periperhal config (fdt_noconfig defined)\n");
                return 0;
        }