diff options
-rw-r--r-- | common/env_fat.c | 86 | ||||
-rw-r--r-- | include/configs/at91sam9m10g45ek.h | 8 |
2 files changed, 34 insertions, 60 deletions
diff --git a/common/env_fat.c b/common/env_fat.c index aad0487c32..328c09d45f 100644 --- a/common/env_fat.c +++ b/common/env_fat.c @@ -38,39 +38,24 @@ int saveenv(void) { env_t env_new; block_dev_desc_t *dev_desc = NULL; - int dev = FAT_ENV_DEVICE; - int part = FAT_ENV_PART; + disk_partition_t info; + int dev, part; int err; err = env_export(&env_new); if (err) return err; -#ifdef CONFIG_MMC - if (strcmp(FAT_ENV_INTERFACE, "mmc") == 0) { - struct mmc *mmc = find_mmc_device(dev); - - if (!mmc) { - printf("no mmc device at slot %x\n", dev); - return 1; - } - - mmc->has_init = 0; - mmc_init(mmc); - } -#endif /* CONFIG_MMC */ - - dev_desc = get_dev(FAT_ENV_INTERFACE, dev); - if (dev_desc == NULL) { - printf("Failed to find %s%d\n", - FAT_ENV_INTERFACE, dev); + part = get_device_and_partition(FAT_ENV_INTERFACE, + FAT_ENV_DEVICE_AND_PART, + &dev_desc, &info, 1); + if (part < 0) return 1; - } - err = fat_register_device(dev_desc, part); - if (err) { - printf("Failed to register %s%d:%d\n", - FAT_ENV_INTERFACE, dev, part); + dev = dev_desc->dev; + if (fat_set_blk_dev(dev_desc, &info) != 0) { + printf("\n** Unable to use %s %d:%d for saveenv **\n", + FAT_ENV_INTERFACE, dev, part); return 1; } @@ -90,48 +75,33 @@ void env_relocate_spec(void) { char buf[CONFIG_ENV_SIZE]; block_dev_desc_t *dev_desc = NULL; - int dev = FAT_ENV_DEVICE; - int part = FAT_ENV_PART; + disk_partition_t info; + int dev, part; int err; -#ifdef CONFIG_MMC - if (strcmp(FAT_ENV_INTERFACE, "mmc") == 0) { - struct mmc *mmc = find_mmc_device(dev); - - if (!mmc) { - printf("no mmc device at slot %x\n", dev); - set_default_env(NULL); - return; - } - - mmc->has_init = 0; - mmc_init(mmc); - } -#endif /* CONFIG_MMC */ - - dev_desc = get_dev(FAT_ENV_INTERFACE, dev); - if (dev_desc == NULL) { - printf("Failed to find %s%d\n", - FAT_ENV_INTERFACE, dev); - set_default_env(NULL); - return; - } - - err = fat_register_device(dev_desc, part); - if (err) { - printf("Failed to register %s%d:%d\n", - FAT_ENV_INTERFACE, dev, part); - set_default_env(NULL); - return; + part = get_device_and_partition(FAT_ENV_INTERFACE, + FAT_ENV_DEVICE_AND_PART, + &dev_desc, &info, 1); + if (part < 0) + goto err_env_relocate; + + dev = dev_desc->dev; + if (fat_set_blk_dev(dev_desc, &info) != 0) { + printf("\n** Unable to use %s %d:%d for loading the env **\n", + FAT_ENV_INTERFACE, dev, part); + goto err_env_relocate; } err = file_fat_read(FAT_ENV_FILE, (uchar *)&buf, CONFIG_ENV_SIZE); if (err == -1) { printf("\n** Unable to read \"%s\" from %s%d:%d **\n", FAT_ENV_FILE, FAT_ENV_INTERFACE, dev, part); - set_default_env(NULL); - return; + goto err_env_relocate; } env_import(buf, 1); + return; + +err_env_relocate: + set_default_env(NULL); } diff --git a/include/configs/at91sam9m10g45ek.h b/include/configs/at91sam9m10g45ek.h index 341b21df27..db5d5ea846 100644 --- a/include/configs/at91sam9m10g45ek.h +++ b/include/configs/at91sam9m10g45ek.h @@ -167,8 +167,12 @@ #elif CONFIG_SYS_USE_MMC /* bootstrap + u-boot + env + linux in mmc */ #define FAT_ENV_INTERFACE "mmc" -#define FAT_ENV_DEVICE 0 -#define FAT_ENV_PART 1 +/* + * We don't specify the part number, if device 0 has partition table, it means + * the first partition; it no partition table, then take whole device as a + * FAT file system. + */ +#define FAT_ENV_DEVICE_AND_PART "0" #define FAT_ENV_FILE "uboot.env" #define CONFIG_ENV_IS_IN_FAT #define CONFIG_FAT_WRITE |