Re: [U-Boot] [PATCH] env: Relocate env drivers if manual reloc is required
Hi, On 12.4.2018 18:42, Simon Glass wrote: > Hi Michal, > > On 12 April 2018 at 04:26, Michal Simekwrote: >> From: Siva Durga Prasad Paladugu >> >> Relocate env drivers if manual relocation is enabled. This >> patch fixes the issue of u-boot hang incase if env is >> present in any of the flash devices. >> >> Signed-off-by: Siva Durga Prasad Paladugu >> Signed-off-by: Michal Simek >> --- >> >> env/common.c | 1 + >> env/env.c | 21 + >> include/environment.h | 5 + >> 3 files changed, 27 insertions(+) > > Reviewed-by: Simon Glass > > Please see below > >> >> diff --git a/env/common.c b/env/common.c >> index f21ff7009695..d282868ee51b 100644 >> --- a/env/common.c >> +++ b/env/common.c >> @@ -227,6 +227,7 @@ void env_relocate(void) >> { >> #if defined(CONFIG_NEEDS_MANUAL_RELOC) >> env_reloc(); >> + fix_envdriver(); >> env_htab.change_ok += gd->reloc_off; >> #endif >> if (gd->env_valid == ENV_INVALID) { >> diff --git a/env/env.c b/env/env.c >> index 3795dbc24e2b..15a0597100f4 100644 >> --- a/env/env.c >> +++ b/env/env.c >> @@ -10,6 +10,27 @@ >> >> DECLARE_GLOBAL_DATA_PTR; >> >> +#if defined(CONFIG_NEEDS_MANUAL_RELOC) >> +void fix_envdriver(void) > > How about env_fix_drivers() ? The env_ prefix is nice for something in > the environment code. > > [..] > v2 sent with name changed. Thanks, Michal ___ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
Re: [U-Boot] [PATCH] env: Relocate env drivers if manual reloc is required
Hi Michal, On 12 April 2018 at 04:26, Michal Simekwrote: > From: Siva Durga Prasad Paladugu > > Relocate env drivers if manual relocation is enabled. This > patch fixes the issue of u-boot hang incase if env is > present in any of the flash devices. > > Signed-off-by: Siva Durga Prasad Paladugu > Signed-off-by: Michal Simek > --- > > env/common.c | 1 + > env/env.c | 21 + > include/environment.h | 5 + > 3 files changed, 27 insertions(+) Reviewed-by: Simon Glass Please see below > > diff --git a/env/common.c b/env/common.c > index f21ff7009695..d282868ee51b 100644 > --- a/env/common.c > +++ b/env/common.c > @@ -227,6 +227,7 @@ void env_relocate(void) > { > #if defined(CONFIG_NEEDS_MANUAL_RELOC) > env_reloc(); > + fix_envdriver(); > env_htab.change_ok += gd->reloc_off; > #endif > if (gd->env_valid == ENV_INVALID) { > diff --git a/env/env.c b/env/env.c > index 3795dbc24e2b..15a0597100f4 100644 > --- a/env/env.c > +++ b/env/env.c > @@ -10,6 +10,27 @@ > > DECLARE_GLOBAL_DATA_PTR; > > +#if defined(CONFIG_NEEDS_MANUAL_RELOC) > +void fix_envdriver(void) How about env_fix_drivers() ? The env_ prefix is nice for something in the environment code. [..] Regards, Simon ___ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
[U-Boot] [PATCH] env: Relocate env drivers if manual reloc is required
From: Siva Durga Prasad PaladuguRelocate env drivers if manual relocation is enabled. This patch fixes the issue of u-boot hang incase if env is present in any of the flash devices. Signed-off-by: Siva Durga Prasad Paladugu Signed-off-by: Michal Simek --- env/common.c | 1 + env/env.c | 21 + include/environment.h | 5 + 3 files changed, 27 insertions(+) diff --git a/env/common.c b/env/common.c index f21ff7009695..d282868ee51b 100644 --- a/env/common.c +++ b/env/common.c @@ -227,6 +227,7 @@ void env_relocate(void) { #if defined(CONFIG_NEEDS_MANUAL_RELOC) env_reloc(); + fix_envdriver(); env_htab.change_ok += gd->reloc_off; #endif if (gd->env_valid == ENV_INVALID) { diff --git a/env/env.c b/env/env.c index 3795dbc24e2b..15a0597100f4 100644 --- a/env/env.c +++ b/env/env.c @@ -10,6 +10,27 @@ DECLARE_GLOBAL_DATA_PTR; +#if defined(CONFIG_NEEDS_MANUAL_RELOC) +void fix_envdriver(void) +{ + struct env_driver *drv; + const int n_ents = ll_entry_count(struct env_driver, env_driver); + struct env_driver *entry; + + drv = ll_entry_start(struct env_driver, env_driver); + for (entry = drv; entry != drv + n_ents; entry++) { + if (entry->name) + entry->name += gd->reloc_off; + if (entry->load) + entry->load += gd->reloc_off; + if (entry->save) + entry->save += gd->reloc_off; + if (entry->init) + entry->init += gd->reloc_off; + } +} +#endif + static struct env_driver *_env_driver_lookup(enum env_location loc) { struct env_driver *drv; diff --git a/include/environment.h b/include/environment.h index 1b52353365ed..41df52756bde 100644 --- a/include/environment.h +++ b/include/environment.h @@ -314,6 +314,11 @@ int env_load(void); */ int env_save(void); +/** + * fix_envdriver() - Updates envdriver as per relocation + */ +void fix_envdriver(void); + void eth_parse_enetaddr(const char *addr, uint8_t *enetaddr); int eth_env_get_enetaddr(const char *name, uint8_t *enetaddr); int eth_env_set_enetaddr(const char *name, const uint8_t *enetaddr); -- 2.17.0 ___ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot