
The crash was occuring in env_relocate because it was being called prior to mmc_initialize. This patch moves the MMC initialization earlier in the init process.
This patch also cleans up the env_relocate_spec code in env_mmc.c
Developed jointly with Stefano Babic
Fine; but is a Signed-off-by or Tested-by/Acked-by required from Stefano then?
Also this patch touch ARM and MMC code so can't add to u-boot-ti unless Wolfgang is ok.
Signed-off-by: Steve Sakoman steve.sakoman@linaro.org
diff --git a/arch/arm/lib/board.c b/arch/arm/lib/board.c index 5f2dfd0..0e2f129 100644 --- a/arch/arm/lib/board.c +++ b/arch/arm/lib/board.c @@ -779,6 +779,11 @@ void board_init_r (gd_t *id, ulong dest_addr) onenand_init(); #endif
+#ifdef CONFIG_GENERIC_MMC
puts ("MMC: ");
mmc_initialize (bd);
+#endif
#ifdef CONFIG_HAS_DATAFLASH AT91F_DataflashInit(); dataflash_print_info(); @@ -854,11 +859,6 @@ extern void davinci_eth_set_mac_addr (const u_int8_t *addr); board_late_init (); #endif
-#ifdef CONFIG_GENERIC_MMC
- puts ("MMC: ");
- mmc_initialize (gd->bd);
-#endif
#ifdef CONFIG_BITBANGMII bb_miiphy_init(); #endif diff --git a/common/env_mmc.c b/common/env_mmc.c index cc288d4..d443ff5 100644 --- a/common/env_mmc.c +++ b/common/env_mmc.c @@ -129,18 +129,21 @@ inline int read_env(struct mmc *mmc, unsigned long size, void env_relocate_spec(void) { #if !defined(ENV_IS_EMBEDDED)
char buf[CONFIG_ENV_SIZE];
- struct mmc *mmc = find_mmc_device(CONFIG_SYS_MMC_ENV_DEV);
- if (init_mmc_for_env(mmc))
- if (init_mmc_for_env(mmc)) {
return;use_default();
- }
- if (read_env(mmc, CONFIG_ENV_SIZE, CONFIG_ENV_OFFSET, env_ptr))
return use_default();
- if (crc32(0, env_ptr->data, ENV_SIZE) != env_ptr->crc)
return use_default();
- if (read_env(mmc, CONFIG_ENV_SIZE, CONFIG_ENV_OFFSET, buf)) {
use_default();
return;
- }
- gd->env_valid = 1;
- env_import(buf, 1);
#endif }