xref: /rk3399_ARM-atf/plat/ti/common/include/ti_platform_defs.h (revision 6c0c3a74dda68e7ffc8bd6c156918ddbfea7e03a)
1 /*
2  * Copyright (c) 2017-2026, ARM Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #ifndef TI_PLATFORM_DEF_H
8 #define TI_PLATFORM_DEF_H
9 
10 #include <arch.h>
11 #include <plat/common/common_def.h>
12 
13 #include <board_def.h>
14 
15 /*******************************************************************************
16  * Generic platform constants
17  ******************************************************************************/
18 
19 /* Size of cacheable stack */
20 #if IMAGE_BL31 || IMAGE_BL1
21 #define PLATFORM_STACK_SIZE		0x800
22 #else
23 #define PLATFORM_STACK_SIZE		0x1000
24 #endif
25 
26 #define PLATFORM_SYSTEM_COUNT		1
27 #define PLATFORM_CORE_COUNT		(K3_CLUSTER0_CORE_COUNT + \
28 					K3_CLUSTER1_CORE_COUNT + \
29 					K3_CLUSTER2_CORE_COUNT + \
30 					K3_CLUSTER3_CORE_COUNT)
31 
32 #define PLATFORM_CLUSTER_COUNT		((K3_CLUSTER0_CORE_COUNT != 0) + \
33 					(K3_CLUSTER1_CORE_COUNT != 0) + \
34 					(K3_CLUSTER2_CORE_COUNT != 0) + \
35 					(K3_CLUSTER3_CORE_COUNT != 0))
36 
37 #define PLAT_NUM_PWR_DOMAINS		(PLATFORM_SYSTEM_COUNT + \
38 					PLATFORM_CLUSTER_COUNT + \
39 					PLATFORM_CORE_COUNT)
40 #define PLAT_MAX_PWR_LVL		MPIDR_AFFLVL2
41 #define PLAT_MAX_OFF_STATE		U(2)
42 #define PLAT_MAX_RET_STATE		U(1)
43 
44 /*******************************************************************************
45  * Memory layout constants
46  ******************************************************************************/
47 
48 /*
49  * This RAM will be used for the bootloader including code, bss, and stacks.
50  * It may need to be increased if BL31 grows in size.
51  *
52  * The link addresses are determined by BL31_BASE + offset.
53  * When ENABLE_PIE is set, the TF images can be loaded anywhere, so
54  * BL31_BASE is really arbitrary.
55  *
56  * When ENABLE_PIE is unset, BL31_BASE should be chosen so that
57  * it matches to the physical address where BL31 is loaded, that is,
58  * BL31_BASE should be the base address of the RAM region.
59  *
60  * Lets make things explicit by mapping BL31_BASE to 0x0 since ENABLE_PIE is
61  * defined as default for our platform.
62  */
63 #define BL31_BASE	UL(0x00000000) /* PIE remapped on fly */
64 #define BL31_SIZE	UL(0x00020000) /* 128k */
65 #define BL31_LIMIT	(BL31_BASE + BL31_SIZE)
66 
67 /*
68  * Defines the maximum number of translation tables that are allocated by the
69  * translation table library code. To minimize the amount of runtime memory
70  * used, choose the smallest value needed to map the required virtual addresses
71  * for each BL stage.
72  */
73 #if IMAGE_BL1
74 #define MAX_XLAT_TABLES		2
75 #else
76 #define MAX_XLAT_TABLES		4
77 #endif
78 
79 /*
80  * Defines the maximum number of regions that are allocated by the translation
81  * table library code. A region consists of physical base address, virtual base
82  * address, size and attributes (Device/Memory, RO/RW, Secure/Non-Secure), as
83  * defined in the `mmap_region_t` structure. The platform defines the regions
84  * that should be mapped. Then, the translation table library will create the
85  * corresponding tables and descriptors at runtime. To minimize the amount of
86  * runtime memory used, choose the smallest value needed to register the
87  * required regions for each BL stage.
88  */
89 #if USE_COHERENT_MEM
90 #define MAX_MMAP_REGIONS	11
91 #else
92 #define MAX_MMAP_REGIONS	10
93 #endif
94 
95 /*
96  * Defines the total size of the address space in bytes. For example, for a 32
97  * bit address space, this value should be `(1ull << 32)`.
98  */
99 #define PLAT_PHY_ADDR_SPACE_SIZE	(1ull << 32)
100 #define PLAT_VIRT_ADDR_SPACE_SIZE	(1ull << 32)
101 
102 /*
103  * Some data must be aligned on the biggest cache line size in the platform.
104  * This is known only to the platform as it might have a combination of
105  * integrated and external caches.
106  */
107 #define CACHE_WRITEBACK_SHIFT		6
108 #define CACHE_WRITEBACK_GRANULE		(1 << CACHE_WRITEBACK_SHIFT)
109 
110 /* Platform default console definitions */
111 #ifndef K3_USART_BASE
112 #define K3_USART_BASE			(0x02800000 + 0x10000 * K3_USART)
113 #endif
114 
115 /* USART has a default size for address space */
116 #define K3_USART_SIZE 0x1000
117 
118 #ifndef K3_USART_CLK_SPEED
119 #define K3_USART_CLK_SPEED 48000000
120 #endif
121 
122 /* Crash console defaults */
123 #define CRASH_CONSOLE_BASE K3_USART_BASE
124 #define CRASH_CONSOLE_CLK K3_USART_CLK_SPEED
125 #define CRASH_CONSOLE_BAUD_RATE K3_USART_BAUD
126 
127 /* Timer frequency */
128 #ifndef SYS_COUNTER_FREQ_IN_TICKS
129 #define SYS_COUNTER_FREQ_IN_TICKS 200000000
130 #endif
131 
132 /* Interrupt numbers */
133 #define ARM_IRQ_SEC_PHY_TIMER		29
134 
135 #define ARM_IRQ_SEC_SGI_0		8
136 #define ARM_IRQ_SEC_SGI_1		9
137 #define ARM_IRQ_SEC_SGI_2		10
138 #define ARM_IRQ_SEC_SGI_3		11
139 #define ARM_IRQ_SEC_SGI_4		12
140 #define ARM_IRQ_SEC_SGI_5		13
141 #define ARM_IRQ_SEC_SGI_6		14
142 #define ARM_IRQ_SEC_SGI_7		15
143 
144 /*
145  * Define properties of Group 1 Secure and Group 0 interrupts as per GICv3
146  * terminology. On a GICv2 system or mode, the lists will be merged and treated
147  * as Group 0 interrupts.
148  */
149 #define PLAT_ARM_G1S_IRQ_PROPS(grp) \
150 	INTR_PROP_DESC(ARM_IRQ_SEC_PHY_TIMER, GIC_HIGHEST_SEC_PRIORITY, grp, \
151 			GIC_INTR_CFG_LEVEL), \
152 	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_1, GIC_HIGHEST_SEC_PRIORITY, grp, \
153 			GIC_INTR_CFG_EDGE), \
154 	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_2, GIC_HIGHEST_SEC_PRIORITY, grp, \
155 			GIC_INTR_CFG_EDGE), \
156 	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_3, GIC_HIGHEST_SEC_PRIORITY, grp, \
157 			GIC_INTR_CFG_EDGE), \
158 	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_4, GIC_HIGHEST_SEC_PRIORITY, grp, \
159 			GIC_INTR_CFG_EDGE), \
160 	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_5, GIC_HIGHEST_SEC_PRIORITY, grp, \
161 			GIC_INTR_CFG_EDGE), \
162 	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_7, GIC_HIGHEST_SEC_PRIORITY, grp, \
163 			GIC_INTR_CFG_EDGE)
164 
165 #define PLAT_ARM_G0_IRQ_PROPS(grp) \
166 	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_0, GIC_HIGHEST_SEC_PRIORITY, grp, \
167 			GIC_INTR_CFG_EDGE), \
168 	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_6, GIC_HIGHEST_SEC_PRIORITY, grp, \
169 			GIC_INTR_CFG_EDGE)
170 
171 
172 #define K3_GTC_BASE		0x00A90000
173 /* We just need 20 byte offset, but simpler to just remap the 64K page in */
174 #define K3_GTC_SIZE		0x10000
175 #define K3_GTC_CNTCR_OFFSET	0x00
176 #define K3_GTC_CNTCR_EN_MASK	0x01
177 #define K3_GTC_CNTCR_HDBG_MASK	0x02
178 #define K3_GTC_CNTFID0_OFFSET	0x20
179 
180 #define K3_GIC_BASE	0x01800000
181 #define K3_GIC_SIZE	0x200000
182 
183 #define TI_SCI_HOST_ID			10
184 #define TI_SCI_MAX_MESSAGE_SIZE		52
185 
186 #endif /* TI_PLATFORM_DEF_H */
187