Message ID | 1438560612-29910-3-git-send-email-sjg@chromium.org |
---|---|
State | Superseded |
Delegated to: | Simon Glass |
Headers | show |
Hi Simon, On Mon, Aug 3, 2015 at 8:10 AM, Simon Glass <sjg@chromium.org> wrote: > Some archs like to have larger alignment for their global data. Use 16 bytes > which suits all current archs. > > Signed-off-by: Simon Glass <sjg@chromium.org> > --- > > common/board_f.c | 2 +- > include/asm-generic/global_data.h | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/common/board_f.c b/common/board_f.c > index c596083..a947770 100644 > --- a/common/board_f.c > +++ b/common/board_f.c > @@ -497,7 +497,7 @@ static int setup_machine(void) > > static int reserve_global_data(void) > { > - gd->start_addr_sp -= sizeof(gd_t); > + gd->start_addr_sp = ALIGN(gd->start_addr_sp - sizeof(gd_t), 16); This logic is wrong. This alignment adjustment makes there is no enough room for global data. > gd->new_gd = (gd_t *)map_sysmem(gd->start_addr_sp, sizeof(gd_t)); > debug("Reserving %zu Bytes for Global Data at: %08lx\n", > sizeof(gd_t), gd->start_addr_sp); > diff --git a/include/asm-generic/global_data.h b/include/asm-generic/global_data.h > index 2155265..147f646 100644 > --- a/include/asm-generic/global_data.h > +++ b/include/asm-generic/global_data.h > @@ -99,7 +99,7 @@ typedef struct global_data { > int pcidelay_done; > #endif > struct udevice *cur_serial_dev; /* current serial device */ > - struct arch_global_data arch; /* architecture-specific data */ > + struct arch_global_data arch __aligned(16); /* arch-specific data */ > } gd_t; > #endif > > -- Regards, Bin
diff --git a/common/board_f.c b/common/board_f.c index c596083..a947770 100644 --- a/common/board_f.c +++ b/common/board_f.c @@ -497,7 +497,7 @@ static int setup_machine(void) static int reserve_global_data(void) { - gd->start_addr_sp -= sizeof(gd_t); + gd->start_addr_sp = ALIGN(gd->start_addr_sp - sizeof(gd_t), 16); gd->new_gd = (gd_t *)map_sysmem(gd->start_addr_sp, sizeof(gd_t)); debug("Reserving %zu Bytes for Global Data at: %08lx\n", sizeof(gd_t), gd->start_addr_sp); diff --git a/include/asm-generic/global_data.h b/include/asm-generic/global_data.h index 2155265..147f646 100644 --- a/include/asm-generic/global_data.h +++ b/include/asm-generic/global_data.h @@ -99,7 +99,7 @@ typedef struct global_data { int pcidelay_done; #endif struct udevice *cur_serial_dev; /* current serial device */ - struct arch_global_data arch; /* architecture-specific data */ + struct arch_global_data arch __aligned(16); /* arch-specific data */ } gd_t; #endif
Some archs like to have larger alignment for their global data. Use 16 bytes which suits all current archs. Signed-off-by: Simon Glass <sjg@chromium.org> --- common/board_f.c | 2 +- include/asm-generic/global_data.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)