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