]> git.ipfire.org Git - people/ms/u-boot.git/blobdiff - env/ext4.c
env: mmc/fat/ext4: make sure that the MMC sub-system is initialized before using it
[people/ms/u-boot.git] / env / ext4.c
index c6a84925d99186028ab54237606c063d9bf19e3a..6c69a0a57f44fe5ddb796f1ed00ee1890c308d92 100644 (file)
 #include <ext4fs.h>
 #include <mmc.h>
 
-char *env_name_spec = "EXT4";
-
-env_t *env_ptr;
-
 DECLARE_GLOBAL_DATA_PTR;
 
-int env_init(void)
-{
-       /* use default */
-       gd->env_addr = (ulong)&default_environment[0];
-       gd->env_valid = ENV_VALID;
-
-       return 0;
-}
-
 #ifdef CONFIG_CMD_SAVEENV
-int saveenv(void)
+static int env_ext4_save(void)
 {
        env_t   env_new;
        struct blk_desc *dev_desc = NULL;
@@ -59,9 +46,9 @@ int saveenv(void)
        if (err)
                return err;
 
-       part = blk_get_device_part_str(EXT4_ENV_INTERFACE,
-                                       EXT4_ENV_DEVICE_AND_PART,
-                                       &dev_desc, &info, 1);
+       part = blk_get_device_part_str(CONFIG_ENV_EXT4_INTERFACE,
+                                      CONFIG_ENV_EXT4_DEVICE_AND_PART,
+                                      &dev_desc, &info, 1);
        if (part < 0)
                return 1;
 
@@ -70,16 +57,19 @@ int saveenv(void)
 
        if (!ext4fs_mount(info.size)) {
                printf("\n** Unable to use %s %s for saveenv **\n",
-                      EXT4_ENV_INTERFACE, EXT4_ENV_DEVICE_AND_PART);
+                      CONFIG_ENV_EXT4_INTERFACE,
+                      CONFIG_ENV_EXT4_DEVICE_AND_PART);
                return 1;
        }
 
-       err = ext4fs_write(EXT4_ENV_FILE, (void *)&env_new, sizeof(env_t));
+       err = ext4fs_write(CONFIG_ENV_EXT4_FILE, (void *)&env_new,
+                          sizeof(env_t));
        ext4fs_close();
 
        if (err == -1) {
                printf("\n** Unable to write \"%s\" from %s%d:%d **\n",
-                       EXT4_ENV_FILE, EXT4_ENV_INTERFACE, dev, part);
+                       CONFIG_ENV_EXT4_FILE, CONFIG_ENV_EXT4_INTERFACE, dev,
+                       part);
                return 1;
        }
 
@@ -88,7 +78,7 @@ int saveenv(void)
 }
 #endif /* CONFIG_CMD_SAVEENV */
 
-void env_relocate_spec(void)
+static int env_ext4_load(void)
 {
        ALLOC_CACHE_ALIGN_BUFFER(char, buf, CONFIG_ENV_SIZE);
        struct blk_desc *dev_desc = NULL;
@@ -97,9 +87,12 @@ void env_relocate_spec(void)
        int err;
        loff_t off;
 
-       part = blk_get_device_part_str(EXT4_ENV_INTERFACE,
-                                       EXT4_ENV_DEVICE_AND_PART,
-                                       &dev_desc, &info, 1);
+       if (!strcmp(CONFIG_ENV_EXT4_INTERFACE, "mmc"))
+               mmc_initialize(NULL);
+
+       part = blk_get_device_part_str(CONFIG_ENV_EXT4_INTERFACE,
+                                      CONFIG_ENV_EXT4_DEVICE_AND_PART,
+                                      &dev_desc, &info, 1);
        if (part < 0)
                goto err_env_relocate;
 
@@ -108,30 +101,33 @@ void env_relocate_spec(void)
 
        if (!ext4fs_mount(info.size)) {
                printf("\n** Unable to use %s %s for loading the env **\n",
-                      EXT4_ENV_INTERFACE, EXT4_ENV_DEVICE_AND_PART);
+                      CONFIG_ENV_EXT4_INTERFACE,
+                      CONFIG_ENV_EXT4_DEVICE_AND_PART);
                goto err_env_relocate;
        }
 
-       err = ext4_read_file(EXT4_ENV_FILE, buf, 0, CONFIG_ENV_SIZE, &off);
+       err = ext4_read_file(CONFIG_ENV_EXT4_FILE, buf, 0, CONFIG_ENV_SIZE,
+                            &off);
        ext4fs_close();
 
        if (err == -1) {
                printf("\n** Unable to read \"%s\" from %s%d:%d **\n",
-                       EXT4_ENV_FILE, EXT4_ENV_INTERFACE, dev, part);
+                       CONFIG_ENV_EXT4_FILE, CONFIG_ENV_EXT4_INTERFACE, dev,
+                       part);
                goto err_env_relocate;
        }
 
-       env_import(buf, 1);
-       return;
+       return env_import(buf, 1);
 
 err_env_relocate:
        set_default_env(NULL);
+
+       return -EIO;
 }
 
 U_BOOT_ENV_LOCATION(ext4) = {
        .location       = ENVL_EXT4,
-       .get_char       = env_get_char_spec,
-       .load           = env_relocate_spec,
-       .save           = env_save_ptr(saveenv),
-       .init           = env_init,
+       ENV_NAME("EXT4")
+       .load           = env_ext4_load,
+       .save           = env_save_ptr(env_ext4_save),
 };