2015-03-19 18:58:55 +00:00
|
|
|
/*
|
2020-08-04 17:13:14 +01:00
|
|
|
* Copyright (c) 2015-2020, ARM Limited and Contributors. All rights reserved.
|
2015-03-19 18:58:55 +00:00
|
|
|
*
|
2017-05-03 09:38:09 +01:00
|
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
2015-03-19 18:58:55 +00:00
|
|
|
*/
|
2019-01-15 14:19:50 +00:00
|
|
|
|
2020-08-04 17:13:14 +01:00
|
|
|
#include <lib/smccc.h>
|
2019-01-15 14:19:50 +00:00
|
|
|
#include <platform_def.h>
|
2020-08-04 17:13:14 +01:00
|
|
|
#include <services/arm_arch_svc.h>
|
|
|
|
|
2019-01-25 14:30:04 +00:00
|
|
|
#include <plat/arm/common/plat_arm.h>
|
2015-03-19 18:58:55 +00:00
|
|
|
|
|
|
|
/*
|
2016-05-18 16:11:47 +01:00
|
|
|
* Table of memory regions for different BL stages to map using the MMU.
|
2018-10-19 16:44:18 +01:00
|
|
|
* This doesn't include Trusted SRAM as setup_page_tables() already takes care
|
|
|
|
* of mapping it.
|
2015-03-19 18:58:55 +00:00
|
|
|
*/
|
2016-12-25 14:36:24 +00:00
|
|
|
#ifdef IMAGE_BL1
|
2015-03-19 18:58:55 +00:00
|
|
|
const mmap_region_t plat_arm_mmap[] = {
|
|
|
|
ARM_MAP_SHARED_RAM,
|
2018-03-07 11:32:04 +00:00
|
|
|
V2M_MAP_FLASH0_RW,
|
2015-03-19 18:58:55 +00:00
|
|
|
V2M_MAP_IOFPGA,
|
|
|
|
CSS_MAP_DEVICE,
|
|
|
|
SOC_CSS_MAP_DEVICE,
|
2015-10-11 14:14:55 +01:00
|
|
|
#if TRUSTED_BOARD_BOOT
|
2017-05-26 15:48:10 +01:00
|
|
|
/* Map DRAM to authenticate NS_BL2U image. */
|
2015-10-11 14:14:55 +01:00
|
|
|
ARM_MAP_NS_DRAM1,
|
|
|
|
#endif
|
2015-03-19 18:58:55 +00:00
|
|
|
{0}
|
|
|
|
};
|
|
|
|
#endif
|
2016-12-25 14:36:24 +00:00
|
|
|
#ifdef IMAGE_BL2
|
2015-03-19 18:58:55 +00:00
|
|
|
const mmap_region_t plat_arm_mmap[] = {
|
|
|
|
ARM_MAP_SHARED_RAM,
|
2018-03-07 11:32:04 +00:00
|
|
|
V2M_MAP_FLASH0_RW,
|
2017-08-03 09:16:43 +01:00
|
|
|
#ifdef PLAT_ARM_MEM_PROT_ADDR
|
|
|
|
ARM_V2M_MAP_MEM_PROTECT,
|
|
|
|
#endif
|
2015-03-19 18:58:55 +00:00
|
|
|
V2M_MAP_IOFPGA,
|
|
|
|
CSS_MAP_DEVICE,
|
|
|
|
SOC_CSS_MAP_DEVICE,
|
|
|
|
ARM_MAP_NS_DRAM1,
|
2019-07-09 22:02:43 +01:00
|
|
|
#ifdef __aarch64__
|
2017-08-08 11:27:20 +01:00
|
|
|
ARM_MAP_DRAM2,
|
|
|
|
#endif
|
2017-08-30 10:59:22 +01:00
|
|
|
#ifdef SPD_tspd
|
2015-03-19 18:58:55 +00:00
|
|
|
ARM_MAP_TSP_SEC_MEM,
|
2017-08-30 10:59:22 +01:00
|
|
|
#endif
|
2017-04-24 16:49:28 +01:00
|
|
|
#ifdef SPD_opteed
|
2017-09-01 13:43:50 +01:00
|
|
|
ARM_MAP_OPTEE_CORE_MEM,
|
2017-04-24 16:49:28 +01:00
|
|
|
ARM_OPTEE_PAGEABLE_LOAD_MEM,
|
2019-07-31 15:03:44 +01:00
|
|
|
#endif
|
|
|
|
#if TRUSTED_BOARD_BOOT && !BL2_AT_EL3
|
|
|
|
ARM_MAP_BL1_RW,
|
2017-04-24 16:49:28 +01:00
|
|
|
#endif
|
2015-03-19 18:58:55 +00:00
|
|
|
{0}
|
|
|
|
};
|
|
|
|
#endif
|
2016-12-25 14:36:24 +00:00
|
|
|
#ifdef IMAGE_BL2U
|
2015-10-14 15:28:11 +01:00
|
|
|
const mmap_region_t plat_arm_mmap[] = {
|
|
|
|
ARM_MAP_SHARED_RAM,
|
|
|
|
CSS_MAP_DEVICE,
|
2018-07-06 16:54:44 +01:00
|
|
|
CSS_MAP_SCP_BL2U,
|
|
|
|
V2M_MAP_IOFPGA,
|
2015-10-14 15:28:11 +01:00
|
|
|
SOC_CSS_MAP_DEVICE,
|
|
|
|
{0}
|
|
|
|
};
|
|
|
|
#endif
|
2016-12-25 14:36:24 +00:00
|
|
|
#ifdef IMAGE_BL31
|
2015-03-19 18:58:55 +00:00
|
|
|
const mmap_region_t plat_arm_mmap[] = {
|
|
|
|
ARM_MAP_SHARED_RAM,
|
|
|
|
V2M_MAP_IOFPGA,
|
|
|
|
CSS_MAP_DEVICE,
|
2017-08-03 09:16:43 +01:00
|
|
|
#ifdef PLAT_ARM_MEM_PROT_ADDR
|
|
|
|
ARM_V2M_MAP_MEM_PROTECT,
|
|
|
|
#endif
|
2015-03-19 18:58:55 +00:00
|
|
|
SOC_CSS_MAP_DEVICE,
|
|
|
|
{0}
|
|
|
|
};
|
|
|
|
#endif
|
2016-12-25 14:36:24 +00:00
|
|
|
#ifdef IMAGE_BL32
|
2015-03-19 18:58:55 +00:00
|
|
|
const mmap_region_t plat_arm_mmap[] = {
|
2019-07-09 22:02:43 +01:00
|
|
|
#ifndef __aarch64__
|
2016-11-14 12:00:41 +00:00
|
|
|
ARM_MAP_SHARED_RAM,
|
2018-01-05 16:00:05 +00:00
|
|
|
#ifdef PLAT_ARM_MEM_PROT_ADDR
|
|
|
|
ARM_V2M_MAP_MEM_PROTECT,
|
|
|
|
#endif
|
2016-11-14 12:00:41 +00:00
|
|
|
#endif
|
2015-03-19 18:58:55 +00:00
|
|
|
V2M_MAP_IOFPGA,
|
|
|
|
CSS_MAP_DEVICE,
|
|
|
|
SOC_CSS_MAP_DEVICE,
|
|
|
|
{0}
|
|
|
|
};
|
|
|
|
#endif
|
|
|
|
|
|
|
|
ARM_CASSERT_MMAP
|
2020-08-04 17:13:14 +01:00
|
|
|
|
|
|
|
/*****************************************************************************
|
|
|
|
* plat_is_smccc_feature_available() - This function checks whether SMCCC
|
|
|
|
* feature is availabile for platform.
|
|
|
|
* @fid: SMCCC function id
|
|
|
|
*
|
|
|
|
* Return SMC_ARCH_CALL_SUCCESS if SMCCC feature is available and
|
|
|
|
* SMC_ARCH_CALL_NOT_SUPPORTED otherwise.
|
|
|
|
*****************************************************************************/
|
|
|
|
int32_t plat_is_smccc_feature_available(u_register_t fid)
|
|
|
|
{
|
|
|
|
switch (fid) {
|
|
|
|
case SMCCC_ARCH_SOC_ID:
|
|
|
|
return SMC_ARCH_CALL_SUCCESS;
|
|
|
|
default:
|
|
|
|
return SMC_ARCH_CALL_NOT_SUPPORTED;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Get SOC version */
|
|
|
|
int32_t plat_get_soc_version(void)
|
|
|
|
{
|
|
|
|
return (int32_t)
|
|
|
|
((ARM_SOC_IDENTIFICATION_CODE << ARM_SOC_IDENTIFICATION_SHIFT)
|
|
|
|
| (ARM_SOC_CONTINUATION_CODE << ARM_SOC_CONTINUATION_SHIFT)
|
|
|
|
| JUNO_SOC_ID);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Get SOC revision */
|
|
|
|
int32_t plat_get_soc_revision(void)
|
|
|
|
{
|
|
|
|
unsigned int sys_id;
|
|
|
|
|
|
|
|
sys_id = mmio_read_32(V2M_SYSREGS_BASE + V2M_SYS_ID);
|
|
|
|
return (int32_t)((sys_id >> V2M_SYS_ID_REV_SHIFT) &
|
|
|
|
V2M_SYS_ID_REV_MASK);
|
|
|
|
}
|