Re: [U-Boot] [PATCH v2 2/2] env_mmc: support env partition setup in runtime
Hi Dmitry, On Jul 30, 2014, at 1:19 PM, Dmitry Lifshitz wrote: 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 lifsh...@compulab.co.il Signed-off-by: Igor Grinberg grinb...@compulab.co.il --- Changes in v2: * Added mmc_get_env_part() proto in environment.h. common/env_mmc.c | 35 +++ include/environment.h |3 +++ 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/common/env_mmc.c b/common/env_mmc.c index 7da10e6..a7621a8 100644 --- a/common/env_mmc.c +++ b/common/env_mmc.c @@ -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) diff --git a/include/environment.h b/include/environment.h index d7a1adf..1fdbdad 100644 --- a/include/environment.h +++ b/include/environment.h @@ -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 -- 1.7.5.4 Applied, thanks. -- Pantelis ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v2 2/2] 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 lifsh...@compulab.co.il Signed-off-by: Igor Grinberg grinb...@compulab.co.il --- Changes in v2: * Added mmc_get_env_part() proto in environment.h. common/env_mmc.c | 35 +++ include/environment.h |3 +++ 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/common/env_mmc.c b/common/env_mmc.c index 7da10e6..a7621a8 100644 --- a/common/env_mmc.c +++ b/common/env_mmc.c @@ -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) diff --git a/include/environment.h b/include/environment.h index d7a1adf..1fdbdad 100644 --- a/include/environment.h +++ b/include/environment.h @@ -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 -- 1.7.5.4 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot