| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- From 6731bef6966ea2b26cdcfe0109ff5a950003fd03 Mon Sep 17 00:00:00 2001
- From: David Woodhouse <[email protected]>
- Date: Fri, 19 Jun 2020 23:07:17 +0100
- Subject: [PATCH] env/fat.c: allow loading from a FAT partition on the MMC boot
- device
- I don't want to have to specify the device; only the partition.
- This allows me to use the same image on internal eMMC or SD card for
- Banana Pi R2, and it finds its own environment either way.
- Signed-off-by: David Woodhouse <[email protected]>
- [trini: Add #if/#else/#endif logic around CONFIG_SYS_MMC_ENV_DEV usage,
- whitespace changes]
- Signed-off-by: Tom Rini <[email protected]>
- ---
- env/Kconfig | 4 ++++
- env/fat.c | 32 ++++++++++++++++++++++++++++++--
- 2 files changed, 34 insertions(+), 2 deletions(-)
- diff --git a/env/Kconfig b/env/Kconfig
- index 38e7fadbb9..5784136674 100644
- --- a/env/Kconfig
- +++ b/env/Kconfig
- @@ -434,6 +434,10 @@ config ENV_FAT_DEVICE_AND_PART
- If none, first valid partition in device D. If no
- partition table then means device D.
-
- + If ENV_FAT_INTERFACE is set to "mmc" then device 'D' can be omitted,
- + leaving the string starting with a colon, and the boot device will
- + be used.
- +
- config ENV_FAT_FILE
- string "Name of the FAT file to use for the environment"
- depends on ENV_IS_IN_FAT
- diff --git a/env/fat.c b/env/fat.c
- index 35a1955e63..63aced9317 100644
- --- a/env/fat.c
- +++ b/env/fat.c
- @@ -29,6 +29,34 @@
- # define LOADENV
- #endif
-
- +__weak int mmc_get_env_dev(void)
- +{
- +#ifdef CONFIG_SYS_MMC_ENV_DEV
- + return CONFIG_SYS_MMC_ENV_DEV;
- +#else
- + return 0;
- +#endif
- +}
- +
- +static char *env_fat_device_and_part(void)
- +{
- +#ifdef CONFIG_MMC
- + static char *part_str;
- +
- + if (!part_str) {
- + part_str = CONFIG_ENV_FAT_DEVICE_AND_PART;
- + if (!strcmp(CONFIG_ENV_FAT_INTERFACE, "mmc") && part_str[0] == ':') {
- + part_str = "0" CONFIG_ENV_FAT_DEVICE_AND_PART;
- + part_str[0] += mmc_get_env_dev();
- + }
- + }
- +
- + return part_str;
- +#else
- + return CONFIG_ENV_FAT_DEVICE_AND_PART;
- +#endif
- +}
- +
- static int env_fat_save(void)
- {
- env_t __aligned(ARCH_DMA_MINALIGN) env_new;
- @@ -43,7 +71,7 @@ static int env_fat_save(void)
- return err;
-
- part = blk_get_device_part_str(CONFIG_ENV_FAT_INTERFACE,
- - CONFIG_ENV_FAT_DEVICE_AND_PART,
- + env_fat_device_and_part(),
- &dev_desc, &info, 1);
- if (part < 0)
- return 1;
- @@ -89,7 +117,7 @@ static int env_fat_load(void)
- #endif
-
- part = blk_get_device_part_str(CONFIG_ENV_FAT_INTERFACE,
- - CONFIG_ENV_FAT_DEVICE_AND_PART,
- + env_fat_device_and_part(),
- &dev_desc, &info, 1);
- if (part < 0)
- goto err_env_relocate;
- --
- 2.26.2
|