xref: /rk3399_ARM-atf/plat/xilinx/zynqmp/include/platform_def.h (revision c8284409e13ea72d08a9d858f8bcbddfb2f4df42)
1*c8284409SSoren Brinkmann /*
2*c8284409SSoren Brinkmann  * Copyright (c) 2014-2016, ARM Limited and Contributors. All rights reserved.
3*c8284409SSoren Brinkmann  *
4*c8284409SSoren Brinkmann  * Redistribution and use in source and binary forms, with or without
5*c8284409SSoren Brinkmann  * modification, are permitted provided that the following conditions are met:
6*c8284409SSoren Brinkmann  *
7*c8284409SSoren Brinkmann  * Redistributions of source code must retain the above copyright notice, this
8*c8284409SSoren Brinkmann  * list of conditions and the following disclaimer.
9*c8284409SSoren Brinkmann  *
10*c8284409SSoren Brinkmann  * Redistributions in binary form must reproduce the above copyright notice,
11*c8284409SSoren Brinkmann  * this list of conditions and the following disclaimer in the documentation
12*c8284409SSoren Brinkmann  * and/or other materials provided with the distribution.
13*c8284409SSoren Brinkmann  *
14*c8284409SSoren Brinkmann  * Neither the name of ARM nor the names of its contributors may be used
15*c8284409SSoren Brinkmann  * to endorse or promote products derived from this software without specific
16*c8284409SSoren Brinkmann  * prior written permission.
17*c8284409SSoren Brinkmann  *
18*c8284409SSoren Brinkmann  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19*c8284409SSoren Brinkmann  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20*c8284409SSoren Brinkmann  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21*c8284409SSoren Brinkmann  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22*c8284409SSoren Brinkmann  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23*c8284409SSoren Brinkmann  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24*c8284409SSoren Brinkmann  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25*c8284409SSoren Brinkmann  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26*c8284409SSoren Brinkmann  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27*c8284409SSoren Brinkmann  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28*c8284409SSoren Brinkmann  * POSSIBILITY OF SUCH DAMAGE.
29*c8284409SSoren Brinkmann  */
30*c8284409SSoren Brinkmann 
31*c8284409SSoren Brinkmann #ifndef __PLATFORM_DEF_H__
32*c8284409SSoren Brinkmann #define __PLATFORM_DEF_H__
33*c8284409SSoren Brinkmann 
34*c8284409SSoren Brinkmann #include <arch.h>
35*c8284409SSoren Brinkmann #include "../zynqmp_def.h"
36*c8284409SSoren Brinkmann 
37*c8284409SSoren Brinkmann /*******************************************************************************
38*c8284409SSoren Brinkmann  * Generic platform constants
39*c8284409SSoren Brinkmann  ******************************************************************************/
40*c8284409SSoren Brinkmann 
41*c8284409SSoren Brinkmann /* Size of cacheable stacks */
42*c8284409SSoren Brinkmann #define PLATFORM_STACK_SIZE 0x440
43*c8284409SSoren Brinkmann 
44*c8284409SSoren Brinkmann #define PLATFORM_CORE_COUNT		4
45*c8284409SSoren Brinkmann #define PLAT_NUM_POWER_DOMAINS		5
46*c8284409SSoren Brinkmann #define PLAT_MAX_PWR_LVL		1
47*c8284409SSoren Brinkmann #define PLAT_MAX_RET_STATE		1
48*c8284409SSoren Brinkmann #define PLAT_MAX_OFF_STATE		2
49*c8284409SSoren Brinkmann 
50*c8284409SSoren Brinkmann /*******************************************************************************
51*c8284409SSoren Brinkmann  * BL31 specific defines.
52*c8284409SSoren Brinkmann  ******************************************************************************/
53*c8284409SSoren Brinkmann 
54*c8284409SSoren Brinkmann #define ZYNQMP_BL31_SIZE	0x1b000
55*c8284409SSoren Brinkmann /*
56*c8284409SSoren Brinkmann  * Put BL31 at the top of the Trusted SRAM (just below the shared memory, if
57*c8284409SSoren Brinkmann  * present). BL31_BASE is calculated using the current BL31 debug size plus a
58*c8284409SSoren Brinkmann  * little space for growth.
59*c8284409SSoren Brinkmann  */
60*c8284409SSoren Brinkmann #if ZYNQMP_ATF_LOCATION_ID == ZYNQMP_IN_TRUSTED_SRAM
61*c8284409SSoren Brinkmann # define BL31_BASE			(ZYNQMP_TRUSTED_SRAM_LIMIT - \
62*c8284409SSoren Brinkmann 					 ZYNQMP_BL31_SIZE)
63*c8284409SSoren Brinkmann # define BL31_PROGBITS_LIMIT		(ZYNQMP_TRUSTED_SRAM_LIMIT - 0x6000)
64*c8284409SSoren Brinkmann # define BL31_LIMIT			ZYNQMP_TRUSTED_SRAM_LIMIT
65*c8284409SSoren Brinkmann #elif ZYNQMP_ATF_LOCATION_ID == ZYNQMP_IN_TRUSTED_DRAM
66*c8284409SSoren Brinkmann # define BL31_BASE			(ZYNQMP_TRUSTED_DRAM_LIMIT - \
67*c8284409SSoren Brinkmann 					 ZYNQMP_BL31_SIZE)
68*c8284409SSoren Brinkmann # define BL31_PROGBITS_LIMIT		(ZYNQMP_TRUSTED_DRAM_LIMIT - 0x6000)
69*c8284409SSoren Brinkmann # define BL31_LIMIT			(ZYNQMP_TRUSTED_DRAM_BASE + \
70*c8284409SSoren Brinkmann 					ZYNQMP_TRUSTED_DRAM_SIZE)
71*c8284409SSoren Brinkmann #else
72*c8284409SSoren Brinkmann # error "Unsupported ZYNQMP_ATF_LOCATION_ID value"
73*c8284409SSoren Brinkmann #endif
74*c8284409SSoren Brinkmann 
75*c8284409SSoren Brinkmann /*******************************************************************************
76*c8284409SSoren Brinkmann  * BL32 specific defines.
77*c8284409SSoren Brinkmann  ******************************************************************************/
78*c8284409SSoren Brinkmann /*
79*c8284409SSoren Brinkmann  * On ZYNQMP, the TSP can execute either from Trusted SRAM or Trusted DRAM.
80*c8284409SSoren Brinkmann  */
81*c8284409SSoren Brinkmann #if ZYNQMP_TSP_RAM_LOCATION_ID == ZYNQMP_IN_TRUSTED_SRAM
82*c8284409SSoren Brinkmann # define TSP_SEC_MEM_BASE		ZYNQMP_TRUSTED_SRAM_BASE
83*c8284409SSoren Brinkmann # define TSP_SEC_MEM_SIZE		ZYNQMP_TRUSTED_SRAM_SIZE
84*c8284409SSoren Brinkmann # define TSP_PROGBITS_LIMIT		(ZYNQMP_TRUSTED_SRAM_LIMIT - \
85*c8284409SSoren Brinkmann 					 ZYNQMP_BL31_SIZE)
86*c8284409SSoren Brinkmann # define BL32_BASE			ZYNQMP_TRUSTED_SRAM_BASE
87*c8284409SSoren Brinkmann # define BL32_LIMIT			(ZYNQMP_TRUSTED_SRAM_LIMIT - \
88*c8284409SSoren Brinkmann 					 ZYNQMP_BL31_SIZE)
89*c8284409SSoren Brinkmann #elif ZYNQMP_TSP_RAM_LOCATION_ID == ZYNQMP_IN_TRUSTED_DRAM
90*c8284409SSoren Brinkmann # define TSP_SEC_MEM_BASE		ZYNQMP_TRUSTED_DRAM_BASE
91*c8284409SSoren Brinkmann # define TSP_SEC_MEM_SIZE		(ZYNQMP_TRUSTED_DRAM_LIMIT - \
92*c8284409SSoren Brinkmann 					 ZYNQMP_BL31_SIZE)
93*c8284409SSoren Brinkmann # define BL32_BASE			ZYNQMP_TRUSTED_DRAM_BASE
94*c8284409SSoren Brinkmann # define BL32_LIMIT			(ZYNQMP_TRUSTED_DRAM_LIMIT - \
95*c8284409SSoren Brinkmann 					 ZYNQMP_BL31_SIZE)
96*c8284409SSoren Brinkmann #else
97*c8284409SSoren Brinkmann # error "Unsupported ZYNQMP_TSP_RAM_LOCATION_ID value"
98*c8284409SSoren Brinkmann #endif
99*c8284409SSoren Brinkmann 
100*c8284409SSoren Brinkmann /*
101*c8284409SSoren Brinkmann  * ID of the secure physical generic timer interrupt used by the TSP.
102*c8284409SSoren Brinkmann  */
103*c8284409SSoren Brinkmann #define TSP_IRQ_SEC_PHY_TIMER		ARM_IRQ_SEC_PHY_TIMER
104*c8284409SSoren Brinkmann 
105*c8284409SSoren Brinkmann /*******************************************************************************
106*c8284409SSoren Brinkmann  * Platform specific page table and MMU setup constants
107*c8284409SSoren Brinkmann  ******************************************************************************/
108*c8284409SSoren Brinkmann #define ADDR_SPACE_SIZE			(1ull << 32)
109*c8284409SSoren Brinkmann #define MAX_XLAT_TABLES			5
110*c8284409SSoren Brinkmann #define MAX_MMAP_REGIONS		7
111*c8284409SSoren Brinkmann 
112*c8284409SSoren Brinkmann #define CACHE_WRITEBACK_SHIFT   6
113*c8284409SSoren Brinkmann #define CACHE_WRITEBACK_GRANULE (1 << CACHE_WRITEBACK_SHIFT)
114*c8284409SSoren Brinkmann 
115*c8284409SSoren Brinkmann #define PLAT_ARM_GICD_BASE	BASE_GICD_BASE
116*c8284409SSoren Brinkmann #define PLAT_ARM_GICC_BASE	BASE_GICC_BASE
117*c8284409SSoren Brinkmann /*
118*c8284409SSoren Brinkmann  * Define a list of Group 1 Secure and Group 0 interrupts as per GICv3
119*c8284409SSoren Brinkmann  * terminology. On a GICv2 system or mode, the lists will be merged and treated
120*c8284409SSoren Brinkmann  * as Group 0 interrupts.
121*c8284409SSoren Brinkmann  */
122*c8284409SSoren Brinkmann #define PLAT_ARM_G1S_IRQS	ARM_IRQ_SEC_PHY_TIMER,	\
123*c8284409SSoren Brinkmann 				IRQ_SEC_IPI_APU,	\
124*c8284409SSoren Brinkmann 				ARM_IRQ_SEC_SGI_0,	\
125*c8284409SSoren Brinkmann 				ARM_IRQ_SEC_SGI_1,	\
126*c8284409SSoren Brinkmann 				ARM_IRQ_SEC_SGI_2,	\
127*c8284409SSoren Brinkmann 				ARM_IRQ_SEC_SGI_3,	\
128*c8284409SSoren Brinkmann 				ARM_IRQ_SEC_SGI_4,	\
129*c8284409SSoren Brinkmann 				ARM_IRQ_SEC_SGI_5,	\
130*c8284409SSoren Brinkmann 				ARM_IRQ_SEC_SGI_6,	\
131*c8284409SSoren Brinkmann 				ARM_IRQ_SEC_SGI_7
132*c8284409SSoren Brinkmann 
133*c8284409SSoren Brinkmann #define PLAT_ARM_G0_IRQS
134*c8284409SSoren Brinkmann 
135*c8284409SSoren Brinkmann #endif /* __PLATFORM_DEF_H__ */
136