env_mmc: support env partition setup in runtime
Add callback with __weak annotation to allow setup of environment partition number in runtime from a board file. Propagate mmc_switch_part() return value into init_mmc_for_env() instead of -1 in case of failure. Signed-off-by: Dmitry Lifshitz <lifshitz@compulab.co.il> Signed-off-by: Igor Grinberg <grinberg@compulab.co.il> Acked-by: Pantelis Antoniou <panto@antoniou-consulting.com>
This commit is contained in:
parent
ac77f42d09
commit
6e7b7df4df
@ -62,16 +62,36 @@ int env_init(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int init_mmc_for_env(struct mmc *mmc)
|
||||
{
|
||||
#ifdef CONFIG_SYS_MMC_ENV_PART
|
||||
__weak uint mmc_get_env_part(struct mmc *mmc)
|
||||
{
|
||||
return CONFIG_SYS_MMC_ENV_PART;
|
||||
}
|
||||
|
||||
static int mmc_set_env_part(struct mmc *mmc)
|
||||
{
|
||||
uint part = mmc_get_env_part(mmc);
|
||||
int dev = CONFIG_SYS_MMC_ENV_DEV;
|
||||
int ret = 0;
|
||||
|
||||
#ifdef CONFIG_SPL_BUILD
|
||||
dev = 0;
|
||||
#endif
|
||||
|
||||
if (part != mmc->part_num) {
|
||||
ret = mmc_switch_part(dev, part);
|
||||
if (ret)
|
||||
puts("MMC partition switch failed\n");
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
#else
|
||||
static inline int mmc_set_env_part(struct mmc *mmc) {return 0; };
|
||||
#endif
|
||||
|
||||
static int init_mmc_for_env(struct mmc *mmc)
|
||||
{
|
||||
if (!mmc) {
|
||||
puts("No MMC card found\n");
|
||||
return -1;
|
||||
@ -82,16 +102,7 @@ static int init_mmc_for_env(struct mmc *mmc)
|
||||
return -1;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SYS_MMC_ENV_PART
|
||||
if (CONFIG_SYS_MMC_ENV_PART != mmc->part_num) {
|
||||
if (mmc_switch_part(dev, CONFIG_SYS_MMC_ENV_PART)) {
|
||||
puts("MMC partition switch failed\n");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
return mmc_set_env_part(mmc);
|
||||
}
|
||||
|
||||
static void fini_mmc_for_env(struct mmc *mmc)
|
||||
|
@ -184,6 +184,9 @@ extern void env_reloc(void);
|
||||
#include <mmc.h>
|
||||
|
||||
extern int mmc_get_env_addr(struct mmc *mmc, int copy, u32 *env_addr);
|
||||
# ifdef CONFIG_SYS_MMC_ENV_PART
|
||||
extern uint mmc_get_env_part(struct mmc *mmc);
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef DO_DEPS_ONLY
|
||||
|
Loading…
Reference in New Issue
Block a user