]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - common/env_onenand.c
AT91: reset.c: fix comments, add option
[karo-tx-uboot.git] / common / env_onenand.c
index dcf09dee1bcf9d3162ef20974677e5ed98a72752..cf997bf7e507bbda71d3f839fcfcbf3cd004fcc7 100644 (file)
@@ -60,12 +60,18 @@ uchar env_get_char_spec(int index)
 void env_relocate_spec(void)
 {
        struct mtd_info *mtd = &onenand_mtd;
+#ifdef CONFIG_ENV_ADDR_FLEX
+       struct onenand_chip *this = &onenand_chip;
+#endif
        loff_t env_addr;
        int use_default = 0;
        size_t retlen;
 
        env_addr = CONFIG_ENV_ADDR;
-
+#ifdef CONFIG_ENV_ADDR_FLEX
+       if (FLEXONENAND(this))
+               env_addr = CONFIG_ENV_ADDR_FLEX;
+#endif
        /* Check OneNAND exist */
        if (mtd->writesize)
                /* Ignore read fail */
@@ -91,6 +97,9 @@ void env_relocate_spec(void)
 int saveenv(void)
 {
        struct mtd_info *mtd = &onenand_mtd;
+#ifdef CONFIG_ENV_ADDR_FLEX
+       struct onenand_chip *this = &onenand_chip;
+#endif
        loff_t env_addr = CONFIG_ENV_ADDR;
        struct erase_info instr = {
                .callback       = NULL,
@@ -98,6 +107,14 @@ int saveenv(void)
        size_t retlen;
 
        instr.len = CONFIG_ENV_SIZE;
+#ifdef CONFIG_ENV_ADDR_FLEX
+       if (FLEXONENAND(this)) {
+               env_addr = CONFIG_ENV_ADDR_FLEX;
+               instr.len = CONFIG_ENV_SIZE_FLEX;
+               instr.len <<= onenand_mtd.eraseregions[0].numblocks == 1 ?
+                               1 : 0;
+       }
+#endif
        instr.addr = env_addr;
        instr.mtd = mtd;
        if (mtd->erase(mtd, &instr)) {