xref: /rk3399_rockchip-uboot/arch/arm/cpu/armv8/u-boot.lds (revision b5178a1f2468d5e9b1066e7d08757c1164727e4c)
10ae76531SDavid Feng/*
20ae76531SDavid Feng * (C) Copyright 2013
30ae76531SDavid Feng * David Feng <fenghua@phytium.com.cn>
40ae76531SDavid Feng *
50ae76531SDavid Feng * (C) Copyright 2002
60ae76531SDavid Feng * Gary Jennejohn, DENX Software Engineering, <garyj@denx.de>
70ae76531SDavid Feng *
80ae76531SDavid Feng * SPDX-License-Identifier:	GPL-2.0+
90ae76531SDavid Feng */
100ae76531SDavid Feng
11*df88cb3bSmacro.wave.z@gmail.com#include <config.h>
12*df88cb3bSmacro.wave.z@gmail.com#include <asm/psci.h>
13*df88cb3bSmacro.wave.z@gmail.com
140ae76531SDavid FengOUTPUT_FORMAT("elf64-littleaarch64", "elf64-littleaarch64", "elf64-littleaarch64")
150ae76531SDavid FengOUTPUT_ARCH(aarch64)
160ae76531SDavid FengENTRY(_start)
170ae76531SDavid FengSECTIONS
180ae76531SDavid Feng{
19*df88cb3bSmacro.wave.z@gmail.com#ifdef CONFIG_ARMV8_SECURE_BASE
20*df88cb3bSmacro.wave.z@gmail.com	/DISCARD/ : { *(.rela._secure*) }
21*df88cb3bSmacro.wave.z@gmail.com#endif
220ae76531SDavid Feng	. = 0x00000000;
230ae76531SDavid Feng
240ae76531SDavid Feng	. = ALIGN(8);
250ae76531SDavid Feng	.text :
260ae76531SDavid Feng	{
270ae76531SDavid Feng		*(.__image_copy_start)
280ae76531SDavid Feng		CPUDIR/start.o (.text*)
290ae76531SDavid Feng		*(.text*)
300ae76531SDavid Feng	}
310ae76531SDavid Feng
32*df88cb3bSmacro.wave.z@gmail.com#ifdef CONFIG_ARMV8_PSCI
33*df88cb3bSmacro.wave.z@gmail.com	.__secure_start :
34*df88cb3bSmacro.wave.z@gmail.com#ifndef CONFIG_ARMV8_SECURE_BASE
35*df88cb3bSmacro.wave.z@gmail.com		ALIGN(CONSTANT(COMMONPAGESIZE))
36*df88cb3bSmacro.wave.z@gmail.com#endif
37*df88cb3bSmacro.wave.z@gmail.com	{
38*df88cb3bSmacro.wave.z@gmail.com		KEEP(*(.__secure_start))
39*df88cb3bSmacro.wave.z@gmail.com	}
40*df88cb3bSmacro.wave.z@gmail.com
41*df88cb3bSmacro.wave.z@gmail.com#ifndef CONFIG_ARMV8_SECURE_BASE
42*df88cb3bSmacro.wave.z@gmail.com#define CONFIG_ARMV8_SECURE_BASE
43*df88cb3bSmacro.wave.z@gmail.com#define __ARMV8_PSCI_STACK_IN_RAM
44*df88cb3bSmacro.wave.z@gmail.com#endif
45*df88cb3bSmacro.wave.z@gmail.com	.secure_text CONFIG_ARMV8_SECURE_BASE :
46*df88cb3bSmacro.wave.z@gmail.com		AT(ADDR(.__secure_start) + SIZEOF(.__secure_start))
47*df88cb3bSmacro.wave.z@gmail.com	{
48*df88cb3bSmacro.wave.z@gmail.com		*(._secure.text)
49*df88cb3bSmacro.wave.z@gmail.com	}
50*df88cb3bSmacro.wave.z@gmail.com
51*df88cb3bSmacro.wave.z@gmail.com	.secure_data : AT(LOADADDR(.secure_text) + SIZEOF(.secure_text))
52*df88cb3bSmacro.wave.z@gmail.com	{
53*df88cb3bSmacro.wave.z@gmail.com		*(._secure.data)
54*df88cb3bSmacro.wave.z@gmail.com	}
55*df88cb3bSmacro.wave.z@gmail.com
56*df88cb3bSmacro.wave.z@gmail.com	.secure_stack ALIGN(ADDR(.secure_data) + SIZEOF(.secure_data),
57*df88cb3bSmacro.wave.z@gmail.com			    CONSTANT(COMMONPAGESIZE)) (NOLOAD) :
58*df88cb3bSmacro.wave.z@gmail.com#ifdef __ARMV8_PSCI_STACK_IN_RAM
59*df88cb3bSmacro.wave.z@gmail.com		AT(ADDR(.secure_stack))
60*df88cb3bSmacro.wave.z@gmail.com#else
61*df88cb3bSmacro.wave.z@gmail.com		AT(LOADADDR(.secure_data) + SIZEOF(.secure_data))
62*df88cb3bSmacro.wave.z@gmail.com#endif
63*df88cb3bSmacro.wave.z@gmail.com	{
64*df88cb3bSmacro.wave.z@gmail.com		KEEP(*(.__secure_stack_start))
65*df88cb3bSmacro.wave.z@gmail.com
66*df88cb3bSmacro.wave.z@gmail.com		. = . + CONFIG_ARMV8_PSCI_NR_CPUS * ARM_PSCI_STACK_SIZE;
67*df88cb3bSmacro.wave.z@gmail.com
68*df88cb3bSmacro.wave.z@gmail.com		. = ALIGN(CONSTANT(COMMONPAGESIZE));
69*df88cb3bSmacro.wave.z@gmail.com
70*df88cb3bSmacro.wave.z@gmail.com		KEEP(*(.__secure_stack_end))
71*df88cb3bSmacro.wave.z@gmail.com	}
72*df88cb3bSmacro.wave.z@gmail.com
73*df88cb3bSmacro.wave.z@gmail.com#ifndef __ARMV8_PSCI_STACK_IN_RAM
74*df88cb3bSmacro.wave.z@gmail.com	. = LOADADDR(.secure_stack);
75*df88cb3bSmacro.wave.z@gmail.com#endif
76*df88cb3bSmacro.wave.z@gmail.com
77*df88cb3bSmacro.wave.z@gmail.com	.__secure_end : AT(ADDR(.__secure_end)) {
78*df88cb3bSmacro.wave.z@gmail.com		KEEP(*(.__secure_end))
79*df88cb3bSmacro.wave.z@gmail.com		LONG(0x1d1071c);	/* Must output something to reset LMA */
80*df88cb3bSmacro.wave.z@gmail.com	}
81*df88cb3bSmacro.wave.z@gmail.com#endif
82*df88cb3bSmacro.wave.z@gmail.com
830ae76531SDavid Feng	. = ALIGN(8);
840ae76531SDavid Feng	.rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
850ae76531SDavid Feng
860ae76531SDavid Feng	. = ALIGN(8);
870ae76531SDavid Feng	.data : {
880ae76531SDavid Feng		*(.data*)
890ae76531SDavid Feng	}
900ae76531SDavid Feng
910ae76531SDavid Feng	. = ALIGN(8);
920ae76531SDavid Feng
930ae76531SDavid Feng	. = .;
940ae76531SDavid Feng
950ae76531SDavid Feng	. = ALIGN(8);
960ae76531SDavid Feng	.u_boot_list : {
970ae76531SDavid Feng		KEEP(*(SORT(.u_boot_list*)));
980ae76531SDavid Feng	}
990ae76531SDavid Feng
1000ae76531SDavid Feng	. = ALIGN(8);
1010ae76531SDavid Feng
10250149ea3SAlexander Graf	.efi_runtime : {
10350149ea3SAlexander Graf                __efi_runtime_start = .;
10450149ea3SAlexander Graf		*(efi_runtime_text)
10550149ea3SAlexander Graf		*(efi_runtime_data)
10650149ea3SAlexander Graf                __efi_runtime_stop = .;
10750149ea3SAlexander Graf	}
10850149ea3SAlexander Graf
10950149ea3SAlexander Graf	.efi_runtime_rel : {
11050149ea3SAlexander Graf                __efi_runtime_rel_start = .;
11150149ea3SAlexander Graf		*(.relaefi_runtime_text)
11250149ea3SAlexander Graf		*(.relaefi_runtime_data)
11350149ea3SAlexander Graf                __efi_runtime_rel_stop = .;
11450149ea3SAlexander Graf	}
11550149ea3SAlexander Graf
11650149ea3SAlexander Graf	. = ALIGN(8);
11750149ea3SAlexander Graf
1180ae76531SDavid Feng	.image_copy_end :
1190ae76531SDavid Feng	{
1200ae76531SDavid Feng		*(.__image_copy_end)
1210ae76531SDavid Feng	}
1220ae76531SDavid Feng
1230ae76531SDavid Feng	. = ALIGN(8);
1240ae76531SDavid Feng
1250ae76531SDavid Feng	.rel_dyn_start :
1260ae76531SDavid Feng	{
1270ae76531SDavid Feng		*(.__rel_dyn_start)
1280ae76531SDavid Feng	}
1290ae76531SDavid Feng
1300ae76531SDavid Feng	.rela.dyn : {
1310ae76531SDavid Feng		*(.rela*)
1320ae76531SDavid Feng	}
1330ae76531SDavid Feng
1340ae76531SDavid Feng	.rel_dyn_end :
1350ae76531SDavid Feng	{
1360ae76531SDavid Feng		*(.__rel_dyn_end)
1370ae76531SDavid Feng	}
1380ae76531SDavid Feng
1390ae76531SDavid Feng	_end = .;
1400ae76531SDavid Feng
1410ae76531SDavid Feng	. = ALIGN(8);
1420ae76531SDavid Feng
1430ae76531SDavid Feng	.bss_start : {
1440ae76531SDavid Feng		KEEP(*(.__bss_start));
1450ae76531SDavid Feng	}
1460ae76531SDavid Feng
1470ae76531SDavid Feng	.bss : {
1480ae76531SDavid Feng		*(.bss*)
1490ae76531SDavid Feng		 . = ALIGN(8);
1500ae76531SDavid Feng	}
1510ae76531SDavid Feng
1520ae76531SDavid Feng	.bss_end : {
1530ae76531SDavid Feng		KEEP(*(.__bss_end));
1540ae76531SDavid Feng	}
1550ae76531SDavid Feng
1560ae76531SDavid Feng	/DISCARD/ : { *(.dynsym) }
1570ae76531SDavid Feng	/DISCARD/ : { *(.dynstr*) }
1580ae76531SDavid Feng	/DISCARD/ : { *(.dynamic*) }
1590ae76531SDavid Feng	/DISCARD/ : { *(.plt*) }
1600ae76531SDavid Feng	/DISCARD/ : { *(.interp*) }
1610ae76531SDavid Feng	/DISCARD/ : { *(.gnu*) }
1620ae76531SDavid Feng}
163