X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=env%2Ffat.c;h=7f74c64dfe7e094af8142cb66dc94682dabc6b5a;hb=f26e379b312bb59ddd11f79627180a4a2d702d94;hp=129b945a2f7eb2f5f796dd362a41665156609153;hpb=203e94f6c9ca03e260175ce240f5856507395585;p=oweals%2Fu-boot.git diff --git a/env/fat.c b/env/fat.c index 129b945a2f..7f74c64dfe 100644 --- a/env/fat.c +++ b/env/fat.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * (c) Copyright 2011 by Tigris Elektronik GmbH * * Author: * Maximilian Schwerin - * - * SPDX-License-Identifier: GPL-2.0+ */ #include @@ -19,25 +18,22 @@ #include #include -char *env_name_spec = "FAT"; - -env_t *env_ptr; - -DECLARE_GLOBAL_DATA_PTR; - -int env_init(void) +#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 + +#ifdef CMD_SAVEENV +static int env_fat_save(void) { - /* use default */ - gd->env_addr = (ulong)&default_environment[0]; - gd->env_valid = ENV_VALID; - - return 0; -} - -#ifdef CONFIG_CMD_SAVEENV -int saveenv(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 +52,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 +64,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 +86,11 @@ void env_relocate_spec(void) int dev, part; int err; +#ifdef CONFIG_MMC + if (!strcmp(CONFIG_ENV_FAT_INTERFACE, "mmc")) + mmc_initialize(NULL); +#endif + part = blk_get_device_part_str(CONFIG_ENV_FAT_INTERFACE, CONFIG_ENV_FAT_DEVICE_AND_PART, &dev_desc, &info, 1); @@ -90,21 +99,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); + set_default_env(NULL, 0); + + 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 +};