mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-22 11:13:07 +00:00
442a69c143
The commit b583348ca8
("image: fit: Align hash output buffers") places
the hash output buffer at the .bss section. However, AST2600 by default
executes SPL in the NOR flash XIP way. This results in the hash output
cannot be written to the buffer as it is located at the R/X only region.
We need to move the .bss section out of the SPL body to the DRAM space,
where hash output can be written to. This patch includes:
- Define the .bss section base and size
- A new SPL linker script is added with a separate .bss region specified
- Enable CONFIG_SPL_SEPARATE_BSS kconfig option
Signed-off-by: Chia-Wei Wang <chiawei_wang@aspeedtech.com>
Reviewed-by: Neal Liu <neal_liu@aspeedtech.com>
94 lines
1.7 KiB
Text
94 lines
1.7 KiB
Text
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
/*
|
|
* Copyright (c) 2004-2008 Texas Instruments
|
|
*
|
|
* (C) Copyright 2002
|
|
* Gary Jennejohn, DENX Software Engineering, <garyj@denx.de>
|
|
*
|
|
* (C) Copyright 2022
|
|
* Chia-Wei Wang <chiawei_wang@aspeedtech.com>
|
|
*/
|
|
|
|
MEMORY { .nor : ORIGIN = CONFIG_SPL_TEXT_BASE,
|
|
LENGTH = CONFIG_SPL_SIZE_LIMIT }
|
|
MEMORY { .bss : ORIGIN = CONFIG_SPL_BSS_START_ADDR,
|
|
LENGTH = CONFIG_SPL_BSS_MAX_SIZE }
|
|
|
|
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
|
|
OUTPUT_ARCH(arm)
|
|
ENTRY(_start)
|
|
SECTIONS
|
|
{
|
|
. = 0x00000000;
|
|
|
|
. = ALIGN(4);
|
|
.text :
|
|
{
|
|
__image_copy_start = .;
|
|
*(.vectors)
|
|
CPUDIR/start.o (.text*)
|
|
*(.text*)
|
|
*(.glue*)
|
|
} > .nor
|
|
|
|
. = ALIGN(4);
|
|
.rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) } > .nor
|
|
|
|
. = ALIGN(4);
|
|
.data : {
|
|
*(.data*)
|
|
} > .nor
|
|
|
|
. = ALIGN(4);
|
|
.u_boot_list : {
|
|
KEEP(*(SORT(.u_boot_list*)));
|
|
} > .nor
|
|
|
|
. = ALIGN(4);
|
|
.binman_sym_table : {
|
|
__binman_sym_start = .;
|
|
KEEP(*(SORT(.binman_sym*)));
|
|
__binman_sym_end = .;
|
|
} > .nor
|
|
|
|
. = ALIGN(4);
|
|
|
|
__image_copy_end = .;
|
|
|
|
.rel.dyn : {
|
|
__rel_dyn_start = .;
|
|
*(.rel*)
|
|
__rel_dyn_end = .;
|
|
} > .nor
|
|
|
|
.end :
|
|
{
|
|
*(.__end)
|
|
} > .nor
|
|
|
|
_image_binary_end = .;
|
|
|
|
.bss : {
|
|
__bss_start = .;
|
|
*(.bss*)
|
|
. = ALIGN(4);
|
|
__bss_end = .;
|
|
} > .bss
|
|
|
|
__bss_size = __bss_end - __bss_start;
|
|
}
|
|
|
|
#if defined(IMAGE_MAX_SIZE)
|
|
ASSERT(__image_copy_end - __image_copy_start <= (IMAGE_MAX_SIZE), \
|
|
"SPL image too big");
|
|
#endif
|
|
|
|
#if defined(CONFIG_SPL_BSS_MAX_SIZE)
|
|
ASSERT(__bss_end - __bss_start <= (CONFIG_SPL_BSS_MAX_SIZE), \
|
|
"SPL image BSS too big");
|
|
#endif
|
|
|
|
#if defined(CONFIG_SPL_MAX_FOOTPRINT)
|
|
ASSERT(__bss_end - _start <= (CONFIG_SPL_MAX_FOOTPRINT), \
|
|
"SPL image plus BSS too big");
|
|
#endif
|