This patch introduces new feature: initialization of the dfu
bootloader entity from a separate environmental variable which
can be set on a boot time.

By default, DFU always check environmental variable: $dfu_alt_info.

Changes:
- DFU will also look for environmental variable: $dfu_alt_bootloader
- if any of dfu_alt_* variable is properly defined, then function
  dfu_init_env_entities() will return success.

Use case:
Some devices can boot from various media type (SD, eMMC, NAND, etc.)
or some board configs are common for more than one board type.
In a such case, bootloader is probably placed on a different
devices or even offsets. So such DFU feature is welcome.

Signed-off-by: Przemyslaw Marczak <p.marc...@samsung.com>

---
Changes v2:
- new commit
---
 drivers/dfu/dfu.c | 28 ++++++++++++++++++----------
 1 file changed, 18 insertions(+), 10 deletions(-)

diff --git a/drivers/dfu/dfu.c b/drivers/dfu/dfu.c
index a938109..8848624 100644
--- a/drivers/dfu/dfu.c
+++ b/drivers/dfu/dfu.c
@@ -44,24 +44,32 @@ static int dfu_find_alt_num(const char *s)
 
 int dfu_init_env_entities(char *interface, int dev)
 {
+       const char *alt_info[] = {"dfu_alt_info", "dfu_alt_bootloader"};
        const char *str_env;
        char *env_bkp;
-       int ret;
+       int ret, i;
+       int alt_init_cnt = 0;
+
+       for (i = 0; i < ARRAY_SIZE(alt_info); i++) {
+               str_env = getenv(alt_info[i]);
+               if (!str_env)
+                       continue;
 
-       str_env = getenv("dfu_alt_info");
-       if (!str_env) {
-               error("\"dfu_alt_info\" env variable not defined!\n");
-               return -EINVAL;
+               env_bkp = strdup(str_env);
+               ret = dfu_config_entities(env_bkp, interface, dev);
+               free(env_bkp);
+
+               if (ret)
+                       continue;
+
+               alt_init_cnt++;
        }
 
-       env_bkp = strdup(str_env);
-       ret = dfu_config_entities(env_bkp, interface, dev);
-       if (ret) {
+       if (!alt_init_cnt) {
                error("DFU entities configuration failed!\n");
-               return ret;
+               return -1;
        }
 
-       free(env_bkp);
        return 0;
 }
 
-- 
1.9.1

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to