xref: /rk3399_ARM-atf/plat/intel/soc/common/include/platform_def.h (revision e86efe4b14cf85a00951fc22eb0d7e7afec3c8bb)
1328718f2SHadi Asyrafi /*
2325eb35dSSieu Mun Tang  * Copyright (c) 2019-2022, ARM Limited and Contributors. All rights reserved.
37931d332SJit Loon Lim  * Copyright (c) 2019-2023, Intel Corporation. All rights reserved.
4*204d5e67SSieu Mun Tang  * Copyright (c) 2024-2025, Altera Corporation. All rights reserved.
5328718f2SHadi Asyrafi  *
6328718f2SHadi Asyrafi  * SPDX-License-Identifier: BSD-3-Clause
7328718f2SHadi Asyrafi  */
8328718f2SHadi Asyrafi 
9328718f2SHadi Asyrafi #ifndef PLATFORM_DEF_H
10328718f2SHadi Asyrafi #define PLATFORM_DEF_H
11328718f2SHadi Asyrafi 
12328718f2SHadi Asyrafi #include <arch.h>
13328718f2SHadi Asyrafi #include <common/interrupt_props.h>
14328718f2SHadi Asyrafi #include <common/tbbr/tbbr_img_def.h>
15328718f2SHadi Asyrafi #include <plat/common/common_def.h>
166197dc98SJit Loon Lim #include "socfpga_plat_def.h"
17328718f2SHadi Asyrafi 
18325eb35dSSieu Mun Tang /* Platform Type */
19328718f2SHadi Asyrafi #define PLAT_SOCFPGA_STRATIX10			1
20328718f2SHadi Asyrafi #define PLAT_SOCFPGA_AGILEX			2
21325eb35dSSieu Mun Tang #define PLAT_SOCFPGA_N5X			3
226197dc98SJit Loon Lim #define PLAT_SOCFPGA_AGILEX5			4
236197dc98SJit Loon Lim #define SIMICS_RUN				1
246197dc98SJit Loon Lim #define MAX_IO_MTD_DEVICES			U(1)
25ef8b05f5SSieu Mun Tang /* Boot Source configuration
26ef8b05f5SSieu Mun Tang  * TODO: Shall consider "assert_numeric" in the future
27ef8b05f5SSieu Mun Tang  */
28ef8b05f5SSieu Mun Tang #if SOCFPGA_BOOT_SOURCE_NAND
29ef8b05f5SSieu Mun Tang #define BOOT_SOURCE						BOOT_SOURCE_NAND
30ef8b05f5SSieu Mun Tang #elif SOCFPGA_BOOT_SOURCE_SDMMC
31ef8b05f5SSieu Mun Tang #define BOOT_SOURCE						BOOT_SOURCE_SDMMC
32ef8b05f5SSieu Mun Tang #elif SOCFPGA_BOOT_SOURCE_QSPI
33ef8b05f5SSieu Mun Tang #define BOOT_SOURCE						BOOT_SOURCE_QSPI
34ef8b05f5SSieu Mun Tang #else
35ef8b05f5SSieu Mun Tang #define BOOT_SOURCE						BOOT_SOURCE_SDMMC
36ef8b05f5SSieu Mun Tang #endif
37328718f2SHadi Asyrafi 
382db1e766SHadi Asyrafi /* sysmgr.boot_scratch_cold4 & 5 used for CPU release address for SPL */
392db1e766SHadi Asyrafi #define PLAT_CPU_RELEASE_ADDR			0xffd12210
402db1e766SHadi Asyrafi 
41328718f2SHadi Asyrafi /* Define next boot image name and offset */
426197dc98SJit Loon Lim /* Get non-secure image entrypoint for BL33. Zephyr and Linux */
431838a39aSSieu Mun Tang #ifdef PRELOADED_BL33_BASE
441838a39aSSieu Mun Tang #define PLAT_NS_IMAGE_OFFSET			PRELOADED_BL33_BASE
451838a39aSSieu Mun Tang #else
466197dc98SJit Loon Lim #if PLATFORM_MODEL == PLAT_SOCFPGA_AGILEX5
476197dc98SJit Loon Lim #define PLAT_NS_IMAGE_OFFSET			0x80200000
486197dc98SJit Loon Lim #else
49389091a8STien Hock, Loh #define PLAT_NS_IMAGE_OFFSET			0x10000000
50b5c3a3fcSSieu Mun Tang #endif
511838a39aSSieu Mun Tang #endif /* #if PLATFORM_MODEL == PLAT_SOCFPGA_AGILEX5 */
52328718f2SHadi Asyrafi 
536cbe2c5dSMahesh Rao #define PLAT_QSPI_DATA_BASE			(0x3C00000)
546cbe2c5dSMahesh Rao #define PLAT_NAND_DATA_BASE			(0x0200000)
556cbe2c5dSMahesh Rao #define PLAT_SDMMC_DATA_BASE			(0x0)
566cbe2c5dSMahesh Rao 
57b5c3a3fcSSieu Mun Tang 
58328718f2SHadi Asyrafi /*******************************************************************************
59328718f2SHadi Asyrafi  * Platform binary types for linking
60328718f2SHadi Asyrafi  ******************************************************************************/
61328718f2SHadi Asyrafi #define PLATFORM_LINKER_FORMAT			"elf64-littleaarch64"
62328718f2SHadi Asyrafi #define PLATFORM_LINKER_ARCH			aarch64
63328718f2SHadi Asyrafi 
64328718f2SHadi Asyrafi /* SoCFPGA supports up to 124GB RAM */
65328718f2SHadi Asyrafi #define PLAT_PHY_ADDR_SPACE_SIZE		(1ULL << 39)
66328718f2SHadi Asyrafi #define PLAT_VIRT_ADDR_SPACE_SIZE		(1ULL << 39)
67328718f2SHadi Asyrafi 
68328718f2SHadi Asyrafi 
69328718f2SHadi Asyrafi /*******************************************************************************
70328718f2SHadi Asyrafi  * Generic platform constants
71328718f2SHadi Asyrafi  ******************************************************************************/
72328718f2SHadi Asyrafi #define PLAT_SECONDARY_ENTRY_BASE		0x01f78bf0
73328718f2SHadi Asyrafi 
74328718f2SHadi Asyrafi /* Size of cacheable stacks */
75328718f2SHadi Asyrafi #define PLATFORM_STACK_SIZE			0x2000
76328718f2SHadi Asyrafi 
77328718f2SHadi Asyrafi /* PSCI related constant */
78328718f2SHadi Asyrafi #define PLAT_NUM_POWER_DOMAINS			5
79328718f2SHadi Asyrafi #define PLAT_MAX_PWR_LVL			1
80328718f2SHadi Asyrafi #define PLAT_MAX_RET_STATE			1
81328718f2SHadi Asyrafi #define PLAT_MAX_OFF_STATE			2
82dc2d366fSDeepika Bhavnani #define PLATFORM_SYSTEM_COUNT			U(1)
83dc2d366fSDeepika Bhavnani #define PLATFORM_CLUSTER_COUNT			U(1)
84dc2d366fSDeepika Bhavnani #define PLATFORM_CLUSTER0_CORE_COUNT		U(4)
85dc2d366fSDeepika Bhavnani #define PLATFORM_CLUSTER1_CORE_COUNT		U(0)
86328718f2SHadi Asyrafi #define PLATFORM_CORE_COUNT			(PLATFORM_CLUSTER1_CORE_COUNT + \
87328718f2SHadi Asyrafi 						PLATFORM_CLUSTER0_CORE_COUNT)
88dc2d366fSDeepika Bhavnani #define PLATFORM_MAX_CPUS_PER_CLUSTER		U(4)
89328718f2SHadi Asyrafi 
90328718f2SHadi Asyrafi /* Interrupt related constant */
91328718f2SHadi Asyrafi 
92328718f2SHadi Asyrafi #define INTEL_SOCFPGA_IRQ_SEC_PHY_TIMER		29
93328718f2SHadi Asyrafi 
94328718f2SHadi Asyrafi #define INTEL_SOCFPGA_IRQ_SEC_SGI_0		8
95328718f2SHadi Asyrafi #define INTEL_SOCFPGA_IRQ_SEC_SGI_1		9
96328718f2SHadi Asyrafi #define INTEL_SOCFPGA_IRQ_SEC_SGI_2		10
97328718f2SHadi Asyrafi #define INTEL_SOCFPGA_IRQ_SEC_SGI_3		11
98328718f2SHadi Asyrafi #define INTEL_SOCFPGA_IRQ_SEC_SGI_4		12
99328718f2SHadi Asyrafi #define INTEL_SOCFPGA_IRQ_SEC_SGI_5		13
100328718f2SHadi Asyrafi #define INTEL_SOCFPGA_IRQ_SEC_SGI_6		14
101328718f2SHadi Asyrafi #define INTEL_SOCFPGA_IRQ_SEC_SGI_7		15
102328718f2SHadi Asyrafi 
103328718f2SHadi Asyrafi #define TSP_IRQ_SEC_PHY_TIMER			INTEL_SOCFPGA_IRQ_SEC_PHY_TIMER
104328718f2SHadi Asyrafi #define TSP_SEC_MEM_BASE			BL32_BASE
105328718f2SHadi Asyrafi #define TSP_SEC_MEM_SIZE			(BL32_LIMIT - BL32_BASE + 1)
106328718f2SHadi Asyrafi 
107328718f2SHadi Asyrafi 
108328718f2SHadi Asyrafi /*******************************************************************************
109328718f2SHadi Asyrafi  * BL31 specific defines.
110328718f2SHadi Asyrafi  ******************************************************************************/
111328718f2SHadi Asyrafi /*
112328718f2SHadi Asyrafi  * Put BL3-1 at the top of the Trusted SRAM (just below the shared memory, if
113328718f2SHadi Asyrafi  * present). BL31_BASE is calculated using the current BL3-1 debug size plus a
114328718f2SHadi Asyrafi  * little space for growth.
115328718f2SHadi Asyrafi  */
116328718f2SHadi Asyrafi 
117328718f2SHadi Asyrafi #define FIRMWARE_WELCOME_STR			"Booting Trusted Firmware\n"
118328718f2SHadi Asyrafi 
119328718f2SHadi Asyrafi #define BL1_RO_BASE				(0xffe00000)
120328718f2SHadi Asyrafi #define BL1_RO_LIMIT				(0xffe0f000)
121328718f2SHadi Asyrafi #define BL1_RW_BASE				(0xffe10000)
122328718f2SHadi Asyrafi #define BL1_RW_LIMIT				(0xffe1ffff)
123328718f2SHadi Asyrafi #define BL1_RW_SIZE				(0x14000)
124328718f2SHadi Asyrafi 
125cf82aff0SHadi Asyrafi #define BL_DATA_LIMIT				PLAT_HANDOFF_OFFSET
126cf82aff0SHadi Asyrafi 
127cf82aff0SHadi Asyrafi #define PLAT_CPUID_RELEASE			(BL_DATA_LIMIT - 16)
128cf82aff0SHadi Asyrafi #define PLAT_SEC_ENTRY				(BL_DATA_LIMIT - 8)
129328718f2SHadi Asyrafi 
1306197dc98SJit Loon Lim #define CMP_ENTRY				0xFFE3EFF8
1316197dc98SJit Loon Lim 
1327f56f240SChee Hong Ang #define PLAT_SEC_WARM_ENTRY			0
1337f56f240SChee Hong Ang 
134328718f2SHadi Asyrafi /*******************************************************************************
135328718f2SHadi Asyrafi  * Platform specific page table and MMU setup constants
136328718f2SHadi Asyrafi  ******************************************************************************/
137328718f2SHadi Asyrafi #define MAX_XLAT_TABLES				8
138328718f2SHadi Asyrafi #define MAX_MMAP_REGIONS			16
139328718f2SHadi Asyrafi 
140328718f2SHadi Asyrafi /*******************************************************************************
141328718f2SHadi Asyrafi  * Declarations and constants to access the mailboxes safely. Each mailbox is
142328718f2SHadi Asyrafi  * aligned on the biggest cache line size in the platform. This is known only
143328718f2SHadi Asyrafi  * to the platform as it might have a combination of integrated and external
144328718f2SHadi Asyrafi  * caches. Such alignment ensures that two maiboxes do not sit on the same cache
145328718f2SHadi Asyrafi  * line at any cache level. They could belong to different cpus/clusters &
146328718f2SHadi Asyrafi  * get written while being protected by different locks causing corruption of
147328718f2SHadi Asyrafi  * a valid mailbox address.
148328718f2SHadi Asyrafi  ******************************************************************************/
149328718f2SHadi Asyrafi #define CACHE_WRITEBACK_SHIFT			6
150328718f2SHadi Asyrafi #define CACHE_WRITEBACK_GRANULE			(1 << CACHE_WRITEBACK_SHIFT)
151328718f2SHadi Asyrafi 
152328718f2SHadi Asyrafi /*******************************************************************************
153328718f2SHadi Asyrafi  * UART related constants
154328718f2SHadi Asyrafi  ******************************************************************************/
155328718f2SHadi Asyrafi #define CRASH_CONSOLE_BASE			PLAT_UART0_BASE
156447e699fSBoon Khai Ng #define PLAT_INTEL_UART_BASE			PLAT_UART0_BASE
157328718f2SHadi Asyrafi 
1588e53b2faSSieu Mun Tang #define PLAT_BAUDRATE				(115200)
1598e53b2faSSieu Mun Tang #define PLAT_UART_CLOCK				(100000000)
1601f1c0206SAbdul Halim, Muhammad Hadi Asyrafi 
161328718f2SHadi Asyrafi /*******************************************************************************
162d603fd30STien Hock, Loh  * PHY related constants
163d603fd30STien Hock, Loh  ******************************************************************************/
164d603fd30STien Hock, Loh 
165d603fd30STien Hock, Loh #define EMAC0_PHY_MODE				PHY_INTERFACE_MODE_RGMII
166d603fd30STien Hock, Loh #define EMAC1_PHY_MODE				PHY_INTERFACE_MODE_RGMII
167d603fd30STien Hock, Loh #define EMAC2_PHY_MODE				PHY_INTERFACE_MODE_RGMII
168d603fd30STien Hock, Loh 
169d603fd30STien Hock, Loh /*******************************************************************************
1706197dc98SJit Loon Lim  * GIC related constants
171328718f2SHadi Asyrafi  ******************************************************************************/
172328718f2SHadi Asyrafi #define PLAT_INTEL_SOCFPGA_GICD_BASE		PLAT_GICD_BASE
173328718f2SHadi Asyrafi #define PLAT_INTEL_SOCFPGA_GICC_BASE		PLAT_GICC_BASE
174328718f2SHadi Asyrafi 
1756197dc98SJit Loon Lim /*******************************************************************************
1766197dc98SJit Loon Lim  * System counter frequency related constants
1776197dc98SJit Loon Lim  ******************************************************************************/
1786197dc98SJit Loon Lim 
179328718f2SHadi Asyrafi /*
180328718f2SHadi Asyrafi  * Define a list of Group 1 Secure and Group 0 interrupts as per GICv3
181328718f2SHadi Asyrafi  * terminology. On a GICv2 system or mode, the lists will be merged and treated
182328718f2SHadi Asyrafi  * as Group 0 interrupts.
183328718f2SHadi Asyrafi  */
184328718f2SHadi Asyrafi #define PLAT_INTEL_SOCFPGA_G1S_IRQ_PROPS(grp) \
185328718f2SHadi Asyrafi 	INTR_PROP_DESC(INTEL_SOCFPGA_IRQ_SEC_PHY_TIMER, \
186328718f2SHadi Asyrafi 			GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_LEVEL), \
187328718f2SHadi Asyrafi 	INTR_PROP_DESC(INTEL_SOCFPGA_IRQ_SEC_SGI_0, \
188328718f2SHadi Asyrafi 			GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_EDGE), \
189328718f2SHadi Asyrafi 	INTR_PROP_DESC(INTEL_SOCFPGA_IRQ_SEC_SGI_1, \
190328718f2SHadi Asyrafi 			GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_EDGE), \
191328718f2SHadi Asyrafi 	INTR_PROP_DESC(INTEL_SOCFPGA_IRQ_SEC_SGI_2, \
192328718f2SHadi Asyrafi 			GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_EDGE), \
193328718f2SHadi Asyrafi 	INTR_PROP_DESC(INTEL_SOCFPGA_IRQ_SEC_SGI_3, \
194328718f2SHadi Asyrafi 			GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_EDGE), \
195328718f2SHadi Asyrafi 	INTR_PROP_DESC(INTEL_SOCFPGA_IRQ_SEC_SGI_4, \
196328718f2SHadi Asyrafi 			GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_EDGE), \
197328718f2SHadi Asyrafi 	INTR_PROP_DESC(INTEL_SOCFPGA_IRQ_SEC_SGI_5, \
198328718f2SHadi Asyrafi 			GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_EDGE), \
199328718f2SHadi Asyrafi 	INTR_PROP_DESC(INTEL_SOCFPGA_IRQ_SEC_SGI_6, \
200328718f2SHadi Asyrafi 			GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_EDGE), \
201328718f2SHadi Asyrafi 	INTR_PROP_DESC(INTEL_SOCFPGA_IRQ_SEC_SGI_7, \
202328718f2SHadi Asyrafi 			GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_EDGE)
203328718f2SHadi Asyrafi 
204328718f2SHadi Asyrafi #define PLAT_INTEL_SOCFPGA_G0_IRQ_PROPS(grp)
205328718f2SHadi Asyrafi 
206328718f2SHadi Asyrafi #define MAX_IO_HANDLES				4
207328718f2SHadi Asyrafi #define MAX_IO_DEVICES				4
208328718f2SHadi Asyrafi #define MAX_IO_BLOCK_DEVICES			2
209328718f2SHadi Asyrafi 
210*204d5e67SSieu Mun Tang /* Define this, to support the SiPSVC V3 implementation. */
211*204d5e67SSieu Mun Tang #define SIP_SVC_V3				1
212*204d5e67SSieu Mun Tang 
21323f31d39SHadi Asyrafi #ifndef __ASSEMBLER__
21423f31d39SHadi Asyrafi struct socfpga_bl31_params {
21523f31d39SHadi Asyrafi 	param_header_t h;
21623f31d39SHadi Asyrafi 	image_info_t *bl31_image_info;
21723f31d39SHadi Asyrafi 	entry_point_info_t *bl32_ep_info;
21823f31d39SHadi Asyrafi 	image_info_t *bl32_image_info;
21923f31d39SHadi Asyrafi 	entry_point_info_t *bl33_ep_info;
22023f31d39SHadi Asyrafi 	image_info_t *bl33_image_info;
22123f31d39SHadi Asyrafi };
22223f31d39SHadi Asyrafi #endif
22323f31d39SHadi Asyrafi 
224328718f2SHadi Asyrafi #endif /* PLATFORM_DEF_H */
225