aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRavi Patel <ravi.patel@xilinx.com>2019-08-12 03:17:54 -0700
committerJolly Shah <jolly.shah@xilinx.com>2020-01-15 11:03:43 -0800
commitea6e1c39423301b49b304fc474c649e519644fa4 (patch)
tree8a9657d7cef2736c22223cb1577ea04e314f5b8c
parente4c54c0d2d54599db4b0f9e0e6f644864b05dd3e (diff)
downloadplatform_external_arm-trusted-firmware-ea6e1c39423301b49b304fc474c649e519644fa4.tar.gz
platform_external_arm-trusted-firmware-ea6e1c39423301b49b304fc474c649e519644fa4.tar.bz2
platform_external_arm-trusted-firmware-ea6e1c39423301b49b304fc474c649e519644fa4.zip
plat: versal: Add Get_ChipID API
Add support for Get_ChipID API in Versal which calls corresponding LibPM API. Signed-off-by: Ravi Patel <ravi.patel@xilinx.com> Acked-by: Jolly Shah <jolly.shah@xilinx.com> Signed-off-by: Jolly Shah <jolly.shah@xilinx.com> Change-Id: I25c4b301721d7989d982ac376c59195c55564022
-rw-r--r--plat/xilinx/versal/pm_service/pm_api_sys.c17
-rw-r--r--plat/xilinx/versal/pm_service/pm_api_sys.h1
-rw-r--r--plat/xilinx/versal/pm_service/pm_defs.h1
-rw-r--r--plat/xilinx/versal/pm_service/pm_svc_main.c9
4 files changed, 28 insertions, 0 deletions
diff --git a/plat/xilinx/versal/pm_service/pm_api_sys.c b/plat/xilinx/versal/pm_service/pm_api_sys.c
index e48fbf576..a4c0b285e 100644
--- a/plat/xilinx/versal/pm_service/pm_api_sys.c
+++ b/plat/xilinx/versal/pm_service/pm_api_sys.c
@@ -749,6 +749,23 @@ enum pm_ret_status pm_set_wakeup_source(uint32_t target, uint32_t wkup_device,
}
/**
+ * pm_get_chipid() - Read silicon ID registers
+ * @value Buffer for return values. Must be large enough
+ * to hold 8 bytes.
+ *
+ * @return Returns silicon ID registers
+ */
+enum pm_ret_status pm_get_chipid(uint32_t *value)
+{
+ uint32_t payload[PAYLOAD_ARG_CNT];
+
+ /* Send request to the PMC */
+ PM_PACK_PAYLOAD1(payload, LIBPM_MODULE_ID, PM_GET_CHIPID);
+
+ return pm_ipi_send_sync(primary_proc, payload, value, 2);
+}
+
+/**
* pm_feature_check() - Returns the supported API version if supported
* @api_id API ID to check
* @value Returned supported API version
diff --git a/plat/xilinx/versal/pm_service/pm_api_sys.h b/plat/xilinx/versal/pm_service/pm_api_sys.h
index 5effbb683..995c49efa 100644
--- a/plat/xilinx/versal/pm_service/pm_api_sys.h
+++ b/plat/xilinx/versal/pm_service/pm_api_sys.h
@@ -65,6 +65,7 @@ enum pm_ret_status pm_api_ioctl(uint32_t device_id, uint32_t ioctl_id,
enum pm_ret_status pm_query_data(uint32_t qid, uint32_t arg1, uint32_t arg2,
uint32_t arg3, uint32_t *data);
unsigned int pm_get_shutdown_scope(void);
+enum pm_ret_status pm_get_chipid(uint32_t *value);
enum pm_ret_status pm_feature_check(uint32_t api_id, unsigned int *version);
enum pm_ret_status pm_load_pdi(uint32_t src, uint32_t address_low,
uint32_t address_high);
diff --git a/plat/xilinx/versal/pm_service/pm_defs.h b/plat/xilinx/versal/pm_service/pm_defs.h
index 892804d7f..7d4066bdc 100644
--- a/plat/xilinx/versal/pm_service/pm_defs.h
+++ b/plat/xilinx/versal/pm_service/pm_defs.h
@@ -55,6 +55,7 @@
#define PM_RESET_ASSERT 17U
#define PM_RESET_GET_STATUS 18U
#define PM_INIT_FINALIZE 21U
+#define PM_GET_CHIPID 24U
#define PM_PINCTRL_REQUEST 28U
#define PM_PINCTRL_RELEASE 29U
#define PM_PINCTRL_GET_FUNCTION 30U
diff --git a/plat/xilinx/versal/pm_service/pm_svc_main.c b/plat/xilinx/versal/pm_service/pm_svc_main.c
index bbe8097a8..d2460131f 100644
--- a/plat/xilinx/versal/pm_service/pm_svc_main.c
+++ b/plat/xilinx/versal/pm_service/pm_svc_main.c
@@ -290,6 +290,15 @@ uint64_t pm_smc_handler(uint32_t smc_fid, uint64_t x1, uint64_t x2, uint64_t x3,
SMC_RET1(handle, (uint64_t)PM_RET_SUCCESS |
((uint64_t)VERSAL_TZ_VERSION << 32));
+ case PM_GET_CHIPID:
+ {
+ uint32_t result[2];
+
+ ret = pm_get_chipid(result);
+ SMC_RET2(handle, (uint64_t)ret | ((uint64_t)result[0] << 32),
+ result[1]);
+ }
+
case PM_FEATURE_CHECK:
{
uint32_t version;