]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
karo: tx6: add support for TX6-V2 (eMMC)
authorLothar Waßmann <LW@KARO-electronics.de>
Mon, 27 Jan 2014 12:53:19 +0000 (13:53 +0100)
committerLothar Waßmann <LW@KARO-electronics.de>
Wed, 5 Mar 2014 14:35:44 +0000 (15:35 +0100)
1  2 
board/karo/common/fdt.c
board/karo/common/karo.h
board/karo/common/splashimage.c
boards.cfg
common/cmd_bootce.c
include/configs/tx6.h

diff --combined board/karo/common/fdt.c
index a6d1951fd1b5f3ab95d308e1b9144c9945b73b52,ea4b7ebe936432ed62a7dc142a7822c546dececf..9dbe75708488804842d6c2b679ae6cf96831611c
@@@ -48,50 -48,6 +48,6 @@@ static void karo_set_fdtsize(void *fdt
        setenv_hex("fdtsize", fdt_totalsize(fdt));
  }
  
- static int karo_load_part(const char *part, void *addr, size_t len)
- {
-       int ret;
-       struct mtd_device *dev;
-       struct part_info *part_info;
-       u8 part_num;
-       size_t actual;
-       debug("Initializing mtd_parts\n");
-       ret = mtdparts_init();
-       if (ret)
-               return ret;
-       debug("Trying to find NAND partition '%s'\n", part);
-       ret = find_dev_and_part(part, &dev, &part_num, &part_info);
-       if (ret) {
-               printf("Failed to find flash partition '%s': %d\n",
-                       part, ret);
-               return ret;
-       }
-       debug("Found partition '%s': offset=%08x size=%08x\n",
-               part, part_info->offset, part_info->size);
-       if (part_info->size < len) {
-               printf("Warning: partition '%s' smaller than requested size: %u; truncating data to %u byte\n",
-                       part, len, part_info->size);
-               len = part_info->size;
-       }
-       debug("Reading NAND partition '%s' to %p\n", part, addr);
-       ret = nand_read_skip_bad(&nand_info[0], part_info->offset, &len,
-                               &actual, len, addr);
-       if (ret) {
-               printf("Failed to load partition '%s' to %p\n", part, addr);
-               return ret;
-       }
-       if (actual < len)
-               printf("Read only %u of %u bytes due to bad blocks\n",
-                       actual, len);
-       debug("Read %u byte from partition '%s' @ offset %08x\n",
-               len, part, part_info->offset);
-       return 0;
- }
  static void *karo_fdt_load_dtb(void)
  {
        int ret;
@@@ -819,28 -775,3 +775,28 @@@ u8 karo_fdt_get_lvds_channels(const voi
        }
        return lvds_chan_mask;
  }
 +
 +int karo_fdt_get_backlight_polarity(const void *blob)
 +{
 +      int off = fdt_path_offset(blob, "/backlight");
 +      const struct fdt_property *prop;
 +      int len;
 +
 +      if (off < 0) {
 +              printf("/backlight node not found in DT\n");
 +              return off;
 +      }
 +
 +      prop = fdt_get_property(blob, off, "pwms", &len);
 +      if (!prop)
 +              printf("'pwms' property not found\n");
 +      else
 +              debug("'pwms' property has len %d\n", len);
 +
 +      len /= sizeof(u32);
 +      if (prop && len > 3) {
 +              const u32 *data = (const u32 *)prop->data;
 +              return fdt32_to_cpu(data[3]) == 0;
 +      }
 +      return 0;
 +}
