···5757 return zynqmp_pm_invoke_fn(PM_SECURE_SHA, NULL, 4, upper_addr, lower_addr, size, flags);5858}5959EXPORT_SYMBOL_GPL(zynqmp_pm_sha_hash);6060+6161+/**6262+ * xlnx_get_crypto_dev_data() - Get crypto dev data of platform6363+ * @feature_map: List of available feature map of all platform6464+ *6565+ * Return: Returns crypto dev data, either address crypto dev or ERR PTR6666+ */6767+void *xlnx_get_crypto_dev_data(struct xlnx_feature *feature_map)6868+{6969+ struct xlnx_feature *feature;7070+ u32 pm_family_code;7171+ int ret;7272+7373+ /* Get the Family code and sub family code of platform */7474+ ret = zynqmp_pm_get_family_info(&pm_family_code);7575+ if (ret < 0)7676+ return ERR_PTR(ret);7777+7878+ feature = feature_map;7979+ for (; feature->family; feature++) {8080+ if (feature->family == pm_family_code) {8181+ ret = zynqmp_pm_feature(feature->feature_id);8282+ if (ret < 0)8383+ return ERR_PTR(ret);8484+8585+ return feature->data;8686+ }8787+ }8888+ return ERR_PTR(-ENODEV);8989+}9090+EXPORT_SYMBOL_GPL(xlnx_get_crypto_dev_data);