X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=env%2Ffat.c;h=19f260e881ac3e77f5d04e69aeb261691f780388;hb=7fb96a10b31953cde698326a61e963ba9df1dc1f;hp=129b945a2f7eb2f5f796dd362a41665156609153;hpb=203e94f6c9ca03e260175ce240f5856507395585;p=u-boot diff --git a/env/fat.c b/env/fat.c index 129b945a2f..19f260e881 100644 --- a/env/fat.c +++ b/env/fat.c @@ -19,25 +19,24 @@ #include #include -char *env_name_spec = "FAT"; - -env_t *env_ptr; +#ifdef CONFIG_SPL_BUILD +/* TODO(sjg@chromium.org): Figure out why this is needed */ +# if !defined(CONFIG_TARGET_AM335X_EVM) || defined(CONFIG_SPL_OS_BOOT) +# define LOADENV +# endif +#else +# define LOADENV +# if defined(CONFIG_CMD_SAVEENV) +# define CMD_SAVEENV +# endif +#endif 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) +#ifdef CMD_SAVEENV +static int env_fat_save(void) { - env_t env_new; + env_t __aligned(ARCH_DMA_MINALIGN) env_new; struct blk_desc *dev_desc = NULL; disk_partition_t info; int dev, part; @@ -56,7 +55,11 @@ int saveenv(void) dev = dev_desc->devnum; if (fat_set_blk_dev(dev_desc, &info) != 0) { - printf("\n** Unable to use %s %d:%d for saveenv **\n", + /* + * 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); return 1; } @@ -64,17 +67,21 @@ int saveenv(void) err = file_fat_write(CONFIG_ENV_FAT_FILE, (void *)&env_new, 0, sizeof(env_t), &size); if (err == -1) { - printf("\n** Unable to write \"%s\" from %s%d:%d **\n", + /* + * This printf is embedded in the messages from env_save that + * 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); return 1; } - puts("done\n"); return 0; } -#endif /* CONFIG_CMD_SAVEENV */ +#endif /* CMD_SAVEENV */ -void env_relocate_spec(void) +#ifdef LOADENV +static int env_fat_load(void) { ALLOC_CACHE_ALIGN_BUFFER(char, buf, CONFIG_ENV_SIZE); struct blk_desc *dev_desc = NULL; @@ -82,6 +89,9 @@ void env_relocate_spec(void) int dev, part; int err; + if (!strcmp(CONFIG_ENV_FAT_INTERFACE, "mmc")) + mmc_initialize(NULL); + part = blk_get_device_part_str(CONFIG_ENV_FAT_INTERFACE, CONFIG_ENV_FAT_DEVICE_AND_PART, &dev_desc, &info, 1); @@ -90,21 +100,42 @@ void env_relocate_spec(void) dev = dev_desc->devnum; if (fat_set_blk_dev(dev_desc, &info) != 0) { - printf("\n** Unable to use %s %d:%d for loading the env **\n", + /* + * 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); goto err_env_relocate; } err = file_fat_read(CONFIG_ENV_FAT_FILE, buf, CONFIG_ENV_SIZE); if (err == -1) { - printf("\n** Unable to read \"%s\" from %s%d:%d **\n", + /* + * This printf is embedded in the messages from env_save that + * 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); goto err_env_relocate; } - env_import(buf, 1); - return; + return env_import(buf, 1); err_env_relocate: set_default_env(NULL); + + return -EIO; } +#endif /* LOADENV */ + +U_BOOT_ENV_LOCATION(fat) = { + .location = ENVL_FAT, + ENV_NAME("FAT") +#ifdef LOADENV + .load = env_fat_load, +#endif +#ifdef CMD_SAVEENV + .save = env_save_ptr(env_fat_save), +#endif +};