[PATCH 05/11] media: qcom: iris: handle HFI subscription properties directly
From: Dmitry Baryshkov
Date: Sat Feb 28 2026 - 03:31:46 EST
The HFI subscriptions properties are set per the HFI generation, they
don't change between different platforms with the same HFI interface.
Instead of copy-pasting the same properties between platform data over
and over again, move them to the corresponding HFI generation source
file and drop them from the HFI platform data.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
---
.../platform/qcom/iris/iris_hfi_gen2_command.c | 50 +++++++++----
.../platform/qcom/iris/iris_platform_common.h | 10 ---
.../media/platform/qcom/iris/iris_platform_gen2.c | 83 ----------------------
3 files changed, 35 insertions(+), 108 deletions(-)
diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
index 28f352d99bf0..fd8a055c4acc 100644
--- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
+++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
@@ -1053,9 +1053,31 @@ static int iris_hfi_gen2_subscribe_change_param(struct iris_inst *inst, u32 plan
return 0;
}
+static const u32 iris_hfi_gen2_vdec_input_prop[] = {
+ HFI_PROP_NO_OUTPUT,
+};
+
+static const u32 iris_hfi_gen2_vdec_output_prop_avc[] = {
+ HFI_PROP_PICTURE_TYPE,
+ HFI_PROP_CABAC_SESSION,
+};
+
+static const u32 iris_hfi_gen2_vdec_output_prop_hevc[] = {
+ HFI_PROP_PICTURE_TYPE,
+};
+
+static const u32 iris_hfi_gen2_vdec_output_prop_vp9[] = {
+ HFI_PROP_PICTURE_TYPE,
+};
+
+static const u32 iris_hfi_gen2_vdec_output_prop_av1[] = {
+ HFI_PROP_PICTURE_TYPE,
+ HFI_PROP_WORST_COMPRESSION_RATIO,
+ HFI_PROP_WORST_COMPLEXITY_FACTOR,
+};
+
static int iris_hfi_gen2_subscribe_property(struct iris_inst *inst, u32 plane)
{
- struct iris_core *core = inst->core;
u32 subscribe_prop_size = 0, i;
const u32 *subcribe_prop = NULL;
u32 payload[32] = {0};
@@ -1066,30 +1088,28 @@ static int iris_hfi_gen2_subscribe_property(struct iris_inst *inst, u32 plane)
return 0;
if (V4L2_TYPE_IS_OUTPUT(plane)) {
- subscribe_prop_size = core->iris_platform_data->dec_input_prop_size;
- subcribe_prop = core->iris_platform_data->dec_input_prop;
+ subscribe_prop_size = ARRAY_SIZE(iris_hfi_gen2_vdec_input_prop);
+ subcribe_prop = iris_hfi_gen2_vdec_input_prop;
} else {
switch (inst->codec) {
case V4L2_PIX_FMT_H264:
- subcribe_prop = core->iris_platform_data->dec_output_prop_avc;
- subscribe_prop_size =
- core->iris_platform_data->dec_output_prop_avc_size;
+ subcribe_prop = iris_hfi_gen2_vdec_output_prop_avc;
+ subscribe_prop_size = ARRAY_SIZE(iris_hfi_gen2_vdec_output_prop_avc);
break;
case V4L2_PIX_FMT_HEVC:
- subcribe_prop = core->iris_platform_data->dec_output_prop_hevc;
- subscribe_prop_size =
- core->iris_platform_data->dec_output_prop_hevc_size;
+ subcribe_prop = iris_hfi_gen2_vdec_output_prop_hevc;
+ subscribe_prop_size = ARRAY_SIZE(iris_hfi_gen2_vdec_output_prop_hevc);
break;
case V4L2_PIX_FMT_VP9:
- subcribe_prop = core->iris_platform_data->dec_output_prop_vp9;
- subscribe_prop_size =
- core->iris_platform_data->dec_output_prop_vp9_size;
+ subcribe_prop = iris_hfi_gen2_vdec_output_prop_vp9;
+ subscribe_prop_size = ARRAY_SIZE(iris_hfi_gen2_vdec_output_prop_vp9);
break;
case V4L2_PIX_FMT_AV1:
- subcribe_prop = core->iris_platform_data->dec_output_prop_av1;
- subscribe_prop_size =
- core->iris_platform_data->dec_output_prop_av1_size;
+ subcribe_prop = iris_hfi_gen2_vdec_output_prop_av1;
+ subscribe_prop_size = ARRAY_SIZE(iris_hfi_gen2_vdec_output_prop_av1);
break;
+ default:
+ return -EINVAL;
}
}
diff --git a/drivers/media/platform/qcom/iris/iris_platform_common.h b/drivers/media/platform/qcom/iris/iris_platform_common.h
index 00e40590d5ec..f5eb17ae072c 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_common.h
+++ b/drivers/media/platform/qcom/iris/iris_platform_common.h
@@ -243,16 +243,6 @@ struct iris_platform_data {
u32 max_core_mbpf;
/* max number of macroblocks per second supported */
u32 max_core_mbps;
- const u32 *dec_input_prop;
- unsigned int dec_input_prop_size;
- const u32 *dec_output_prop_avc;
- unsigned int dec_output_prop_avc_size;
- const u32 *dec_output_prop_hevc;
- unsigned int dec_output_prop_hevc_size;
- const u32 *dec_output_prop_vp9;
- unsigned int dec_output_prop_vp9_size;
- const u32 *dec_output_prop_av1;
- unsigned int dec_output_prop_av1_size;
const u32 *dec_ip_int_buf_tbl;
unsigned int dec_ip_int_buf_tbl_size;
const u32 *dec_op_int_buf_tbl;
diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen2.c b/drivers/media/platform/qcom/iris/iris_platform_gen2.c
index 5b157697d478..ef70472ecde5 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_gen2.c
+++ b/drivers/media/platform/qcom/iris/iris_platform_gen2.c
@@ -794,29 +794,6 @@ static const struct tz_cp_config tz_cp_config_sm8550[] = {
},
};
-static const u32 sm8550_vdec_subscribe_input_properties[] = {
- HFI_PROP_NO_OUTPUT,
-};
-
-static const u32 sm8550_vdec_subscribe_output_properties_avc[] = {
- HFI_PROP_PICTURE_TYPE,
- HFI_PROP_CABAC_SESSION,
-};
-
-static const u32 sm8550_vdec_subscribe_output_properties_hevc[] = {
- HFI_PROP_PICTURE_TYPE,
-};
-
-static const u32 sm8550_vdec_subscribe_output_properties_vp9[] = {
- HFI_PROP_PICTURE_TYPE,
-};
-
-static const u32 sm8550_vdec_subscribe_output_properties_av1[] = {
- HFI_PROP_PICTURE_TYPE,
- HFI_PROP_WORST_COMPRESSION_RATIO,
- HFI_PROP_WORST_COMPLEXITY_FACTOR,
-};
-
static const u32 sm8550_dec_ip_int_buf_tbl[] = {
BUF_BIN,
BUF_COMV,
@@ -880,21 +857,6 @@ const struct iris_platform_data sm8550_data = {
.max_core_mbpf = NUM_MBS_8K * 2,
.max_core_mbps = ((7680 * 4320) / 256) * 60,
- .dec_input_prop = sm8550_vdec_subscribe_input_properties,
- .dec_input_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_input_properties),
- .dec_output_prop_avc = sm8550_vdec_subscribe_output_properties_avc,
- .dec_output_prop_avc_size =
- ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_avc),
- .dec_output_prop_hevc = sm8550_vdec_subscribe_output_properties_hevc,
- .dec_output_prop_hevc_size =
- ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_hevc),
- .dec_output_prop_vp9 = sm8550_vdec_subscribe_output_properties_vp9,
- .dec_output_prop_vp9_size =
- ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_vp9),
- .dec_output_prop_av1 = sm8550_vdec_subscribe_output_properties_av1,
- .dec_output_prop_av1_size =
- ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_av1),
-
.dec_ip_int_buf_tbl = sm8550_dec_ip_int_buf_tbl,
.dec_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_ip_int_buf_tbl),
.dec_op_int_buf_tbl = sm8550_dec_op_int_buf_tbl,
@@ -954,21 +916,6 @@ const struct iris_platform_data sm8650_data = {
.max_core_mbpf = NUM_MBS_8K * 2,
.max_core_mbps = ((7680 * 4320) / 256) * 60,
- .dec_input_prop = sm8550_vdec_subscribe_input_properties,
- .dec_input_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_input_properties),
- .dec_output_prop_avc = sm8550_vdec_subscribe_output_properties_avc,
- .dec_output_prop_avc_size =
- ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_avc),
- .dec_output_prop_hevc = sm8550_vdec_subscribe_output_properties_hevc,
- .dec_output_prop_hevc_size =
- ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_hevc),
- .dec_output_prop_vp9 = sm8550_vdec_subscribe_output_properties_vp9,
- .dec_output_prop_vp9_size =
- ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_vp9),
- .dec_output_prop_av1 = sm8550_vdec_subscribe_output_properties_av1,
- .dec_output_prop_av1_size =
- ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_av1),
-
.dec_ip_int_buf_tbl = sm8550_dec_ip_int_buf_tbl,
.dec_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_ip_int_buf_tbl),
.dec_op_int_buf_tbl = sm8550_dec_op_int_buf_tbl,
@@ -1019,21 +966,6 @@ const struct iris_platform_data sm8750_data = {
.max_core_mbpf = NUM_MBS_8K * 2,
.max_core_mbps = ((7680 * 4320) / 256) * 60,
- .dec_input_prop = sm8550_vdec_subscribe_input_properties,
- .dec_input_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_input_properties),
- .dec_output_prop_avc = sm8550_vdec_subscribe_output_properties_avc,
- .dec_output_prop_avc_size =
- ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_avc),
- .dec_output_prop_hevc = sm8550_vdec_subscribe_output_properties_hevc,
- .dec_output_prop_hevc_size =
- ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_hevc),
- .dec_output_prop_vp9 = sm8550_vdec_subscribe_output_properties_vp9,
- .dec_output_prop_vp9_size =
- ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_vp9),
- .dec_output_prop_av1 = sm8550_vdec_subscribe_output_properties_av1,
- .dec_output_prop_av1_size =
- ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_av1),
-
.dec_ip_int_buf_tbl = sm8550_dec_ip_int_buf_tbl,
.dec_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_ip_int_buf_tbl),
.dec_op_int_buf_tbl = sm8550_dec_op_int_buf_tbl,
@@ -1088,21 +1020,6 @@ const struct iris_platform_data qcs8300_data = {
.max_core_mbpf = ((4096 * 2176) / 256) * 4,
.max_core_mbps = (((3840 * 2176) / 256) * 120),
- .dec_input_prop = sm8550_vdec_subscribe_input_properties,
- .dec_input_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_input_properties),
- .dec_output_prop_avc = sm8550_vdec_subscribe_output_properties_avc,
- .dec_output_prop_avc_size =
- ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_avc),
- .dec_output_prop_hevc = sm8550_vdec_subscribe_output_properties_hevc,
- .dec_output_prop_hevc_size =
- ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_hevc),
- .dec_output_prop_vp9 = sm8550_vdec_subscribe_output_properties_vp9,
- .dec_output_prop_vp9_size =
- ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_vp9),
- .dec_output_prop_av1 = sm8550_vdec_subscribe_output_properties_av1,
- .dec_output_prop_av1_size =
- ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_av1),
-
.dec_ip_int_buf_tbl = sm8550_dec_ip_int_buf_tbl,
.dec_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_ip_int_buf_tbl),
.dec_op_int_buf_tbl = sm8550_dec_op_int_buf_tbl,
--
2.47.3