On Fri, 15 Oct 2021 at 09:48, <marek.va...@gmail.com> wrote: > > From: Marek Vasut <marek.vasut+rene...@gmail.com> > > Even if U-Boot has relocation disabled via GD_FLG_SKIP_RELOC , the > relocated stage of U-Boot still picks GD from new_gd location. The > U-Boot itself is not relocated, but GD might be, so copy the GD to > new GD location even if relocation is disabled. > > Signed-off-by: Marek Vasut <marek.vasut+rene...@gmail.com> > Cc: Peng Fan <peng....@oss.nxp.com> > Cc: Simon Glass <s...@chromium.org> > Cc: Tom Rini <tr...@konsulko.com> > --- > V2: Deduplicate memcpy. The patch is better viewed with git show -w > --- > common/board_f.c | 34 +++++++++++++++++++--------------- > 1 file changed, 19 insertions(+), 15 deletions(-)
Reviewed-by: Simon Glass <s...@chromium.org> but see below > > diff --git a/common/board_f.c b/common/board_f.c > index 3dc0eaa59c..7595eaa5b1 100644 > --- a/common/board_f.c > +++ b/common/board_f.c > @@ -674,29 +674,33 @@ static int reloc_bloblist(void) > static int setup_reloc(void) > { > if (gd->flags & GD_FLG_SKIP_RELOC) { > - debug("Skipping relocation due to flag\n"); > - return 0; > - } > - > + gd->reloc_off = 0; Please drop this as it is not needed. *gd is zeroed on start. > + } else { > #ifdef CONFIG_SYS_TEXT_BASE > #ifdef ARM > - gd->reloc_off = gd->relocaddr - (unsigned long)__image_copy_start; > + gd->reloc_off = gd->relocaddr - (unsigned > long)__image_copy_start; > #elif defined(CONFIG_M68K) > - /* > - * On all ColdFire arch cpu, monitor code starts always > - * just after the default vector table location, so at 0x400 > - */ > - gd->reloc_off = gd->relocaddr - (CONFIG_SYS_TEXT_BASE + 0x400); > + /* > + * On all ColdFire arch cpu, monitor code starts always > + * just after the default vector table location, so at 0x400 > + */ > + gd->reloc_off = gd->relocaddr - (CONFIG_SYS_TEXT_BASE + > 0x400); > #elif !defined(CONFIG_SANDBOX) > - gd->reloc_off = gd->relocaddr - CONFIG_SYS_TEXT_BASE; > + gd->reloc_off = gd->relocaddr - CONFIG_SYS_TEXT_BASE; > #endif > #endif > + } > + > memcpy(gd->new_gd, (char *)gd, sizeof(gd_t)); > > - debug("Relocation Offset is: %08lx\n", gd->reloc_off); > - debug("Relocating to %08lx, new gd at %08lx, sp at %08lx\n", > - gd->relocaddr, (ulong)map_to_sysmem(gd->new_gd), > - gd->start_addr_sp); > + if (gd->flags & GD_FLG_SKIP_RELOC) { > + debug("Skipping relocation due to flag\n"); > + } else { > + debug("Relocation Offset is: %08lx\n", gd->reloc_off); > + debug("Relocating to %08lx, new gd at %08lx, sp at %08lx\n", > + gd->relocaddr, (ulong)map_to_sysmem(gd->new_gd), > + gd->start_addr_sp); > + } > > return 0; > } > -- > 2.33.0 >