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