summaryrefslogtreecommitdiff
path: root/drivers/firmware
diff options
context:
space:
mode:
authorHarsh Jain <h.jain@amd.com>2025-12-20 21:28:54 +0530
committerHerbert Xu <herbert@gondor.apana.org.au>2026-01-23 13:48:43 +0800
commit465d7831261965248a7a1484bd186066d29427f0 (patch)
treecba67ca45292b0d5608801df1c91d6e9e447f289 /drivers/firmware
parentc7a768f57de0ebd7a9149d1dab1dadb9c5409d5f (diff)
downloadlinux-465d7831261965248a7a1484bd186066d29427f0.tar.gz
linux-465d7831261965248a7a1484bd186066d29427f0.zip
firmware: zynqmp: Add helper API to self discovery the device
Add API to get SoC version and family info. Signed-off-by: Harsh Jain <h.jain@amd.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/firmware')
-rw-r--r--drivers/firmware/xilinx/zynqmp-crypto.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/drivers/firmware/xilinx/zynqmp-crypto.c b/drivers/firmware/xilinx/zynqmp-crypto.c
index ea9cac6a1052d..6d17cb8b27b35 100644
--- a/drivers/firmware/xilinx/zynqmp-crypto.c
+++ b/drivers/firmware/xilinx/zynqmp-crypto.c
@@ -57,3 +57,34 @@ int zynqmp_pm_sha_hash(const u64 address, const u32 size, const u32 flags)
return zynqmp_pm_invoke_fn(PM_SECURE_SHA, NULL, 4, upper_addr, lower_addr, size, flags);
}
EXPORT_SYMBOL_GPL(zynqmp_pm_sha_hash);
+
+/**
+ * xlnx_get_crypto_dev_data() - Get crypto dev data of platform
+ * @feature_map: List of available feature map of all platform
+ *
+ * Return: Returns crypto dev data, either address crypto dev or ERR PTR
+ */
+void *xlnx_get_crypto_dev_data(struct xlnx_feature *feature_map)
+{
+ struct xlnx_feature *feature;
+ u32 pm_family_code;
+ int ret;
+
+ /* Get the Family code and sub family code of platform */
+ ret = zynqmp_pm_get_family_info(&pm_family_code);
+ if (ret < 0)
+ return ERR_PTR(ret);
+
+ feature = feature_map;
+ for (; feature->family; feature++) {
+ if (feature->family == pm_family_code) {
+ ret = zynqmp_pm_feature(feature->feature_id);
+ if (ret < 0)
+ return ERR_PTR(ret);
+
+ return feature->data;
+ }
+ }
+ return ERR_PTR(-ENODEV);
+}
+EXPORT_SYMBOL_GPL(xlnx_get_crypto_dev_data);