[PATCH 04/11] media: qcom: iris: simplify HFI params handling
From: Dmitry Baryshkov
Date: Sat Feb 28 2026 - 03:29:22 EST
Instead of looping over two tables to select the static order of
functions, call necessary functsions directly in the correct order.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
---
.../platform/qcom/iris/iris_hfi_gen1_command.c | 116 ++++-----------
.../platform/qcom/iris/iris_hfi_gen2_command.c | 164 +++++++++++----------
2 files changed, 110 insertions(+), 170 deletions(-)
diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c b/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c
index d5eaf8763f6d..b7aafda1d99e 100644
--- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c
+++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c
@@ -978,107 +978,41 @@ static int iris_hfi_gen1_set_stride(struct iris_inst *inst, u32 plane)
return hfi_gen1_set_property(inst, ptype, &plane_actual_info, sizeof(plane_actual_info));
}
-static const u32 iris_hfi_gen1_vdec_input_config_param[] = {
- HFI_PROPERTY_CONFIG_VIDEOCORES_USAGE,
- HFI_PROPERTY_PARAM_UNCOMPRESSED_FORMAT_SELECT,
- HFI_PROPERTY_PARAM_UNCOMPRESSED_PLANE_ACTUAL_CONSTRAINTS_INFO,
- HFI_PROPERTY_PARAM_BUFFER_COUNT_ACTUAL,
- HFI_PROPERTY_PARAM_VDEC_MULTI_STREAM,
- HFI_PROPERTY_PARAM_FRAME_SIZE,
- HFI_PROPERTY_PARAM_BUFFER_SIZE_ACTUAL,
- HFI_PROPERTY_PARAM_BUFFER_ALLOC_MODE,
-};
-
-static const u32 iris_hfi_gen1_venc_input_config_param[] = {
- HFI_PROPERTY_CONFIG_FRAME_RATE,
- HFI_PROPERTY_PARAM_UNCOMPRESSED_PLANE_ACTUAL_INFO,
- HFI_PROPERTY_PARAM_FRAME_SIZE,
- HFI_PROPERTY_PARAM_UNCOMPRESSED_FORMAT_SELECT,
- HFI_PROPERTY_PARAM_BUFFER_COUNT_ACTUAL,
-};
-
static int iris_hfi_gen1_session_set_config_params(struct iris_inst *inst, u32 plane)
{
- struct iris_hfi_prop_type_handle const *handler = NULL;
- u32 handler_size = 0;
- u32 config_params_size, i, j;
- const u32 *config_params;
int ret;
- static const struct iris_hfi_prop_type_handle vdec_prop_type_handle_inp_arr[] = {
- {HFI_PROPERTY_PARAM_FRAME_SIZE,
- iris_hfi_gen1_set_resolution},
- {HFI_PROPERTY_CONFIG_VIDEOCORES_USAGE,
- iris_hfi_gen1_decide_core},
- {HFI_PROPERTY_PARAM_UNCOMPRESSED_FORMAT_SELECT,
- iris_hfi_gen1_set_raw_format},
- {HFI_PROPERTY_PARAM_UNCOMPRESSED_PLANE_ACTUAL_CONSTRAINTS_INFO,
- iris_hfi_gen1_set_format_constraints},
- {HFI_PROPERTY_PARAM_BUFFER_COUNT_ACTUAL,
- iris_hfi_gen1_set_num_bufs},
- {HFI_PROPERTY_PARAM_VDEC_MULTI_STREAM,
- iris_hfi_gen1_set_multistream},
- {HFI_PROPERTY_PARAM_BUFFER_SIZE_ACTUAL,
- iris_hfi_gen1_set_bufsize},
- };
-
- static const struct iris_hfi_prop_type_handle vdec_prop_type_handle_out_arr[] = {
- {HFI_PROPERTY_PARAM_FRAME_SIZE,
- iris_hfi_gen1_set_resolution},
- {HFI_PROPERTY_PARAM_UNCOMPRESSED_FORMAT_SELECT,
- iris_hfi_gen1_set_raw_format},
- {HFI_PROPERTY_PARAM_UNCOMPRESSED_PLANE_ACTUAL_CONSTRAINTS_INFO,
- iris_hfi_gen1_set_format_constraints},
- {HFI_PROPERTY_PARAM_BUFFER_COUNT_ACTUAL,
- iris_hfi_gen1_set_num_bufs},
- {HFI_PROPERTY_PARAM_VDEC_MULTI_STREAM,
- iris_hfi_gen1_set_multistream},
- {HFI_PROPERTY_PARAM_BUFFER_SIZE_ACTUAL,
- iris_hfi_gen1_set_bufsize},
- };
-
- static const struct iris_hfi_prop_type_handle venc_prop_type_handle_inp_arr[] = {
- {HFI_PROPERTY_CONFIG_FRAME_RATE,
- iris_hfi_gen1_set_frame_rate},
- {HFI_PROPERTY_PARAM_UNCOMPRESSED_PLANE_ACTUAL_INFO,
- iris_hfi_gen1_set_stride},
- {HFI_PROPERTY_PARAM_FRAME_SIZE,
- iris_hfi_gen1_set_resolution},
- {HFI_PROPERTY_PARAM_UNCOMPRESSED_FORMAT_SELECT,
- iris_hfi_gen1_set_raw_format},
- {HFI_PROPERTY_PARAM_BUFFER_COUNT_ACTUAL,
- iris_hfi_gen1_set_num_bufs},
- };
-
if (inst->domain == DECODER) {
- config_params = iris_hfi_gen1_vdec_input_config_param;
- config_params_size = ARRAY_SIZE(iris_hfi_gen1_vdec_input_config_param);
if (V4L2_TYPE_IS_OUTPUT(plane)) {
- handler = vdec_prop_type_handle_inp_arr;
- handler_size = ARRAY_SIZE(vdec_prop_type_handle_inp_arr);
- } else if (V4L2_TYPE_IS_CAPTURE(plane)) {
- handler = vdec_prop_type_handle_out_arr;
- handler_size = ARRAY_SIZE(vdec_prop_type_handle_out_arr);
+ ret = iris_hfi_gen1_decide_core(inst, plane);
+ if (ret)
+ return ret;
}
- } else {
- config_params = iris_hfi_gen1_venc_input_config_param;
- config_params_size = ARRAY_SIZE(iris_hfi_gen1_venc_input_config_param);
- handler = venc_prop_type_handle_inp_arr;
- handler_size = ARRAY_SIZE(venc_prop_type_handle_inp_arr);
- }
- for (i = 0; i < config_params_size; i++) {
- for (j = 0; j < handler_size; j++) {
- if (handler[j].type == config_params[i]) {
- ret = handler[j].handle(inst, plane);
- if (ret)
- return ret;
- break;
- }
- }
+ ret = iris_hfi_gen1_set_raw_format(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen1_set_format_constraints(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen1_set_num_bufs(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen1_set_multistream(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen1_set_resolution(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen1_set_bufsize(inst, plane);
+ } else {
+ ret = iris_hfi_gen1_set_frame_rate(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen1_set_stride(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen1_set_resolution(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen1_set_raw_format(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen1_set_num_bufs(inst, plane);
}
- return 0;
+ return ret;
}
static const struct iris_hfi_command_ops iris_hfi_gen1_command_ops = {
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 de43d90b5a2d..28f352d99bf0 100644
--- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
+++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
@@ -644,103 +644,109 @@ static const u32 iris_hfi_gen2_vdec_input_config_params_av1[] = {
HFI_PROP_SIGNAL_COLOR_INFO,
};
-static const u32 iris_hfi_gen2_venc_input_config_params[] = {
- HFI_PROP_COLOR_FORMAT,
- HFI_PROP_RAW_RESOLUTION,
- HFI_PROP_CROP_OFFSETS,
- HFI_PROP_LINEAR_STRIDE_SCANLINE,
- HFI_PROP_SIGNAL_COLOR_INFO,
-};
-
-static const u32 iris_hfi_gen2_vdec_output_config_params[] = {
- HFI_PROP_OPB_ENABLE,
- HFI_PROP_COLOR_FORMAT,
- HFI_PROP_LINEAR_STRIDE_SCANLINE,
-};
-
-static const u32 iris_hfi_gen2_venc_output_config_params[] = {
- HFI_PROP_BITSTREAM_RESOLUTION,
- HFI_PROP_CROP_OFFSETS,
- HFI_PROP_FRAME_RATE,
-};
-
static int iris_hfi_gen2_session_set_config_params(struct iris_inst *inst, u32 plane)
{
- u32 config_params_size = 0, i, j;
- const u32 *config_params = NULL;
int ret;
- static const struct iris_hfi_prop_type_handle prop_type_handle_arr[] = {
- {HFI_PROP_RAW_RESOLUTION, iris_hfi_gen2_set_raw_resolution },
- {HFI_PROP_BITSTREAM_RESOLUTION, iris_hfi_gen2_set_bitstream_resolution },
- {HFI_PROP_CROP_OFFSETS, iris_hfi_gen2_set_crop_offsets },
- {HFI_PROP_CODED_FRAMES, iris_hfi_gen2_set_coded_frames },
- {HFI_PROP_LUMA_CHROMA_BIT_DEPTH, iris_hfi_gen2_set_bit_depth },
- {HFI_PROP_BUFFER_FW_MIN_OUTPUT_COUNT, iris_hfi_gen2_set_min_output_count },
- {HFI_PROP_PIC_ORDER_CNT_TYPE, iris_hfi_gen2_set_picture_order_count },
- {HFI_PROP_SIGNAL_COLOR_INFO, iris_hfi_gen2_set_colorspace },
- {HFI_PROP_PROFILE, iris_hfi_gen2_set_profile },
- {HFI_PROP_LEVEL, iris_hfi_gen2_set_level },
- {HFI_PROP_OPB_ENABLE, iris_hfi_gen2_set_opb_enable },
- {HFI_PROP_COLOR_FORMAT, iris_hfi_gen2_set_colorformat },
- {HFI_PROP_LINEAR_STRIDE_SCANLINE, iris_hfi_gen2_set_linear_stride_scanline },
- {HFI_PROP_TIER, iris_hfi_gen2_set_tier },
- {HFI_PROP_FRAME_RATE, iris_hfi_gen2_set_frame_rate },
- {HFI_PROP_AV1_FILM_GRAIN_PRESENT, iris_hfi_gen2_set_film_grain },
- {HFI_PROP_AV1_SUPER_BLOCK_ENABLED, iris_hfi_gen2_set_super_block },
- {HFI_PROP_OPB_ENABLE, iris_hfi_gen2_set_opb_enable },
- };
-
if (inst->domain == DECODER) {
if (V4L2_TYPE_IS_OUTPUT(plane)) {
if (inst->codec == V4L2_PIX_FMT_H264) {
- config_params = iris_hfi_gen2_vdec_input_config_params_avc;
- config_params_size =
- ARRAY_SIZE(iris_hfi_gen2_vdec_input_config_params_avc);
+ ret = iris_hfi_gen2_set_bitstream_resolution(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_crop_offsets(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_bit_depth(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_coded_frames(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_min_output_count(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_picture_order_count(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_profile(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_level(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_colorspace(inst, plane);
} else if (inst->codec == V4L2_PIX_FMT_HEVC) {
- config_params = iris_hfi_gen2_vdec_input_config_params_hevc;
- config_params_size =
- ARRAY_SIZE(iris_hfi_gen2_vdec_input_config_params_hevc);
+ ret = iris_hfi_gen2_set_bitstream_resolution(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_crop_offsets(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_bit_depth(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_min_output_count(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_profile(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_level(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_tier(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_colorspace(inst, plane);
} else if (inst->codec == V4L2_PIX_FMT_VP9) {
- config_params = iris_hfi_gen2_vdec_input_config_params_vp9;
- config_params_size =
- ARRAY_SIZE(iris_hfi_gen2_vdec_input_config_params_vp9);
+ ret = iris_hfi_gen2_set_bitstream_resolution(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_crop_offsets(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_bit_depth(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_min_output_count(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_profile(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_level(inst, plane);
} else if (inst->codec == V4L2_PIX_FMT_AV1) {
- config_params = iris_hfi_gen2_vdec_input_config_params_av1;
- config_params_size =
- ARRAY_SIZE(iris_hfi_gen2_vdec_input_config_params_av1);
+ ret = iris_hfi_gen2_set_bitstream_resolution(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_crop_offsets(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_bit_depth(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_min_output_count(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_profile(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_level(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_tier(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_film_grain(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_super_block(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_colorspace(inst, plane);
} else {
- return -EINVAL;
+ ret = -EINVAL;
}
} else {
- config_params = iris_hfi_gen2_vdec_output_config_params;
- config_params_size = ARRAY_SIZE(iris_hfi_gen2_vdec_output_config_params);
+ ret = iris_hfi_gen2_set_opb_enable(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_colorformat(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_linear_stride_scanline(inst, plane);
}
} else {
if (V4L2_TYPE_IS_OUTPUT(plane)) {
- config_params = iris_hfi_gen2_venc_input_config_params;
- config_params_size = ARRAY_SIZE(iris_hfi_gen2_venc_input_config_params);
+ ret = iris_hfi_gen2_set_colorformat(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_raw_resolution(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_crop_offsets(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_linear_stride_scanline(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_colorspace(inst, plane);
} else {
- config_params = iris_hfi_gen2_venc_output_config_params;
- config_params_size = ARRAY_SIZE(iris_hfi_gen2_venc_output_config_params);
+ ret = iris_hfi_gen2_set_bitstream_resolution(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_crop_offsets(inst, plane);
+ if (!ret)
+ ret = iris_hfi_gen2_set_frame_rate(inst, plane);
}
}
- if (!config_params || !config_params_size)
- return -EINVAL;
-
- for (i = 0; i < config_params_size; i++) {
- for (j = 0; j < ARRAY_SIZE(prop_type_handle_arr); j++) {
- if (prop_type_handle_arr[j].type == config_params[i]) {
- ret = prop_type_handle_arr[j].handle(inst, plane);
- if (ret)
- return ret;
- break;
- }
- }
- }
-
- return 0;
+ return ret;
}
static int iris_hfi_gen2_session_set_codec(struct iris_inst *inst)
@@ -917,8 +923,8 @@ static int iris_hfi_gen2_subscribe_change_param(struct iris_inst *inst, u32 plan
switch (inst->codec) {
case V4L2_PIX_FMT_H264:
- change_param = iris_hfi_gen2_vdec_input_config_params_h264;
- change_param_size = ARRAY_SIZE(iris_hfi_gen2_vdec_input_config_params_h264);
+ change_param = iris_hfi_gen2_vdec_input_config_params_avc;
+ change_param_size = ARRAY_SIZE(iris_hfi_gen2_vdec_input_config_params_avc);
break;
case V4L2_PIX_FMT_HEVC:
change_param = iris_hfi_gen2_vdec_input_config_params_hevc;
--
2.47.3