From 47b828760a73d13b104c95e3e281f5ed5abd17c3 Mon Sep 17 00:00:00 2001 From: Priyanka Gujjula Date: Thu, 6 Aug 2026 09:23:20 +0530 Subject: [PATCH 1/2] FROMLIST: media: qcom: Switch to generic PAS TZ APIs Switch qcom media client drivers over to generic PAS TZ APIs. Generic PAS TZ service allows to support multiple TZ implementation backends like QTEE based SCM PAS service, OP-TEE based PAS service and any further future TZ backend service. Reviewed-by: Mukesh Ojha Tested-by: Mukesh Ojha # Lemans Reviewed-by: Konrad Dybcio Signed-off-by: Sumit Garg Link: https://lore.kernel.org/lkml/20260702115835.167602-10-sumit.garg@kernel.org/ --- drivers/media/platform/qcom/iris/Kconfig | 1 + drivers/media/platform/qcom/iris/iris_core.h | 2 +- .../media/platform/qcom/iris/iris_firmware.c | 13 +++++++------ drivers/media/platform/qcom/venus/Kconfig | 1 + drivers/media/platform/qcom/venus/core.h | 2 +- drivers/media/platform/qcom/venus/firmware.c | 19 ++++++++++--------- 6 files changed, 21 insertions(+), 17 deletions(-) diff --git a/drivers/media/platform/qcom/iris/Kconfig b/drivers/media/platform/qcom/iris/Kconfig index af78a1775937b..355421cc64839 100644 --- a/drivers/media/platform/qcom/iris/Kconfig +++ b/drivers/media/platform/qcom/iris/Kconfig @@ -5,6 +5,7 @@ config VIDEO_QCOM_IRIS select V4L2_MEM2MEM_DEV select QCOM_MDT_LOADER select QCOM_SCM + select QCOM_PAS select QCOM_UBWC_CONFIG select VIDEOBUF2_DMA_CONTIG help diff --git a/drivers/media/platform/qcom/iris/iris_core.h b/drivers/media/platform/qcom/iris/iris_core.h index 925bf511c5ee6..3d23cb9aa4488 100644 --- a/drivers/media/platform/qcom/iris/iris_core.h +++ b/drivers/media/platform/qcom/iris/iris_core.h @@ -102,7 +102,7 @@ struct iris_core { struct device *np_dev; struct device *p_dev; struct device *fw_dev; - struct qcom_scm_pas_context *pas_ctx; + struct qcom_pas_context *pas_ctx; void __iomem *reg_base; int irq; struct v4l2_device v4l2_dev; diff --git a/drivers/media/platform/qcom/iris/iris_firmware.c b/drivers/media/platform/qcom/iris/iris_firmware.c index 3f89c37daf1b0..288dd24015946 100644 --- a/drivers/media/platform/qcom/iris/iris_firmware.c +++ b/drivers/media/platform/qcom/iris/iris_firmware.c @@ -4,6 +4,7 @@ */ #include +#include #include #include #include @@ -142,7 +143,7 @@ static int iris_load_fw_to_memory(struct iris_core *core) { struct device *fw_dev = core->fw_dev ? core->fw_dev : core->dev; const struct firmware *firmware = NULL; - struct qcom_scm_pas_context *ctx; + struct qcom_pas_context *ctx; struct iommu_domain *domain; struct resource res; phys_addr_t mem_phys; @@ -163,7 +164,7 @@ static int iris_load_fw_to_memory(struct iris_core *core) return PTR_ERR(firmware); if (!core->pas_ctx) { - ctx = devm_qcom_scm_pas_context_alloc(core->dev, IRIS_PAS_ID, mem_phys, res_size); + ctx = devm_qcom_pas_context_alloc(core->dev, IRIS_PAS_ID, mem_phys, res_size); if (IS_ERR(ctx)) return PTR_ERR(ctx); core->pas_ctx = ctx; @@ -220,7 +221,7 @@ int iris_fw_load(struct iris_core *core) return ret; } - ret = qcom_scm_pas_prepare_and_auth_reset(core->pas_ctx); + ret = qcom_pas_prepare_and_auth_reset(core->pas_ctx); if (ret) { dev_err(core->dev, "auth and reset failed: %d\n", ret); goto err_unmap; @@ -241,7 +242,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); @@ -252,7 +253,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; @@ -260,5 +261,5 @@ int iris_fw_unload(struct iris_core *core) int iris_set_hw_state(struct iris_core *core, bool resume) { - return qcom_scm_set_remote_state(resume, 0); + return qcom_pas_set_remote_state(resume, 0); } diff --git a/drivers/media/platform/qcom/venus/Kconfig b/drivers/media/platform/qcom/venus/Kconfig index 63ee8c78dc6d7..7997b8aa427a0 100644 --- a/drivers/media/platform/qcom/venus/Kconfig +++ b/drivers/media/platform/qcom/venus/Kconfig @@ -6,6 +6,7 @@ config VIDEO_QCOM_VENUS select OF_DYNAMIC if ARCH_QCOM select QCOM_MDT_LOADER select QCOM_SCM + select QCOM_PAS select VIDEOBUF2_DMA_CONTIG select V4L2_MEM2MEM_DEV help diff --git a/drivers/media/platform/qcom/venus/core.h b/drivers/media/platform/qcom/venus/core.h index a52cd14539183..2d5a8a690d373 100644 --- a/drivers/media/platform/qcom/venus/core.h +++ b/drivers/media/platform/qcom/venus/core.h @@ -223,7 +223,7 @@ struct venus_core { size_t mapped_mem_size; phys_addr_t mem_phys; size_t mem_size; - struct qcom_scm_pas_context *ctx; + struct qcom_pas_context *ctx; bool iommu_domain_owned; } fw; struct mutex lock; diff --git a/drivers/media/platform/qcom/venus/firmware.c b/drivers/media/platform/qcom/venus/firmware.c index dbfb322a99978..ae9a5276258d8 100644 --- a/drivers/media/platform/qcom/venus/firmware.c +++ b/drivers/media/platform/qcom/venus/firmware.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -59,7 +60,7 @@ int venus_set_hw_state(struct venus_core *core, bool resume) int ret; if (core->use_tz) { - ret = qcom_scm_set_remote_state(resume, 0); + ret = qcom_pas_set_remote_state(resume, 0); if (resume && ret == -EINVAL) ret = 0; return ret; @@ -124,12 +125,12 @@ static int venus_load_fw(struct venus_core *core, const struct firmware *mdt, const char *fwname, phys_addr_t mem_phys, size_t res_size) { - struct qcom_scm_pas_context *ctx; + struct qcom_pas_context *ctx; struct device *dev; int ret; dev = core->fw.dev ? core->fw.dev : core->dev; - ctx = devm_qcom_scm_pas_context_alloc(dev, VENUS_PAS_ID, mem_phys, res_size); + ctx = devm_qcom_pas_context_alloc(dev, VENUS_PAS_ID, mem_phys, res_size); if (!ctx) { dev_err(core->dev, "%s: ctx is null\n", __func__); return -ENOMEM; @@ -138,7 +139,7 @@ static int venus_load_fw(struct venus_core *core, ctx->use_tzmem = !!core->fw.dev; ret = qcom_mdt_pas_load(ctx, mdt, fwname, NULL); - qcom_scm_pas_metadata_release(ctx); + qcom_pas_metadata_release(ctx); if (ret) { dev_err(core->dev, "%s: qcom_mdt_pas_load: %d\n", __func__, ret); return ret; @@ -155,9 +156,9 @@ static int venus_load_fw(struct venus_core *core, core->fw.mapped_mem_size = res_size; - ret = qcom_scm_pas_prepare_and_auth_reset(ctx); + ret = qcom_pas_prepare_and_auth_reset(ctx); if (ret) { - dev_err(core->dev, "%s: qcom_scm_pas_prepare_and_auth_reset: %d\n", __func__, ret); + dev_err(core->dev, "%s: qcom_pas_prepare_and_auth_reset: %d\n", __func__, ret); if (core->fw.iommu_domain) iommu_unmap(core->fw.iommu_domain, 0, res_size); core->fw.mapped_mem_size = 0; @@ -311,7 +312,7 @@ int venus_shutdown(struct venus_core *core) int ret; if (core->use_tz) { - ret = qcom_scm_pas_shutdown(VENUS_PAS_ID); + ret = qcom_pas_shutdown(VENUS_PAS_ID); if (core->fw.iommu_domain && core->fw.mapped_mem_size) { iommu_unmap(core->fw.iommu_domain, 0, core->fw.mapped_mem_size); core->fw.mapped_mem_size = 0; @@ -410,8 +411,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); From 0e120b58e5cf78f68a6a53265ac8c39dd5aa4e9f Mon Sep 17 00:00:00 2001 From: Priyanka Gujjula Date: Thu, 6 Aug 2026 09:23:36 +0530 Subject: [PATCH 2/2] FROMLIST: media: qcom: Pass proper PAS ID to set_remote_state API As per testing the SCM backend just ignores it while OP-TEE makes use of it to for proper book keeping purpose. Reviewed-by: Mukesh Ojha Tested-by: Mukesh Ojha # Lemans Reviewed-by: Vikash Garodia Signed-off-by: Sumit Garg Reviewed-by: Konrad Dybcio Link: https://lore.kernel.org/lkml/20260702115835.167602-11-sumit.garg@kernel.org/ --- drivers/media/platform/qcom/iris/iris_firmware.c | 2 +- drivers/media/platform/qcom/venus/firmware.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/qcom/iris/iris_firmware.c b/drivers/media/platform/qcom/iris/iris_firmware.c index 288dd24015946..1f2265237e8b6 100644 --- a/drivers/media/platform/qcom/iris/iris_firmware.c +++ b/drivers/media/platform/qcom/iris/iris_firmware.c @@ -261,5 +261,5 @@ int iris_fw_unload(struct iris_core *core) int iris_set_hw_state(struct iris_core *core, bool resume) { - return qcom_pas_set_remote_state(resume, 0); + return qcom_pas_set_remote_state(resume, IRIS_PAS_ID); } diff --git a/drivers/media/platform/qcom/venus/firmware.c b/drivers/media/platform/qcom/venus/firmware.c index ae9a5276258d8..964c37b9793c2 100644 --- a/drivers/media/platform/qcom/venus/firmware.c +++ b/drivers/media/platform/qcom/venus/firmware.c @@ -60,7 +60,7 @@ int venus_set_hw_state(struct venus_core *core, bool resume) int ret; if (core->use_tz) { - ret = qcom_pas_set_remote_state(resume, 0); + ret = qcom_pas_set_remote_state(resume, VENUS_PAS_ID); if (resume && ret == -EINVAL) ret = 0; return ret;