[PATCH 2/3] media: iris: Skip SCM call for non-SCM PAS backend

From: Sumit Garg

Date: Fri Sep 11 2026 - 08:47:28 EST


From: Jorge Ramirez-Ortiz <jorge.ramirez@xxxxxxxxxxxxxxxx>

qcom_scm_mem_protect_video_var() is only serviced by the SCM backend;
with OP-TEE the TEE owns secure memory protection. Use
qcom_pas_get_backend() to issue the SCM call only for the SCM backend.

Assisted-by: Copilot:claude-opus-4.8
Signed-off-by: Jorge Ramirez-Ortiz <jorge.ramirez.ortiz@xxxxxxxxx>
Co-developed-by: Sumit Garg <sumit.garg@xxxxxxxxxxxxxxxx>
Signed-off-by: Sumit Garg <sumit.garg@xxxxxxxxxxxxxxxx>
---
drivers/media/platform/qcom/iris/iris_firmware.c | 11 +++++++++++
1 file changed, 11 insertions(+)

diff --git a/drivers/media/platform/qcom/iris/iris_firmware.c b/drivers/media/platform/qcom/iris/iris_firmware.c
index 21cdf1c39835..7fbe71e21bcb 100644
--- a/drivers/media/platform/qcom/iris/iris_firmware.c
+++ b/drivers/media/platform/qcom/iris/iris_firmware.c
@@ -9,6 +9,7 @@
#include <linux/of_address.h>
#include <linux/of_reserved_mem.h>
#include <linux/soc/qcom/mdt_loader.h>
+#include <linux/string.h>

#include "iris_core.h"
#include "iris_firmware.h"
@@ -158,6 +159,7 @@ static int iris_load_fw_to_memory(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);
@@ -172,6 +174,15 @@ int iris_fw_load(struct iris_core *core)
return ret;
}

+ /*
+ * 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,

--
2.53.0