]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
Merge remote-tracking branch 'u-boot-imx/master'
authorAlbert ARIBAUD <albert.u.boot@aribaud.net>
Wed, 8 Oct 2014 19:20:49 +0000 (21:20 +0200)
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>
Wed, 8 Oct 2014 19:20:49 +0000 (21:20 +0200)
The single file conflict below is actually trivial.

Conflicts:
board/boundary/nitrogen6x/nitrogen6x.c

1  2 
arch/arm/Kconfig
board/boundary/nitrogen6x/nitrogen6x.c
board/freescale/mx6qsabreauto/mx6qsabreauto.c
board/freescale/vf610twr/vf610twr.c
drivers/mtd/nand/Makefile
include/configs/mx6slevk.h
include/configs/nitrogen6x.h

diff --combined arch/arm/Kconfig
index 43ba33a2af5e08ca51d4c07153deda961a085196,8face21d56ef87ade9f703b5ac6d5430d0f63485..7365fca52635dbb9165dc3b6c982df50816aaafb
@@@ -414,6 -414,9 +414,9 @@@ config TARGET_HUMMINGBOAR
  config TARGET_TQMA6
        bool "TQ Systems TQMa6 board"
  
+ config TARGET_OT1200
+       bool "Bachmann OT1200"
  config OMAP34XX
        bool "OMAP34XX SoC"
  
@@@ -462,7 -465,6 +465,7 @@@ config ZYN
  config TEGRA
        bool "NVIDIA Tegra"
        select SPL
 +      select OF_CONTROL if !SPL_BUILD
  
  config TARGET_VEXPRESS_AEMV8A
        bool "Support vexpress_aemv8a"
@@@ -521,9 -523,6 +524,9 @@@ config TARGET_COLIBRI_PXA27
  config TARGET_JORNADA
        bool "Support jornada"
  
 +config ARCH_UNIPHIER
 +      bool "Panasonic UniPhier platform"
 +
  endchoice
  
  source "arch/arm/cpu/armv8/Kconfig"
@@@ -552,8 -551,6 +555,8 @@@ source "arch/arm/cpu/armv7/rmobile/Kcon
  
  source "arch/arm/cpu/armv7/tegra-common/Kconfig"
  
 +source "arch/arm/cpu/armv7/uniphier/Kconfig"
 +
  source "arch/arm/cpu/arm926ejs/versatile/Kconfig"
  
  source "arch/arm/cpu/armv7/zynq/Kconfig"
@@@ -583,6 -580,7 +586,7 @@@ source "board/atmel/at91sam9rlek/Kconfi
  source "board/atmel/at91sam9x5ek/Kconfig"
  source "board/atmel/sama5d3_xplained/Kconfig"
  source "board/atmel/sama5d3xek/Kconfig"
+ source "board/bachmann/ot1200/Kconfig"
  source "board/balloon3/Kconfig"
  source "board/barco/titanium/Kconfig"
  source "board/bluegiga/apx4devkit/Kconfig"
index 7edfe19367521dcee2d3a56f9d953fa5790d33ed,2762fcffae11e4256ae870a74a237204d2c76df7..951b820cbba8ab6d4c82150f6224ae7e76434973
@@@ -28,6 -28,9 +28,9 @@@
  #include <asm/arch/crm_regs.h>
  #include <asm/arch/mxc_hdmi.h>
  #include <i2c.h>
+ #include <input.h>
+ #include <netdev.h>
+ #include <usb/ehci-fsl.h>
  
  DECLARE_GLOBAL_DATA_PTR;
  #define GP_USB_OTG_PWR        IMX_GPIO_NR(3, 22)
@@@ -70,12 -73,12 +73,12 @@@ int dram_init(void
        return 0;
  }
  
- iomux_v3_cfg_t const uart1_pads[] = {
static iomux_v3_cfg_t const uart1_pads[] = {
        MX6_PAD_SD3_DAT6__UART1_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),
        MX6_PAD_SD3_DAT7__UART1_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),
  };
  
- iomux_v3_cfg_t const uart2_pads[] = {
static iomux_v3_cfg_t const uart2_pads[] = {
        MX6_PAD_EIM_D26__UART2_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),
        MX6_PAD_EIM_D27__UART2_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),
  };
@@@ -83,7 -86,7 +86,7 @@@
  #define PC MUX_PAD_CTRL(I2C_PAD_CTRL)
  
  /* I2C1, SGTL5000 */
