spl: saveenv: adding saveenv support in SPL
authorB, Ravi <ravibabu@ti.com>
Wed, 28 Sep 2016 09:16:18 +0000 (14:46 +0530)
committerTom Rini <trini@konsulko.com>
Sat, 8 Oct 2016 13:33:36 +0000 (09:33 -0400)
By default saveenv option is not supported for SPL. This patch
enable the support for save environment variable for SPL build.

Enable save environment support in SPL after setenv. By default
the saveenv option is not provided in SPL, but some boards need
this support in 'Falcon' boot, where SPL need to boot from
different images based on environment variable set by OS. For
example OS may set "reboot_image" environment variable to
"recovery" inorder to boot recovery image by SPL. The SPL read
"reboot_image" and act accordingly and change the reboot_image
to default mode using setenv and save the environemnt.

Signed-off-by: Ravi Babu <ravibabu@ti.com>
Reviewed-by: Simon Glass <sig@chromium.org>
change in v1:
- dropped SUPPORT, use CONFIG_SPL_SAVEENV
- updates the comments in mmc_private.h

common/spl/Kconfig
drivers/mmc/Makefile
drivers/mmc/mmc_private.h
lib/Makefile
lib/hashtable.c

index 84670b1c596b206d04c74e8485d9cc2db0ac580c..72aacab52cbe6a8dcf34552cb2491fb0d632c8a2 100644 (file)
@@ -172,6 +172,19 @@ config SPL_ENV_SUPPORT
          starting U-Boot first. Enabling this option will make getenv()
          and setenv() available in SPL.
 
+config SPL_SAVEENV
+       bool "Support save environment"
+       depends on SPL && SPL_ENV_SUPPORT
+       help
+         Enable save environment support in SPL after setenv. By default
+         the saveenv option is not provided in SPL, but some boards need
+         this support in 'Falcon' boot, where SPL need to boot from
+         different images based on environment variable set by OS. For
+         example OS may set "reboot_image" environment variable to
+         "recovery" inorder to boot recovery image by SPL. The SPL read
+         "reboot_image" and act accordingly and change the reboot_image
+         to default mode using setenv and save the environemnt.
+
 config SPL_ETH_SUPPORT
        bool "Support Ethernet"
        depends on SPL_ENV_SUPPORT
index 18351fb48a87b6cc4a3e611721827e0a8431cfca..d8507589ca6537126d287c6cf01c1ee5ada282b6 100644 (file)
@@ -60,6 +60,7 @@ obj-$(CONFIG_ROCKCHIP_SDHCI) += rockchip_sdhci.o
 
 ifdef CONFIG_SPL_BUILD
 obj-$(CONFIG_SPL_MMC_BOOT) += fsl_esdhc_spl.o
+obj-$(CONFIG_SPL_SAVEENV) += mmc_write.o
 else
 obj-$(CONFIG_GENERIC_MMC) += mmc_write.o
 endif
index 49ec022a9e9cd96ebaf9404a3de1959c4dfb245d..d8b399e3641fc6cb241b1bbe22023488ec359031 100644 (file)
@@ -28,8 +28,7 @@ ulong mmc_bread(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt,
                void *dst);
 #endif
 
-#ifndef CONFIG_SPL_BUILD
-
+#if !(defined(CONFIG_SPL_BUILD) && !defined(CONFIG_SPL_SAVEENV))
 unsigned long mmc_berase(struct blk_desc *block_dev, lbaint_t start,
                         lbaint_t blkcnt);
 
@@ -41,9 +40,9 @@ ulong mmc_bwrite(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt,
                 const void *src);
 #endif
 
-#else /* CONFIG_SPL_BUILD */
+#else /* CONFIG_SPL_BUILD and CONFIG_SPL_SAVEENV is not defined */
 
-/* SPL will never write or erase, declare dummies to reduce code size. */
+/* declare dummies to reduce code size. */
 
 #ifdef CONFIG_BLK
 static inline unsigned long mmc_berase(struct udevice *dev,
index c81bfeb2db53a77ba033a69ca3e6bcc9ac1dc027..e3383f404637147edfa89bac6ee92e98abfd2281 100644 (file)
@@ -47,6 +47,7 @@ obj-$(CONFIG_$(SPL_)RSA) += rsa/
 obj-$(CONFIG_$(SPL_)SHA1) += sha1.o
 obj-$(CONFIG_$(SPL_)SHA256) += sha256.o
 
+obj-$(CONFIG_SPL_SAVEENV) += qsort.o
 obj-$(CONFIG_$(SPL_)OF_LIBFDT) += libfdt/
 ifneq ($(CONFIG_SPL_BUILD)$(CONFIG_SPL_OF_PLATDATA),yy)
 obj-$(CONFIG_$(SPL_)OF_CONTROL) += fdtdec_common.o
index afd230555c2b3144252d598c489a39b08b6a18d8..f08847758a091da8d9960ff94ec830fbcfa502ce 100644 (file)
@@ -477,11 +477,11 @@ int hdelete_r(const char *key, struct hsearch_data *htab, int flag)
        return 1;
 }
 
+#if !(defined(CONFIG_SPL_BUILD) && !defined(CONFIG_SPL_SAVEENV))
 /*
  * hexport()
  */
 
-#ifndef CONFIG_SPL_BUILD
 /*
  * Export the data stored in the hash table in linearized form.
  *