]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
Merge remote-tracking branch 'remotes/tx28/tx28' into karo-tx-uboot
authorLothar Waßmann <LW@KARO-electronics.de>
Fri, 21 Aug 2015 14:51:29 +0000 (16:51 +0200)
committerLothar Waßmann <LW@KARO-electronics.de>
Fri, 21 Aug 2015 14:51:29 +0000 (16:51 +0200)
27 files changed:
Makefile
arch/arm/cpu/arm926ejs/mxs/Makefile
arch/arm/cpu/arm926ejs/mxs/mxs.c
arch/arm/cpu/arm926ejs/mxs/spl_mem_init.c
arch/arm/cpu/arm926ejs/mxs/spl_power_init.c
arch/arm/include/asm/arch-mxs/regs-uartapp.h
arch/arm/include/asm/imx-common/regs-bch.h
arch/arm/include/asm/imx-common/regs-gpmi.h
arch/arm/lib/vectors.S
board/karo/tx28/Kconfig
board/karo/tx28/Makefile
board/karo/tx28/config.mk
board/karo/tx28/flash.c
board/karo/tx28/spl_boot.c
board/karo/tx28/tx28.c
configs/tx28-40x1_defconfig
configs/tx28-40x1_noenv_defconfig
configs/tx28-40x2_defconfig
configs/tx28-40x2_noenv_defconfig
configs/tx28-40x3_defconfig
configs/tx28-40x3_noenv_defconfig
configs/tx28-41x0_defconfig
configs/tx28-41x0_noenv_defconfig
drivers/gpio/mxs_gpio.c
drivers/mmc/Kconfig
drivers/net/Kconfig
include/configs/tx28.h

index 92faed63fd1208897078d9dc1c88d8fa65e7fc55..d8b73076a45d051ea8d4efc75751142c1da9258e 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -912,9 +912,12 @@ u-boot.ais: spl/u-boot-spl.ais u-boot.img FORCE
 
 u-boot-signed.sb: u-boot.bin spl/u-boot-spl.bin
        $(Q)$(MAKE) $(build)=arch/arm/cpu/arm926ejs/mxs u-boot-signed.sb
-u-boot.sb: u-boot.bin spl/u-boot-spl.bin
+u-boot.sb: u-boot.bin spl/u-boot-spl.bin elftosb
        $(Q)$(MAKE) $(build)=arch/arm/cpu/arm926ejs/mxs u-boot.sb
 
+elftosb:
+       $(MAKE) -C $(KBUILD_SRC)/tools/elftosb all
+
 # On x600 (SPEAr600) U-Boot is appended to U-Boot SPL.
 # Both images are created using mkimage (crc etc), so that the ROM
 # bootloader can check its integrity. Padding needs to be done to the
index c457f32a4b0454e891a2f14599b2aab35042ecda..e80867ed602b619bd0e91c7d8d40fb9364980dfa 100644 (file)
@@ -78,8 +78,16 @@ quiet_cmd_mkimage_mxs = MKIMAGE $@
 cmd_mkimage_mxs = $(objtree)/tools/mkimage -n $< -T mxsimage $@ \
        $(if $(KBUILD_VERBOSE:1=), >/dev/null)
 
-u-boot.sb: $(src)/$(MKIMAGE_TARGET-y) u-boot.bin spl/u-boot-spl.bin FORCE
-       $(call if_changed,mkimage_mxs)
+#u-boot.sb: $(src)/$(MKIMAGE_TARGET-y) u-boot.bin spl/u-boot-spl.bin FORCE
+#      $(call if_changed,mkimage_mxs)
+ELFTOSB_TARGET-$(CONFIG_SOC_MX23) = imx23
+ELFTOSB_TARGET-$(CONFIG_SOC_MX28) = imx28
+
+u-boot.bd: $(KBUILD_SRC)/$(CPUDIR)/$(SOC)/u-boot-$(ELFTOSB_TARGET-y).bd
+       sed "s@OBJTREE@$(objtree)@g" $^ > $@
+
+u-boot.sb: u-boot spl/u-boot-spl $(objtree)/u-boot.bd $(KBUILD_SRC)/tools/elftosb/bld/linux/elftosb
+               $(KBUILD_SRC)/tools/elftosb/bld/linux/elftosb -V -zf $(ELFTOSB_TARGET-y) -c u-boot.bd -o u-boot.sb
 
 u-boot-signed.sb: $(src)/mxsimage-signed.cfg u-boot.ivt u-boot.sig spl/u-boot-spl.ivt spl/u-boot-spl.sig FORCE
        $(call if_changed,mkimage_mxs)
index 55c9d38d2c8b5a48b583f3c083781915b823c7b9..b451c66ee41d14714de0e30207b3451207d2ac3d 100644 (file)
@@ -108,22 +108,13 @@ void enable_caches(void)
  */
 void mx28_fixup_vt(uint32_t start_addr)
 {
-       /* ldr pc, [pc, #0x18] */
        /* Jumptable location is 0x0 */
        uint32_t *vt = (uint32_t *)0x20;
        uint32_t cr = get_cr();
 
-<<<<<<< HEAD
-       for (i = 0; i < 8; i++) {
-               /* cppcheck-suppress nullPointer */
-               vt[i] = ldr_pc;
-               /* cppcheck-suppress nullPointer */
-               vt[i + 8] = start_addr + (4 * i);
-       }
-=======
+       /* cppcheck-suppress nullPointer */
        memcpy(vt, (void *)start_addr + 0x20, 32);
        set_cr(cr & ~CR_V);
->>>>>>> karo-tx-uboot
 }
 
 #ifdef CONFIG_ARCH_MISC_INIT
index 0aa06125b9ec995602850bbeeda92ce43cf0ecc9..93689a18a5b6562b0f1d81d5cf3a97b09e919119 100644 (file)
@@ -204,7 +204,7 @@ static void mxs_mem_setup_cpu_and_hbus(void)
                &clkctrl_regs->hw_clkctrl_clkseq_clr);
 }
 
-void data_abort_memdetect_handler(void)
+static void data_abort_memdetect_handler(void)
 {
        asm volatile("subs pc, lr, #4");
 }
index 7c846da31b8ca8a499d630ab2e135af896341292..8fc08afbca64a1e74748061ad886c90c3577e559 100644 (file)
@@ -239,16 +239,16 @@ static int mxs_is_batt_good(void)
 
        volt = mxs_get_batt_volt();
 
-       if (volt >= 3500)
-               return 0;
-
-       if (volt >= 2400)
-               return 1;
-
        writel(POWER_CHARGE_STOP_ILIMIT_MASK | POWER_CHARGE_BATTCHRG_I_MASK,
                &power_regs->hw_power_charge_clr);
        writel(POWER_CHARGE_PWD_BATTCHRG, &power_regs->hw_power_charge_set);
 
+       if (volt >= 3500) {
+               return 0;
+       }
+       if (volt >= 2400) {
+               return 1;
+       }
        return 0;
 }
 
@@ -487,7 +487,7 @@ static void mxs_power_init_4p2_regulator(void)
         * We then check the brownout status. If the brownout status is false,
         * the voltage is already close to the target voltage of 4.2V so we
         * can go ahead and set the 4P2 current limit to our max target limit.