- struct i2c_pads_info i2c_pad_info0 = {
+ static struct i2c_pads_info i2c_pad_info0 = {
        .scl = {
                .i2c_mode = MX6_PAD_EIM_D21__I2C1_SCL | PC,
                .gpio_mode = MX6_PAD_EIM_D21__GPIO3_IO21 | PC,
  };
  
  /* I2C2 Camera, MIPI */
- struct i2c_pads_info i2c_pad_info1 = {
+ static struct i2c_pads_info i2c_pad_info1 = {
        .scl = {
                .i2c_mode = MX6_PAD_KEY_COL3__I2C2_SCL | PC,
                .gpio_mode = MX6_PAD_KEY_COL3__GPIO4_IO12 | PC,
  };
  
  /* I2C3, J15 - RGB connector */
- struct i2c_pads_info i2c_pad_info2 = {
+ static struct i2c_pads_info i2c_pad_info2 = {
        .scl = {
                .i2c_mode = MX6_PAD_GPIO_5__I2C3_SCL | PC,
                .gpio_mode = MX6_PAD_GPIO_5__GPIO1_IO05 | PC,
        }
  };
  
- iomux_v3_cfg_t const usdhc3_pads[] = {
+ static iomux_v3_cfg_t const usdhc2_pads[] = {
+       MX6_PAD_SD2_CLK__SD2_CLK   | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+       MX6_PAD_SD2_CMD__SD2_CMD   | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+       MX6_PAD_SD2_DAT0__SD2_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+       MX6_PAD_SD2_DAT1__SD2_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+       MX6_PAD_SD2_DAT2__SD2_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+       MX6_PAD_SD2_DAT3__SD2_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+ };
+ static iomux_v3_cfg_t const usdhc3_pads[] = {
        MX6_PAD_SD3_CLK__SD3_CLK   | MUX_PAD_CTRL(USDHC_PAD_CTRL),
        MX6_PAD_SD3_CMD__SD3_CMD   | MUX_PAD_CTRL(USDHC_PAD_CTRL),
        MX6_PAD_SD3_DAT0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
        MX6_PAD_SD3_DAT5__GPIO7_IO00    | MUX_PAD_CTRL(NO_PAD_CTRL), /* CD */
  };
  
- iomux_v3_cfg_t const usdhc4_pads[] = {
static iomux_v3_cfg_t const usdhc4_pads[] = {
        MX6_PAD_SD4_CLK__SD4_CLK   | MUX_PAD_CTRL(USDHC_PAD_CTRL),
        MX6_PAD_SD4_CMD__SD4_CMD   | MUX_PAD_CTRL(USDHC_PAD_CTRL),
        MX6_PAD_SD4_DAT0__SD4_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
        MX6_PAD_NANDF_D6__GPIO2_IO06    | MUX_PAD_CTRL(NO_PAD_CTRL), /* CD */
  };
  
- iomux_v3_cfg_t const enet_pads1[] = {
static iomux_v3_cfg_t const enet_pads1[] = {
        MX6_PAD_ENET_MDIO__ENET_MDIO            | MUX_PAD_CTRL(ENET_PAD_CTRL),
        MX6_PAD_ENET_MDC__ENET_MDC              | MUX_PAD_CTRL(ENET_PAD_CTRL),
        MX6_PAD_RGMII_TXC__RGMII_TXC    | MUX_PAD_CTRL(ENET_PAD_CTRL),
        MX6_PAD_ENET_RXD0__GPIO1_IO27           | MUX_PAD_CTRL(NO_PAD_CTRL),
  };
  
- iomux_v3_cfg_t const enet_pads2[] = {
static iomux_v3_cfg_t const enet_pads2[] = {
        MX6_PAD_RGMII_RXC__RGMII_RXC    | MUX_PAD_CTRL(ENET_PAD_CTRL),
        MX6_PAD_RGMII_RD0__RGMII_RD0    | MUX_PAD_CTRL(ENET_PAD_CTRL),
        MX6_PAD_RGMII_RD1__RGMII_RD1    | MUX_PAD_CTRL(ENET_PAD_CTRL),
@@@ -189,7 -201,7 +201,7 @@@ static iomux_v3_cfg_t const misc_pads[
  };
  
  /* wl1271 pads on nitrogen6x */
- iomux_v3_cfg_t const wl12xx_pads[] = {
static iomux_v3_cfg_t const wl12xx_pads[] = {
        (MX6_PAD_NANDF_CS1__GPIO6_IO14 & ~MUX_PAD_CTRL_MASK)
                | MUX_PAD_CTRL(WEAK_PULLDOWN),
        (MX6_PAD_NANDF_CS2__GPIO6_IO15 & ~MUX_PAD_CTRL_MASK)
@@@ -235,9 -247,10 +247,10 @@@ static void setup_iomux_enet(void
        gpio_set_value(IMX_GPIO_NR(1, 27), 1); /* Nitrogen6X PHY reset */
  
        imx_iomux_v3_setup_multiple_pads(enet_pads2, ARRAY_SIZE(enet_pads2));
+       udelay(100);    /* Wait 100 us before using mii interface */
  }
  
- iomux_v3_cfg_t const usb_pads[] = {
static iomux_v3_cfg_t const usb_pads[] = {
        MX6_PAD_GPIO_17__GPIO7_IO12 | MUX_PAD_CTRL(NO_PAD_CTRL),
  };
  
@@@ -271,7 -284,7 +284,7 @@@ int board_ehci_power(int port, int on
  #endif
  
  #ifdef CONFIG_FSL_ESDHC
- struct fsl_esdhc_cfg usdhc_cfg[2] = {
+ static struct fsl_esdhc_cfg usdhc_cfg[2] = {
        {USDHC3_BASE_ADDR},
        {USDHC4_BASE_ADDR},
  };
  int board_mmc_getcd(struct mmc *mmc)
  {
        struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
-       int ret;
+       int gp_cd = (cfg->esdhc_base == USDHC3_BASE_ADDR) ? IMX_GPIO_NR(7, 0) :
+                       IMX_GPIO_NR(2, 6);
  
-       if (cfg->esdhc_base == USDHC3_BASE_ADDR) {
-               gpio_direction_input(IMX_GPIO_NR(7, 0));
-               ret = !gpio_get_value(IMX_GPIO_NR(7, 0));
-       } else {
-               gpio_direction_input(IMX_GPIO_NR(2, 6));
-               ret = !gpio_get_value(IMX_GPIO_NR(2, 6));
-       }
-       return ret;
+       gpio_direction_input(gp_cd);
+       return !gpio_get_value(gp_cd);
  }
  
  int board_mmc_init(bd_t *bis)
  #endif
  
  #ifdef CONFIG_MXC_SPI
- iomux_v3_cfg_t const ecspi1_pads[] = {
 +int board_spi_cs_gpio(unsigned bus, unsigned cs)
 +{
 +      return (bus == 0 && cs == 0) ? (IMX_GPIO_NR(3, 19)) : -1;
 +}
 +
+ static iomux_v3_cfg_t const ecspi1_pads[] = {
        /* SS1 */
        MX6_PAD_EIM_D19__GPIO3_IO19  | MUX_PAD_CTRL(NO_PAD_CTRL),
        MX6_PAD_EIM_D17__ECSPI1_MISO | MUX_PAD_CTRL(SPI_PAD_CTRL),
        MX6_PAD_EIM_D16__ECSPI1_SCLK | MUX_PAD_CTRL(SPI_PAD_CTRL),
  };
  
- void setup_spi(void)
static void setup_spi(void)
  {
        imx_iomux_v3_setup_multiple_pads(ecspi1_pads,
                                         ARRAY_SIZE(ecspi1_pads));
@@@ -472,6 -474,17 +479,17 @@@ static void enable_lvds(struct display_
        gpio_direction_output(LVDS_BACKLIGHT_GP, 1);
  }
  
+ static void enable_lvds_jeida(struct display_info_t const *dev)
+ {
+       struct iomuxc *iomux = (struct iomuxc *)
+                               IOMUXC_BASE_ADDR;
+       u32 reg = readl(&iomux->gpr[2]);
+       reg |= IOMUXC_GPR2_DATA_WIDTH_CH0_24BIT
+            |IOMUXC_GPR2_BIT_MAPPING_CH0_JEIDA;
+       writel(reg, &iomux->gpr[2]);
+       gpio_direction_output(LVDS_BACKLIGHT_GP, 1);
+ }
  static void enable_rgb(struct display_info_t const *dev)
  {
        imx_iomux_v3_setup_multiple_pads(
  }
  
  struct display_info_t const displays[] = {{
-       .bus    = -1,
-       .addr   = 0,
+       .bus    = 1,
+       .addr   = 0x50,
        .pixfmt = IPU_PIX_FMT_RGB24,
-       .detect = detect_hdmi,
+       .detect = detect_i2c,
        .enable = do_enable_hdmi,
        .mode   = {
                .name           = "HDMI",
                .vsync_len      = 10,
                .sync           = FB_SYNC_EXT,
                .vmode          = FB_VMODE_NONINTERLACED
+ } }, {
+       .bus    = 0,
+       .addr   = 0,
+       .pixfmt = IPU_PIX_FMT_RGB24,
+       .detect = NULL,
+       .enable = enable_lvds_jeida,
+       .mode   = {
+               .name           = "LDB-WXGA",
+               .refresh        = 60,
+               .xres           = 1280,
+               .yres           = 800,
+               .pixclock       = 14065,
+               .left_margin    = 40,
+               .right_margin   = 40,
+               .upper_margin   = 3,
+               .lower_margin   = 80,
+               .hsync_len      = 10,
+               .vsync_len      = 10,
+               .sync           = FB_SYNC_EXT,
+               .vmode          = FB_VMODE_NONINTERLACED
+ } }, {
+       .bus    = 0,
+       .addr   = 0,
+       .pixfmt = IPU_PIX_FMT_RGB24,
+       .detect = NULL,
+       .enable = enable_lvds,
+       .mode   = {
+               .name           = "LDB-WXGA-S",
+               .refresh        = 60,
+               .xres           = 1280,
+               .yres           = 800,
+               .pixclock       = 14065,
+               .left_margin    = 40,
+               .right_margin   = 40,
+               .upper_margin   = 3,
+               .lower_margin   = 80,
+               .hsync_len      = 10,
+               .vsync_len      = 10,
+               .sync           = FB_SYNC_EXT,
+               .vmode          = FB_VMODE_NONINTERLACED
  } }, {
        .bus    = 2,
        .addr   = 0x4,
                .vsync_len      = 10,
                .sync           = FB_SYNC_EXT,
                .vmode          = FB_VMODE_NONINTERLACED
+ } }, {
+       .bus    = 0,
+       .addr   = 0,
+       .pixfmt = IPU_PIX_FMT_LVDS666,
+       .detect = NULL,
+       .enable = enable_lvds,
+       .mode   = {
+               .name           = "LG-9.7",
+               .refresh        = 60,
+               .xres           = 1024,
+               .yres           = 768,
+               .pixclock       = 15385, /* ~65MHz */
+               .left_margin    = 480,
+               .right_margin   = 260,
+               .upper_margin   = 16,
+               .lower_margin   = 6,
+               .hsync_len      = 250,
+               .vsync_len      = 10,
+               .sync           = FB_SYNC_EXT,
+               .vmode          = FB_VMODE_NONINTERLACED
  } }, {
        .bus    = 2,
        .addr   = 0x38,
                .vsync_len      = 10,
                .sync           = FB_SYNC_EXT,
                .vmode          = FB_VMODE_NONINTERLACED
+ } }, {
+       .bus    = 2,
+       .addr   = 0x10,
+       .pixfmt = IPU_PIX_FMT_RGB666,
+       .detect = detect_i2c,
+       .enable = enable_rgb,
+       .mode   = {
+               .name           = "fusion7",
+               .refresh        = 60,
+               .xres           = 800,
+               .yres           = 480,
+               .pixclock       = 33898,
+               .left_margin    = 96,
+               .right_margin   = 24,
+               .upper_margin   = 3,
+               .lower_margin   = 10,
+               .hsync_len      = 72,
+               .vsync_len      = 7,
+               .sync           = 0x40000002,
+               .vmode          = FB_VMODE_NONINTERLACED
+ } }, {
+       .bus    = 0,
+       .addr   = 0,
+       .pixfmt = IPU_PIX_FMT_RGB666,
+       .detect = NULL,
+       .enable = enable_rgb,
+       .mode   = {
+               .name           = "svga",
+               .refresh        = 60,
+               .xres           = 800,
+               .yres           = 600,
+               .pixclock       = 15385,
+               .left_margin    = 220,
+               .right_margin   = 40,
+               .upper_margin   = 21,
+               .lower_margin   = 7,
+               .hsync_len      = 60,
+               .vsync_len      = 10,
+               .sync           = 0,
+               .vmode          = FB_VMODE_NONINTERLACED
+ } }, {
+       .bus    = 2,
+       .addr   = 0x41,
+       .pixfmt = IPU_PIX_FMT_LVDS666,
+       .detect = detect_i2c,
+       .enable = enable_lvds,
+       .mode   = {
+               .name           = "amp1024x600",
+               .refresh        = 60,
+               .xres           = 1024,
+               .yres           = 600,
+               .pixclock       = 15385,
+               .left_margin    = 220,
+               .right_margin   = 40,
+               .upper_margin   = 21,
+               .lower_margin   = 7,
+               .hsync_len      = 60,
+               .vsync_len      = 10,
+               .sync           = FB_SYNC_EXT,
+               .vmode          = FB_VMODE_NONINTERLACED
+ } }, {
+       .bus    = 0,
+       .addr   = 0,
+       .pixfmt = IPU_PIX_FMT_LVDS666,
+       .detect = 0,
+       .enable = enable_lvds,
+       .mode   = {
+               .name           = "wvga-lvds",
+               .refresh        = 57,
+               .xres           = 800,
+               .yres           = 480,
+               .pixclock       = 15385,
+               .left_margin    = 220,
+               .right_margin   = 40,
+               .upper_margin   = 21,
+               .lower_margin   = 7,
+               .hsync_len      = 60,
+               .vsync_len      = 10,
+               .sync           = FB_SYNC_EXT,
+               .vmode          = FB_VMODE_NONINTERLACED
  } }, {
        .bus    = 2,
        .addr   = 0x48,
                .vsync_len      = 10,
                .sync           = 0,
                .vmode          = FB_VMODE_NONINTERLACED
+ } }, {
+       .bus    = 0,
+       .addr   = 0,
+       .pixfmt = IPU_PIX_FMT_RGB24,
+       .detect = NULL,
+       .enable = enable_rgb,
+       .mode   = {
+               .name           = "qvga",
+               .refresh        = 60,
+               .xres           = 320,
+               .yres           = 240,
+               .pixclock       = 37037,
+               .left_margin    = 38,
+               .right_margin   = 37,
+               .upper_margin   = 16,
+               .lower_margin   = 15,
+               .hsync_len      = 30,
+               .vsync_len      = 3,
+               .sync           = 0,
+               .vmode          = FB_VMODE_NONINTERLACED
  } } };
  size_t display_count = ARRAY_SIZE(displays);
  
+ int board_cfb_skip(void)
+ {
+       return NULL != getenv("novideo");
+ }
  static void setup_display(void)
  {
        struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
  }
  #endif
  
+ static iomux_v3_cfg_t const init_pads[] = {
+       /* SGTL5000 sys_mclk */
+       NEW_PAD_CTRL(MX6_PAD_GPIO_0__CCM_CLKO1, OUTPUT_40OHM),
+       /* J5 - Camera MCLK */
+       NEW_PAD_CTRL(MX6_PAD_GPIO_3__CCM_CLKO2, OUTPUT_40OHM),
+       /* wl1271 pads on nitrogen6x */
+       /* WL12XX_WL_IRQ_GP */
+       NEW_PAD_CTRL(MX6_PAD_NANDF_CS1__GPIO6_IO14, WEAK_PULLDOWN),
+       /* WL12XX_WL_ENABLE_GP */
+       NEW_PAD_CTRL(MX6_PAD_NANDF_CS2__GPIO6_IO15, OUTPUT_40OHM),
+       /* WL12XX_BT_ENABLE_GP */
+       NEW_PAD_CTRL(MX6_PAD_NANDF_CS3__GPIO6_IO16, OUTPUT_40OHM),
+       /* USB otg power */
+       NEW_PAD_CTRL(MX6_PAD_EIM_D22__GPIO3_IO22, OUTPUT_40OHM),
+       NEW_PAD_CTRL(MX6_PAD_NANDF_D5__GPIO2_IO05, OUTPUT_40OHM),
+       NEW_PAD_CTRL(MX6_PAD_NANDF_WP_B__GPIO6_IO09, OUTPUT_40OHM),
+       NEW_PAD_CTRL(MX6_PAD_GPIO_8__GPIO1_IO08, OUTPUT_40OHM),
+       NEW_PAD_CTRL(MX6_PAD_GPIO_6__GPIO1_IO06, OUTPUT_40OHM),
+ };
+ #define WL12XX_WL_IRQ_GP      IMX_GPIO_NR(6, 14)
+ static unsigned gpios_out_low[] = {
+       /* Disable wl1271 */
+       IMX_GPIO_NR(6, 15),     /* disable wireless */
+       IMX_GPIO_NR(6, 16),     /* disable bluetooth */
+       IMX_GPIO_NR(3, 22),     /* disable USB otg power */
+       IMX_GPIO_NR(2, 5),      /* ov5640 mipi camera reset */
+       IMX_GPIO_NR(1, 8),      /* ov5642 reset */
+ };
+ static unsigned gpios_out_high[] = {
+       IMX_GPIO_NR(1, 6),      /* ov5642 powerdown */
+       IMX_GPIO_NR(6, 9),      /* ov5640 mipi camera power down */
+ };
+ static void set_gpios(unsigned *p, int cnt, int val)
+ {
+       int i;
+       for (i = 0; i < cnt; i++)
+               gpio_direction_output(*p++, val);
+ }
  int board_early_init_f(void)
  {
        setup_iomux_uart();
  
-       /* Disable wl1271 For Nitrogen6w */
+       set_gpios(gpios_out_high, ARRAY_SIZE(gpios_out_high), 1);
+       set_gpios(gpios_out_low, ARRAY_SIZE(gpios_out_low), 0);
        gpio_direction_input(WL12XX_WL_IRQ_GP);
-       gpio_direction_output(WL12XX_WL_ENABLE_GP, 0);
-       gpio_direction_output(WL12XX_BT_ENABLE_GP, 0);
-       gpio_direction_output(GP_USB_OTG_PWR, 0); /* OTG power off */
  
        imx_iomux_v3_setup_multiple_pads(wl12xx_pads, ARRAY_SIZE(wl12xx_pads));
+       imx_iomux_v3_setup_multiple_pads(init_pads, ARRAY_SIZE(init_pads));
        setup_buttons();
  
  #if defined(CONFIG_VIDEO_IPUV3)
@@@ -663,6 -886,8 +891,8 @@@ int board_init(void
  #ifdef CONFIG_MXC_SPI
        setup_spi();
  #endif
+       imx_iomux_v3_setup_multiple_pads(
+               usdhc2_pads, ARRAY_SIZE(usdhc2_pads));
        setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info0);
        setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info1);
        setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info2);
index 836d7221b09c7388764dd57f9ced8efd97632d0d,dd6d2a660fcd90ac9e1b57835d2dc2fd94670430..1cb7561759827acb06706706bcc894391854fd41
@@@ -50,12 -50,12 +50,12 @@@ int dram_init(void
        return 0;
  }
  
- iomux_v3_cfg_t const uart4_pads[] = {
static iomux_v3_cfg_t const uart4_pads[] = {
        MX6_PAD_KEY_COL0__UART4_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),
        MX6_PAD_KEY_ROW0__UART4_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),
  };
  
- iomux_v3_cfg_t const enet_pads[] = {
static iomux_v3_cfg_t const enet_pads[] = {
        MX6_PAD_KEY_COL1__ENET_MDIO             | MUX_PAD_CTRL(ENET_PAD_CTRL),
        MX6_PAD_KEY_COL2__ENET_MDC              | MUX_PAD_CTRL(ENET_PAD_CTRL),
        MX6_PAD_RGMII_TXC__RGMII_TXC    | MUX_PAD_CTRL(ENET_PAD_CTRL),
@@@ -74,7 -74,7 +74,7 @@@
  };
  
  /* I2C2 PMIC, iPod, Tuner, Codec, Touch, HDMI EDID, MIPI CSI2 card */
- struct i2c_pads_info i2c_pad_info1 = {
+ static struct i2c_pads_info i2c_pad_info1 = {
        .scl = {
                .i2c_mode = MX6_PAD_EIM_EB2__I2C2_SCL | PC,
                .gpio_mode = MX6_PAD_EIM_EB2__GPIO2_IO30 | PC,
@@@ -91,7 -91,7 +91,7 @@@
   * I2C3 MLB, Port Expanders (A, B, C), Video ADC, Light Sensor,
   * Compass Sensor, Accelerometer, Res Touch
   */
- struct i2c_pads_info i2c_pad_info2 = {
+ static struct i2c_pads_info i2c_pad_info2 = {
        .scl = {
                .i2c_mode = MX6_PAD_GPIO_3__I2C3_SCL | PC,
                .gpio_mode = MX6_PAD_GPIO_3__GPIO1_IO03 | PC,
        }
  };
  
- iomux_v3_cfg_t const i2c3_pads[] = {
static iomux_v3_cfg_t const i2c3_pads[] = {
        MX6_PAD_EIM_A24__GPIO5_IO04             | MUX_PAD_CTRL(NO_PAD_CTRL),
  };
  
- iomux_v3_cfg_t const port_exp[] = {
static iomux_v3_cfg_t const port_exp[] = {
        MX6_PAD_SD2_DAT0__GPIO1_IO15            | MUX_PAD_CTRL(NO_PAD_CTRL),
  };
  
@@@ -117,7 -117,7 +117,7 @@@ static void setup_iomux_enet(void
        imx_iomux_v3_setup_multiple_pads(enet_pads, ARRAY_SIZE(enet_pads));
  }
  
- iomux_v3_cfg_t const usdhc3_pads[] = {
static iomux_v3_cfg_t const usdhc3_pads[] = {
        MX6_PAD_SD3_CLK__SD3_CLK        | MUX_PAD_CTRL(USDHC_PAD_CTRL),
        MX6_PAD_SD3_CMD__SD3_CMD        | MUX_PAD_CTRL(USDHC_PAD_CTRL),
        MX6_PAD_SD3_DAT0__SD3_DATA0     | MUX_PAD_CTRL(USDHC_PAD_CTRL),
@@@ -138,7 -138,7 +138,7 @@@ static void setup_iomux_uart(void
  }
  
  #ifdef CONFIG_FSL_ESDHC
- struct fsl_esdhc_cfg usdhc_cfg[1] = {
+ static struct fsl_esdhc_cfg usdhc_cfg[1] = {
        {USDHC3_BASE_ADDR},
  };
  
@@@ -259,13 -259,6 +259,13 @@@ int board_init(void
        return 0;
  }
  
 +#ifdef CONFIG_MXC_SPI
 +int board_spi_cs_gpio(unsigned bus, unsigned cs)
 +{
 +      return (bus == 0 && cs == 0) ? (IMX_GPIO_NR(4, 9)) : -1;
 +}
 +#endif
 +
  #ifdef CONFIG_CMD_BMODE
  static const struct boot_mode board_boot_modes[] = {
        /* 4 bit bus width */
index 21f49fdb32ea9e10bf45778b1e9cf2d27bd5a912,4d0979632a0b90f7ccef5e671dab5a6dfaaf74c7..b634965ad2ac399aebf8de25d69326c41503da62
@@@ -45,7 -45,6 +45,7 @@@ void setup_iomux_ddr(void
                VF610_PAD_DDR_A3__DDR_A_3,
                VF610_PAD_DDR_A2__DDR_A_2,
                VF610_PAD_DDR_A1__DDR_A_1,
 +              VF610_PAD_DDR_A0__DDR_A_0,
                VF610_PAD_DDR_BA2__DDR_BA_2,
                VF610_PAD_DDR_BA1__DDR_BA_1,
                VF610_PAD_DDR_BA0__DDR_BA_0,
@@@ -77,7 -76,6 +77,7 @@@
                VF610_PAD_DDR_WE__DDR_WE_B,
                VF610_PAD_DDR_ODT1__DDR_ODT_0,
                VF610_PAD_DDR_ODT0__DDR_ODT_1,
 +              VF610_PAD_DDR_RESETB,
        };
  
        imx_iomux_v3_setup_multiple_pads(ddr_pads, ARRAY_SIZE(ddr_pads));
@@@ -90,30 -88,30 +90,30 @@@ void ddr_phy_init(void
        writel(DDRMC_PHY_DQ_TIMING, &ddrmr->phy[0]);
        writel(DDRMC_PHY_DQ_TIMING, &ddrmr->phy[16]);
        writel(DDRMC_PHY_DQ_TIMING, &ddrmr->phy[32]);
 -      writel(DDRMC_PHY_DQ_TIMING, &ddrmr->phy[48]);
  
        writel(DDRMC_PHY_DQS_TIMING, &ddrmr->phy[1]);
        writel(DDRMC_PHY_DQS_TIMING, &ddrmr->phy[17]);
 -      writel(DDRMC_PHY_DQS_TIMING, &ddrmr->phy[33]);
 -      writel(DDRMC_PHY_DQS_TIMING, &ddrmr->phy[49]);
  
        writel(DDRMC_PHY_CTRL, &ddrmr->phy[2]);
        writel(DDRMC_PHY_CTRL, &ddrmr->phy[18]);
        writel(DDRMC_PHY_CTRL, &ddrmr->phy[34]);
 -      writel(DDRMC_PHY_CTRL, &ddrmr->phy[50]);
  
        writel(DDRMC_PHY_MASTER_CTRL, &ddrmr->phy[3]);
        writel(DDRMC_PHY_MASTER_CTRL, &ddrmr->phy[19]);
        writel(DDRMC_PHY_MASTER_CTRL, &ddrmr->phy[35]);
 -      writel(DDRMC_PHY_MASTER_CTRL, &ddrmr->phy[51]);
  
        writel(DDRMC_PHY_SLAVE_CTRL, &ddrmr->phy[4]);
        writel(DDRMC_PHY_SLAVE_CTRL, &ddrmr->phy[20]);
        writel(DDRMC_PHY_SLAVE_CTRL, &ddrmr->phy[36]);
 -      writel(DDRMC_PHY_SLAVE_CTRL, &ddrmr->phy[52]);
 +
 +      /* LPDDR2 only parameter */
 +      writel(DDRMC_PHY_OFF, &ddrmr->phy[49]);
  
        writel(DDRMC_PHY50_DDR3_MODE | DDRMC_PHY50_EN_SW_HALF_CYCLE,
                &ddrmr->phy[50]);
 +
 +      /* Processor Pad ODT settings */
 +      writel(DDRMC_PHY_PROC_PAD_ODT, &ddrmr->phy[52]);
  }
  
  void ddr_ctrl_init(void)
  
        writel(DDRMC_CR00_DRAM_CLASS_DDR3, &ddrmr->cr[0]);
        writel(DDRMC_CR02_DRAM_TINIT(32), &ddrmr->cr[2]);
 -      writel(DDRMC_CR10_TRST_PWRON(124), &ddrmr->cr[10]);
 +      writel(DDRMC_CR10_TRST_PWRON(80000), &ddrmr->cr[10]);
  
 -      writel(DDRMC_CR11_CKE_INACTIVE(80000), &ddrmr->cr[11]);
 +      writel(DDRMC_CR11_CKE_INACTIVE(200000), &ddrmr->cr[11]);
        writel(DDRMC_CR12_WRLAT(5) | DDRMC_CR12_CASLAT_LIN(12), &ddrmr->cr[12]);
 -      writel(DDRMC_CR13_TRC(21) | DDRMC_CR13_TRRD(4) | DDRMC_CR13_TCCD(4) |
 -              DDRMC_CR13_TBST_INT_INTERVAL(4), &ddrmr->cr[13]);
 +      writel(DDRMC_CR13_TRC(21) | DDRMC_CR13_TRRD(4) | DDRMC_CR13_TCCD(4),
 +              &ddrmr->cr[13]);
        writel(DDRMC_CR14_TFAW(20) | DDRMC_CR14_TRP(6) | DDRMC_CR14_TWTR(4) |
                DDRMC_CR14_TRAS_MIN(15), &ddrmr->cr[14]);
        writel(DDRMC_CR16_TMRD(4) | DDRMC_CR16_TRTP(4), &ddrmr->cr[16]);
        writel(DDRMC_CR18_TCKESR(4) | DDRMC_CR18_TCKE(3), &ddrmr->cr[18]);
  
        writel(DDRMC_CR20_AP_EN, &ddrmr->cr[20]);
 -      writel(DDRMC_CR21_TRCD_INT(6) | DDRMC_CR21_TRAS_LOCKOUT |
 -              DDRMC_CR21_CCMAP_EN, &ddrmr->cr[21]);
 +      writel(DDRMC_CR21_TRCD_INT(6) | DDRMC_CR21_CCMAP_EN, &ddrmr->cr[21]);
  
 -      writel(DDRMC_CR22_TDAL(11), &ddrmr->cr[22]);
 +      writel(DDRMC_CR22_TDAL(12), &ddrmr->cr[22]);
        writel(DDRMC_CR23_BSTLEN(3) | DDRMC_CR23_TDLL(512), &ddrmr->cr[23]);
        writel(DDRMC_CR24_TRP_AB(6), &ddrmr->cr[24]);
  
        writel(DDRMC_CR25_TREF_EN, &ddrmr->cr[25]);
 -      writel(DDRMC_CR26_TREF(3112) | DDRMC_CR26_TRFC(44), &ddrmr->cr[26]);
 -      writel(DDRMC_CR28_TREF_INT(5), &ddrmr->cr[28]);
 +      writel(DDRMC_CR26_TREF(3120) | DDRMC_CR26_TRFC(44), &ddrmr->cr[26]);
 +      writel(DDRMC_CR28_TREF_INT(0), &ddrmr->cr[28]);
        writel(DDRMC_CR29_TPDEX(3), &ddrmr->cr[29]);
  
        writel(DDRMC_CR30_TXPDLL(10), &ddrmr->cr[30]);
 -      writel(DDRMC_CR31_TXSNR(68) | DDRMC_CR31_TXSR(512), &ddrmr->cr[31]);
 +      writel(DDRMC_CR31_TXSNR(48) | DDRMC_CR31_TXSR(468), &ddrmr->cr[31]);
        writel(DDRMC_CR33_EN_QK_SREF, &ddrmr->cr[33]);
        writel(DDRMC_CR34_CKSRX(5) | DDRMC_CR34_CKSRE(5), &ddrmr->cr[34]);
  
 -      writel(DDRMC_CR38_FREQ_CHG_EN, &ddrmr->cr[38]);
 +      writel(DDRMC_CR38_FREQ_CHG_EN(0), &ddrmr->cr[38]);
        writel(DDRMC_CR39_PHY_INI_COM(1024) | DDRMC_CR39_PHY_INI_STA(16) |
                DDRMC_CR39_FRQ_CH_DLLOFF(2), &ddrmr->cr[39]);
  
        writel(DDRMC_CR69_ZQ_ON_SREF_EX(2), &ddrmr->cr[69]);
  
        writel(DDRMC_CR70_REF_PER_ZQ(64), &ddrmr->cr[70]);
 -      writel(DDRMC_CR72_ZQCS_ROTATE, &ddrmr->cr[72]);
 +      writel(DDRMC_CR72_ZQCS_ROTATE(0), &ddrmr->cr[72]);
  
        writel(DDRMC_CR73_APREBIT(10) | DDRMC_CR73_COL_DIFF(1) |
                DDRMC_CR73_ROW_DIFF(3), &ddrmr->cr[73]);
        writel(DDRMC_CR74_BANKSPLT_EN | DDRMC_CR74_ADDR_CMP_EN |
 -              DDRMC_CR74_CMD_AGE_CNT(255) | DDRMC_CR74_AGE_CNT(255),
 +              DDRMC_CR74_CMD_AGE_CNT(64) | DDRMC_CR74_AGE_CNT(64),
                &ddrmr->cr[74]);
        writel(DDRMC_CR75_RW_PG_EN | DDRMC_CR75_RW_EN | DDRMC_CR75_PRI_EN |
                DDRMC_CR75_PLEN, &ddrmr->cr[75]);
        writel(DDRMC_CR76_NQENT_ACTDIS(3) | DDRMC_CR76_D_RW_G_BKCN(3) |
 -              DDRMC_CR76_W2R_SPLT_EN | DDRMC_CR76_CS_EN, &ddrmr->cr[76]);
 +              DDRMC_CR76_W2R_SPLT_EN, &ddrmr->cr[76]);
        writel(DDRMC_CR77_CS_MAP | DDRMC_CR77_DI_RD_INTLEAVE |
                DDRMC_CR77_SWAP_EN, &ddrmr->cr[77]);
 -      writel(DDRMC_CR78_BUR_ON_FLY_BIT(12), &ddrmr->cr[78]);
 -      writel(DDRMC_CR79_CTLUPD_AREF, &ddrmr->cr[79]);
 +      writel(DDRMC_CR78_Q_FULLNESS(7) | DDRMC_CR78_BUR_ON_FLY_BIT(12),
 +              &ddrmr->cr[78]);
 +      writel(DDRMC_CR79_CTLUPD_AREF(0), &ddrmr->cr[79]);
  
        writel(DDRMC_CR82_INT_MASK, &ddrmr->cr[82]);
  
 -      writel(DDRMC_CR87_ODT_WR_MAPCS0 | DDRMC_CR87_ODT_RD_MAPCS0,
 -              &ddrmr->cr[87]);
 +      writel(DDRMC_CR87_ODT_WR_MAPCS0, &ddrmr->cr[87]);
        writel(DDRMC_CR88_TODTL_CMD(4), &ddrmr->cr[88]);
        writel(DDRMC_CR89_AODT_RWSMCS(2), &ddrmr->cr[89]);
  
        writel(DDRMC_CR91_R2W_SMCSDL(2), &ddrmr->cr[91]);
        writel(DDRMC_CR96_WLMRD(40) | DDRMC_CR96_WLDQSEN(25), &ddrmr->cr[96]);
 +      writel(DDRMC_CR97_WRLVL_EN, &ddrmr->cr[97]);
 +      writel(DDRMC_CR98_WRLVL_DL_0, &ddrmr->cr[98]);
 +      writel(DDRMC_CR99_WRLVL_DL_1, &ddrmr->cr[99]);
 +
 +      writel(DDRMC_CR102_RDLVL_GT_REGEN | DDRMC_CR102_RDLVL_REG_EN,
 +              &ddrmr->cr[102]);
  
 -      writel(DDRMC_CR105_RDLVL_DL_0(32), &ddrmr->cr[105]);
 -      writel(DDRMC_CR110_RDLVL_DL_1(32), &ddrmr->cr[110]);
 -      writel(DDRMC_CR114_RDLVL_GTDL_2(8224), &ddrmr->cr[114]);
 +      writel(DDRMC_CR105_RDLVL_DL_0(0), &ddrmr->cr[105]);
 +      writel(DDRMC_CR106_RDLVL_GTDL_0(4), &ddrmr->cr[106]);
 +      writel(DDRMC_CR110_RDLVL_GTDL_1(4), &ddrmr->cr[110]);
 +      writel(DDRMC_CR114_RDLVL_GTDL_2(0), &ddrmr->cr[114]);
 +      writel(DDRMC_CR115_RDLVL_GTDL_2(0), &ddrmr->cr[115]);
  
 -      writel(DDRMC_CR117_AXI0_W_PRI(1) | DDRMC_CR117_AXI0_R_PRI(1),
 +      writel(DDRMC_CR117_AXI0_W_PRI(0) | DDRMC_CR117_AXI0_R_PRI(0),
                &ddrmr->cr[117]);
        writel(DDRMC_CR118_AXI1_W_PRI(1) | DDRMC_CR118_AXI1_R_PRI(1),
                &ddrmr->cr[118]);
                &ddrmr->cr[121]);
        writel(DDRMC_CR122_AXI1_PRI1_RPRI(1) | DDRMC_CR122_AXI1_PRI0_RPRI(1) |
                DDRMC_CR122_AXI0_PRIRLX(100), &ddrmr->cr[122]);
 -      writel(DDRMC_CR123_AXI1_PRI3_RPRI(1) | DDRMC_CR123_AXI1_PRI2_RPRI(1),
 -              &ddrmr->cr[123]);
 +      writel(DDRMC_CR123_AXI1_P_ODR_EN | DDRMC_CR123_AXI1_PRI3_RPRI(1) |
 +              DDRMC_CR123_AXI1_PRI2_RPRI(1), &ddrmr->cr[123]);
        writel(DDRMC_CR124_AXI1_PRIRLX(100), &ddrmr->cr[124]);
  
 -      writel(DDRMC_CR126_PHY_RDLAT(11), &ddrmr->cr[126]);
 +      writel(DDRMC_CR126_PHY_RDLAT(8), &ddrmr->cr[126]);
        writel(DDRMC_CR132_WRLAT_ADJ(5) | DDRMC_CR132_RDLAT_ADJ(6),
                &ddrmr->cr[132]);
 +      writel(DDRMC_CR137_PHYCTL_DL(2), &ddrmr->cr[137]);
 +      writel(DDRMC_CR138_PHY_WRLV_MXDL(256) | DDRMC_CR138_PHYDRAM_CK_EN(1),
 +              &ddrmr->cr[138]);
        writel(DDRMC_CR139_PHY_WRLV_RESPLAT(4) | DDRMC_CR139_PHY_WRLV_LOAD(7) |
                DDRMC_CR139_PHY_WRLV_DLL(3) | DDRMC_CR139_PHY_WRLV_EN(3),
                &ddrmr->cr[139]);
 +      writel(DDRMC_CR140_PHY_WRLV_WW(64), &ddrmr->cr[140]);
 +      writel(DDRMC_CR143_RDLV_GAT_MXDL(1536) | DDRMC_CR143_RDLV_MXDL(128),
 +              &ddrmr->cr[143]);
 +      writel(DDRMC_CR144_PHY_RDLVL_RES(4) | DDRMC_CR144_PHY_RDLV_LOAD(7) |
 +              DDRMC_CR144_PHY_RDLV_DLL(3) | DDRMC_CR144_PHY_RDLV_EN(3),
 +              &ddrmr->cr[144]);
 +      writel(DDRMC_CR145_PHY_RDLV_RR(64), &ddrmr->cr[145]);
 +      writel(DDRMC_CR146_PHY_RDLVL_RESP(64), &ddrmr->cr[146]);
 +      writel(DDRMC_CR147_RDLV_RESP_MASK(983040), &ddrmr->cr[147]);
 +      writel(DDRMC_CR148_RDLV_GATE_RESP_MASK(983040), &ddrmr->cr[148]);
 +      writel(DDRMC_CR151_RDLV_GAT_DQ_ZERO_CNT(1) |
 +              DDRMC_CR151_RDLVL_DQ_ZERO_CNT(1), &ddrmr->cr[151]);
  
        writel(DDRMC_CR154_PAD_ZQ_EARLY_CMP_EN_TIMER(13) |
 -              DDRMC_CR154_PAD_ZQ_MODE(1) |
 -              DDRMC_CR154_DDR_SEL_PAD_CONTR(3), &ddrmr->cr[154]);
 -      writel(DDRMC_CR155_AXI0_AWCACHE | DDRMC_CR155_PAD_ODT_BYTE1(2),
 +              DDRMC_CR154_PAD_ZQ_MODE(1) | DDRMC_CR154_DDR_SEL_PAD_CONTR(3) |
 +              DDRMC_CR154_PAD_ZQ_HW_FOR(1), &ddrmr->cr[154]);
 +      writel(DDRMC_CR155_PAD_ODT_BYTE1(2) | DDRMC_CR155_PAD_ODT_BYTE0(2),
                &ddrmr->cr[155]);
        writel(DDRMC_CR158_TWR(6), &ddrmr->cr[158]);
 +      writel(DDRMC_CR161_ODT_EN(1) | DDRMC_CR161_TODTH_RD(2) |
 +              DDRMC_CR161_TODTH_WR(2), &ddrmr->cr[161]);
  
        ddr_phy_init();
  
@@@ -304,6 -278,39 +304,39 @@@ static void setup_iomux_i2c(void
        imx_iomux_v3_setup_multiple_pads(i2c0_pads, ARRAY_SIZE(i2c0_pads));
  }
  
+ #ifdef CONFIG_NAND_VF610_NFC
+ static void setup_iomux_nfc(void)
+ {
+       static const iomux_v3_cfg_t nfc_pads[] = {
+               VF610_PAD_PTD31__NF_IO15,
+               VF610_PAD_PTD30__NF_IO14,
+               VF610_PAD_PTD29__NF_IO13,
+               VF610_PAD_PTD28__NF_IO12,
+               VF610_PAD_PTD27__NF_IO11,
+               VF610_PAD_PTD26__NF_IO10,
+               VF610_PAD_PTD25__NF_IO9,
+               VF610_PAD_PTD24__NF_IO8,
+               VF610_PAD_PTD23__NF_IO7,
+               VF610_PAD_PTD22__NF_IO6,
+               VF610_PAD_PTD21__NF_IO5,
+               VF610_PAD_PTD20__NF_IO4,
+               VF610_PAD_PTD19__NF_IO3,
+               VF610_PAD_PTD18__NF_IO2,
+               VF610_PAD_PTD17__NF_IO1,
+               VF610_PAD_PTD16__NF_IO0,
+               VF610_PAD_PTB24__NF_WE_B,
+               VF610_PAD_PTB25__NF_CE0_B,
+               VF610_PAD_PTB27__NF_RE_B,
+               VF610_PAD_PTC26__NF_RB_B,
+               VF610_PAD_PTC27__NF_ALE,
+               VF610_PAD_PTC28__NF_CLE
+       };
+       imx_iomux_v3_setup_multiple_pads(nfc_pads, ARRAY_SIZE(nfc_pads));
+ }
+ #endif
  static void setup_iomux_qspi(void)
  {
        static const iomux_v3_cfg_t qspi0_pads[] = {
@@@ -380,6 -387,8 +413,8 @@@ static void clock_init(void
                CCM_CCGR7_SDHC1_CTRL_MASK);
        clrsetbits_le32(&ccm->ccgr9, CCM_REG_CTRL_MASK,
                CCM_CCGR9_FEC0_CTRL_MASK | CCM_CCGR9_FEC1_CTRL_MASK);
+       clrsetbits_le32(&ccm->ccgr10, CCM_REG_CTRL_MASK,
+               CCM_CCGR10_NFC_CTRL_MASK);
  
        clrsetbits_le32(&anadig->pll2_ctrl, ANADIG_PLL2_CTRL_POWERDOWN,
                ANADIG_PLL2_CTRL_ENABLE | ANADIG_PLL2_CTRL_DIV_SELECT);
                CCM_CACRR_IPG_CLK_DIV(1) | CCM_CACRR_BUS_CLK_DIV(2) |
                CCM_CACRR_ARM_CLK_DIV(0));
        clrsetbits_le32(&ccm->cscmr1, CCM_REG_CTRL_MASK,
-               CCM_CSCMR1_ESDHC1_CLK_SEL(3) | CCM_CSCMR1_QSPI0_CLK_SEL(3));
+               CCM_CSCMR1_ESDHC1_CLK_SEL(3) | CCM_CSCMR1_QSPI0_CLK_SEL(3) |
+               CCM_CSCMR1_NFC_CLK_SEL(0));
        clrsetbits_le32(&ccm->cscdr1, CCM_REG_CTRL_MASK,
                CCM_CSCDR1_RMII_CLK_EN);
        clrsetbits_le32(&ccm->cscdr2, CCM_REG_CTRL_MASK,
-               CCM_CSCDR2_ESDHC1_EN | CCM_CSCDR2_ESDHC1_CLK_DIV(0));
+               CCM_CSCDR2_ESDHC1_EN | CCM_CSCDR2_ESDHC1_CLK_DIV(0) |
+               CCM_CSCDR2_NFC_EN);
        clrsetbits_le32(&ccm->cscdr3, CCM_REG_CTRL_MASK,
                CCM_CSCDR3_QSPI0_EN | CCM_CSCDR3_QSPI0_DIV(1) |
-               CCM_CSCDR3_QSPI0_X2_DIV(1) | CCM_CSCDR3_QSPI0_X4_DIV(3));
+               CCM_CSCDR3_QSPI0_X2_DIV(1) | CCM_CSCDR3_QSPI0_X4_DIV(3) |
+               CCM_CSCDR3_NFC_PRE_DIV(5));
        clrsetbits_le32(&ccm->cscmr2, CCM_REG_CTRL_MASK,
                CCM_CSCMR2_RMII_CLK_SEL(0));
  }
@@@ -437,6 -449,9 +475,9 @@@ int board_early_init_f(void
        setup_iomux_enet();
        setup_iomux_i2c();
        setup_iomux_qspi();
+ #ifdef CONFIG_NAND_VF610_NFC
+       setup_iomux_nfc();
+ #endif
  
        return 0;
  }
index 47eb34f9c537c4f1568aa2bfee7191e3962db125,eef86d1ecabd773f02694ad8079665d93ae7eae7..1f02bfc35f6a6b020affadd210ec23d652593164
@@@ -12,7 -12,6 +12,7 @@@ NORMAL_DRIVERS=
  endif
  
  obj-$(CONFIG_SPL_NAND_AM33XX_BCH) += am335x_spl_bch.o
 +obj-$(CONFIG_SPL_NAND_DENALI) += denali_spl.o
  obj-$(CONFIG_SPL_NAND_DOCG4) += docg4_spl.o
  obj-$(CONFIG_SPL_NAND_SIMPLE) += nand_spl_simple.o
  obj-$(CONFIG_SPL_NAND_LOAD) += nand_spl_load.o
@@@ -43,7 -42,6 +43,7 @@@ obj-$(CONFIG_NAND_ECC_BCH) += nand_bch.
  obj-$(CONFIG_NAND_ATMEL) += atmel_nand.o
  obj-$(CONFIG_DRIVER_NAND_BFIN) += bfin_nand.o
  obj-$(CONFIG_NAND_DAVINCI) += davinci_nand.o
 +obj-$(CONFIG_NAND_DENALI) += denali.o
  obj-$(CONFIG_NAND_FSL_ELBC) += fsl_elbc_nand.o
  obj-$(CONFIG_NAND_FSL_IFC) += fsl_ifc_nand.o
  obj-$(CONFIG_NAND_FSL_UPM) += fsl_upm.o
@@@ -53,6 -51,7 +53,7 @@@ obj-$(CONFIG_NAND_KB9202) += kb9202_nan
  obj-$(CONFIG_NAND_KIRKWOOD) += kirkwood_nand.o
  obj-$(CONFIG_NAND_KMETER1) += kmeter1_nand.o
  obj-$(CONFIG_NAND_MPC5121_NFC) += mpc5121_nfc.o
+ obj-$(CONFIG_NAND_VF610_NFC) += vf610_nfc.o
  obj-$(CONFIG_NAND_MXC) += mxc_nand.o
  obj-$(CONFIG_NAND_MXS) += mxs_nand.o
  obj-$(CONFIG_NAND_NDFC) += ndfc.o
index 4208ba156331b51219484886f93d2dac8bfeeac5,55b983c7ad27552f7d5aeddf17700201eb7b1cd3..fddedf1a8eb28c87ce4490407ec43144fc350a5e
@@@ -40,7 -40,7 +40,7 @@@
  /* MMC Configs */
  #define CONFIG_FSL_ESDHC
  #define CONFIG_FSL_USDHC
- #define CONFIG_SYS_FSL_ESDHC_ADDR     0
+ #define CONFIG_SYS_FSL_ESDHC_ADDR     USDHC2_BASE_ADDR
  
  #define CONFIG_MMC
  #define CONFIG_CMD_MMC
  #define CONFIG_SPI_FLASH_STMICRO
  #define CONFIG_MXC_SPI
  #define CONFIG_SF_DEFAULT_BUS         0
 -#define CONFIG_SF_DEFAULT_CS          (0 | (IMX_GPIO_NR(4, 11) << 8))
 +#define CONFIG_SF_DEFAULT_CS          0
  #define CONFIG_SF_DEFAULT_SPEED               20000000
  #define CONFIG_SF_DEFAULT_MODE                SPI_MODE_0
  #endif
index 39d5bb34bb2995928a5bb686028c3d183218b812,469591fe88dcc842b78daefc22131d62edbdc359..6d379ed7ad30eb1ea68c8b03c9099301e764974d
@@@ -32,6 -32,7 +32,7 @@@
  #define CONFIG_BOARD_EARLY_INIT_F
  #define CONFIG_MISC_INIT_R
  #define CONFIG_MXC_GPIO
+ #define CONFIG_CMD_GPIO
  #define CONFIG_CI_UDC
  #define CONFIG_USBD_HS
  #define CONFIG_USB_GADGET_DUALSPEED
@@@ -53,7 -54,7 +54,7 @@@
  #define CONFIG_SPI_FLASH_SST
  #define CONFIG_MXC_SPI
  #define CONFIG_SF_DEFAULT_BUS  0
 -#define CONFIG_SF_DEFAULT_CS   (0|(IMX_GPIO_NR(3, 19)<<8))
 +#define CONFIG_SF_DEFAULT_CS   0
  #define CONFIG_SF_DEFAULT_SPEED 25000000
  #define CONFIG_SF_DEFAULT_MODE (SPI_MODE_0)
  #endif
@@@ -63,6 -64,7 +64,7 @@@
  #define CONFIG_SYS_I2C
  #define CONFIG_SYS_I2C_MXC
  #define CONFIG_SYS_I2C_SPEED          100000
+ #define CONFIG_I2C_EDID
  
  /* MMC Configs */
  #define CONFIG_FSL_ESDHC
@@@ -75,6 -77,8 +77,8 @@@
  #define CONFIG_GENERIC_MMC
  #define CONFIG_BOUNCE_BUFFER
  #define CONFIG_CMD_EXT2
+ #define CONFIG_CMD_EXT4
+ #define CONFIG_CMD_EXT4_WRITE
  #define CONFIG_CMD_FAT
  #define CONFIG_DOS_PARTITION
  
  #define CONFIG_EHCI_HCD_INIT_AFTER_RESET      /* For OTG port */
  #define CONFIG_MXC_USB_PORTSC (PORT_PTS_UTMI | PORT_PTS_PTW)
  #define CONFIG_MXC_USB_FLAGS  0
+ #define CONFIG_USB_KEYBOARD
+ #define CONFIG_SYS_USB_EVENT_POLL_VIA_CONTROL_EP
  
  /* Miscellaneous commands */
  #define CONFIG_CMD_BMODE
  #define CONFIG_VIDEO_BMP_RLE8
  #define CONFIG_SPLASH_SCREEN
  #define CONFIG_BMP_16BPP
- #define CONFIG_VIDEO_LOGO
  #define CONFIG_IPUV3_CLK 260000000
  #define CONFIG_CMD_HDMIDETECT
  #define CONFIG_CONSOLE_MUX
  #define CONFIG_DRIVE_MMC
  #endif
  
- #define CONFIG_DRIVE_TYPES CONFIG_DRIVE_SATA CONFIG_DRIVE_MMC
+ #ifdef CONFIG_USB_STORAGE
+ #define CONFIG_DRIVE_USB "usb "
+ #else
+ #define CONFIG_DRIVE_USB
+ #endif
+ #define CONFIG_DRIVE_TYPES CONFIG_DRIVE_SATA CONFIG_DRIVE_MMC CONFIG_DRIVE_USB
+ #define CONFIG_UMSDEVS CONFIG_DRIVE_SATA CONFIG_DRIVE_MMC
  
  #if defined(CONFIG_SABRELITE)
  #define CONFIG_EXTRA_ENV_SETTINGS \
        "fdt_addr=0x18000000\0" \
        "boot_fdt=try\0" \
        "ip_dyn=yes\0" \
-       "mmcdev=0\0" \
+       "mmcdevs=0 1\0" \
        "mmcpart=1\0" \
        "mmcroot=/dev/mmcblk0p2 rootwait rw\0" \
        "mmcargs=setenv bootargs console=${console},${baudrate} " \
                "fi;\0"
  
  #define CONFIG_BOOTCOMMAND \
-          "mmc dev ${mmcdev}; if mmc rescan; then " \
-                  "if run loadbootscript; then " \
-                          "run bootscript; " \
-                  "else " \
-                          "if run loaduimage; then " \
-                                  "run mmcboot; " \
-                          "else run netboot; " \
-                          "fi; " \
-                  "fi; " \
-          "else run netboot; fi"
+       "for mmcdev in ${mmcdevs}; do " \
+               "mmc dev ${mmcdev}; " \
+               "if mmc rescan; then " \
+                       "if run loadbootscript; then " \
+                               "run bootscript; " \
+                       "else " \
+                               "if run loaduimage; then " \
+                                       "run mmcboot; " \
+                               "fi; " \
+                       "fi; " \
+               "fi; " \
+       "done; " \
+       "run netboot; "
  #else
  #define CONFIG_EXTRA_ENV_SETTINGS \
+       "bootdevs=" CONFIG_DRIVE_TYPES "\0" \
+       "umsdevs=" CONFIG_UMSDEVS "\0" \
        "console=ttymxc1\0" \
        "clearenv=if sf probe || sf probe || sf probe 1 ; then " \
                "sf erase 0xc0000 0x2000 && " \
                "echo restored environment to factory default ; fi\0" \
-       "bootcmd=for dtype in " CONFIG_DRIVE_TYPES \
+       "bootcmd=for dtype in ${bootdevs}" \
                "; do " \
+                       "if itest.s \"xusb\" == \"x${dtype}\" ; then " \
+                               "usb start ;" \
+                       "fi; " \
                        "for disk in 0 1 ; do ${dtype} dev ${disk} ;" \
-                               "for fs in fat ext2 ; do " \
-                                       "${fs}load " \
-                                               "${dtype} ${disk}:1 " \
-                                               "10008000 " \
-                                               "/6x_bootscript" \
-                                               "&& source 10008000 ; " \
-                               "done ; " \
+                               "load " \
+                                       "${dtype} ${disk}:1 " \
+                                       "10008000 " \
+                                       "/6x_bootscript" \
+                                       "&& source 10008000 ; " \
                        "done ; " \
                "done; " \
                "setenv stdout serial,vga ; " \
                "echo ; echo 6x_bootscript not found ; " \
                "echo ; echo serial console at 115200, 8N1 ; echo ; " \
                "echo details at http://boundarydevices.com/6q_bootscript ; " \
-               "setenv stdout serial\0" \
-       "upgradeu=for dtype in " CONFIG_DRIVE_TYPES \
+               "setenv stdout serial;" \
+               "setenv stdin serial,usbkbd;" \
+               "for dtype in ${umsdevs} ; do " \
+                       "if itest.s sata == ${dtype}; then " \
+                               "initcmd='sata init' ;" \
+                       "else " \
+                               "initcmd='mmc rescan' ;" \
+                       "fi; " \
+                       "for disk in 0 1 ; do " \
+                               "if $initcmd && $dtype dev $disk ; then " \
+                                       "setenv stdout serial,vga; " \
+                                       "echo expose ${dtype} ${disk} " \
+                                               "over USB; " \
+                                       "ums 0 $dtype $disk ;" \
+                               "fi; " \
+               "       done; " \
+               "done ;" \
+               "setenv stdout serial,vga; " \
+               "echo no block devices found;" \
+               "\0" \
+       "initrd_high=0xffffffff\0" \
+       "upgradeu=for dtype in ${bootdevs}" \
                "; do " \
                "for disk in 0 1 ; do ${dtype} dev ${disk} ;" \
-                    "for fs in fat ext2 ; do " \
-                               "${fs}load ${dtype} ${disk}:1 10008000 " \
-                                       "/6x_upgrade " \
-                                       "&& source 10008000 ; " \
-                       "done ; " \
+                       "load ${dtype} ${disk}:1 10008000 " \
+                               "/6x_upgrade " \
+                               "&& source 10008000 ; " \
                "done ; " \
        "done\0" \
  
  
  /* Print Buffer Size */
  #define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
- #define CONFIG_SYS_MAXARGS           16
+ #define CONFIG_SYS_MAXARGS           48
  #define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE
  
  #define CONFIG_SYS_MEMTEST_START       0x10000000
  #define CONFIG_CMD_BMP
  
  #define CONFIG_CMD_TIME
+ #define CONFIG_CMD_MEMTEST
  #define CONFIG_SYS_ALT_MEMTEST
  
  #define CONFIG_CMD_BOOTZ
  #define CONFIG_PCIE_IMX
  #endif
  
+ #define CONFIG_CMD_ELF
+ #define CONFIG_USB_GADGET
+ #define CONFIG_CMD_USB_MASS_STORAGE
+ #define CONFIG_USB_GADGET_MASS_STORAGE
+ #define CONFIG_USBDOWNLOAD_GADGET
+ #define CONFIG_USB_GADGET_VBUS_DRAW   2
+ /* Netchip IDs */
+ #define CONFIG_G_DNL_VENDOR_NUM 0x0525
+ #define CONFIG_G_DNL_PRODUCT_NUM 0xa4a5
+ #define CONFIG_G_DNL_MANUFACTURER "Boundary"
+ #define CONFIG_CMD_FASTBOOT
+ #define CONFIG_ANDROID_BOOT_IMAGE
+ #define CONFIG_USB_FASTBOOT_BUF_ADDR   CONFIG_SYS_LOAD_ADDR
+ #define CONFIG_USB_FASTBOOT_BUF_SIZE   0x07000000
  #endif               /* __CONFIG_H */