diff options
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); |