diff options
author | Joanna Farley <joanna.farley@arm.com> | 2023-02-14 10:16:59 +0100 |
---|---|---|
committer | TrustedFirmware Code Review <review@review.trustedfirmware.org> | 2023-02-14 10:16:59 +0100 |
commit | fb9d95e325163f1119e126da280b0a2cc7e5fc05 (patch) | |
tree | 1de34d02cf2a4084fab62630eac614cb570c1c91 /plat/xilinx/zynqmp | |
parent | 3cc025629a1b323bac416e40df70e8a6deaad704 (diff) | |
parent | 8f9ba3f344545740fc44e90fb8322c7728ae94ec (diff) | |
download | arm-trusted-firmware-fb9d95e325163f1119e126da280b0a2cc7e5fc05.tar.gz |
Merge "feat(zynqmp): add SMCCC_ARCH_SOC_ID support" into integration
Diffstat (limited to 'plat/xilinx/zynqmp')
-rw-r--r-- | plat/xilinx/zynqmp/aarch64/zynqmp_common.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/plat/xilinx/zynqmp/aarch64/zynqmp_common.c b/plat/xilinx/zynqmp/aarch64/zynqmp_common.c index 30af4d572..95a266e74 100644 --- a/plat/xilinx/zynqmp/aarch64/zynqmp_common.c +++ b/plat/xilinx/zynqmp/aarch64/zynqmp_common.c @@ -11,10 +11,13 @@ #include <common/debug.h> #include <drivers/generic_delay_timer.h> #include <lib/mmio.h> +#include <lib/smccc.h> #include <lib/xlat_tables/xlat_tables.h> #include <plat_ipi.h> #include <plat_private.h> +#include <plat_startup.h> #include <plat/common/platform.h> +#include <services/arm_arch_svc.h> #include "pm_api_sys.h" @@ -311,6 +314,31 @@ static char *zynqmp_print_silicon_idcode(void) return zynqmp_get_silicon_idcode_name(); } +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; + } + + return SMC_ARCH_CALL_NOT_SUPPORTED; +} + +int32_t plat_get_soc_version(void) +{ + uint32_t chip_id = zynqmp_get_silicon_ver(); + uint32_t manfid = SOC_ID_SET_JEP_106(JEDEC_XILINX_BKID, JEDEC_XILINX_MFID); + + return (int32_t)(manfid | (chip_id & 0xFFFF)); +} + +int32_t plat_get_soc_revision(void) +{ + return mmio_read_32(ZYNQMP_CSU_BASEADDR + ZYNQMP_CSU_IDCODE_OFFSET); +} + static uint32_t zynqmp_get_ps_ver(void) { uint32_t ver = mmio_read_32(ZYNQMP_CSU_BASEADDR + ZYNQMP_CSU_VERSION_OFFSET); |