mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-21 02:33:07 +00:00
6aead23323
When doing partition reboot, the boot image won't be reloaded by ROM, it is just CPU reset to boot entry. The SW has to keep the boot image inside the RAM unchanged. It includes both the TEXT section and DATA section. For SPL, the problem is DATA section will be updated at runtime, so in next partition reboot the data is not same as the initial value from cold boot. If any code depends on the initial value, then it will have problem. This patch introduces a mechanism to recover the data section for partition reboot. It adds a new section in image for saving data section. When from cold boot, the data section will be saved to that new section at SPL early phase. When from partition reboot, the data section will be restored from the new section. Signed-off-by: Ye Li <ye.li@nxp.com> Signed-off-by: Peng Fan <peng.fan@nxp.com>
86 lines
1.5 KiB
Text
86 lines
1.5 KiB
Text
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
/*
|
|
* (C) Copyright 2013
|
|
* David Feng <fenghua@phytium.com.cn>
|
|
*
|
|
* (C) Copyright 2002
|
|
* Gary Jennejohn, DENX Software Engineering, <garyj@denx.de>
|
|
*
|
|
* (C) Copyright 2010
|
|
* Texas Instruments, <www.ti.com>
|
|
* Aneesh V <aneesh@ti.com>
|
|
*/
|
|
|
|
MEMORY { .sram : ORIGIN = IMAGE_TEXT_BASE,
|
|
LENGTH = IMAGE_MAX_SIZE }
|
|
MEMORY { .sdram : ORIGIN = CONFIG_SPL_BSS_START_ADDR,
|
|
LENGTH = CONFIG_SPL_BSS_MAX_SIZE }
|
|
|
|
OUTPUT_FORMAT("elf64-littleaarch64", "elf64-littleaarch64", "elf64-littleaarch64")
|
|
OUTPUT_ARCH(aarch64)
|
|
ENTRY(_start)
|
|
SECTIONS
|
|
{
|
|
.text : {
|
|
. = ALIGN(8);
|
|
*(.__image_copy_start)
|
|
CPUDIR/start.o (.text*)
|
|
*(.text*)
|
|
} >.sram
|
|
|
|
.rodata : {
|
|
. = ALIGN(8);
|
|
*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
|
|
} >.sram
|
|
|
|
.data : {
|
|
. = ALIGN(8);
|
|
*(.data*)
|
|
} >.sram
|
|
|
|
#ifdef CONFIG_SPL_RECOVER_DATA_SECTION
|
|
.data_save : {
|
|
*(.__data_save_start)
|
|
. = SIZEOF(.data);
|
|
*(.__data_save_end)
|
|
} >.sram
|
|
#endif
|
|
|
|
.u_boot_list : {
|
|
. = ALIGN(8);
|
|
KEEP(*(SORT(.u_boot_list*)));
|
|
} >.sram
|
|
|
|
.image_copy_end : {
|
|
. = ALIGN(8);
|
|
*(.__image_copy_end)
|
|
} >.sram
|
|
|
|
.end : {
|
|
. = ALIGN(8);
|
|
*(.__end)
|
|
} >.sram
|
|
|
|
_image_binary_end = .;
|
|
|
|
.bss_start (NOLOAD) : {
|
|
. = ALIGN(8);
|
|
KEEP(*(.__bss_start));
|
|
} >.sdram
|
|
|
|
.bss (NOLOAD) : {
|
|
*(.bss*)
|
|
. = ALIGN(8);
|
|
} >.sdram
|
|
|
|
.bss_end (NOLOAD) : {
|
|
KEEP(*(.__bss_end));
|
|
} >.sdram
|
|
|
|
/DISCARD/ : { *(.dynsym) }
|
|
/DISCARD/ : { *(.dynstr*) }
|
|
/DISCARD/ : { *(.dynamic*) }
|
|
/DISCARD/ : { *(.plt*) }
|
|
/DISCARD/ : { *(.interp*) }
|
|
/DISCARD/ : { *(.gnu*) }
|
|
}
|