Skip to content
Snippets Groups Projects

Android: fix dtbo loading, ramdisk loading, init_boot image and env loading

Merged Mattijs Korpershoek requested to merge mkorpershoek/android-fixes into integ/ti-u-boot-2024.04
1 file
+ 3
2
Compare changes
  • Side-by-side
  • Inline
  • When CONFIG_SYS_MMC_ENV_PART=2, the environment is loaded from
    the USER partition (hwpart=0) instead of from the
    BOOT1 partition (hwpart=2).
    
    IS_ENABLED() cannot be used for non-boolean KConfig options.
    Its documentation states:
    
    > * IS_ENABLED(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y',
    > * 0 otherwise.
    
    So in our case, IS_ENABLED(CONFIG_SYS_MMC_ENV_PART) evaluates to 0.
    
    Because of this, the hwpart variable is never assigned and mmc_offset()
    ends up switching back to the USER hwpart (0) instead of BOOT1 (2).
    
    Fix it by using #define instead.
    
    Tested with:
    
      # have CONFIG_SYS_MMC_ENV_PART=2 in defconfig
      # 1. Erase mmc0boot1
      => mmc dev 0 2
      => mmc erase 0 400
      => mmc read ${loadaddr} 0 400
      => md ${loadaddr} 4
      82000000: 00000000 00000000 00000000 00000000  ................
    
      # 2. Restore default environment and save to MMC
      => env default -a -f
      => saveenv
    
      # 3. Read back mmc0boot1 and confirm the env is present
      => mmc read ${loadaddr} 0 400
      => md ${loadaddr} 4
      82000000: 13e0632e 72646461 7469665f 3978303d  .c..addr_fit=0x9
    
    Fixes: 5b4acb0f ("env: mmc: Apply GPT only on eMMC user HW partition")
    Signed-off-by: default avatarMattijs Korpershoek <mkorpershoek@baylibre.com>
    Reviewed-by: default avatarTom Rini <trini@konsulko.com>
    (am from https://patchwork.ozlabs.org/patch/1962545/)
    (also found at https://lore.kernel.org/r/20240719-fix-mmc-env-boot1-v1-1-e32b2037d4d8@baylibre.com)
+ 3
2
@@ -111,8 +111,9 @@ static inline s64 mmc_offset(struct mmc *mmc, int copy)
int hwpart = 0;
int err;
if (IS_ENABLED(CONFIG_SYS_MMC_ENV_PART))
hwpart = mmc_get_env_part(mmc);
#if defined(CONFIG_SYS_MMC_ENV_PART)
hwpart = mmc_get_env_part(mmc);
#endif
#if defined(CONFIG_ENV_MMC_PARTITION)
str = CONFIG_ENV_MMC_PARTITION;
Loading