-        * If the brownout status is true, we need to ramp us the current limit
+        * If the brownout status is true, we need to ramp up the current limit
         * so that we don't cause large inrush current issues. We step up the
         * current limit until the brownout status is false or until we've
         * reached our maximum defined 4p2 current limit.
@@ -724,8 +724,8 @@ static void mxs_handle_5v_conflict(void)
 
                if (tmp & POWER_STS_VDDIO_BO) {
                        /*
-                        * VDDIO has a brownout, then the VDD5V_GT_VDDIO becomes
-                        * unreliable
+                        * If VDDIO has a brownout, then the VDD5V_GT_VDDIO
+                        * becomes unreliable
                         */
                        mxs_powerdown();
                        break;
@@ -778,12 +778,11 @@ static void mxs_5v_boot(void)
  * This function configures the battery input brownout threshold. The value
  * at which the battery brownout happens is configured to 3.0V in the code.
  */
-static void mxs_init_batt_bo(void)
+static void mxs_fixed_batt_boot(void)
 {
        writel(POWER_CTRL_ENIRQ_BATT_BO, &power_regs->hw_power_ctrl_clr);
 
        setbits_le32(&power_regs->hw_power_5vctrl,
-               POWER_5VCTRL_PWDN_5VBRNOUT |
                POWER_5VCTRL_ENABLE_DCDC |
                POWER_5VCTRL_ILIMIT_EQ_ZERO |
                POWER_5VCTRL_PWDN_5VBRNOUT |
@@ -1023,6 +1022,8 @@ struct mxs_vddx_cfg {
        uint32_t                bo_enirq;
        uint32_t                bo_offset_mask;
        uint32_t                bo_offset_offset;
+       uint16_t                bo_min_mV;
+       uint16_t                bo_max_mV;
 };
 
 #define POWER_REG(n)           &((struct mxs_power_regs *)MXS_POWER_BASE)->n
@@ -1042,6 +1043,8 @@ static const struct mxs_vddx_cfg mxs_vddio_cfg = {
        .bo_enirq               = POWER_CTRL_ENIRQ_VDDIO_BO,
        .bo_offset_mask         = POWER_VDDIOCTRL_BO_OFFSET_MASK,
        .bo_offset_offset       = POWER_VDDIOCTRL_BO_OFFSET_OFFSET,
+       .bo_min_mV              = 2700,
+       .bo_max_mV              = 3475,
 };
 
 static const struct mxs_vddx_cfg mxs_vddd_cfg = {
@@ -1055,12 +1058,14 @@ static const struct mxs_vddx_cfg mxs_vddd_cfg = {
        .bo_enirq               = POWER_CTRL_ENIRQ_VDDD_BO,
        .bo_offset_mask         = POWER_VDDDCTRL_BO_OFFSET_MASK,
        .bo_offset_offset       = POWER_VDDDCTRL_BO_OFFSET_OFFSET,
+       .bo_min_mV              = 800,
+       .bo_max_mV              = 1475,
 };
 
 static const struct mxs_vddx_cfg mxs_vdda_cfg = {
        .reg                    = POWER_REG(hw_power_vddactrl),
-       .step_mV                = 50,
-       .lowest_mV              = 2800,
+       .step_mV                = 25,
+       .lowest_mV              = 1800,
        .highest_mV             = 3600,
        .powered_by_linreg      = mxs_get_vdda_power_source_off,
        .trg_mask               = POWER_VDDACTRL_TRG_MASK,
@@ -1068,6 +1073,8 @@ static const struct mxs_vddx_cfg mxs_vdda_cfg = {
        .bo_enirq               = POWER_CTRL_ENIRQ_VDDA_BO,
        .bo_offset_mask         = POWER_VDDACTRL_BO_OFFSET_MASK,
        .bo_offset_offset       = POWER_VDDACTRL_BO_OFFSET_OFFSET,
+       .bo_min_mV              = 1400,
+       .bo_max_mV              = 2175,
 };
 
 #ifdef CONFIG_SOC_MX23
@@ -1098,19 +1105,26 @@ static const struct mxs_vddx_cfg mxs_vddmem_cfg = {
  * value is also in mV.
  */
 static void mxs_power_set_vddx(const struct mxs_vddx_cfg *cfg,
-                               uint32_t new_target, uint32_t new_brownout)
+                               uint32_t new_target, uint32_t bo_offset)
 {
        uint32_t cur_target, diff, bo_int = 0;
        int powered_by_linreg = 0;
        int adjust_up;
 
-       if (new_target < cfg->lowest_mV)
+       if (new_target < cfg->lowest_mV) {
                new_target = cfg->lowest_mV;
-       if (new_target > cfg->highest_mV)
+       }
+       if (new_target > cfg->highest_mV) {
                new_target = cfg->highest_mV;
+       }
+
+       if (new_target - bo_offset < cfg->bo_min_mV) {
+               bo_offset = new_target - cfg->bo_min_mV;
+       } else if (new_target - bo_offset > cfg->bo_max_mV) {
+               bo_offset = new_target - cfg->bo_max_mV;
+       }
 
-       new_brownout = DIV_ROUND_CLOSEST(new_target - new_brownout,
-                                        cfg->step_mV);
+       bo_offset = DIV_ROUND_CLOSEST(bo_offset, cfg->step_mV);
 
        cur_target = readl(cfg->reg);
        cur_target &= cfg->trg_mask;
@@ -1123,8 +1137,8 @@ static void mxs_power_set_vddx(const struct mxs_vddx_cfg *cfg,
 
        if (adjust_up && cfg->bo_irq) {
                if (powered_by_linreg) {
-                       bo_int = readl(cfg->reg);
-                       clrbits_le32(cfg->reg, cfg->bo_enirq);
+                       bo_int = readl(&power_regs->hw_power_ctrl);
+                       writel(cfg->bo_enirq, &power_regs->hw_power_ctrl_clr);
                }
                setbits_le32(cfg->reg, cfg->bo_offset_mask);
        }
@@ -1165,11 +1179,12 @@ static void mxs_power_set_vddx(const struct mxs_vddx_cfg *cfg,
                if (adjust_up && powered_by_linreg) {
                        writel(cfg->bo_irq, &power_regs->hw_power_ctrl_clr);
                        if (bo_int & cfg->bo_enirq)
-                               setbits_le32(cfg->reg, cfg->bo_enirq);
+                               writel(cfg->bo_enirq,
+                                       &power_regs->hw_power_ctrl_set);
                }
 
                clrsetbits_le32(cfg->reg, cfg->bo_offset_mask,
-                               new_brownout << cfg->bo_offset_offset);
+                               bo_offset << cfg->bo_offset_offset);
        }
 }
 
index 7ceb810dc627231acf2bbcbe66820e863e4f0809..27644e04641a42707ad2ca981f8acb03a9c938d6 100644 (file)
 
 #ifndef __ASSEMBLY__
 struct mxs_uartapp_regs {
-       mxs_reg_32(hw_uartapp_ctrl0)
-       mxs_reg_32(hw_uartapp_ctrl1)
-       mxs_reg_32(hw_uartapp_ctrl2)
-       mxs_reg_32(hw_uartapp_linectrl)
-       mxs_reg_32(hw_uartapp_linectrl2)
-       mxs_reg_32(hw_uartapp_intr)
-       mxs_reg_32(hw_uartapp_data)
-       mxs_reg_32(hw_uartapp_stat)
-       mxs_reg_32(hw_uartapp_debug)
-       mxs_reg_32(hw_uartapp_version)
-       mxs_reg_32(hw_uartapp_autobaud)
+       mxs_reg_32(hw_uartapp_ctrl0);
+       mxs_reg_32(hw_uartapp_ctrl1);
+       mxs_reg_32(hw_uartapp_ctrl2);
+       mxs_reg_32(hw_uartapp_linectrl);
+       mxs_reg_32(hw_uartapp_linectrl2);
+       mxs_reg_32(hw_uartapp_intr);
+       mxs_reg_32(hw_uartapp_data);
+       mxs_reg_32(hw_uartapp_stat);
+       mxs_reg_32(hw_uartapp_debug);
+       mxs_reg_32(hw_uartapp_version);
+       mxs_reg_32(hw_uartapp_autobaud);
 };
 #endif
 
index dfd5f96896d9d9f8031682d82efe123d91572206..327b8d693f609347721db6c11f24a7c9df8168d4 100644 (file)
@@ -35,6 +35,7 @@ struct bch_regs {
        mxs_reg_32(hw_bch_flash2layout1);
        mxs_reg_32(hw_bch_flash3layout0);
        mxs_reg_32(hw_bch_flash3layout1);
+       mxs_reg_32(hw_bch_debug0);
        mxs_reg_32(hw_bch_dbgkesread);
        mxs_reg_32(hw_bch_dbgcsferead);
        mxs_reg_32(hw_bch_dbgsyndegread);
index 642864f3cfdcdc14b16a9cd323a502033dcab974..29b20fb8729d486b80afe5be6d81355bfba2bbcd 100644 (file)
@@ -33,6 +33,8 @@ struct gpmi_regs {
        mxs_reg_32(hw_gpmi_stat);
        mxs_reg_32(hw_gpmi_debug);
        mxs_reg_32(hw_gpmi_version);
+       mxs_reg_32(hw_gpmi_debug2);
+       mxs_reg_32(hw_gpmi_debug3);
 };
 #endif
 
index 1b51f003f35efb9bfb08c7cee1f895bfec0564fb..2ac7ffe473a2a9405efdf3d2180445fdc8252ea7 100644 (file)
@@ -117,10 +117,10 @@ fiq:
 /* IRQ stack memory (calculated at run-time) + 8 bytes */
 .globl IRQ_STACK_START_IN
 IRQ_STACK_START_IN:
-#ifndef IRAM_BASE_ADDR
+#ifndef CONFIG_SPL_STACK
        .word   0x0badc0de
 #else
-       .word   IRAM_BASE_ADDR + 0x20
+       .word   CONFIG_SPL_STACK
 #endif
 
 #ifdef CONFIG_USE_IRQ
index 896ee62d1bb2eaadc3e0d236de70890c50ec1d9f..7c18a451e8a073592c8d19b4aef9e2e953355b96 100644 (file)
@@ -1,4 +1,4 @@
-if TARGET_TX28_40X1
+if TARGET_TX28
 
 config SYS_BOARD
        default "tx28"
@@ -10,118 +10,65 @@ config SYS_SOC
        default "mxs"
 
 config SYS_CONFIG_NAME
-       default "tx28-40x1"
-
-endif
-
-if TARGET_TX28_40X1_NOENV
-
-config SYS_BOARD
-       default "tx28"
-
-config SYS_VENDOR
-       default "karo"
-
-config SYS_SOC
-       default "mxs"
-
-config SYS_CONFIG_NAME
-       default "tx28-40x1_noenv"
-
-endif
-
-if TARGET_TX28_40X2
-
-config SYS_BOARD
-       default "tx28"
-
-config SYS_VENDOR
-       default "karo"
-
-config SYS_SOC
-       default "mxs"
-
-config SYS_CONFIG_NAME
-       default "tx28-40x2"
-
-endif
-
-if TARGET_TX28_40X2_NOENV
-
-config SYS_BOARD
-       default "tx28"
-
-config SYS_VENDOR
-       default "karo"
-
-config SYS_SOC
-       default "mxs"
-
-config SYS_CONFIG_NAME
-       default "tx28-40x2_noenv"
-
-endif
-
-if TARGET_TX28_40X3
-
-config SYS_BOARD
-       default "tx28"
-
-config SYS_VENDOR
-       default "karo"
-
-config SYS_SOC
-       default "mxs"
-
-config SYS_CONFIG_NAME
-       default "tx28-40x3"
-
-endif
-
-if TARGET_TX28_40X3_NOENV
-
-config SYS_BOARD
-       default "tx28"
-
-config SYS_VENDOR
-       default "karo"
-
-config SYS_SOC
-       default "mxs"
-
-config SYS_CONFIG_NAME
-       default "tx28-40x3_noenv"
-
-endif
-
-if TARGET_TX28_41X0
-
-config SYS_BOARD
-       default "tx28"
-
-config SYS_VENDOR
-       default "karo"
-
-config SYS_SOC
-       default "mxs"
-
-config SYS_CONFIG_NAME
-       default "tx28-41x0"
-
-endif
-
-if TARGET_TX28_41X0_NOENV
-
-config SYS_BOARD
        default "tx28"
 
-config SYS_VENDOR
-       default "karo"
-
-config SYS_SOC
-       default "mxs"
-
-config SYS_CONFIG_NAME
-       default "tx28-41x0_noenv"
+config TX28
+       bool
+       default y
+       select SPL
+       select SOC_MX28
+       select APBH_DMA
+       select APBH_DMA_BURST
+       select APBH_DMA_BURST8
+       select CC_OPTIMIZE_LIBS_FOR_SPEED
+       select CMD_BMP if LCD
+       select CMD_NAND_TRIMFFS if CMD_NAND
+       select CMD_ROMUPDATE if !SPL_BUILD
+       select FDT_FIXUP_PARTITIONS if OF_LIBFDT
+       select GET_FEC_MAC_ADDR_FROM_IIM if FEC_MXC
+       select LIB_RAND
+       select MTD_PARTITIONS if CMD_NAND
+       select MTD_DEVICE if CMD_NAND
+       select SYS_NAND_USE_FLASH_BBT if NAND
+
+config TARGET_TX28_40X1_NOENV
+       bool
+       select TX28
+
+config TARGET_TX28_40X2
+       bool
+       select TX28
+
+config TARGET_TX28_40X2_NOENV
+       bool
+       select TX28
+
+config TARGET_TX28_40X3
+       bool
+       select TX28
+
+config TARGET_TX28_40X3_NOENV
+       bool
+       select TX28
+
+config TARGET_TX28_41X0
+       bool
+       select TX28
+
+config TARGET_TX28_41X0_NOENV
+       bool
+       select TX28
+
+choice
+       prompt "U-Boot image variant"
+       default TX28_UBOOT
+
+config TX28_UBOOT
+       bool "Standard U-Boot image"
+
+config TX28_UBOOT_NOENV
+       bool "U-Boot using only built-in environment"
+
+endchoice
 
 endif
index 698298c829f9ec8745fae3c3864dba66eedaf2f3..3c8d7f057e36ba0ec5581087ca647369c34c7ad0 100644 (file)
@@ -6,6 +6,4 @@
 
 obj-y                          += tx28.o
 obj-$(CONFIG_SPL_BUILD)                += spl_boot.o
-ifneq ($(CONFIG_SPL_BUILD),y)
-       obj-$(CONFIG_CMD_ROMUPDATE) += flash.o
-endif
+obj-$(CONFIG_CMD_ROMUPDATE)    += flash.o
index 4c0a4441788106569b160fa23b86de12dab384dc..0d3b1fd2202ea9f33b924d8232243834591a9dd9 100644 (file)
@@ -7,8 +7,9 @@ __HAVE_ARCH_GENERIC_BOARD := y
 LOGO_BMP = logos/karo.bmp
 
 PLATFORM_CPPFLAGS += -Werror
+PLATFORM_CPPFLAGS += -DCONFIG_SPL_TEXT_BASE=$(CONFIG_SPL_TEXT_BASE)
 ifneq ($(CONFIG_SPL_BUILD),y)
-       ALL-y += $(obj)u-boot.sb
+       ALL-y += $(obj)/u-boot.sb
 endif
 
 CONFIG_SYS_NAND_BLOCK_SIZE := 131072
index 9234e721b5b74381eaecf3e5e1d3512343dea1c9..4aa3bc921e35e5747b8ba5c55a99b3459c4240c7 100644 (file)
@@ -74,8 +74,7 @@ struct mx28_fcb {
 #define BF_VAL(v, bf)          (((v) & bf##_MASK) >> bf##_OFFSET)
 
 static nand_info_t *mtd = &nand_info[0];
-
-extern void *_start;
+static bool doit;
 
 #define BIT(v,n)       (((v) >> (n)) & 0x1)
 
@@ -303,20 +302,25 @@ static int write_fcb(void *buf, int block)
                return 0;
        }
 
-       ret = nand_erase(mtd, block * mtd->erasesize, mtd->erasesize);
-       if (ret) {
-               printf("Failed to erase FCB block %u\n", block);
-               return ret;
+       if (doit) {
+               ret = nand_erase(mtd, block * mtd->erasesize, mtd->erasesize);
+               if (ret) {
+                       printf("Failed to erase FCB block %u\n", block);
+                       return ret;
+               }
        }
 
        printf("Writing FCB to block %d @ %08llx\n", block,
                (u64)block * mtd->erasesize);
-       chip->select_chip(mtd, 0);
-       ret = chip->write_page(mtd, chip, buf, 1, page, 0, 1);
-       if (ret) {
-               printf("Failed to write FCB to block %u: %d\n", block, ret);
+       if (doit) {
+               chip->select_chip(mtd, 0);
+               ret = chip->write_page(mtd, chip, 0, mtd->writesize,
+                               buf, 1, page, 0, 1);
+               if (ret) {
+                       printf("Failed to write FCB to block %u: %d\n", block, ret);
+               }
+               chip->select_chip(mtd, -1);
        }
-       chip->select_chip(mtd, -1);
        return ret;
 }
 
@@ -326,13 +330,21 @@ static int write_fcb(void *buf, int block)
        (b##_start_block <= a##_end_block &&            \
                b##_end_block >= a##_start_block))
 
-#define fail_if_overlap(a,b,m1,m2) do {                                \
-       if (chk_overlap(a, b)) {                                \
+#define fail_if_overlap(a,b,m1,m2) do {                                        \
+       if (!doit)                                                      \
+               printf("check: %s[%lu..%lu] <> %s[%lu..%lu]\n",         \
+                       m1, a##_start_block, a##_end_block,             \
+                       m2, b##_start_block, b##_end_block);            \
+       if (a##_end_block < a##_start_block)                            \
+               printf("Invalid start/end block # for %s\n", m1);       \
+       if (b##_end_block < b##_start_block)                            \
+               printf("Invalid start/end block # for %s\n", m2);       \
+       if (chk_overlap(a, b)) {                                        \
                printf("%s blocks %lu..%lu overlap %s in blocks %lu..%lu!\n", \
-                       m1, a##_start_block, a##_end_block,     \
-                       m2, b##_start_block, b##_end_block);    \
-               return -EINVAL;                                 \
-       }                                                       \
+                       m1, a##_start_block, a##_end_block,             \
+                       m2, b##_start_block, b##_end_block);            \
+               return -EINVAL;                                         \
+       }                                                               \
 } while (0)
 
 static int tx28_prog_uboot(void *addr, int start_block, int skip,
@@ -350,25 +362,28 @@ static int tx28_prog_uboot(void *addr, int start_block, int skip,
 
        printf("Erasing flash @ %08llx..%08llx\n", erase_opts.offset,
                erase_opts.offset + erase_opts.length - 1);
-       ret = nand_erase_opts(mtd, &erase_opts);
-       if (ret) {
-               printf("Failed to erase flash: %d\n", ret);
-               return ret;
+       if (doit) {
+               ret = nand_erase_opts(mtd, &erase_opts);
+               if (ret) {
+                       printf("Failed to erase flash: %d\n", ret);
+                       return ret;
+               }
        }
 
-       printf("Programming flash @ %08llx..%08llx from %p\n",
-               (u64)start_block * mtd->erasesize,
-               (u64)start_block * mtd->erasesize + size - 1, addr);
-       actual = size;
-       ret = nand_write_skip_bad(mtd, prg_start, &actual, NULL,
-                               prg_length, addr, WITH_DROP_FFS);
-       if (ret) {
-               printf("Failed to program flash: %d\n", ret);
-               return ret;
-       }
-       if (actual < size) {
-               printf("Could only write %u of %u bytes\n", actual, size);
-               return -EIO;
+       printf("Programming flash @ %08x..%08x from %p\n",
+               prg_start, prg_start + size - 1, addr);
+       if (doit) {
+               actual = size;
+               ret = nand_write_skip_bad(mtd, prg_start, &actual, NULL,
+                                       prg_length, addr, WITH_DROP_FFS);
+               if (ret) {
+                       printf("Failed to program flash: %d\n", ret);
+                       return ret;
+               }
+               if (actual < size) {
+                       printf("Could only write %u of %u bytes\n", actual, size);
+                       return -EIO;
+               }
        }
        return 0;
 }
@@ -386,7 +401,6 @@ int do_update(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
        int ret;
        const unsigned long fcb_start_block = 0, fcb_end_block = 0;
        int erase_size = mtd->erasesize;
-       int page_size = mtd->writesize;
        void *buf;
        char *load_addr;
        char *file_size;
@@ -419,6 +433,7 @@ int do_update(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
        if (ret)
                return ret;
 
+       doit = true;
        for (optind = 1; optind < argc; optind++) {
                char *endp;
 
@@ -471,6 +486,8 @@ int do_update(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
                                        mtd_num_blocks - 1);
                                return -EINVAL;
                        }
+               } else if (strcmp(argv[optind], "-n") == 0) {
+                       doit = false;
                } else if (argv[optind][0] == '-') {
                        printf("Unrecognized option %s\n", argv[optind]);
                        return -EINVAL;
@@ -487,7 +504,14 @@ int do_update(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
                return -EINVAL;
        }
        if (argc - optind < 2 && file_size == NULL) {
-               printf("WARNING: Image size not specified; overwriting whole uboot partition\n");
+               if (uboot_part) {
+                       printf("WARNING: Image size not specified; overwriting whole '%s' partition\n",
+                               uboot_part);
+                       printf("This will only work, if there are no bad blocks inside this partition!\n");
+               } else {
+                       printf("ERROR: Image size must be specified\n");
+                       return -EINVAL;
+               }
        }
        if (argc > optind) {
                load_addr = NULL;
@@ -507,13 +531,10 @@ int do_update(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
                size = simple_strtoul(file_size, NULL, 16);
                printf("Using default file size %08x\n", size);
        }
-       if (size > 0) {
+       if (size > 0)
                fw_num_blocks = DIV_ROUND_UP(size, mtd->erasesize);
-       } else {
-               fw_num_blocks = part_info->size / mtd->erasesize -
-                       extra_blocks;
-               size = fw_num_blocks * mtd->erasesize;
-       }
+       else
+               fw_num_blocks = 0;
 
        if (uboot_part) {
                ret = find_dev_and_part(uboot_part, &dev, &part_num,
@@ -525,6 +546,8 @@ int do_update(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
                }
                fw1_start_block = part_info->offset / mtd->erasesize;
                max_len1 = part_info->size;
+               if (size == 0)
+                       fw_num_blocks = max_len1 / mtd->erasesize;
        } else {
                max_len1 = (fw_num_blocks + extra_blocks) * mtd->erasesize;
        }
@@ -539,6 +562,12 @@ int do_update(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
                }
                fw2_start_block = redund_part_info->offset / mtd->erasesize;
                max_len2 = redund_part_info->size;
+               if (fw2_start_block == fcb_start_block) {
+                       fw2_start_block++;
+                       max_len2 -= mtd->erasesize;
+               }
+               if (size == 0)
+                       fw_num_blocks = max_len2 / mtd->erasesize;
        } else if (fw2_set) {
                max_len2 = (fw_num_blocks + extra_blocks) * mtd->erasesize;
        } else {
@@ -548,8 +577,9 @@ int do_update(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
        fw1_skip = find_contig_space(fw1_start_block, fw_num_blocks,
                                max_len1 / mtd->erasesize);
        if (fw1_skip < 0) {
-               printf("Could not find %lu contiguous good blocks for fw image\n",
-                       fw_num_blocks);
+               printf("Could not find %lu contiguous good blocks for fw image in blocks %lu..%lu\n",
+                       fw_num_blocks, fw1_start_block,
+                       fw1_start_block + max_len1 / mtd->erasesize - 1);
                if (uboot_part) {
 #ifdef CONFIG_ENV_IS_IN_NAND
                        if (part_info->offset <= CONFIG_ENV_OFFSET + TOTAL_ENV_SIZE) {
@@ -567,7 +597,10 @@ int do_update(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
                }
                return -ENOSPC;
        }
-       fw1_end_block = fw1_start_block + fw1_skip + fw_num_blocks - 1;
+       if (extra_blocks)
+               fw1_end_block = fw1_start_block + fw_num_blocks + extra_blocks - 1;
+       else
+               fw1_end_block = fw1_start_block + fw_num_blocks + fw1_skip - 1;
 
        if (fw2_set && fw2_start_block == 0)
                fw2_start_block = fw1_end_block + 1;
@@ -575,8 +608,9 @@ int do_update(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
                fw2_skip = find_contig_space(fw2_start_block, fw_num_blocks,
                                        max_len2 / mtd->erasesize);
                if (fw2_skip < 0) {
-                       printf("Could not find %lu contiguous good blocks for redundant fw image\n",
-                               fw_num_blocks);
+                       printf("Could not find %lu contiguous good blocks for redundant fw image in blocks %lu..%lu\n",
+                               fw_num_blocks, fw2_start_block,
+                               fw2_start_block + max_len2 / mtd->erasesize - 1);
                        if (redund_part) {
                                printf("Increase the size of the '%s' partition or use a different partition\n",
                                        redund_part);
@@ -588,7 +622,10 @@ int do_update(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
        } else {
                fw2_skip = 0;
        }
-       fw2_end_block = fw2_start_block + fw2_skip + fw_num_blocks - 1;
+       if (extra_blocks)
+               fw2_end_block = fw2_start_block + fw_num_blocks + extra_blocks - 1;
+       else
+               fw2_end_block = fw2_start_block + fw_num_blocks + fw2_skip - 1;
 
 #ifdef CONFIG_ENV_IS_IN_NAND
        fail_if_overlap(fcb, env, "FCB", "Environment");
@@ -602,49 +639,44 @@ int do_update(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 #endif
                fail_if_overlap(fw1, fw2, "FW1", "FW2");
        }
+       fw1_start_block += fw1_skip;
+       fw2_start_block += fw2_skip;
 
-       buf = malloc(erase_size);
+       buf = memalign(SZ_128K, erase_size);
        if (buf == NULL) {
                printf("Failed to allocate buffer\n");
                return -ENOMEM;
        }
 
-       fcb = create_fcb(buf, fw1_start_block + fw1_skip,
-                       fw2_start_block + fw2_skip, fw_num_blocks);
+       fcb = create_fcb(buf, fw1_start_block,
+                       fw2_start_block, fw_num_blocks);
        if (IS_ERR(fcb)) {
                printf("Failed to initialize FCB: %ld\n", PTR_ERR(fcb));
-               free(buf);
-               return PTR_ERR(fcb);
+               ret = PTR_ERR(fcb);
+               goto out;
        }
        encode_hamming_13_8(fcb, (void *)fcb + 512, 512);
 
        ret = write_fcb(buf, fcb_start_block);
-       free(buf);
        if (ret) {
                printf("Failed to write FCB to block %lu\n", fcb_start_block);
                return ret;
        }
 
-       if (size & (page_size - 1)) {
-               memset(addr + size, 0xff, size & (page_size - 1));
-               size = ALIGN(size, page_size);
-       }
-
        printf("Programming U-Boot image from %p to block %lu @ %08llx\n",
-               addr, fw1_start_block + fw1_skip,
-               (u64)(fw1_start_block + fw1_skip) * mtd->erasesize);
+               addr, fw1_start_block, (u64)fw1_start_block * mtd->erasesize);
        ret = tx28_prog_uboot(addr, fw1_start_block, fw1_skip, size,
                        max_len1);
 
-       if (fw2_start_block == 0) {
-               return ret;
-       }
+       if (ret || fw2_start_block == 0)
+               goto out;
 
        printf("Programming redundant U-Boot image to block %lu @ %08llx\n",
-               fw2_start_block + fw2_skip,
-               (u64)(fw2_start_block + fw2_skip) * mtd->erasesize);
+               fw2_start_block, (u64)fw2_start_block * mtd->erasesize);
        ret = tx28_prog_uboot(addr, fw2_start_block, fw2_skip, fw_num_blocks,
                        max_len2);
+out:
+       free(buf);
        return ret;
 }
 
@@ -652,12 +684,13 @@ U_BOOT_CMD(romupdate, 11, 0, do_update,
        "Creates an FCB data structure and writes an U-Boot image to flash",
        "[-f {<part>|block#}] [-r [{<part>|block#}]] [-e #] [<address>] [<length>]\n"
        "\t-f <part>\twrite bootloader image to partition <part>\n"
-       "\t-f #\twrite bootloader image at block # (decimal)\n"
-       "\t-r\twrite redundant bootloader image at next free block after first image\n"
+       "\t-f #\t\twrite bootloader image at block # (decimal)\n"
+       "\t-r\t\twrite redundant bootloader image at next free block after first image\n"
        "\t-r <part>\twrite redundant bootloader image to partition <part>\n"
-       "\t-r #\twrite redundant bootloader image at block # (decimal)\n"
-       "\t-e #\tspecify number of redundant blocks per boot loader image\n"
-       "\t\tonly valid if -f or -r specify a flash address rather than a partition name\n"
-       "\t<address>\tRAM address of bootloader image (default: ${fileaddr}\n"
-       "\t<length>\tlength of bootloader image in RAM (default: ${filesize}"
+       "\t-r #\t\twrite redundant bootloader image at block # (decimal)\n"
+       "\t-e #\t\tspecify number of redundant blocks per boot loader image\n"
+       "\t\t\t(only valid if -f or -r specify a flash address rather than a partition name)\n"
+       "\t-n\t\tshow what would be done without actually updating the flash\n"
+       "\t<address>\tRAM address of bootloader image (default: ${fileaddr})\n"
+       "\t<length>\tlength of bootloader image in RAM (default: ${filesize})"
        );
index 58335ff6f00084aaa0256be863f0beb67829d529..41367c2cab4cb6133a29752ae188f8dc58458ca8 100644 (file)
@@ -219,9 +219,10 @@ static void tx28_stk5_led_on(void)
        gpio_direction_output(MX28_PAD_ENET0_RXD3__GPIO_4_10, 1);
 }
 
-void board_init_ll(void)
+void board_init_ll(const uint32_t arg, const uint32_t *resptr)
 {
-       mxs_common_spl_init(tx28_stk5_pads, ARRAY_SIZE(tx28_stk5_pads));
+       mxs_common_spl_init(arg, resptr,
+                       tx28_stk5_pads, ARRAY_SIZE(tx28_stk5_pads));
        tx28_stk5_lcd_init();
        tx28_stk5_led_on();
 }
@@ -277,7 +278,7 @@ static uint32_t tx28_dram_vals[] = {
        /* 2d0 */ 0x06120612, 0x04420442, 0x04420442, 0x00040004,
        /* 2e0 */ 0x00040004, 0x00000000, 0x00000000, 0x00000000,
        /* 2f0 */ 0x00000000, 0x00000000,
-#elif CONFIG_SDRAM_SIZE == SZ_128M
+#elif CONFIG_SYS_SDRAM_SIZE == SZ_128M
        /* TX28-40x0: MT47H64M16HR-3 */
        /* 000 */ 0x00000000, 0x00000000, 0x00000000, 0x00000000,
        /* 010 */ 0x00000000, 0x00000000, 0x00000000, 0x00000000,
@@ -327,7 +328,7 @@ static uint32_t tx28_dram_vals[] = {
        /* 2d0 */ 0x06120612, 0x04420442, 0x04420442, 0x00040004,
        /* 2e0 */ 0x00040004, 0x00000000, 0x00000000, 0x00000000,
        /* 2f0 */ 0x00000000, 0x00000000,
-#elif CONFIG_SDRAM_SIZE == SZ_256M
+#elif CONFIG_SYS_SDRAM_SIZE == SZ_256M
        /* TX28-40x2: MEM2G16D2DABG */
        /* 000 */ 0x00000000, 0x00000000, 0x00000000, 0x00000000,
        /* 010 */ 0x00000000, 0x00000000, 0x00000000, 0x00000000,
index c578c0650ea3b5a0b1c972d5007b88fabbc906ed..2e7ec77a1057fa15228f3d1afbdf5259eb499d82 100644 (file)
@@ -100,7 +100,7 @@ static const iomux_cfg_t tx28_pads[] = {
 /* provide at least _some_ sort of randomness */
 #define MAX_LOOPS       100
 
-static u32 random;
+static u32 random __attribute__((section("data")));
 
 static inline void random_init(void)
 {
@@ -200,7 +200,7 @@ int board_mmc_init(bd_t *bis)
 #ifdef CONFIG_FEC_MXC
 #ifdef CONFIG_GET_FEC_MAC_ADDR_FROM_IIM
 
-#ifdef CONFIG_FEC_MXC_MULTI
+#ifndef CONFIG_TX28_S
 #define FEC_MAX_IDX                    1
 #else
 #define FEC_MAX_IDX                    0
@@ -256,6 +256,46 @@ static int fec_get_mac_addr(int index)
        eth_setenv_enetaddr(env_name, mac);
        return 0;
 }
+
+static inline int tx28_fec1_enabled(void)
+{
+       const char *status;
+       int off;
+
+       if (!gd->fdt_blob)
+               return 0;
+
+       off = fdt_path_offset(gd->fdt_blob, "ethernet1");
+       if (off < 0)
+               return 0;
+
+       status = fdt_getprop(gd->fdt_blob, off, "status", NULL);
+       return status && (strcmp(status, "okay") == 0);
+}
+
+static void tx28_init_mac(void)
+{
+       int ret;
+
+       ret = fec_get_mac_addr(0);
+       if (ret < 0) {
+               printf("Failed to read FEC0 MAC address from OCOTP\n");
+               return;
+       }
+#ifdef CONFIG_TX28_S
+       if (tx28_fec1_enabled()) {
+               ret = fec_get_mac_addr(1);
+               if (ret < 0) {
+                       printf("Failed to read FEC1 MAC address from OCOTP\n");
+                       return;
+               }
+       }
+#endif
+}
+#else
+static inline void tx28_init_mac(void)
+{
+}
 #endif /* CONFIG_GET_FEC_MAC_ADDR_FROM_IIM */
 
 static const iomux_cfg_t tx28_fec_pads[] = {
@@ -292,7 +332,7 @@ int board_eth_init(bd_t *bis)
                return ret;
        }
 
-#ifdef CONFIG_FEC_MXC_MULTI
+#ifndef CONFIG_TX28_S
        if (getenv("ethaddr")) {
                ret = fecmxc_initialize_multi(bis, 0, 0, MXS_ENET0_BASE);
                if (ret) {
@@ -319,6 +359,10 @@ int board_eth_init(bd_t *bis)
 #endif
        return 0;
 }
+#else
+static inline void tx28_init_mac(void)
+{
+}
 #endif /* CONFIG_FEC_MXC */
 
 enum {
@@ -796,43 +840,7 @@ static void stk5v5_board_init(void)
        /* init flexcan transceiver enable GPIO */
        gpio_request_one(STK5_CAN_XCVR_GPIO, GPIOFLAG_OUTPUT_INIT_HIGH,
                        "Flexcan Transceiver");
-       SETUP_IOMUX_PAD(STK5_CAN_XCVR_GPIO);
-}
-
-int tx28_fec1_enabled(void)
-{
-       const char *status;
-       int off;
-
-       if (!gd->fdt_blob)
-               return 0;
-
-       off = fdt_path_offset(gd->fdt_blob, "ethernet1");
-       if (off < 0)
-               return 0;
-
-       status = fdt_getprop(gd->fdt_blob, off, "status", NULL);
-       return status && (strcmp(status, "okay") == 0);
-}
-
-static void tx28_init_mac(void)
-{
-       int ret;
-
-       ret = fec_get_mac_addr(0);
-       if (ret < 0) {
-               printf("Failed to read FEC0 MAC address from OCOTP\n");
-               return;
-       }
-#ifdef CONFIG_FEC_MXC_MULTI
-       if (tx28_fec1_enabled()) {
-               ret = fec_get_mac_addr(1);
-               if (ret < 0) {
-                       printf("Failed to read FEC1 MAC address from OCOTP\n");
-                       return;
-               }
-       }
-#endif
+       mxs_iomux_setup_pad(STK5_CAN_XCVR_GPIO);
 }
 
 int board_late_init(void)
@@ -908,7 +916,7 @@ int checkboard(void)
        const char *dlm = "";
 
        printf("Board: Ka-Ro TX28-4%sx%d\n", TX28_MOD_SUFFIX,
-               CONFIG_SDRAM_SIZE / SZ_128M +
+               CONFIG_SYS_SDRAM_SIZE / SZ_128M +
                CONFIG_SYS_NAND_BLOCKS / 2048 * 2);
 
        printf("POWERUP Source: ");
index 91c5a514cee2c263d7bf137e5f5bcf39ca5345bb..c24af64f733bfd9c1f828338daf628cc58096dc9 100644 (file)
@@ -18,7 +18,6 @@ CONFIG_CMD_MTDPARTS=y
 CONFIG_CMD_NAND=y
 CONFIG_CMD_NAND_TRIMFFS=y
 CONFIG_CMD_PING=y
-CONFIG_CMD_ROMUPDATE=y
 CONFIG_CMD_TIME=y
 +S:CONFIG_DOS_PARTITION=y
 CONFIG_DM=y
index 447dd6079534bfe991cb5ae6ebe2abd9b0999f72..84b045429281c27d00772f73b68fc1d014b184fc 100644 (file)
@@ -2,7 +2,7 @@ CONFIG_SYS_EXTRA_OPTIONS="SYS_SDRAM_SIZE=SZ_128M"
 +S:CONFIG_ARM=y
 +S:CONFIG_TARGET_TX28=y
 +S:CONFIG_TARGET_TX28_40X1=y
-+S:CONFIG_TX28_UBOOT=y
++S:CONFIG_TX28_UBOOT_NOENV=y
 CONFIG_BOOTP_DNS=y
 CONFIG_BOOTP_GATEWAY=y
 CONFIG_BOOTP_SUBNETMASK=y
@@ -18,11 +18,9 @@ CONFIG_CMD_MTDPARTS=y
 CONFIG_CMD_NAND=y
 CONFIG_CMD_NAND_TRIMFFS=y
 CONFIG_CMD_PING=y
-CONFIG_CMD_ROMUPDATE=y
 CONFIG_CMD_TIME=y
 +S:CONFIG_DOS_PARTITION=y
 CONFIG_DM=y
-+S:CONFIG_ENV_IS_NOWHERE=y
 CONFIG_FEC_MXC=y
 CONFIG_GET_FEC_MAC_ADDR_FROM_IIM=y
 CONFIG_LCD=y
index e09132462d5225bd5881c20f8faf4d0aef61ab68..f84c66ec627e5beb7b09142e1abe4d24d286d134 100644 (file)
@@ -18,7 +18,6 @@ CONFIG_CMD_MTDPARTS=y
 CONFIG_CMD_NAND=y
 CONFIG_CMD_NAND_TRIMFFS=y
 CONFIG_CMD_PING=y
-CONFIG_CMD_ROMUPDATE=y
 CONFIG_CMD_TIME=y
 +S:CONFIG_DOS_PARTITION=y
 CONFIG_DM=y
index 7687e6100beee9b61aded2d56cecdb4293fc62a1..942c540f9f572e3cc8eda683d9336e831db6c9a9 100644 (file)
@@ -2,7 +2,7 @@ CONFIG_SYS_EXTRA_OPTIONS="SYS_SDRAM_SIZE=SZ_256M"
 +S:CONFIG_ARM=y
 +S:CONFIG_TARGET_TX28=y
 +S:CONFIG_TARGET_TX28_40X1=y
-+S:CONFIG_TX28_UBOOT=y
++S:CONFIG_TX28_UBOOT_NOENV=y
 CONFIG_BOOTP_DNS=y
 CONFIG_BOOTP_GATEWAY=y
 CONFIG_BOOTP_SUBNETMASK=y
@@ -18,11 +18,9 @@ CONFIG_CMD_MTDPARTS=y
 CONFIG_CMD_NAND=y
 CONFIG_CMD_NAND_TRIMFFS=y
 CONFIG_CMD_PING=y
-CONFIG_CMD_ROMUPDATE=y
 CONFIG_CMD_TIME=y
 +S:CONFIG_DOS_PARTITION=y
 CONFIG_DM=y
-+S:CONFIG_ENV_IS_NOWHERE=y
 CONFIG_FEC_MXC=y
 CONFIG_GET_FEC_MAC_ADDR_FROM_IIM=y
 CONFIG_LCD=y
index 87b84f8e3e1d123d2509a7ed87c5ad4c28dd3090..311022df085423db6acd7f76885459b08964608c 100644 (file)
@@ -18,7 +18,6 @@ CONFIG_CMD_MTDPARTS=y
 CONFIG_CMD_NAND=y
 CONFIG_CMD_NAND_TRIMFFS=y
 CONFIG_CMD_PING=y
-CONFIG_CMD_ROMUPDATE=y
 CONFIG_CMD_TIME=y
 +S:CONFIG_DOS_PARTITION=y
 CONFIG_DM=y
index 2a8753fa7a1ccafdd53fccf76344ba0b3c855f47..28fa3a2aa11767519dfcc8ea2ff3b655bb591f65 100644 (file)
@@ -2,7 +2,7 @@ CONFIG_SYS_EXTRA_OPTIONS="SYS_SDRAM_SIZE=SZ_128M,SYS_NAND_BLOCKS=2048"
 +S:CONFIG_ARM=y
 +S:CONFIG_TARGET_TX28=y
 +S:CONFIG_TARGET_TX28_40X1=y
-+S:CONFIG_TX28_UBOOT=y
++S:CONFIG_TX28_UBOOT_NOENV=y
 CONFIG_BOOTP_DNS=y
 CONFIG_BOOTP_GATEWAY=y
 CONFIG_BOOTP_SUBNETMASK=y
@@ -18,11 +18,9 @@ CONFIG_CMD_MTDPARTS=y
 CONFIG_CMD_NAND=y
 CONFIG_CMD_NAND_TRIMFFS=y
 CONFIG_CMD_PING=y
-CONFIG_CMD_ROMUPDATE=y
 CONFIG_CMD_TIME=y
 +S:CONFIG_DOS_PARTITION=y
 CONFIG_DM=y
-+S:CONFIG_ENV_IS_NOWHERE=y
 CONFIG_FEC_MXC=y
 CONFIG_GET_FEC_MAC_ADDR_FROM_IIM=y
 CONFIG_LCD=y
index 747754d92c21f1802ff8914faaaa06fecbd71e05..c5861bc09715377deb2d8b8f576861902e749bf6 100644 (file)
@@ -18,7 +18,6 @@ CONFIG_CMD_MTDPARTS=y
 CONFIG_CMD_NAND=y
 CONFIG_CMD_NAND_TRIMFFS=y
 CONFIG_CMD_PING=y
-CONFIG_CMD_ROMUPDATE=y
 CONFIG_CMD_TIME=y
 +S:CONFIG_DOS_PARTITION=y
 CONFIG_DM=y
index 51bc9bc4c2d2a6e6cd1639607f7db86b64c92b74..a707d599a4d4068cbdeab16be182cb416e1d6705 100644 (file)
@@ -2,7 +2,7 @@ CONFIG_SYS_EXTRA_OPTIONS="TX28_S,SYS_SDRAM_SIZE=SZ_64M"
 +S:CONFIG_ARM=y
 +S:CONFIG_TARGET_TX28=y
 +S:CONFIG_TARGET_TX28_41X0=y
-+S:CONFIG_TX28_UBOOT=y
++S:CONFIG_TX28_UBOOT_NOENV=y
 CONFIG_BOOTP_DNS=y
 CONFIG_BOOTP_GATEWAY=y
 CONFIG_BOOTP_SUBNETMASK=y
@@ -18,11 +18,9 @@ CONFIG_CMD_MTDPARTS=y
 CONFIG_CMD_NAND=y
 CONFIG_CMD_NAND_TRIMFFS=y
 CONFIG_CMD_PING=y
-CONFIG_CMD_ROMUPDATE=y
 CONFIG_CMD_TIME=y
 +S:CONFIG_DOS_PARTITION=y
 CONFIG_DM=y
-+S:CONFIG_ENV_IS_NOWHERE=y
 CONFIG_FEC_MXC=y
 CONFIG_GET_FEC_MAC_ADDR_FROM_IIM=y
 CONFIG_LCD=y
index cc7c225ccdbf059638841afde3eebe0a2b630fde..82ae23d315e045121bb7ea4154b73a799616cbc6 100644 (file)
@@ -11,6 +11,7 @@
 #include <netdev.h>
 #include <asm/errno.h>
 #include <asm/io.h>
+#include <asm/gpio.h>
 #include <asm/arch/iomux.h>
 #include <asm/arch/imx-regs.h>
 
@@ -63,7 +64,7 @@ int gpio_get_value(unsigned gpio)
        return (readl(&reg->reg) >> PAD_PIN(gpio)) & 1;
 }
 
-void gpio_set_value(unsigned gpio, int value)
+int gpio_set_value(unsigned gpio, int value)
 {
        uint32_t bank = PAD_BANK(gpio);
        uint32_t offset = PINCTRL_DOUT(bank);
@@ -74,6 +75,8 @@ void gpio_set_value(unsigned gpio, int value)
                writel(1 << PAD_PIN(gpio), &reg->reg_set);
        else
                writel(1 << PAD_PIN(gpio), &reg->reg_clr);
+
+       return 0;
 }
 
 int gpio_direction_input(unsigned gpio)
index 7b9b12b7f23c548c261799856eb91a3ac99cc855..b3d00004541f73f60a08be69417cbb1c41d7ae7f 100644 (file)
@@ -22,6 +22,11 @@ config FSL_USDHC
        depends on SOC_MX6
        depends on FSL_ESDHC
 
+config MXS_MMC
+       bool "i.MXS MMC/SDHC controller"
+       depends on SOC_MXS || SOC_MX6
+       select GENERIC_MMC
+
 config SUPPORT_EMMC_BOOT
        bool "Support boot from eMMC"
        depends on MMC
index c5736b0c3775e79ee5cafe8e1f083458883622ee..6c0abccb9d7156dfa47d4fb273229d2063a4358f 100644 (file)
@@ -17,10 +17,6 @@ config GET_FEC_MAC_ADDR_FROM_IIM
 
 if FEC_MXC
 
-config FEC_MXC_MULTI
-       bool "Support multiple ethernet interfaces"
-       depends on MX28 || MX6
-
 config FEC_MXC_PHYADDR
        int "FEC Ethernet PHY address"
                default 0
index 9927b171373c0e4cdd059994f368ec79f1f255ee..565f7610c3beb8f0808469c3efd1ad1cca948c9e 100644 (file)
@@ -16,7 +16,7 @@
  */
 #define CONFIG_MXS_GPIO                                        /* GPIO control */
 #define CONFIG_SYS_HZ                  1000            /* Ticks per second */
-#define PHYS_SDRAM_1_SIZE              CONFIG_SDRAM_SIZE
+#define PHYS_SDRAM_1_SIZE              CONFIG_SYS_SDRAM_SIZE
 #ifdef CONFIG_TX28_S
 #define TX28_MOD_SUFFIX                        "1"
 #else
 #else
 #define CONFIG_LOADADDR                        43000000
 #endif
-#define CONFIG_FDTADDR                 41000000
+#define CONFIG_FDTADDR                 40800000
 #define CONFIG_SYS_LOAD_ADDR           _pfx(0x, CONFIG_LOADADDR)
 #define CONFIG_SYS_FDT_ADDR            _pfx(0x, CONFIG_FDTADDR)
 #define CONFIG_U_BOOT_IMG_SIZE         SZ_1M
  */
 #ifdef CONFIG_NAND
 #define CONFIG_SYS_NAND_BLOCK_SIZE     SZ_128K
-#define CONFIG_NAND_MXS
-#define CONFIG_APBH_DMA
-#define CONFIG_APBH_DMA_BURST
-#define CONFIG_APBH_DMA_BURST8
 #define CONFIG_SYS_NAND_U_BOOT_OFFS    CONFIG_SYS_NAND_BLOCK_SIZE
 #define CONFIG_SYS_MXS_DMA_CHANNEL     4
 #define CONFIG_SYS_NAND_MAX_CHIPS      0x1
  * MMC Driver
  */
 #ifdef CONFIG_CMD_MMC
-#define CONFIG_MXS_MMC
 #define CONFIG_BOUNCE_BUFFER
 
-#define CONFIG_DOS_PARTITION
 #define CONFIG_CMD_FAT
 #define CONFIG_FAT_WRITE
 #define CONFIG_CMD_EXT2
 #define CONFIG_SPL_SERIAL_SUPPORT
 #define CONFIG_SPL_GPIO_SUPPORT
 #define CONFIG_SYS_SPL_VDDD_VAL                1500
-#define CONFIG_SYS_SPL_BATT_BO_LEVEL   2800
+#define CONFIG_SYS_SPL_BATT_BO_LEVEL   2400
+#define CONFIG_SYS_SPL_VDDA_BO_VAL     100
 #define CONFIG_SYS_SPL_VDDMEM_VAL      0       /* VDDMEM is not utilized on TX28 */
 
 #endif /* __CONFIGS_TX28_H */