Allow arch-specific setting of global_data in board_init_f_mem()
At present we have a simple assignment to gd. With some archs this is implemented as a register or through some other means; a simple assignment does not suit in all cases. Change this to a function and add documentation to describe how this all works. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: York Sun <yorksun@freescale.com> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
@@ -1027,16 +1027,25 @@ void board_init_f_r(void)
|
||||
}
|
||||
#endif /* CONFIG_X86 */
|
||||
|
||||
/* Unfortunately x86 can't compile this code as gd cannot be assigned */
|
||||
#ifndef CONFIG_X86
|
||||
__weak void arch_setup_gd(struct global_data *gd_ptr)
|
||||
{
|
||||
gd = gd_ptr;
|
||||
}
|
||||
|
||||
ulong board_init_f_mem(ulong top)
|
||||
{
|
||||
struct global_data *gd_ptr;
|
||||
|
||||
/* Leave space for the stack we are running with now */
|
||||
top -= 0x40;
|
||||
|
||||
top -= sizeof(struct global_data);
|
||||
top = ALIGN(top, 16);
|
||||
gd = (struct global_data *)top;
|
||||
memset((void *)gd, '\0', sizeof(*gd));
|
||||
gd_ptr = (struct global_data *)top;
|
||||
memset(gd_ptr, '\0', sizeof(*gd));
|
||||
arch_setup_gd(gd_ptr);
|
||||
|
||||
#ifdef CONFIG_SYS_MALLOC_F_LEN
|
||||
top -= CONFIG_SYS_MALLOC_F_LEN;
|
||||
|
||||
Reference in New Issue
Block a user