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