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