From: Chee Hong Ang <chee.hong....@intel.com>

Add a new .data section for preserving the original state of the
.data section of SoC64 SPL. This new .data section is required to
make SPL reentrant after warm reset.

Signed-off-by: Chee Hong Ang <chee.hong....@intel.com>
Signed-off-by: Jit Loon Lim <jit.loon....@intel.com>
---
 arch/arm/mach-socfpga/u-boot-spl-soc64.lds | 93 ++++++++++++++++++++++
 1 file changed, 93 insertions(+)
 create mode 100644 arch/arm/mach-socfpga/u-boot-spl-soc64.lds

diff --git a/arch/arm/mach-socfpga/u-boot-spl-soc64.lds 
b/arch/arm/mach-socfpga/u-boot-spl-soc64.lds
new file mode 100644
index 0000000000..05c441c088
--- /dev/null
+++ b/arch/arm/mach-socfpga/u-boot-spl-soc64.lds
@@ -0,0 +1,93 @@
+/*
+ * (C) Copyright 2018
+ * Intel Corporation <www.intel.com>
+ *
+ * (C) Copyright 2013
+ * David Feng <feng...@phytium.com.cn>
+ *
+ * (C) Copyright 2002
+ * Gary Jennejohn, DENX Software Engineering, <ga...@denx.de>
+ *
+ * (C) Copyright 2010
+ * Texas Instruments, <www.ti.com>
+ *     Aneesh V <ane...@ti.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0
+ */
+
+MEMORY { .sram : ORIGIN = CONFIG_SPL_TEXT_BASE,
+               LENGTH = CONFIG_SPL_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);
+               /* Run time .data section starting at this location */
+               __data_start = .;
+               *(.data*)
+               /* Run time .data section ending at this location */
+               __data_end = .;
+       } >.sram
+
+       . = ALIGN(8);
+       /* Preserve original .data section starting at this location */
+       __preserve_data_start = .;
+       . = __preserve_data_start + (__data_end - __data_start);
+       /* Preserve original .data section ending at this location */
+       __preserve_data_end = .;
+
+       . = ALIGN(8);
+       .u_boot_list . : {
+               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*) }
+}
-- 
2.26.2

Reply via email to