xref: /rk3399_ARM-atf/plat/arm/board/juno/juno_common.c (revision 7f690c3786224d000ff53f459f1bdb6ad05dc1d1)
1 /*
2  * Copyright (c) 2015-2025, Arm Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #include <drivers/arm/css/sds.h>
8 #include <lib/smccc.h>
9 #include <lib/utils_def.h>
10 #include <services/arm_arch_svc.h>
11 
12 #include <plat/arm/common/plat_arm.h>
13 #include <platform_def.h>
14 
15 /*
16  * Table of memory regions for different BL stages to map using the MMU.
17  * This doesn't include Trusted SRAM as setup_page_tables() already takes care
18  * of mapping it.
19  */
20 #ifdef IMAGE_BL1
21 const mmap_region_t plat_arm_mmap[] = {
22 	ARM_MAP_SHARED_RAM,
23 	V2M_MAP_FLASH0_RW,
24 	V2M_MAP_IOFPGA,
25 	CSS_MAP_DEVICE,
26 	SOC_CSS_MAP_DEVICE,
27 #if TRUSTED_BOARD_BOOT
28 	/* Map DRAM to authenticate NS_BL2U image. */
29 	ARM_MAP_NS_DRAM1,
30 #endif
31 	{0}
32 };
33 #endif
34 #ifdef IMAGE_BL2
35 const mmap_region_t plat_arm_mmap[] = {
36 	ARM_MAP_SHARED_RAM,
37 	V2M_MAP_FLASH0_RW,
38 #ifdef PLAT_ARM_MEM_PROT_ADDR
39 	ARM_V2M_MAP_MEM_PROTECT,
40 #endif
41 	V2M_MAP_IOFPGA,
42 	CSS_MAP_DEVICE,
43 	SOC_CSS_MAP_DEVICE,
44 	ARM_MAP_NS_DRAM1,
45 #ifdef __aarch64__
46 	ARM_MAP_DRAM2,
47 #endif
48 #ifdef SPD_tspd
49 	ARM_MAP_TSP_SEC_MEM,
50 #endif
51 #ifdef SPD_opteed
52 	ARM_MAP_OPTEE_CORE_MEM,
53 	ARM_OPTEE_PAGEABLE_LOAD_MEM,
54 #endif
55 #if TRUSTED_BOARD_BOOT && !RESET_TO_BL2
56 	ARM_MAP_BL1_RW,
57 #endif
58 #ifdef JUNO_ETHOSN_TZMP1
59 	JUNO_ETHOSN_PROT_FW_RW,
60 #endif
61 #if SPMC_AT_EL3
62 	ARM_SP_IMAGE_MMAP,
63 #endif
64 	{0}
65 };
66 #endif
67 #ifdef IMAGE_BL2U
68 const mmap_region_t plat_arm_mmap[] = {
69 	ARM_MAP_SHARED_RAM,
70 	CSS_MAP_DEVICE,
71 	CSS_MAP_SCP_BL2U,
72 	V2M_MAP_IOFPGA,
73 	SOC_CSS_MAP_DEVICE,
74 	{0}
75 };
76 #endif
77 #ifdef IMAGE_BL31
78 const mmap_region_t plat_arm_mmap[] = {
79 	ARM_MAP_SHARED_RAM,
80 	V2M_MAP_IOFPGA,
81 	CSS_MAP_DEVICE,
82 #ifdef PLAT_ARM_MEM_PROT_ADDR
83 	ARM_V2M_MAP_MEM_PROTECT,
84 #endif
85 	SOC_CSS_MAP_DEVICE,
86 	ARM_DTB_DRAM_NS,
87 #ifdef JUNO_ETHOSN_TZMP1
88 	JUNO_ETHOSN_PROT_FW_RO,
89 #endif
90 	{0}
91 };
92 #endif
93 #ifdef IMAGE_BL32
94 const mmap_region_t plat_arm_mmap[] = {
95 #ifndef __aarch64__
96 	ARM_MAP_SHARED_RAM,
97 #ifdef PLAT_ARM_MEM_PROT_ADDR
98 	ARM_V2M_MAP_MEM_PROTECT,
99 #endif
100 #endif
101 	V2M_MAP_IOFPGA,
102 	CSS_MAP_DEVICE,
103 	SOC_CSS_MAP_DEVICE,
104 	{0}
105 };
106 #endif
107 
108 ARM_CASSERT_MMAP
109 
110 /*****************************************************************************
111  * plat_is_smccc_feature_available() - This function checks whether SMCCC
112  *                                     feature is availabile for platform.
113  * @fid: SMCCC function id
114  *
115  * Return SMC_ARCH_CALL_SUCCESS if SMCCC feature is available and
116  * SMC_ARCH_CALL_NOT_SUPPORTED otherwise.
117  *****************************************************************************/
118 int32_t plat_is_smccc_feature_available(u_register_t fid)
119 {
120 	switch (fid) {
121 	case SMCCC_ARCH_SOC_ID:
122 		return SMC_ARCH_CALL_SUCCESS;
123 	default:
124 		return SMC_ARCH_CALL_NOT_SUPPORTED;
125 	}
126 }
127 
128 /* Get SOC version */
129 int32_t plat_get_soc_version(void)
130 {
131 	return (int32_t)
132 		(SOC_ID_SET_JEP_106(ARM_SOC_CONTINUATION_CODE,
133 				    ARM_SOC_IDENTIFICATION_CODE) |
134 		 (JUNO_SOC_ID & SOC_ID_IMPL_DEF_MASK));
135 }
136 
137 /* Get SOC revision */
138 int32_t plat_get_soc_revision(void)
139 {
140 	unsigned int sys_id;
141 
142 	sys_id = mmio_read_32(V2M_SYSREGS_BASE + V2M_SYS_ID);
143 	return (int32_t)(((sys_id >> V2M_SYS_ID_REV_SHIFT) &
144 			  V2M_SYS_ID_REV_MASK) & SOC_ID_REV_MASK);
145 }
146 
147 #if CSS_USE_SCMI_SDS_DRIVER
148 static sds_region_desc_t juno_sds_regions[] = {
149 	{ .base = PLAT_ARM_SDS_MEM_BASE },
150 };
151 
152 sds_region_desc_t *plat_sds_get_regions(unsigned int *region_count)
153 {
154 	*region_count = ARRAY_SIZE(juno_sds_regions);
155 
156 	return juno_sds_regions;
157 }
158 #endif /* CSS_USE_SCMI_SDS_DRIVER */
159