From mboxrd@z Thu Jan 1 00:00:00 1970 From: Prabhakar Kushwaha Date: Wed, 2 Apr 2014 09:12:27 +0530 Subject: [U-Boot] [PATCH 5/10] common/env: Point default environment for GD In-Reply-To: <1396389865.32034.22.camel@snotra.buserror.net> References: <1396260268-2615-1-git-send-email-prabhakar@freescale.com> <1396389865.32034.22.camel@snotra.buserror.net> Message-ID: <533B8723.9030206@freescale.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 4/2/2014 3:34 AM, Scott Wood wrote: > On Mon, 2014-03-31 at 15:34 +0530, Prabhakar Kushwaha wrote: >> GD(Global Data) structure has pointer to environment variable array. >> but, it always point to default_environment assuming it is running from >> final location. >> >> So update GD pointer with env variable array during SPL boot. >> >> Signed-off-by: Prabhakar Kushwaha >> --- >> common/env_common.c | 3 +++ >> 1 file changed, 3 insertions(+) >> >> diff --git a/common/env_common.c b/common/env_common.c >> index c0bfc2f..043150a 100644 >> --- a/common/env_common.c >> +++ b/common/env_common.c >> @@ -162,6 +162,9 @@ int env_import(const char *buf, int check) >> if (himport_r(&env_htab, (char *)ep->data, ENV_SIZE, '\0', 0, >> 0, NULL)) { >> gd->flags |= GD_FLG_ENV_READY; >> +#ifdef CONFIG_SPL_BUILD >> + gd->env_addr = (unsigned long)ep->data; >> +#endif >> return 1; >> } >> > Could you explain a bit more about how the environment is being loaded > during SPL, and how gd->env_addr gets set for non-SPL? > > during SPL or NON- XIP boot (SD, SPI, NAND) in order to access env variables following 2 functions are called sequentially. 1. env_init() : Initialize gd->env_addr with default_environment array 2. env_relocate(). It copied data from flash to heap memory area and call env_import(). here, This env pointer *buf is used for importing. but gd->env_addr never updated with new address of env variables. It always remain pointed to default_environment array set in env_init(). It looks to be a issue for non-XIP boot. As I was not confident about it. So limited to only SPL framework only. for non-SPL i.e. XIP boot (NOR) env_init (): gd->env_addr always point to NOR address containing env_variables. Because of XIP No need of copy from flash to buffer. Hence no problem. Regards, Prabhakar