diff --combined board/karo/common/karo.h
index d666c454d854aeb6e56c60b875609ebcda712911,a4a11ba56b9567435253cd6e0f6b5779c2dc2dd7..7b8f48743d10002acd5fc56b447157e4b9ab4e1e
@@@ -34,7 -34,6 +34,7 @@@ int karo_fdt_create_fb_mode(void *blob
  int karo_fdt_get_lcd_bus_width(const void *blob, int default_width);
  int karo_fdt_get_lvds_mapping(const void *blob, int default_mapping);
  u8 karo_fdt_get_lvds_channels(const void *blob);
 +int karo_fdt_get_backlight_polarity(const void *blob);
  #else
  static inline void karo_fdt_remove_node(void *blob, const char *node)
  {
@@@ -76,22 -75,18 +76,22 @@@ static inline int karo_fdt_create_fb_mo
  {
        return 0;
  }
 -int karo_fdt_get_lcd_bus_width(const void *blob, int default_width)
 +static inline int karo_fdt_get_lcd_bus_width(const void *blob, int default_width)
  {
        return default_width;
  }
 -int karo_fdt_get_lvds_mapping(const void *blob, int default_mapping)
 +static inline int karo_fdt_get_lvds_mapping(const void *blob, int default_mapping)
  {
        return default_mapping;
  }
 -u8 karo_fdt_get_lvds_channels(const void *blob)
 +static inline u8 karo_fdt_get_lvds_channels(const void *blob)
  {
        return 0;
  }
 +static inline int karo_fdt_get_backlight_polarity(const void *blob)
 +{
 +      return getenv_yesno("backlight_polarity");
 +}
  #endif
  
  static inline const char *karo_get_vmode(const char *video_mode)
        return vmode ? vmode + 1 : video_mode;
  }
  
+ #ifdef CONFIG_SPLASH_SCREEN
  int karo_load_splashimage(int mode);
+ #else
+ static inline int karo_load_splashimage(int mode)
+ {
+       return 0;
+ }
+ #endif
+ #ifdef CONFIG_CMD_NAND
+ int karo_load_nand_part(const char *part, void *addr, size_t len);
+ #else
+ static inline int karo_load_nand_part(const char *part, void *addr, size_t len)
+ {
+       return -EOPNOTSUPP;
+ }
+ #endif
+ #ifdef CONFIG_CMD_MMC
+ int karo_load_mmc_part(const char *part, void *addr, size_t len);
+ #else
+ static inline int karo_load_mmc_part(const char *part, void *addr, size_t len)
+ {
+       return -EOPNOTSUPP;
+ }
+ #endif
+ static inline int karo_load_part(const char *part, void *addr, size_t len)
+ {
+       int ret;
+       ret = karo_load_nand_part(part, addr, len);
+       if (ret == -EOPNOTSUPP)
+               return karo_load_mmc_part(part, addr, len);
+       return ret;
+ }
index 35e6ac14875ce9da5c72763c21568cfcc49a2054,f7d93e536d1c621822553e135db2c8a8c3405566..e39d8d56c95d3cb4693735a2df18059b5d1286dd
  #include <nand.h>
  #include <jffs2/load_kernel.h>
  
- DECLARE_GLOBAL_DATA_PTR;
- static int karo_load_part(const char *part, void *addr, size_t len)
- {
-       int ret;
-       struct mtd_device *dev;
-       struct part_info *part_info;
-       u8 part_num;
-       size_t actual;
+ #include "karo.h"
  
-       debug("Initializing mtd_parts\n");
-       ret = mtdparts_init();
-       if (ret)
-               return ret;
-       debug("Trying to find NAND partition '%s'\n", part);
-       ret = find_dev_and_part(part, &dev, &part_num,
-                               &part_info);
-       if (ret) {
-               printf("Failed to find flash partition '%s': %d\n",
-                       part, ret);
-               return ret;
-       }
-       debug("Found partition '%s': offset=%08x size=%08x\n",
-               part, part_info->offset, part_info->size);
-       if (part_info->size < len) {
-               printf("Warning: partition '%s' smaller than requested size: %u; truncating data to %u byte\n",
-                       part, len, part_info->size);
-               len = part_info->size;
-       }
-       debug("Reading NAND partition '%s' to %p\n", part, addr);
-       ret = nand_read_skip_bad(&nand_info[0], part_info->offset, &len,
-                               &actual, len, addr);
-       if (ret) {
-               printf("Failed to load partition '%s' to %p\n", part, addr);
-               return ret;
-       }
-       if (actual < len)
-               printf("Read only %u of %u bytes due to bad blocks\n",
-                       actual, len);
-       debug("Read %u byte from partition '%s' @ offset %08x\n",
-               len, part, part_info->offset);
-       return 0;
- }
+ DECLARE_GLOBAL_DATA_PTR;
  
  static ulong calc_fbsize(void)
  {
@@@ -77,7 -34,6 +34,6 @@@
  int karo_load_splashimage(int mode)
  {
        int ret;
-       int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]);
        unsigned long la = gd->fb_base;
        char *splashimage = getenv("splashimage");
        ulong fbsize = calc_fbsize();
@@@ -96,7 -52,7 +52,7 @@@
                return 0;
        }
  
 -      if (tstc())
 +      if (had_ctrlc())
                return -ENODEV;
  
        ret = karo_load_part(splashimage, (void *)la, fbsize);
        }
        return 0;
  }
- static int erase_flash(loff_t offs, size_t len)
- {
-       nand_erase_options_t nand_erase_options;
-       memset(&nand_erase_options, 0, sizeof(nand_erase_options));
-       nand_erase_options.length = len;
-       nand_erase_options.offset = offs;
-       return nand_erase_opts(&nand_info[0], &nand_erase_options);
- }
- int do_fbdump(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
- {
-       int ret;
-       size_t fbsize = calc_fbsize();
-       const char *part = "logo";
-       struct mtd_device *dev;
-       struct part_info *part_info;
-       u8 part_num;
-       u_char *addr = (u_char *)gd->fb_base;
-       size_t actual;
-       if (argc > 2)
-               return CMD_RET_USAGE;
-       if (argc == 2)
-               part = argv[1];
-       if (!addr) {
-               printf("fb address unknown\n");
-               return CMD_RET_FAILURE;
-       }
-       debug("Initializing mtd_parts\n");
-       ret = mtdparts_init();
-       if (ret)
-               return ret;
-       debug("Trying to find NAND partition '%s'\n", part);
-       ret = find_dev_and_part(part, &dev, &part_num,
-                               &part_info);
-       if (ret) {
-               printf("Failed to find flash partition '%s': %d\n",
-                       part, ret);
-               return ret;
-       }
-       debug("Found partition '%s': offset=%08x size=%08x\n",
-               part, part_info->offset, part_info->size);
-       if (part_info->size < fbsize) {
-               printf("Error: partition '%s' smaller than frame buffer size: %u\n",
-                       part, fbsize);
-               return CMD_RET_FAILURE;
-       }
-       debug("Writing framebuffer %p to NAND partition '%s'\n",
-               addr, part);
-       ret = erase_flash(part_info->offset, fbsize);
-       if (ret) {
-               printf("Failed to erase partition '%s'\n", part);
-               return CMD_RET_FAILURE;
-       }
-       ret = nand_write_skip_bad(&nand_info[0], part_info->offset,
-                               &fbsize, &actual, part_info->size,
-                               addr, WITH_DROP_FFS);
-       if (ret) {
-               printf("Failed to write partition '%s'\n", part);
-               return ret;
-       }
-       if (actual < fbsize)
-               printf("Wrote only %u of %u bytes due to bad blocks\n",
-                       actual, fbsize);
-       debug("Wrote %u byte from %p to partition '%s' @ offset %08x\n",
-               fbsize, addr, part, part_info->offset);
-       return CMD_RET_SUCCESS;
- }
- U_BOOT_CMD(fbdump, 2, 0, do_fbdump, "dump framebuffer contents to flash",
-       "[partition name]\n"
-       "       default partition name: 'logo'\n");
diff --combined boards.cfg
index 5860452651694e956df3e83c4a79f69035c81d5b,f3845dfc2d6019497cc5aa889c588659941201e9..8de4ca82b1b27a3de86e7be3b560310fb49be1b5
@@@ -275,24 -275,27 +275,27 @@@ tx51-8xx1_2                  ar
  tx53-x030                    arm         armv7       tx53                karo         mx5             tx53:NR_DRAM_BANKS=1
  tx53-x130                    arm         armv7       tx53                karo         mx5             tx53:NR_DRAM_BANKS=1,SYS_LVDS_IF
  tx53-x131                    arm         armv7       tx53                karo         mx5             tx53:NR_DRAM_BANKS=2,SYS_LVDS_IF
 +tx6q-1010                    arm         armv7       tx6                 karo         mx6             tx6:MX6Q
 +tx6q-1010_mfg                arm         armv7       tx6                 karo         mx6             tx6:MX6Q,MFG
 +tx6q-1010_noenv              arm         armv7       tx6                 karo         mx6             tx6:MX6Q,ENV_IS_NOWHERE
++tx6q-1020                    arm         armv7       tx6                 karo         mx6             tx6:MX6Q,TX6_V2,ENV_IS_IN_MMC
++tx6q-1020_noenv              arm         armv7       tx6                 karo         mx6             tx6:MX6Q,TX6_V2,ENV_IS_NOWHERE
++tx6q-1020_mfg                arm         armv7       tx6                 karo         mx6             tx6:MX6Q,TX6_V2,ENV_IS_IN_MMC,MFG
 +tx6q-1110                    arm         armv7       tx6                 karo         mx6             tx6:MX6Q,SYS_LVDS_IF
 +tx6q-1110_mfg                arm         armv7       tx6                 karo         mx6             tx6:MX6Q,MFG,SYS_LVDS_IF
 +tx6q-1110_noenv              arm         armv7       tx6                 karo         mx6             tx6:MX6Q,ENV_IS_NOWHERE,SYS_LVDS_IF
  tx6u-8010                    arm         armv7       tx6                 karo         mx6             tx6:MX6DL
  tx6u-8010_mfg                arm         armv7       tx6                 karo         mx6             tx6:MX6DL,MFG
  tx6u-8010_noenv              arm         armv7       tx6                 karo         mx6             tx6:MX6DL,ENV_IS_NOWHERE
  tx6u-8011                    arm         armv7       tx6                 karo         mx6             tx6:MX6DL,SYS_SDRAM_BUS_WIDTH=32
  tx6u-8011_mfg                arm         armv7       tx6                 karo         mx6             tx6:MX6DL,SYS_SDRAM_BUS_WIDTH=32,MFG
  tx6u-8011_noenv              arm         armv7       tx6                 karo         mx6             tx6:MX6DL,SYS_SDRAM_BUS_WIDTH=32,ENV_IS_NOWHERE
 -tx6q-1010                    arm         armv7       tx6                 karo         mx6             tx6:MX6Q
 -tx6q-1010_mfg                arm         armv7       tx6                 karo         mx6             tx6:MX6Q,MFG
 -tx6q-1010_noenv              arm         armv7       tx6                 karo         mx6             tx6:MX6Q,ENV_IS_NOWHERE
  tx6u-8110                    arm         armv7       tx6                 karo         mx6             tx6:MX6DL,SYS_LVDS_IF
  tx6u-8110_mfg                arm         armv7       tx6                 karo         mx6             tx6:MX6DL,MFG,SYS_LVDS_IF
  tx6u-8110_noenv              arm         armv7       tx6                 karo         mx6             tx6:MX6DL,ENV_IS_NOWHERE,SYS_LVDS_IF
  tx6u-8111                    arm         armv7       tx6                 karo         mx6             tx6:MX6DL,SYS_SDRAM_BUS_WIDTH=32,SYS_LVDS_IF
  tx6u-8111_mfg                arm         armv7       tx6                 karo         mx6             tx6:MX6DL,SYS_SDRAM_BUS_WIDTH=32,MFG,SYS_LVDS_IF
  tx6u-8111_noenv              arm         armv7       tx6                 karo         mx6             tx6:MX6DL,SYS_SDRAM_BUS_WIDTH=32,ENV_IS_NOWHERE,SYS_LVDS_IF
 -tx6q-1110                    arm         armv7       tx6                 karo         mx6             tx6:MX6Q,SYS_LVDS_IF
 -tx6q-1110_mfg                arm         armv7       tx6                 karo         mx6             tx6:MX6Q,MFG,SYS_LVDS_IF
 -tx6q-1110_noenv              arm         armv7       tx6                 karo         mx6             tx6:MX6Q,ENV_IS_NOWHERE,SYS_LVDS_IF
 -tx6q-1020                    arm         armv7       tx6                 karo         mx6             tx6:MX6Q,TX6_V2,ENV_IS_IN_MMC
 -tx6q-1020_noenv              arm         armv7       tx6                 karo         mx6             tx6:MX6Q,TX6_V2,ENV_IS_NOWHERE
 -tx6q-1020_mfg                arm         armv7       tx6                 karo         mx6             tx6:MX6Q,TX6_V2,ENV_IS_IN_MMC,MFG
  mx6qarm2                     arm         armv7       mx6qarm2            freescale      mx6           mx6qarm2:IMX_CONFIG=board/freescale/mx6qarm2/imximage.cfg
  mx6qsabreauto                arm         armv7       mx6qsabreauto       freescale      mx6           mx6qsabreauto:IMX_CONFIG=board/freescale/mx6qsabreauto/imximage.cfg,MX6Q
  mx6qsabrelite                arm         armv7       mx6qsabrelite       freescale      mx6           mx6qsabrelite:IMX_CONFIG=board/freescale/imx/ddr/mx6q_4x_mt41j128.cfg
diff --combined common/cmd_bootce.c
index 725992e38cdc2c6d1a043c7eda1e26a624faa377,d3580d2c21b1e079585e6b4e4f6907d2dc834604..e24239d85565e21941dd05334c3ce5745fd8e8d9
@@@ -147,6 -147,7 +147,6 @@@ static void ce_setup_std_drv_globals(ce
  
  static void ce_prepare_run_bin(ce_bin *bin)
  {
 -      ce_driver_globals *drv_glb;
        struct ce_magic *ce_magic = (void *)CONFIG_SYS_SDRAM_BASE + 0x160;
        ce_std_driver_globals *std_drv_glb = &ce_magic->drv_glb;
  
                printf("ok\n");
        }
  
 -      /* Prepare driver globals (if needed) */
 -      if (bin->eDrvGlb) {
 -              debug("Copying CE MAGIC from %p to %p..%p\n",
 -                      &ce_magic_template, ce_magic,
 -                      (void *)ce_magic + sizeof(*ce_magic) - 1);
 -              memcpy(ce_magic, &ce_magic_template, sizeof(*ce_magic));
 +      debug("Copying CE MAGIC from %p to %p..%p\n",
 +              &ce_magic_template, ce_magic,
 +              (void *)ce_magic + sizeof(*ce_magic) - 1);
 +      memcpy(ce_magic, &ce_magic_template, sizeof(*ce_magic));
  
 -              ce_setup_std_drv_globals(std_drv_glb);
 -              ce_magic->size = sizeof(*std_drv_glb) +
 -                      strlen(std_drv_glb->mtdparts) + 1;
 -              ce_dump_block(ce_magic, offsetof(struct ce_magic, drv_glb) +
 -                      ce_magic->size);
 -
 -              drv_glb = bin->eDrvGlb;
 -              memset(drv_glb, 0, sizeof(*drv_glb));
 -
 -              drv_glb->signature = DRV_GLB_SIGNATURE;
 -
 -              /* Local ethernet MAC address */
 -              memcpy(drv_glb->macAddr, std_drv_glb->kitl.mac,
 -                      sizeof(drv_glb->macAddr));
 -              debug("got MAC address %pM from environment\n",
 -                      drv_glb->macAddr);
 -
 -              /* Local IP address */
 -              drv_glb->ipAddr = getenv_IPaddr("ipaddr");
 -
 -              /* Subnet mask */
 -              drv_glb->ipMask = getenv_IPaddr("netmask");
 -
 -              /* Gateway config */
 -              drv_glb->ipGate = getenv_IPaddr("gatewayip");
 -#ifdef DEBUG
 -              debug("got IP address %pI4 from environment\n",
 -                      &drv_glb->ipAddr);
 -              debug("got IP mask %pI4 from environment\n",
 -                      &drv_glb->ipMask);
 -              debug("got gateway address %pI4 from environment\n",
 -                      &drv_glb->ipGate);
 -#endif
 -              /* EDBG services config */
 -              memcpy(&drv_glb->edbgConfig, &bin->edbgConfig,
 -                      sizeof(bin->edbgConfig));
 -      }
 +      ce_setup_std_drv_globals(std_drv_glb);
 +      ce_magic->size = sizeof(*std_drv_glb) +
 +              strlen(std_drv_glb->mtdparts) + 1;
 +      ce_dump_block(ce_magic, offsetof(struct ce_magic, drv_glb) +
 +              ce_magic->size);
  
        /*
         * Make sure, all the above makes it into SDRAM because
@@@ -214,6 -249,15 +214,6 @@@ static int ce_lookup_ep_bin(ce_bin *bin
                                e32->e32_entryrva;
                        bin->eRamStart = CE_FIX_ADDRESS(header->ramStart);
                        bin->eRamLen = header->ramEnd - header->ramStart;
 -                      // Save driver_globals address
 -                      // Must follow RAM section in CE config.bib file
 -                      //
 -                      // eg.
 -                      //
 -                      // RAM          80900000        03200000        RAM
 -                      // DRV_GLB      83B00000        00001000        RESERVED
 -                      //
 -                      bin->eDrvGlb = CE_FIX_ADDRESS(header->ramEnd);
                        return 1;
                }
        }
@@@ -413,6 -457,7 +413,7 @@@ U_BOOT_CMD
        "\taddr\t\tboot image from address addr (default ${fileaddr})"
  );
  
+ #ifdef CONFIG_CMD_NAND
  static int ce_nand_load(ce_bin *bin, loff_t *offset, void *buf, size_t max_len)
  {
        int ret;
@@@ -540,6 -585,7 +541,7 @@@ U_BOOT_CMD
        "\toff\t\t- flash offset (hex)\n"
        "\tpartition\t- partition name"
  );
+ #endif
  
  static int ce_send_write_ack(ce_net *net)
  {
diff --combined include/configs/tx6.h
index 935d54d656873b2eaf0f6bafd96897635e360a61,691cb90c26da42dc9144831acb6157990ee8f6e5..02eb89d849b299c049e2fd381045efce90fbcd83
  /* LCD Logo and Splash screen support */
  #define CONFIG_LCD
  #ifdef CONFIG_LCD
+ #ifndef CONFIG_TX6_V2
  #define CONFIG_SPLASH_SCREEN
  #define CONFIG_SPLASH_SCREEN_ALIGN
+ #endif
  #define CONFIG_VIDEO_IPUV3
  #define CONFIG_IPUV3_CLK              266000000
  #define CONFIG_LCD_LOGO
  #else
  #define CONFIG_SYS_PROMPT             "TX6DL U-Boot > "
  #endif
 -#define CONFIG_SYS_CBSIZE             2048            /* Console I/O buffer size */
 -#define CONFIG_SYS_PBSIZE             (CONFIG_SYS_CBSIZE + \
 -                              sizeof(CONFIG_SYS_PROMPT) + 16) /* Print buffer size */
 -#define CONFIG_SYS_MAXARGS            64              /* Max number of command args */
 +#define CONFIG_SYS_CBSIZE             2048    /* Console I/O buffer size */
 +#define CONFIG_SYS_PBSIZE                                             \
 +      (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
 +                                              /* Print buffer size */
 +#define CONFIG_SYS_MAXARGS            64      /* Max number of command args */
  #define CONFIG_SYS_BARGSIZE           CONFIG_SYS_CBSIZE
 -                                      /* Boot argument buffer size */
 -#define CONFIG_VERSION_VARIABLE               /* U-BOOT version */
 -#define CONFIG_AUTO_COMPLETE          /* Command auto complete */
 -#define CONFIG_CMDLINE_EDITING                /* Command history etc */
 +                                              /* Boot argument buffer size */
 +#define CONFIG_VERSION_VARIABLE                       /* U-BOOT version */
 +#define CONFIG_AUTO_COMPLETE                  /* Command auto complete */
 +#define CONFIG_CMDLINE_EDITING                        /* Command history etc */
  
  #define CONFIG_SYS_64BIT_VSPRINTF
  #define CONFIG_SYS_NO_FLASH
  #ifndef CONFIG_MFG
  #define CONFIG_OF_LIBFDT
  #ifdef CONFIG_OF_LIBFDT
+ #ifndef CONFIG_TX6_V2
  #define CONFIG_FDT_FIXUP_PARTITIONS
+ #endif
  #define CONFIG_OF_BOARD_SETUP
 -#ifdef CONFIG_MX6Q
 -#define CONFIG_DEFAULT_DEVICE_TREE    tx6q
 -#define CONFIG_ARCH_DEVICE_TREE               mx6q
 -#else
 -#define CONFIG_DEFAULT_DEVICE_TREE    tx6dl
 -#define CONFIG_ARCH_DEVICE_TREE               mx6dl
 -#endif
  #define CONFIG_SYS_FDT_ADDR           (PHYS_SDRAM_1 + SZ_16M)
  #endif /* CONFIG_OF_LIBFDT */
  #endif /* CONFIG_MFG */
  #define CONFIG_CMDLINE_TAG
  #define CONFIG_INITRD_TAG
  #define CONFIG_SETUP_MEMORY_TAGS
 -#define CONFIG_SERIAL_TAG
  #ifndef CONFIG_MFG
  #define CONFIG_BOOTDELAY              1
  #else
  #define CONFIG_SYS_AUTOLOAD           "no"
  #ifndef CONFIG_MFG
  #define CONFIG_BOOTFILE                       "uImage"
 -#define CONFIG_BOOTARGS                       "console=ttymxc0,115200 ro debug panic=1"
 -#define CONFIG_BOOTCOMMAND            "run bootcmd_nand"
 +#define CONFIG_BOOTARGS                       "init=/linuxrc console=ttymxc0,115200 ro debug panic=1"
 +#define CONFIG_BOOTCOMMAND            "run bootcmd_${boot_mode} bootm_cmd"
  #else
  #define CONFIG_BOOTCOMMAND            "env import " xstr(CONFIG_BOOTCMD_MFG_LOADADDR) ";run bootcmd_mfg"
  #define CONFIG_BOOTCMD_MFG_LOADADDR   10500000
  #define CONFIG_EXTRA_ENV_SETTINGS                                     \
        "autostart=no\0"                                                \
        "baseboard=stk5-v3\0"                                           \
 -      "bootargs_mmc=run default_bootargs;set bootargs ${bootargs}"    \
 -      " root=/dev/mmcblk0p3 rootwait\0"                               \
 -      "bootargs_nand=run default_bootargs;set bootargs ${bootargs}"   \
 +      "bootargs_jffs2=run default_bootargs;set bootargs ${bootargs}"  \
        " root=/dev/mtdblock3 rootfstype=jffs2\0"                       \
 +      "bootargs_mmc=run default_bootargs;set bootargs ${bootargs}"    \
 +      " root=/dev/mmcblk0p2 rootwait\0"                               \
        "bootargs_nfs=run default_bootargs;set bootargs ${bootargs}"    \
 -      " root=/dev/nfs ip=dhcp nfsroot=${nfs_server}:${nfsroot},nolock\0"\
 -      "bootcmd_mmc=set autostart no;run bootargs_mmc;"                \
 -      "fatload mmc 0 ${loadaddr} uImage;run bootm_cmd\0"              \
 -      "bootcmd_nand=set autostart no;run bootargs_nand;"              \
 -      "nboot linux;run bootm_cmd\0"                                   \
 -      "bootcmd_net=set autostart no;run bootargs_nfs;dhcp;"           \
 -      "run bootm_cmd\0"                                               \
 +      " root=/dev/nfs nfsroot=${nfs_server}:${nfsroot},nolock"        \
 +      " ip=dhcp\0"                                                    \
 +      "bootargs_ubifs=run default_bootargs;set bootargs ${bootargs}"  \
 +      " ubi.mtd=rootfs root=ubi0:rootfs rootfstype=ubifs\0"           \
 +      "bootcmd_jffs2=set autostart no;run bootargs_jffs2"             \
 +      ";nboot linux\0"                                                \
 +      "bootcmd_mmc=set autostart no;run bootargs_mmc"                 \
 +      ";fatload mmc 0 ${loadaddr} uImage\0"                           \
 +      "bootcmd_nand=set autostart no;run bootargs_ubifs"              \
 +      ";nboot linux\0"                                                \
 +      "bootcmd_net=set autoload y;set autostart n;run bootargs_nfs"   \
 +      ";dhcp\0"                                                       \
        "bootm_cmd=bootm ${loadaddr} - ${fdtaddr}\0"                    \
 +      "boot_mode=nand\0"                                              \
        "cpu_clk=800\0"                                                 \
 -      "bootdelay=-1\0"                                                \
        "default_bootargs=set bootargs " CONFIG_BOOTARGS                \
        " ${append_bootargs}\0"                                         \
        "fdtaddr=11000000\0"                                            \
 -      "fdtsave=nand erase.part dtb;nand write ${fdtaddr} dtb ${fdtsize}\0" \
 +      "fdtsave=nand erase.part dtb"                                   \
 +      ";nand write ${fdtaddr} dtb ${fdtsize}\0"                       \
        "mtdids=" MTDIDS_DEFAULT "\0"                                   \
        "mtdparts=" MTDPARTS_DEFAULT "\0"                               \
        "nfsroot=/tftpboot/rootfs\0"                                    \
  #endif /*  CONFIG_ENV_IS_NOWHERE */
  #endif /*  CONFIG_MFG */
  
+ #ifndef CONFIG_TX6_V2
  #define MTD_NAME                      "gpmi-nand"
  #define MTDIDS_DEFAULT                        "nand0=" MTD_NAME
  #define CONFIG_SYS_NAND_ONFI_DETECTION
+ #else
+ #define MTD_NAME                      ""
+ #define MTDIDS_DEFAULT                        ""
+ #define CONFIG_SUPPORT_EMMC_BOOT
+ #endif
  
  /*
   * U-Boot Commands
  #include <config_cmd_default.h>
  #define CONFIG_CMD_CACHE
  #define CONFIG_CMD_MMC
+ #ifndef CONFIG_TX6_V2
  #define CONFIG_CMD_NAND
  #define CONFIG_CMD_MTDPARTS
+ #else
+ #define CONFIG_PARTITION_UUIDS
+ #define CONFIG_EFI_PARTITION
+ #define CONFIG_CMD_GPT
+ #endif
  #define CONFIG_CMD_BOOTCE
  #define CONFIG_CMD_TIME
  #define CONFIG_CMD_I2C
  #define CONFIG_SYS_I2C_BASE           I2C1_BASE_ADDR
  #define CONFIG_SYS_I2C_MX6_PORT1
  #define CONFIG_SYS_I2C_SPEED          400000
+ #ifndef CONFIG_TX6_V2
  #define CONFIG_SYS_I2C_SLAVE          0x3c
+ #else
+ #define CONFIG_SYS_I2C_SLAVE          0x32
+ #endif
  #endif
  
  #ifndef CONFIG_ENV_IS_NOWHERE
  #define CONFIG_FSL_ESDHC
  #define CONFIG_FSL_USDHC
  #define CONFIG_SYS_FSL_ESDHC_ADDR     0
 -#define CONFIG_SYS_FSL_ESDHC_NUM      2
  
  #define CONFIG_DOS_PARTITION
  #define CONFIG_CMD_FAT
  #define CONFIG_SYS_MMC_ENV_DEV                0
  #undef CONFIG_ENV_OFFSET
  #undef CONFIG_ENV_SIZE
- /* Associated with the MMC layout defined in mmcops.c */
- #define CONFIG_ENV_OFFSET             SZ_1K
- #define CONFIG_ENV_SIZE                       (SZ_128K - CONFIG_ENV_OFFSET)
+ #define CONFIG_ENV_OFFSET             (CONFIG_U_BOOT_IMG_SIZE + CONFIG_SYS_NAND_U_BOOT_OFFS)
+ #define CONFIG_ENV_SIZE                       SZ_128K
  #define CONFIG_DYNAMIC_MMC_DEVNO
  #endif /* CONFIG_ENV_IS_IN_MMC */
  #else
  #define CONFIG_ENV_SIZE                       SZ_4K
  #endif
  
+ #ifndef CONFIG_TX6_V2
  #define MTDPARTS_DEFAULT              "mtdparts=" MTD_NAME ":"        \
        xstr(CONFIG_SYS_U_BOOT_PART_SIZE)                               \
        "@" xstr(CONFIG_SYS_NAND_U_BOOT_OFFS)                           \
        "(dtb),"                                                        \
        xstr(CONFIG_SYS_NAND_BBT_SIZE)                                  \
        "@" xstr(CONFIG_SYS_NAND_BBT_OFFSET) "(bbt)ro"
+ #else
+ #define MTDPARTS_DEFAULT              ""
+ #endif
  
  #define CONFIG_SYS_SDRAM_BASE         PHYS_SDRAM_1
  #define CONFIG_SYS_INIT_SP_ADDR               (CONFIG_SYS_SDRAM_BASE + 0x1000 - /* Fix this */ \