xref: /rk3399_ARM-atf/plat/renesas/rcar_gen5/include/platform_def.h (revision 7cab2c233b38cf2a63d37d31da73f1d82f5efc3c)
1*f180a3b7SHieu Nguyen /*
2*f180a3b7SHieu Nguyen  * Copyright (c) 2025, Renesas Electronics Corporation. All rights reserved.
3*f180a3b7SHieu Nguyen  *
4*f180a3b7SHieu Nguyen  * SPDX-License-Identifier: BSD-3-Clause
5*f180a3b7SHieu Nguyen  */
6*f180a3b7SHieu Nguyen 
7*f180a3b7SHieu Nguyen #ifndef PLATFORM_DEF_H
8*f180a3b7SHieu Nguyen #define PLATFORM_DEF_H
9*f180a3b7SHieu Nguyen 
10*f180a3b7SHieu Nguyen #ifndef __ASSEMBLER__
11*f180a3b7SHieu Nguyen #include <stdlib.h>
12*f180a3b7SHieu Nguyen #endif
13*f180a3b7SHieu Nguyen 
14*f180a3b7SHieu Nguyen #include <arch.h>
15*f180a3b7SHieu Nguyen 
16*f180a3b7SHieu Nguyen #include "rcar_def.h"
17*f180a3b7SHieu Nguyen 
18*f180a3b7SHieu Nguyen /*******************************************************************************
19*f180a3b7SHieu Nguyen  * Platform binary types for linking
20*f180a3b7SHieu Nguyen  ******************************************************************************/
21*f180a3b7SHieu Nguyen #define PLATFORM_LINKER_FORMAT          "elf64-littleaarch64"
22*f180a3b7SHieu Nguyen #define PLATFORM_LINKER_ARCH            aarch64
23*f180a3b7SHieu Nguyen 
24*f180a3b7SHieu Nguyen /*******************************************************************************
25*f180a3b7SHieu Nguyen  * Generic platform constants
26*f180a3b7SHieu Nguyen  ******************************************************************************/
27*f180a3b7SHieu Nguyen 
28*f180a3b7SHieu Nguyen /* Size of cacheable stacks */
29*f180a3b7SHieu Nguyen #define PLATFORM_STACK_SIZE		0x800U
30*f180a3b7SHieu Nguyen 
31*f180a3b7SHieu Nguyen /*
32*f180a3b7SHieu Nguyen  * R-Car X5H Cortex-A720AE
33*f180a3b7SHieu Nguyen  * L1:I/64KB per core, D/64KB per core, L2:512KB L3:4MB per cluster
34*f180a3b7SHieu Nguyen  */
35*f180a3b7SHieu Nguyen 
36*f180a3b7SHieu Nguyen /* Hardware environment: 8 clusters, 4 cores each */
37*f180a3b7SHieu Nguyen #define PLATFORM_CLUSTER_COUNT		8
38*f180a3b7SHieu Nguyen #define PLATFORM_CLUSTER0_CORE_COUNT	4
39*f180a3b7SHieu Nguyen #define PLATFORM_CLUSTER1_CORE_COUNT	4
40*f180a3b7SHieu Nguyen #define PLATFORM_CLUSTER2_CORE_COUNT	4
41*f180a3b7SHieu Nguyen #define PLATFORM_CLUSTER3_CORE_COUNT	4
42*f180a3b7SHieu Nguyen #define PLATFORM_CLUSTER4_CORE_COUNT	4
43*f180a3b7SHieu Nguyen #define PLATFORM_CLUSTER5_CORE_COUNT	4
44*f180a3b7SHieu Nguyen #define PLATFORM_CLUSTER6_CORE_COUNT	4
45*f180a3b7SHieu Nguyen #define PLATFORM_CLUSTER7_CORE_COUNT	4
46*f180a3b7SHieu Nguyen #define PLATFORM_CORE_COUNT		(PLATFORM_CLUSTER7_CORE_COUNT + \
47*f180a3b7SHieu Nguyen 					PLATFORM_CLUSTER6_CORE_COUNT + \
48*f180a3b7SHieu Nguyen 					PLATFORM_CLUSTER5_CORE_COUNT + \
49*f180a3b7SHieu Nguyen 					PLATFORM_CLUSTER4_CORE_COUNT + \
50*f180a3b7SHieu Nguyen 					PLATFORM_CLUSTER3_CORE_COUNT + \
51*f180a3b7SHieu Nguyen 					PLATFORM_CLUSTER2_CORE_COUNT + \
52*f180a3b7SHieu Nguyen 					PLATFORM_CLUSTER1_CORE_COUNT + \
53*f180a3b7SHieu Nguyen 					PLATFORM_CLUSTER0_CORE_COUNT)
54*f180a3b7SHieu Nguyen #define PLATFORM_MAX_CPUS_PER_CLUSTER	4
55*f180a3b7SHieu Nguyen 
56*f180a3b7SHieu Nguyen #define PLAT_MAX_PWR_LVL		MPIDR_AFFLVL2
57*f180a3b7SHieu Nguyen #define PLAT_NUM_PWR_DOMAINS		(PLATFORM_CORE_COUNT + \
58*f180a3b7SHieu Nguyen 					 PLATFORM_CLUSTER_COUNT + 1)
59*f180a3b7SHieu Nguyen 
60*f180a3b7SHieu Nguyen #define PLAT_MAX_RET_STATE		1
61*f180a3b7SHieu Nguyen #define PLAT_MAX_OFF_STATE		2
62*f180a3b7SHieu Nguyen 
63*f180a3b7SHieu Nguyen /*
64*f180a3b7SHieu Nguyen  *  Macros for local power states in ARM platforms encoded by State-ID field
65*f180a3b7SHieu Nguyen  *  within the power-state parameter.
66*f180a3b7SHieu Nguyen  */
67*f180a3b7SHieu Nguyen /* Local power state for power domains in Run state. */
68*f180a3b7SHieu Nguyen #define ARM_LOCAL_STATE_RUN		0
69*f180a3b7SHieu Nguyen /* Local power state for retention. Valid only for CPU power domains */
70*f180a3b7SHieu Nguyen #define ARM_LOCAL_STATE_RET		1
71*f180a3b7SHieu Nguyen /* Local power state for OFF/power-down. Valid for CPU and cluster power domains */
72*f180a3b7SHieu Nguyen #define ARM_LOCAL_STATE_OFF		2
73*f180a3b7SHieu Nguyen 
74*f180a3b7SHieu Nguyen /*
75*f180a3b7SHieu Nguyen  ******************************************************************************
76*f180a3b7SHieu Nguyen  * BL31 specific defines.
77*f180a3b7SHieu Nguyen  ******************************************************************************
78*f180a3b7SHieu Nguyen  * Put BL3-1 at the top of the Trusted SRAM. BL31_BASE is calculated using the
79*f180a3b7SHieu Nguyen  * current BL3-1 debug size plus a little space for growth.
80*f180a3b7SHieu Nguyen  */
81*f180a3b7SHieu Nguyen #define BL31_BASE   RCAR_TRUSTED_SRAM_BASE
82*f180a3b7SHieu Nguyen #define BL31_LIMIT  (RCAR_TRUSTED_SRAM_BASE + RCAR_TRUSTED_SRAM_SIZE)
83*f180a3b7SHieu Nguyen 
84*f180a3b7SHieu Nguyen /*******************************************************************************
85*f180a3b7SHieu Nguyen  * Platform specific page table and MMU setup constants
86*f180a3b7SHieu Nguyen  ******************************************************************************/
87*f180a3b7SHieu Nguyen #define MAX_XLAT_TABLES			8
88*f180a3b7SHieu Nguyen 
89*f180a3b7SHieu Nguyen #define PLAT_PHY_ADDR_SPACE_SIZE	BIT_64(33)
90*f180a3b7SHieu Nguyen #define PLAT_VIRT_ADDR_SPACE_SIZE	BIT_64(33)
91*f180a3b7SHieu Nguyen 
92*f180a3b7SHieu Nguyen #define MAX_MMAP_REGIONS		(RCAR_MMAP_ENTRIES + RCAR_BL_REGIONS)
93*f180a3b7SHieu Nguyen 
94*f180a3b7SHieu Nguyen /*******************************************************************************
95*f180a3b7SHieu Nguyen  * Declarations and constants to access the mailboxes safely. Each mailbox is
96*f180a3b7SHieu Nguyen  * aligned on the biggest cache line size in the platform. This is known only
97*f180a3b7SHieu Nguyen  * to the platform as it might have a combination of integrated and external
98*f180a3b7SHieu Nguyen  * caches. Such alignment ensures that two mailboxes do not sit on the same cache
99*f180a3b7SHieu Nguyen  * line at any cache level. They could belong to different cpus/clusters &
100*f180a3b7SHieu Nguyen  * get written while being protected by different locks causing corruption of
101*f180a3b7SHieu Nguyen  * a valid mailbox address.
102*f180a3b7SHieu Nguyen  ******************************************************************************/
103*f180a3b7SHieu Nguyen #define CACHE_WRITEBACK_SHIFT	6
104*f180a3b7SHieu Nguyen #define CACHE_WRITEBACK_GRANULE	BIT(CACHE_WRITEBACK_SHIFT)
105*f180a3b7SHieu Nguyen 
106*f180a3b7SHieu Nguyen /*
107*f180a3b7SHieu Nguyen  * Define a list of Group 1 Secure and Group 0 interrupt properties as per GICv3
108*f180a3b7SHieu Nguyen  * terminology. On a GICv2 system or mode, the lists will be merged and treated
109*f180a3b7SHieu Nguyen  * as Group 0 interrupts.
110*f180a3b7SHieu Nguyen  *
111*f180a3b7SHieu Nguyen  * PLAT_ARM_G0_IRQ_PROPS(grp) is not defined, because there are no Group 0 IRQs.
112*f180a3b7SHieu Nguyen  */
113*f180a3b7SHieu Nguyen #define PLAT_ARM_G1S_IRQ_PROPS(grp) \
114*f180a3b7SHieu Nguyen 	INTR_PROP_DESC(ARM_IRQ_SEC_PHY_TIMER, GIC_HIGHEST_SEC_PRIORITY, (grp), \
115*f180a3b7SHieu Nguyen 			GIC_INTR_CFG_LEVEL), \
116*f180a3b7SHieu Nguyen 	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_0, GIC_HIGHEST_SEC_PRIORITY, (grp), \
117*f180a3b7SHieu Nguyen 			GIC_INTR_CFG_EDGE), \
118*f180a3b7SHieu Nguyen 	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_1, GIC_HIGHEST_SEC_PRIORITY, (grp), \
119*f180a3b7SHieu Nguyen 			GIC_INTR_CFG_EDGE), \
120*f180a3b7SHieu Nguyen 	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_2, GIC_HIGHEST_SEC_PRIORITY, (grp), \
121*f180a3b7SHieu Nguyen 			GIC_INTR_CFG_EDGE), \
122*f180a3b7SHieu Nguyen 	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_3, GIC_HIGHEST_SEC_PRIORITY, (grp), \
123*f180a3b7SHieu Nguyen 			GIC_INTR_CFG_EDGE), \
124*f180a3b7SHieu Nguyen 	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_4, GIC_HIGHEST_SEC_PRIORITY, (grp), \
125*f180a3b7SHieu Nguyen 			GIC_INTR_CFG_EDGE), \
126*f180a3b7SHieu Nguyen 	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_5, GIC_HIGHEST_SEC_PRIORITY, (grp), \
127*f180a3b7SHieu Nguyen 			GIC_INTR_CFG_EDGE), \
128*f180a3b7SHieu Nguyen 	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_6, GIC_HIGHEST_SEC_PRIORITY, (grp), \
129*f180a3b7SHieu Nguyen 			GIC_INTR_CFG_EDGE), \
130*f180a3b7SHieu Nguyen 	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_7, GIC_HIGHEST_SEC_PRIORITY, (grp), \
131*f180a3b7SHieu Nguyen 			GIC_INTR_CFG_EDGE)
132*f180a3b7SHieu Nguyen 
133*f180a3b7SHieu Nguyen #endif /* PLATFORM_DEF_H */
134