mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-08-26 20:09:02 +09:00
![Marek Vasut](/assets/img/avatar_default.png)
The OneNAND SPL used on PXA is slightly obscure. Due to the OneNAND limitation, where we have only the first 1KiB of the OneNAND available upon power-up as a memory-mapped area, from which the CPU starts executing, we place only the most essential code into this first 1KiB . This code copies the rest of the SPL into SRAM and jumps to it. This code is stored in section .text.0 . The rest of the SPL is stored in section .text.1 . When running the OBJCOPY on the SPL, it will preserve only .text section, but the .text.0 and .text.1 are stripped away from the result, thus making the SPL binary empty. The patch adds additional -j parameters to the OBJCOPY for PXA during the SPL build, which will preserve the .text.0 and .text.1 sections. Moreover, this patch also adds missing functions into the .text.0 section, since otherwise the PXA270 with 1KiB-window OneNAND won't be able to boot. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Albert Aribaud <albert.u.boot@aribaud.net> Cc: Tom Rini <trini@ti.com>
76 lines
1.3 KiB
Plaintext
76 lines
1.3 KiB
Plaintext
/*
|
|
* Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
|
|
* on behalf of DENX Software Engineering GmbH
|
|
*
|
|
* January 2004 - Changed to support H4 device
|
|
* Copyright (c) 2004-2008 Texas Instruments
|
|
*
|
|
* (C) Copyright 2002
|
|
* Gary Jennejohn, DENX Software Engineering, <garyj@denx.de>
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0+
|
|
*/
|
|
|
|
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
|
|
OUTPUT_ARCH(arm)
|
|
ENTRY(_start)
|
|
SECTIONS
|
|
{
|
|
. = CONFIG_SPL_TEXT_BASE;
|
|
.text.0 :
|
|
{
|
|
arch/arm/cpu/pxa/start.o (.text*)
|
|
arch/arm/lib/built-in.o (.text*)
|
|
board/vpac270/built-in.o (.text*)
|
|
drivers/mtd/onenand/built-in.o (.text*)
|
|
}
|
|
|
|
|
|
/* Start of the rest of the SPL */
|
|
. = CONFIG_SPL_TEXT_BASE + 0x800;
|
|
|
|
.text.1 :
|
|
{
|
|
*(.text*)
|
|
}
|
|
|
|
. = ALIGN(4);
|
|
.rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
|
|
|
|
. = ALIGN(4);
|
|
.data : {
|
|
*(.data*)
|
|
}
|
|
|
|
. = ALIGN(4);
|
|
|
|
__image_copy_end = .;
|
|
|
|
.rel.dyn : {
|
|
__rel_dyn_start = .;
|
|
*(.rel*)
|
|
__rel_dyn_end = .;
|
|
}
|
|
|
|
. = ALIGN(0x800);
|
|
|
|
_end = .;
|
|
|
|
.bss __rel_dyn_start (OVERLAY) : {
|
|
__bss_start = .;
|
|
*(.bss*)
|
|
. = ALIGN(4);
|
|
__bss_end = .;
|
|
}
|
|
|
|
.dynsym _end : { *(.dynsym) }
|
|
.dynbss : { *(.dynbss) }
|
|
.dynstr : { *(.dynstr*) }
|
|
.dynamic : { *(.dynamic*) }
|
|
.hash : { *(.hash*) }
|
|
.plt : { *(.plt*) }
|
|
.interp : { *(.interp*) }
|
|
.gnu : { *(.gnu*) }
|
|
.ARM.exidx : { *(.ARM.exidx*) }
|
|
}
|