]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - common/spl/spl_fat.c
karo: add support for TXA5 (SAMA5D4) modules
[karo-tx-uboot.git] / common / spl / spl_fat.c
index 1e532d5963e0e0ef84bbf3a90809c9b0aafc982d..350f7d9fd684f610c223f1dc8a58658b43b7f7eb 100644 (file)
@@ -30,7 +30,7 @@ static int spl_register_fat_device(block_dev_desc_t *block_dev, int partition)
 #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
                printf("%s: fat register err - %d\n", __func__, err);
 #endif
-               hang();
+               return err;
        }
 
        fat_registered = 1;
@@ -74,23 +74,50 @@ end:
 int spl_load_image_fat_os(block_dev_desc_t *block_dev, int partition)
 {
        int err;
+       __maybe_unused char *file;
 
        err = spl_register_fat_device(block_dev, partition);
        if (err)
                return err;
 
-       err = file_fat_read(CONFIG_SPL_FAT_LOAD_ARGS_NAME,
+#if defined(CONFIG_SPL_ENV_SUPPORT) && defined(CONFIG_SPL_OS_BOOT)
+       file = getenv("falcon_args_file");
+       if (file) {
+               err = file_fat_read(file, (void *)CONFIG_SYS_SPL_ARGS_ADDR, 0);
+               if (err <= 0) {
+                       printf("spl: error reading image %s, err - %d, falling back to default\n",
+                              file, err);
+                       goto defaults;
+               }
+               file = getenv("falcon_image_file");
+               if (file) {
+                       err = spl_load_image_fat(block_dev, partition, file);
+                       if (err != 0) {
+                               puts("spl: falling back to default\n");
+                               goto defaults;
+                       }
+
+                       return 0;
+               } else
+                       puts("spl: falcon_image_file not set in environment, falling back to default\n");
+       } else
+               puts("spl: falcon_args_file not set in environment, falling back to default\n");
+
+defaults:
+#endif
+
+       err = file_fat_read(CONFIG_SPL_FS_LOAD_ARGS_NAME,
                            (void *)CONFIG_SYS_SPL_ARGS_ADDR, 0);
        if (err <= 0) {
 #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
                printf("%s: error reading image %s, err - %d\n",
-                      __func__, CONFIG_SPL_FAT_LOAD_ARGS_NAME, err);
+                      __func__, CONFIG_SPL_FS_LOAD_ARGS_NAME, err);
 #endif
                return -1;
        }
 
        return spl_load_image_fat(block_dev, partition,
-                       CONFIG_SPL_FAT_LOAD_KERNEL_NAME);
+                       CONFIG_SPL_FS_LOAD_KERNEL_NAME);
 }
 #endif
 #endif