ppc: Fix ppc4xx CONFIG_SYS_GENERIC_BOARD
PATCH 1/1 ppc: Fix ppc4xx CONFIG_SYS_GENERIC_BOARD
From: Dirk Eibach <[email protected]>
I realized that with v2014.10 u-boot is not starting up on ppc4xx boards with CONFIG_SYS_GENERIC_BOARD set.
I bisected it down to this:
d54d7eb support blackfin board initialization in generic board_f
With
d29437a ppc: Make ppc4xx ready for CONFIG_SYS_GENERIC_BOARD I set gd to a defined value for ppc4xx in cpu_init_f(). I did not realize that the gd struct has also to be memset() to zero at this point.
But at least commit d54d7eb assumes it is:
@@ -516,11 +528,13 @@ static int reserve_malloc(void)
/* (permanently) allocate a Board Info struct */ static int reserve_board(void)
{
- gd->start_addr_sp -= sizeof(bd_t);
- gd->bd = (bd_t *)map_sysmem(gd->start_addr_sp, sizeof(bd_t));
- memset(gd->bd, '\0', sizeof(bd_t));
- debug("Reserving %zu Bytes for Board Info at: %08lx\n",
- sizeof(bd_t), gd->start_addr_sp);
+ if (!gd->bd) {
+ gd->start_addr_sp -= sizeof(bd_t);
+ gd->bd = (bd_t *)map_sysmem(gd->start_addr_sp, sizeof(bd_t));
+ memset(gd->bd, '\0', sizeof(bd_t));
+ debug("Reserving %zu Bytes for Board Info at: %08lx\n",
+ sizeof(bd_t), gd->start_addr_sp);
+ }
return 0;
}
#endif
This might also be an issue on other architectures, so maintainers should check.
---
arch/powerpc/cpu/ppc4xx/cpu_init.c | 3 +++ 1 file changed, 3 insertions(+)
arch/powerpc/cpu/ppc4xx/cpu_init.c +3 -0
@@ -451,6 +451,9 @@ cpu_init_f (void)#endif /* CONFIG_440SP/SPE || CONFIG_460EX/GT || CONFIG_405EX */ gd = (gd_t *)(CONFIG_SYS_INIT_RAM_ADDR +CONFIG_SYS_GBL_DATA_OFFSET ); + +/* Clear initial global data */ +memset ((void *)gd,0 ,sizeof (gd_t)); }/*
Signature · 1 line
1.8.3
PATCH 1/1 ppc: Fix ppc4xx CONFIG_SYS_GENERIC_BOARD
Quoted 35 lines · dirk.eibach at gdsys.cc
From: Dirk Eibach <[email protected]>
I realized that with v2014.10 u-boot is not starting up on ppc4xx boards with
CONFIG_SYS_GENERIC_BOARDset.I bisected it down to this:
d54d7eb support blackfin board initialization in genericboard_fWith
d29437a ppc: Make ppc4xx ready forCONFIG_SYS_GENERIC_BOARDI set gd to a defined value for ppc4xx incpu_init_f(). I did not realize that the gd struct has also to bememset()to zero at this point.But at least commit d54d7eb assumes it is:
(quoted diff) +7
-5@@ -516,11 +528,13 @@ static int reserve_malloc(void) /* (permanently) allocate a Board Info struct */ static int reserve_board(void) { - gd->start_addr_sp -= sizeof(bd_t); - gd->bd = (bd_t *)map_sysmem(gd->start_addr_sp, sizeof(bd_t)); - memset(gd->bd, '\0', sizeof(bd_t)); - debug("Reserving %zu Bytes for Board Info at: %08lx\n", - sizeof(bd_t), gd->start_addr_sp); + if (!gd->bd) { + gd->start_addr_sp -= sizeof(bd_t); + gd->bd = (bd_t *)map_sysmem(gd->start_addr_sp, sizeof(bd_t)); + memset(gd->bd, '\0', sizeof(bd_t)); + debug("Reserving %zu Bytes for Board Info at: %08lx\n", + sizeof(bd_t), gd->start_addr_sp); + } return 0; } #endif
Quoted 2 lines
This might also be an issue on other architectures, so maintainers should check.
Thanks Dirk for fixing this on ppc4xx. Applied to u-boot-ppc4xx/master.
Thanks,
Stefan