diff --git a/drivers/media/platform/qcom/iris/iris_firmware.c b/drivers/media/platform/qcom/iris/iris_firmware.c index 31edb6c704e15..a8b52bc9dd554 100644 --- a/drivers/media/platform/qcom/iris/iris_firmware.c +++ b/drivers/media/platform/qcom/iris/iris_firmware.c @@ -10,6 +10,7 @@ #include #include #include +#include #include "iris_core.h" #include "iris_firmware.h" @@ -186,6 +187,7 @@ static void iris_fw_iommu_unmap(struct iris_core *core) int iris_fw_load(struct iris_core *core) { const struct tz_cp_config *cp_config; + const char *pas_backend; int i, ret; ret = iris_load_fw_to_memory(core); @@ -200,6 +202,15 @@ int iris_fw_load(struct iris_core *core) goto err_unmap; } + /* + * qcom_scm_mem_protect_video_var() only applies to the SCM backend; + * other backends (e.g. OP-TEE) own secure memory protection and do + * not service this call. + */ + pas_backend = qcom_pas_get_backend(); + if (!pas_backend || strcmp(pas_backend, QCOM_PAS_BACKEND_SCM)) + return 0; + for (i = 0; i < core->iris_platform_data->tz_cp_config_data_size; i++) { cp_config = &core->iris_platform_data->tz_cp_config_data[i]; ret = qcom_scm_mem_protect_video_var(cp_config->cp_start, @@ -215,7 +226,7 @@ int iris_fw_load(struct iris_core *core) return 0; err_pas_shutdown: - qcom_scm_pas_shutdown(IRIS_PAS_ID); + qcom_pas_shutdown(IRIS_PAS_ID); err_unmap: iris_fw_iommu_unmap(core); @@ -226,7 +237,7 @@ int iris_fw_unload(struct iris_core *core) { int ret; - ret = qcom_scm_pas_shutdown(IRIS_PAS_ID); + ret = qcom_pas_shutdown(IRIS_PAS_ID); iris_fw_iommu_unmap(core); return ret; diff --git a/drivers/media/platform/qcom/venus/firmware.c b/drivers/media/platform/qcom/venus/firmware.c index faede668d0b19..078ff59d55df2 100644 --- a/drivers/media/platform/qcom/venus/firmware.c +++ b/drivers/media/platform/qcom/venus/firmware.c @@ -17,6 +17,7 @@ #include #include #include +#include #include "core.h" #include "firmware.h" @@ -254,12 +255,13 @@ int venus_boot(struct venus_core *core) const struct venus_resources *res = core->res; const struct firmware *mdt; const char *fwpath = NULL; + const char *pas_backend; phys_addr_t mem_phys; size_t res_size; int ret; if (!IS_ENABLED(CONFIG_QCOM_MDT_LOADER) || - (!core->use_tz && !core->fw.dev)) + (!core->use_tz && !qcom_pas_is_available())) return driver_deferred_probe_check_state(core->dev); ret = of_property_read_string_index(dev->of_node, "firmware-name", 0, &fwpath); @@ -283,6 +285,14 @@ int venus_boot(struct venus_core *core) } if (core->use_tz && res->cp_size) { + /* + * qcom_scm_mem_protect_video_var() only applies to the SCM + * backend; other backends (e.g. OP-TEE) own secure memory + * protection and do not service this call. + */ + pas_backend = qcom_pas_get_backend(); + if (!pas_backend || strcmp(pas_backend, QCOM_PAS_BACKEND_SCM)) + return ret; /* * Clues for porting using downstream data: * cp_start = 0 @@ -411,8 +421,8 @@ static int venus_firmware_init_auto_detect(struct venus_core *core) int ret; core->use_tz = false; - if (qcom_scm_is_available()) { - if (qcom_scm_pas_supported(VENUS_PAS_ID)) + if (qcom_pas_is_available()) { + if (qcom_pas_supported(VENUS_PAS_ID)) core->use_tz = true; } else { ret = driver_deferred_probe_check_state(core->dev);