env: fat: allow to dynamically set storage interface 04/252604/1
authorMarek Szyprowski <m.szyprowski@samsung.com>
Fri, 29 Jan 2021 12:01:31 +0000 (13:01 +0100)
committerMarek Szyprowski <m.szyprowski@samsung.com>
Fri, 29 Jan 2021 14:30:15 +0000 (15:30 +0100)
Add support for setting the FAT env storage interface dynamically by
defining board's own env_fat_get_interface() function.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Change-Id: I80eef53b9adff942524061c5a8be1bb583fea21f

env/fat.c

index 71bf8bf..91329fb 100644 (file)
--- a/env/fat.c
+++ b/env/fat.c
@@ -38,14 +38,19 @@ __weak int mmc_get_env_dev(void)
 #endif
 }
 
-static char *env_fat_device_and_part(void)
+__weak char *env_fat_get_interface(void)
+{
+       return CONFIG_ENV_FAT_INTERFACE;
+}
+
+static char *env_fat_device_and_part(char *interface)
 {
 #ifdef CONFIG_MMC
        static char *part_str;
 
        if (!part_str) {
                part_str = CONFIG_ENV_FAT_DEVICE_AND_PART;
-               if (!strcmp(CONFIG_ENV_FAT_INTERFACE, "mmc") && part_str[0] == ':') {
+               if (!strcmp(interface, "mmc") && part_str[0] == ':') {
                        part_str = "0" CONFIG_ENV_FAT_DEVICE_AND_PART;
                        part_str[0] += mmc_get_env_dev();
                }
@@ -62,6 +67,7 @@ static int env_fat_save(void)
        env_t __aligned(ARCH_DMA_MINALIGN) env_new;
        struct blk_desc *dev_desc = NULL;
        struct disk_partition info;
+       char *interface;
        int dev, part;
        int err;
        loff_t size;
@@ -70,8 +76,9 @@ static int env_fat_save(void)
        if (err)
                return err;
 
-       part = blk_get_device_part_str(CONFIG_ENV_FAT_INTERFACE,
-                                       env_fat_device_and_part(),
+       interface = env_fat_get_interface();
+       part = blk_get_device_part_str(interface,
+                                       env_fat_device_and_part(interface),
                                        &dev_desc, &info, 1);
        if (part < 0)
                return 1;
@@ -82,8 +89,7 @@ static int env_fat_save(void)
                 * This printf is embedded in the messages from env_save that
                 * will calling it. The missing \n is intentional.
                 */
-               printf("Unable to use %s %d:%d... ",
-                      CONFIG_ENV_FAT_INTERFACE, dev, part);
+               printf("Unable to use %s %d:%d... ", interface, dev, part);
                return 1;
        }
 
@@ -95,7 +101,7 @@ static int env_fat_save(void)
                 * will calling it. The missing \n is intentional.
                 */
                printf("Unable to write \"%s\" from %s%d:%d... ",
-                       CONFIG_ENV_FAT_FILE, CONFIG_ENV_FAT_INTERFACE, dev, part);
+                       CONFIG_ENV_FAT_FILE, interface, dev, part);
                return 1;
        }
 
@@ -108,16 +114,19 @@ static int env_fat_load(void)
        ALLOC_CACHE_ALIGN_BUFFER(char, buf, CONFIG_ENV_SIZE);
        struct blk_desc *dev_desc = NULL;
        struct disk_partition info;
+       char *interface;
        int dev, part;
        int err;
 
+       interface = env_fat_get_interface();
+
 #ifdef CONFIG_MMC
-       if (!strcmp(CONFIG_ENV_FAT_INTERFACE, "mmc"))
+       if (!strcmp(interface, "mmc"))
                mmc_initialize(NULL);
 #endif
 
-       part = blk_get_device_part_str(CONFIG_ENV_FAT_INTERFACE,
-                                       env_fat_device_and_part(),
+       part = blk_get_device_part_str(interface,
+                                       env_fat_device_and_part(interface),
                                        &dev_desc, &info, 1);
        if (part < 0)
                goto err_env_relocate;
@@ -128,8 +137,7 @@ static int env_fat_load(void)
                 * This printf is embedded in the messages from env_save that
                 * will calling it. The missing \n is intentional.
                 */
-               printf("Unable to use %s %d:%d... ",
-                      CONFIG_ENV_FAT_INTERFACE, dev, part);
+               printf("Unable to use %s %d:%d... ", interface, dev, part);
                goto err_env_relocate;
        }
 
@@ -140,7 +148,7 @@ static int env_fat_load(void)
                 * will calling it. The missing \n is intentional.
                 */
                printf("Unable to read \"%s\" from %s%d:%d... ",
-                       CONFIG_ENV_FAT_FILE, CONFIG_ENV_FAT_INTERFACE, dev, part);
+                       CONFIG_ENV_FAT_FILE, interface, dev, part);
                goto err_env_relocate;
        }