env_mmc: support env partition setup in runtime
PATCH 1/1 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.
--- common/env_mmc.c | 35 +++++++++++++++++++++++------------ 1 files changed, 23 insertions(+), 12 deletions(-)
common/env_mmc.c +23 -12
@@ -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)
Signature · 1 line
1.7.5.4
PATCH 1/1 env_mmc: support env partition setup in runtime
Hello Dmitry,
Quoted 18 lines · Dmitry Lifshitz
Add callback with
__weakannotation to allow setup of environment partition number in runtime from a board file.Propagate
mmc_switch_part()return value intoinit_mmc_for_env()instead of -1 in case of failure.Signed-off-by Dmitry Lifshitz <[email protected]>Signed-off-by Igor Grinberg <[email protected]>--- common/env_mmc.c | 35 +++++++++++++++++++++++------------ 1 files changed, 23 insertions(+), 12 deletions(-)common/env_mmc.c +0
-0@@ -62,16 +62,36 @@ int env_init(void)return 0 ;
common/env_mmc.c int env_init(void) · line 70
Quoted 10 lines
common/env_mmc.c +5
-2} -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 ; +} +
mmc_get_env_part lacks a prototype and there seems to be no "strong version" / user of this code.
Regards,
Jeroen
PATCH 1/1 env_mmc: support env partition setup in runtime
Hi Jeroen,
Quoted 25 lines · Jeroen Hofstee
Hello Dmitry,
Quoted 22 lines · Dmitry Lifshitz
Add callback with
__weakannotation to allow setup of environment partition number in runtime from a board file.Propagate
mmc_switch_part()return value intoinit_mmc_for_env()instead of -1 in case of failure.Signed-off-by Dmitry Lifshitz <[email protected]>Signed-off-by Igor Grinberg <[email protected]>--- common/env_mmc.c | 35 +++++++++++++++++++++++------------ 1 files changed, 23 insertions(+), 12 deletions(-)common/env_mmc.c +0
-1@@ -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
Quoted 8 lines
common/env_mmc.c int env_init(void) · line 70
Quoted 5 lines
common/env_mmc.c +5
-0+__weak uint mmc_get_env_part (struct mmc *mmc) +{ +return CONFIG_SYS_MMC_ENV_PART ; +} +
mmc_get_env_partlacks a prototype and there seems to be no "strong version" / user of this code.
Thanks for finding this one.
Indeed we forgot to add a prototype - will fix that shortly.
As to the strong version - it is already upstream:
1c8c36f (cm-t54: add environment partition runtime detection)
Signature · 2 lines
Regards, Igor.
PATCH 1/2 env_mmc: add mmc_get_env_addr() prototype
In reply to Dmitry LifshitzAdd missing mmc_get_env_addr() prototype in environment.h
--- include/environment.h | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-)
include/environment.h +6 -0
@@ -180,6 +180,12 @@ extern unsigned char env_get_char_spec(int);extern void env_reloc (void );#endif +#ifdef CONFIG_ENV_IS_IN_MMC +#include <mmc.h> + +extern int mmc_get_env_addr (struct mmc *mmc,int copy,u32 *env_addr); +#endif +#ifndef DO_DEPS_ONLY #include <env_attr.h>
Signature · 1 line
1.7.5.4
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.
---
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(-)
common/env_mmc.c +23 -12
@@ -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)
include/environment.h +3 -0
@@ -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
Signature · 1 line
1.7.5.4
Pantelis Antoniou
AppliedPATCH v2 2/2 env_mmc: support env partition setup in runtime
Hi Dmitry,
Quoted 95 lines · Dmitry Lifshitz
Add callback with
__weakannotation to allow setup of environment partition number in runtime from a board file.Propagate
mmc_switch_part()return value intoinit_mmc_for_env()instead of -1 in case of failure.Signed-off-by Dmitry Lifshitz <[email protected]>Signed-off-by Igor Grinberg <[email protected]>---
Changes in v2:
* Added
mmc_get_env_part()proto inenvironment.h.
common/env_mmc.c| 35 +++++++++++++++++++++++------------include/environment.h| 3 +++2 files changed, 26 insertions(+), 12 deletions(-)common/env_mmc.c +23
-12@@ -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)include/environment.h +3
-0@@ -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 Signature · 1 line
1.7.5.4
Applied, thanks.
-- Pantelis
Pantelis Antoniou
AppliedPATCH 1/2 env_mmc: add mmc_get_env_addr() prototype
In reply to Dmitry LifshitzHi Dmitry,
Quoted 26 lines · Dmitry Lifshitz
Add missing
mmc_get_env_addr()prototype inenvironment.hSigned-off-by Dmitry Lifshitz <[email protected]>---
include/environment.h| 6 ++++++1 files changed, 6 insertions(+), 0 deletions(-)include/environment.h +6
-0@@ -180,6 +180,12 @@ extern unsigned char env_get_char_spec(int);extern void env_reloc (void );#endif +#ifdef CONFIG_ENV_IS_IN_MMC +#include <mmc.h> + +extern int mmc_get_env_addr (struct mmc *mmc,int copy,u32 *env_addr); +#endif +#ifndef DO_DEPS_ONLY #include <env_attr.h> Signature · 1 line
1.7.5.4
Applied, thanks.
-- Pantelis