mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-18 02:38:56 +00:00
1ee30aeed4
At the high level, the problem is that we set gd multiple times (and
still do, even after the commit we're reverting). We set important
parts of gd to the copy which is not above stack but rather in the data
section. For the release, we're going to revert this change and for the
next release we shall correct things to only, really, set gd once to an
appropriate location and ensure that comments about it are correct too.
This reverts commit f0c3a6c4ad
.
Acked-by: Albert Aribaud <albert.u.boot@aribaud.net>
Signed-off-by: Tom Rini <trini@ti.com>
58 lines
1.4 KiB
C
58 lines
1.4 KiB
C
/*
|
|
* (C) Copyright 2010-2012
|
|
* Texas Instruments, <www.ti.com>
|
|
*
|
|
* Aneesh V <aneesh@ti.com>
|
|
* Tom Rini <trini@ti.com>
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0+
|
|
*/
|
|
#include <common.h>
|
|
#include <config.h>
|
|
#include <spl.h>
|
|
#include <image.h>
|
|
#include <linux/compiler.h>
|
|
|
|
/* Pointer to as well as the global data structure for SPL */
|
|
DECLARE_GLOBAL_DATA_PTR;
|
|
gd_t gdata __attribute__ ((section(".data")));
|
|
|
|
/*
|
|
* In the context of SPL, board_init_f must ensure that any clocks/etc for
|
|
* DDR are enabled, ensure that the stack pointer is valid, clear the BSS
|
|
* and call board_init_f. We provide this version by default but mark it
|
|
* as __weak to allow for platforms to do this in their own way if needed.
|
|
*/
|
|
void __weak board_init_f(ulong dummy)
|
|
{
|
|
/* Clear the BSS. */
|
|
memset(__bss_start, 0, __bss_end - __bss_start);
|
|
|
|
/* Set global data pointer. */
|
|
gd = &gdata;
|
|
|
|
board_init_r(NULL, 0);
|
|
}
|
|
|
|
/*
|
|
* This function jumps to an image with argument. Normally an FDT or ATAGS
|
|
* image.
|
|
* arg: Pointer to paramter image in RAM
|
|
*/
|
|
#ifdef CONFIG_SPL_OS_BOOT
|
|
void __noreturn jump_to_image_linux(void *arg)
|
|
{
|
|
unsigned long machid = 0xffffffff;
|
|
#ifdef CONFIG_MACH_TYPE
|
|
machid = CONFIG_MACH_TYPE;
|
|
#endif
|
|
|
|
debug("Entering kernel arg pointer: 0x%p\n", arg);
|
|
typedef void (*image_entry_arg_t)(int, int, void *)
|
|
__attribute__ ((noreturn));
|
|
image_entry_arg_t image_entry =
|
|
(image_entry_arg_t) spl_image.entry_point;
|
|
cleanup_before_linux();
|
|
image_entry(0, machid, arg);
|
|
}
|
|
#endif
|