xref: /aosp_15_r20/external/arm-trusted-firmware/plat/rockchip/rk3399/include/plat.ld.S (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong Park/*
2*54fd6939SJiyong Park * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
3*54fd6939SJiyong Park *
4*54fd6939SJiyong Park * SPDX-License-Identifier: BSD-3-Clause
5*54fd6939SJiyong Park */
6*54fd6939SJiyong Park#ifndef ROCKCHIP_PLAT_LD_S
7*54fd6939SJiyong Park#define ROCKCHIP_PLAT_LD_S
8*54fd6939SJiyong Park
9*54fd6939SJiyong Park#include <lib/xlat_tables/xlat_tables_defs.h>
10*54fd6939SJiyong Park
11*54fd6939SJiyong ParkMEMORY {
12*54fd6939SJiyong Park    SRAM (rwx): ORIGIN = SRAM_BASE, LENGTH = SRAM_SIZE
13*54fd6939SJiyong Park    PMUSRAM (rwx): ORIGIN = PMUSRAM_BASE, LENGTH = PMUSRAM_RSIZE
14*54fd6939SJiyong Park}
15*54fd6939SJiyong Park
16*54fd6939SJiyong ParkSECTIONS
17*54fd6939SJiyong Park{
18*54fd6939SJiyong Park	. = SRAM_BASE;
19*54fd6939SJiyong Park	ASSERT(. == ALIGN(PAGE_SIZE),
20*54fd6939SJiyong Park		"SRAM_BASE address is not aligned on a page boundary.")
21*54fd6939SJiyong Park
22*54fd6939SJiyong Park	/*
23*54fd6939SJiyong Park	 * The SRAM space allocation for RK3399
24*54fd6939SJiyong Park	 * ----------------
25*54fd6939SJiyong Park	 * | m0 code bin
26*54fd6939SJiyong Park	 * ----------------
27*54fd6939SJiyong Park	 * | sram text
28*54fd6939SJiyong Park	 * ----------------
29*54fd6939SJiyong Park	 * | sram data
30*54fd6939SJiyong Park	 * ----------------
31*54fd6939SJiyong Park	 */
32*54fd6939SJiyong Park	.incbin_sram : ALIGN(PAGE_SIZE) {
33*54fd6939SJiyong Park		__sram_incbin_start = .;
34*54fd6939SJiyong Park		*(.sram.incbin)
35*54fd6939SJiyong Park		 __sram_incbin_real_end = .;
36*54fd6939SJiyong Park		. = ALIGN(PAGE_SIZE);
37*54fd6939SJiyong Park		__sram_incbin_end = .;
38*54fd6939SJiyong Park	} >SRAM
39*54fd6939SJiyong Park	ASSERT((__sram_incbin_real_end - __sram_incbin_start) <=
40*54fd6939SJiyong Park		SRAM_BIN_LIMIT, ".incbin_sram has exceeded its limit")
41*54fd6939SJiyong Park
42*54fd6939SJiyong Park	.text_sram : ALIGN(PAGE_SIZE) {
43*54fd6939SJiyong Park		__bl31_sram_text_start = .;
44*54fd6939SJiyong Park		*(.sram.text)
45*54fd6939SJiyong Park		*(.sram.rodata)
46*54fd6939SJiyong Park		__bl31_sram_text_real_end = .;
47*54fd6939SJiyong Park		. = ALIGN(PAGE_SIZE);
48*54fd6939SJiyong Park		__bl31_sram_text_end = .;
49*54fd6939SJiyong Park	} >SRAM
50*54fd6939SJiyong Park	ASSERT((__bl31_sram_text_real_end - __bl31_sram_text_start) <=
51*54fd6939SJiyong Park		SRAM_TEXT_LIMIT, ".text_sram has exceeded its limit")
52*54fd6939SJiyong Park
53*54fd6939SJiyong Park	.data_sram : ALIGN(PAGE_SIZE) {
54*54fd6939SJiyong Park		__bl31_sram_data_start = .;
55*54fd6939SJiyong Park		*(.sram.data)
56*54fd6939SJiyong Park		__bl31_sram_data_real_end = .;
57*54fd6939SJiyong Park		. = ALIGN(PAGE_SIZE);
58*54fd6939SJiyong Park		__bl31_sram_data_end = .;
59*54fd6939SJiyong Park	} >SRAM
60*54fd6939SJiyong Park	ASSERT((__bl31_sram_data_real_end - __bl31_sram_data_start) <=
61*54fd6939SJiyong Park		SRAM_DATA_LIMIT, ".data_sram has exceeded its limit")
62*54fd6939SJiyong Park
63*54fd6939SJiyong Park	.stack_sram : ALIGN(PAGE_SIZE) {
64*54fd6939SJiyong Park		__bl31_sram_stack_start = .;
65*54fd6939SJiyong Park		. += PAGE_SIZE;
66*54fd6939SJiyong Park		__bl31_sram_stack_end = .;
67*54fd6939SJiyong Park	} >SRAM
68*54fd6939SJiyong Park
69*54fd6939SJiyong Park	. = PMUSRAM_BASE;
70*54fd6939SJiyong Park
71*54fd6939SJiyong Park	/*
72*54fd6939SJiyong Park	 * pmu_cpuson_entrypoint request address
73*54fd6939SJiyong Park	 * align 64K when resume, so put it in the
74*54fd6939SJiyong Park	 * start of pmusram
75*54fd6939SJiyong Park	 */
76*54fd6939SJiyong Park	.pmusram : {
77*54fd6939SJiyong Park		ASSERT(. == ALIGN(64 * 1024),
78*54fd6939SJiyong Park			".pmusram.entry request 64K aligned.");
79*54fd6939SJiyong Park		*(.pmusram.entry)
80*54fd6939SJiyong Park
81*54fd6939SJiyong Park		__bl31_pmusram_text_start = .;
82*54fd6939SJiyong Park		*(.pmusram.text)
83*54fd6939SJiyong Park		*(.pmusram.rodata)
84*54fd6939SJiyong Park		__bl31_pmusram_text_end = .;
85*54fd6939SJiyong Park
86*54fd6939SJiyong Park		/* M0 start address request 4K align */
87*54fd6939SJiyong Park		. = ALIGN(4096);
88*54fd6939SJiyong Park		__pmusram_incbin_start = .;
89*54fd6939SJiyong Park		*(.pmusram.incbin)
90*54fd6939SJiyong Park		__pmusram_incbin_end = .;
91*54fd6939SJiyong Park
92*54fd6939SJiyong Park		__bl31_pmusram_data_start = .;
93*54fd6939SJiyong Park		*(.pmusram.data)
94*54fd6939SJiyong Park		__bl31_pmusram_data_end = .;
95*54fd6939SJiyong Park	} >PMUSRAM
96*54fd6939SJiyong Park}
97*54fd6939SJiyong Park
98*54fd6939SJiyong Park#endif /* ROCKCHIP_PLAT_LD_S */
99