xref: /rk3399_ARM-atf/plat/rockchip/rk3568/include/platform_def.h (revision 9fd9f1d024872b440e3906eded28037330b6f422)
1*9fd9f1d0Sshengfei Xu /*
2*9fd9f1d0Sshengfei Xu  * Copyright (c) 2023, ARM Limited and Contributors. All rights reserved.
3*9fd9f1d0Sshengfei Xu  *
4*9fd9f1d0Sshengfei Xu  * SPDX-License-Identifier: BSD-3-Clause
5*9fd9f1d0Sshengfei Xu  */
6*9fd9f1d0Sshengfei Xu 
7*9fd9f1d0Sshengfei Xu #ifndef __PLATFORM_DEF_H__
8*9fd9f1d0Sshengfei Xu #define __PLATFORM_DEF_H__
9*9fd9f1d0Sshengfei Xu 
10*9fd9f1d0Sshengfei Xu #include <arch.h>
11*9fd9f1d0Sshengfei Xu #include <common_def.h>
12*9fd9f1d0Sshengfei Xu #include <rk3568_def.h>
13*9fd9f1d0Sshengfei Xu 
14*9fd9f1d0Sshengfei Xu #define DEBUG_XLAT_TABLE 0
15*9fd9f1d0Sshengfei Xu 
16*9fd9f1d0Sshengfei Xu /*******************************************************************************
17*9fd9f1d0Sshengfei Xu  * Platform binary types for linking
18*9fd9f1d0Sshengfei Xu  ******************************************************************************/
19*9fd9f1d0Sshengfei Xu #define PLATFORM_LINKER_FORMAT		"elf64-littleaarch64"
20*9fd9f1d0Sshengfei Xu #define PLATFORM_LINKER_ARCH		aarch64
21*9fd9f1d0Sshengfei Xu 
22*9fd9f1d0Sshengfei Xu /*******************************************************************************
23*9fd9f1d0Sshengfei Xu  * Generic platform constants
24*9fd9f1d0Sshengfei Xu  ******************************************************************************/
25*9fd9f1d0Sshengfei Xu 
26*9fd9f1d0Sshengfei Xu /* Size of cacheable stacks */
27*9fd9f1d0Sshengfei Xu #if DEBUG_XLAT_TABLE
28*9fd9f1d0Sshengfei Xu #define PLATFORM_STACK_SIZE 0x800
29*9fd9f1d0Sshengfei Xu #elif IMAGE_BL1
30*9fd9f1d0Sshengfei Xu #define PLATFORM_STACK_SIZE 0x440
31*9fd9f1d0Sshengfei Xu #elif IMAGE_BL2
32*9fd9f1d0Sshengfei Xu #define PLATFORM_STACK_SIZE 0x400
33*9fd9f1d0Sshengfei Xu #elif IMAGE_BL31
34*9fd9f1d0Sshengfei Xu #define PLATFORM_STACK_SIZE 0x800
35*9fd9f1d0Sshengfei Xu #elif IMAGE_BL32
36*9fd9f1d0Sshengfei Xu #define PLATFORM_STACK_SIZE 0x440
37*9fd9f1d0Sshengfei Xu #endif
38*9fd9f1d0Sshengfei Xu 
39*9fd9f1d0Sshengfei Xu #define FIRMWARE_WELCOME_STR		"Booting Trusted Firmware\n"
40*9fd9f1d0Sshengfei Xu 
41*9fd9f1d0Sshengfei Xu #define PLATFORM_SYSTEM_COUNT		1
42*9fd9f1d0Sshengfei Xu #define PLATFORM_CLUSTER_COUNT		1
43*9fd9f1d0Sshengfei Xu #define PLATFORM_CLUSTER0_CORE_COUNT	4
44*9fd9f1d0Sshengfei Xu 
45*9fd9f1d0Sshengfei Xu #define PLATFORM_CLUSTER1_CORE_COUNT	0
46*9fd9f1d0Sshengfei Xu #define PLATFORM_CORE_COUNT		(PLATFORM_CLUSTER1_CORE_COUNT +	\
47*9fd9f1d0Sshengfei Xu 					 PLATFORM_CLUSTER0_CORE_COUNT)
48*9fd9f1d0Sshengfei Xu 
49*9fd9f1d0Sshengfei Xu #define PLATFORM_NUM_AFFS		(PLATFORM_SYSTEM_COUNT +	\
50*9fd9f1d0Sshengfei Xu 					 PLATFORM_CLUSTER_COUNT +	\
51*9fd9f1d0Sshengfei Xu 					 PLATFORM_CORE_COUNT)
52*9fd9f1d0Sshengfei Xu 
53*9fd9f1d0Sshengfei Xu #define PLAT_MAX_PWR_LVL		MPIDR_AFFLVL2
54*9fd9f1d0Sshengfei Xu 
55*9fd9f1d0Sshengfei Xu #define PLAT_RK_CLST_TO_CPUID_SHIFT	8
56*9fd9f1d0Sshengfei Xu 
57*9fd9f1d0Sshengfei Xu /*
58*9fd9f1d0Sshengfei Xu  * This macro defines the deepest retention state possible. A higher state
59*9fd9f1d0Sshengfei Xu  * id will represent an invalid or a power down state.
60*9fd9f1d0Sshengfei Xu  */
61*9fd9f1d0Sshengfei Xu #define PLAT_MAX_RET_STATE		1
62*9fd9f1d0Sshengfei Xu 
63*9fd9f1d0Sshengfei Xu /*
64*9fd9f1d0Sshengfei Xu  * This macro defines the deepest power down states possible. Any state ID
65*9fd9f1d0Sshengfei Xu  * higher than this is invalid.
66*9fd9f1d0Sshengfei Xu  */
67*9fd9f1d0Sshengfei Xu #define PLAT_MAX_OFF_STATE		2
68*9fd9f1d0Sshengfei Xu /*******************************************************************************
69*9fd9f1d0Sshengfei Xu  * Platform memory map related constants
70*9fd9f1d0Sshengfei Xu  ******************************************************************************/
71*9fd9f1d0Sshengfei Xu /* TF txet, ro, rw, Size: 512KB */
72*9fd9f1d0Sshengfei Xu #define TZRAM_BASE		(0x0)
73*9fd9f1d0Sshengfei Xu #define TZRAM_SIZE		(0x100000)
74*9fd9f1d0Sshengfei Xu 
75*9fd9f1d0Sshengfei Xu /*******************************************************************************
76*9fd9f1d0Sshengfei Xu  * BL31 specific defines.
77*9fd9f1d0Sshengfei Xu  ******************************************************************************/
78*9fd9f1d0Sshengfei Xu /*
79*9fd9f1d0Sshengfei Xu  * Put BL3-1 at the top of the Trusted RAM
80*9fd9f1d0Sshengfei Xu  */
81*9fd9f1d0Sshengfei Xu #define BL31_BASE		(TZRAM_BASE + 0x40000)
82*9fd9f1d0Sshengfei Xu #define BL31_LIMIT		(TZRAM_BASE + TZRAM_SIZE)
83*9fd9f1d0Sshengfei Xu 
84*9fd9f1d0Sshengfei Xu /*******************************************************************************
85*9fd9f1d0Sshengfei Xu  * Platform specific page table and MMU setup constants
86*9fd9f1d0Sshengfei Xu  ******************************************************************************/
87*9fd9f1d0Sshengfei Xu #define PLAT_PHY_ADDR_SPACE_SIZE	(1ULL << 32)
88*9fd9f1d0Sshengfei Xu #define PLAT_VIRT_ADDR_SPACE_SIZE	(1ULL << 32)
89*9fd9f1d0Sshengfei Xu 
90*9fd9f1d0Sshengfei Xu #define ADDR_SPACE_SIZE			(1ull << 32)
91*9fd9f1d0Sshengfei Xu #define MAX_XLAT_TABLES			18
92*9fd9f1d0Sshengfei Xu #define MAX_MMAP_REGIONS		27
93*9fd9f1d0Sshengfei Xu 
94*9fd9f1d0Sshengfei Xu /*******************************************************************************
95*9fd9f1d0Sshengfei Xu  * Declarations and constants to access the mailboxes safely. Each mailbox is
96*9fd9f1d0Sshengfei Xu  * aligned on the biggest cache line size in the platform. This is known only
97*9fd9f1d0Sshengfei Xu  * to the platform as it might have a combination of integrated and external
98*9fd9f1d0Sshengfei Xu  * caches. Such alignment ensures that two maiboxes do not sit on the same cache
99*9fd9f1d0Sshengfei Xu  * line at any cache level. They could belong to different cpus/clusters &
100*9fd9f1d0Sshengfei Xu  * get written while being protected by different locks causing corruption of
101*9fd9f1d0Sshengfei Xu  * a valid mailbox address.
102*9fd9f1d0Sshengfei Xu  ******************************************************************************/
103*9fd9f1d0Sshengfei Xu #define CACHE_WRITEBACK_SHIFT	6
104*9fd9f1d0Sshengfei Xu #define CACHE_WRITEBACK_GRANULE	(1 << CACHE_WRITEBACK_SHIFT)
105*9fd9f1d0Sshengfei Xu 
106*9fd9f1d0Sshengfei Xu /*
107*9fd9f1d0Sshengfei Xu  * Define GICD and GICC and GICR base
108*9fd9f1d0Sshengfei Xu  */
109*9fd9f1d0Sshengfei Xu #define PLAT_RK_GICD_BASE	PLAT_GICD_BASE
110*9fd9f1d0Sshengfei Xu #define PLAT_RK_GICC_BASE	PLAT_GICC_BASE
111*9fd9f1d0Sshengfei Xu #define PLAT_RK_GICR_BASE	PLAT_GICR_BASE
112*9fd9f1d0Sshengfei Xu 
113*9fd9f1d0Sshengfei Xu /*
114*9fd9f1d0Sshengfei Xu  * Define a list of Group 1 Secure and Group 0 interrupts as per GICv3
115*9fd9f1d0Sshengfei Xu  * terminology. On a GICv2 system or mode, the lists will be merged and treated
116*9fd9f1d0Sshengfei Xu  * as Group 0 interrupts.
117*9fd9f1d0Sshengfei Xu  */
118*9fd9f1d0Sshengfei Xu 
119*9fd9f1d0Sshengfei Xu #define PLAT_RK_GICV3_G1S_IRQS						\
120*9fd9f1d0Sshengfei Xu 	INTR_PROP_DESC(RK_IRQ_SEC_PHY_TIMER, GIC_HIGHEST_SEC_PRIORITY, \
121*9fd9f1d0Sshengfei Xu 		       INTR_GROUP1S, GIC_INTR_CFG_LEVEL)
122*9fd9f1d0Sshengfei Xu 
123*9fd9f1d0Sshengfei Xu #define PLAT_RK_GICV3_G0_IRQS						\
124*9fd9f1d0Sshengfei Xu 	INTR_PROP_DESC(RK_IRQ_SEC_SGI_6, GIC_HIGHEST_SEC_PRIORITY,	\
125*9fd9f1d0Sshengfei Xu 		       INTR_GROUP0, GIC_INTR_CFG_LEVEL)
126*9fd9f1d0Sshengfei Xu 
127*9fd9f1d0Sshengfei Xu #define PLAT_RK_UART_BASE		FPGA_UART_BASE
128*9fd9f1d0Sshengfei Xu #define PLAT_RK_UART_CLOCK		FPGA_UART_CLOCK
129*9fd9f1d0Sshengfei Xu #define PLAT_RK_UART_BAUDRATE	FPGA_BAUDRATE
130*9fd9f1d0Sshengfei Xu 
131*9fd9f1d0Sshengfei Xu #define PLAT_RK_PRIMARY_CPU	0x0
132*9fd9f1d0Sshengfei Xu 
133*9fd9f1d0Sshengfei Xu #define ATAGS_PHYS_SIZE		0x2000
134*9fd9f1d0Sshengfei Xu #define ATAGS_PHYS_BASE		(0x200000 - ATAGS_PHYS_SIZE)/* [2M-8K, 2M] */
135*9fd9f1d0Sshengfei Xu 
136*9fd9f1d0Sshengfei Xu #endif /* __PLATFORM_DEF_H__ */
137