Skip to content

Commit 0e73700

Browse files
author
Dikshita Agarwal
committed
FROMLIST: media: iris: Set mandatory properties for HEVC and VP9 decoders.
Subscribe and set mandatory properties to the firmware for HEVC and VP9 decoders. Link: https://lore.kernel.org/linux-arm-msm/20250509-video-iris-hevc-vp9-v5-24-59b4ff7d331c@quicinc.com/ Acked-by: Vikash Garodia <quic_vgarodia@quicinc.com> Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8550-QRD Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8550-HDK Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8650-QRD Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8650-HDK Tested-by: Vikash Garodia <quic_vgarodia@quicinc.com> # on sa8775p-ride Signed-off-by: Dikshita Agarwal <quic_dikshita@quicinc.com>
1 parent d5780ea commit 0e73700

File tree

7 files changed

+203
-40
lines changed

7 files changed

+203
-40
lines changed

drivers/media/platform/qcom/iris/iris_hfi_common.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ struct hfi_subscription_params {
140140
u32 color_info;
141141
u32 profile;
142142
u32 level;
143+
u32 tier;
143144
};
144145

145146
u32 iris_hfi_get_v4l2_color_primaries(u32 hfi_primaries);

drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -776,8 +776,8 @@ static int iris_hfi_gen1_session_set_config_params(struct iris_inst *inst, u32 p
776776
iris_hfi_gen1_set_bufsize},
777777
};
778778

779-
config_params = core->iris_platform_data->input_config_params;
780-
config_params_size = core->iris_platform_data->input_config_params_size;
779+
config_params = core->iris_platform_data->input_config_params_default;
780+
config_params_size = core->iris_platform_data->input_config_params_default_size;
781781

782782
if (V4L2_TYPE_IS_OUTPUT(plane)) {
783783
for (i = 0; i < config_params_size; i++) {

drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c

Lines changed: 85 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -391,11 +391,28 @@ static int iris_hfi_gen2_set_linear_stride_scanline(struct iris_inst *inst)
391391
sizeof(u64));
392392
}
393393

394+
static int iris_hfi_gen2_set_tier(struct iris_inst *inst)
395+
{
396+
struct iris_inst_hfi_gen2 *inst_hfi_gen2 = to_iris_inst_hfi_gen2(inst);
397+
u32 port = iris_hfi_gen2_get_port(V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE);
398+
u32 tier = inst->fw_caps[TIER].value;
399+
400+
inst_hfi_gen2->src_subcr_params.tier = tier;
401+
402+
return iris_hfi_gen2_session_set_property(inst,
403+
HFI_PROP_TIER,
404+
HFI_HOST_FLAGS_NONE,
405+
port,
406+
HFI_PAYLOAD_U32_ENUM,
407+
&tier,
408+
sizeof(u32));
409+
}
410+
394411
static int iris_hfi_gen2_session_set_config_params(struct iris_inst *inst, u32 plane)
395412
{
396413
struct iris_core *core = inst->core;
397-
u32 config_params_size, i, j;
398-
const u32 *config_params;
414+
u32 config_params_size = 0, i, j;
415+
const u32 *config_params = NULL;
399416
int ret;
400417

401418
static const struct iris_hfi_prop_type_handle prop_type_handle_arr[] = {
@@ -410,11 +427,27 @@ static int iris_hfi_gen2_session_set_config_params(struct iris_inst *inst, u32 p
410427
{HFI_PROP_LEVEL, iris_hfi_gen2_set_level },
411428
{HFI_PROP_COLOR_FORMAT, iris_hfi_gen2_set_colorformat },
412429
{HFI_PROP_LINEAR_STRIDE_SCANLINE, iris_hfi_gen2_set_linear_stride_scanline },
430+
{HFI_PROP_TIER, iris_hfi_gen2_set_tier },
413431
};
414432

415433
if (V4L2_TYPE_IS_OUTPUT(plane)) {
416-
config_params = core->iris_platform_data->input_config_params;
417-
config_params_size = core->iris_platform_data->input_config_params_size;
434+
switch (inst->codec) {
435+
case V4L2_PIX_FMT_H264:
436+
config_params = core->iris_platform_data->input_config_params_default;
437+
config_params_size =
438+
core->iris_platform_data->input_config_params_default_size;
439+
break;
440+
case V4L2_PIX_FMT_HEVC:
441+
config_params = core->iris_platform_data->input_config_params_hevc;
442+
config_params_size =
443+
core->iris_platform_data->input_config_params_hevc_size;
444+
break;
445+
case V4L2_PIX_FMT_VP9:
446+
config_params = core->iris_platform_data->input_config_params_vp9;
447+
config_params_size =
448+
core->iris_platform_data->input_config_params_vp9_size;
449+
break;
450+
}
418451
} else {
419452
config_params = core->iris_platform_data->output_config_params;
420453
config_params_size = core->iris_platform_data->output_config_params_size;
@@ -584,8 +617,8 @@ static int iris_hfi_gen2_subscribe_change_param(struct iris_inst *inst, u32 plan
584617
struct hfi_subscription_params subsc_params;
585618
u32 prop_type, payload_size, payload_type;
586619
struct iris_core *core = inst->core;
587-
const u32 *change_param;
588-
u32 change_param_size;
620+
const u32 *change_param = NULL;
621+
u32 change_param_size = 0;
589622
u32 payload[32] = {0};
590623
u32 hfi_port = 0, i;
591624
int ret;
@@ -596,8 +629,23 @@ static int iris_hfi_gen2_subscribe_change_param(struct iris_inst *inst, u32 plan
596629
return 0;
597630
}
598631

599-
change_param = core->iris_platform_data->input_config_params;
600-
change_param_size = core->iris_platform_data->input_config_params_size;
632+
switch (inst->codec) {
633+
case V4L2_PIX_FMT_H264:
634+
change_param = core->iris_platform_data->input_config_params_default;
635+
change_param_size =
636+
core->iris_platform_data->input_config_params_default_size;
637+
break;
638+
case V4L2_PIX_FMT_HEVC:
639+
change_param = core->iris_platform_data->input_config_params_hevc;
640+
change_param_size =
641+
core->iris_platform_data->input_config_params_hevc_size;
642+
break;
643+
case V4L2_PIX_FMT_VP9:
644+
change_param = core->iris_platform_data->input_config_params_vp9;
645+
change_param_size =
646+
core->iris_platform_data->input_config_params_vp9_size;
647+
break;
648+
}
601649

602650
payload[0] = HFI_MODE_PORT_SETTINGS_CHANGE;
603651

@@ -644,6 +692,11 @@ static int iris_hfi_gen2_subscribe_change_param(struct iris_inst *inst, u32 plan
644692
payload_size = sizeof(u32);
645693
payload_type = HFI_PAYLOAD_U32;
646694
break;
695+
case HFI_PROP_LUMA_CHROMA_BIT_DEPTH:
696+
payload[0] = subsc_params.bit_depth;
697+
payload_size = sizeof(u32);
698+
payload_type = HFI_PAYLOAD_U32;
699+
break;
647700
case HFI_PROP_BUFFER_FW_MIN_OUTPUT_COUNT:
648701
payload[0] = subsc_params.fw_min_count;
649702
payload_size = sizeof(u32);
@@ -669,6 +722,11 @@ static int iris_hfi_gen2_subscribe_change_param(struct iris_inst *inst, u32 plan
669722
payload_size = sizeof(u32);
670723
payload_type = HFI_PAYLOAD_U32;
671724
break;
725+
case HFI_PROP_TIER:
726+
payload[0] = subsc_params.tier;
727+
payload_size = sizeof(u32);
728+
payload_type = HFI_PAYLOAD_U32;
729+
break;
672730
default:
673731
prop_type = 0;
674732
ret = -EINVAL;
@@ -695,8 +753,8 @@ static int iris_hfi_gen2_subscribe_change_param(struct iris_inst *inst, u32 plan
695753
static int iris_hfi_gen2_subscribe_property(struct iris_inst *inst, u32 plane)
696754
{
697755
struct iris_core *core = inst->core;
698-
u32 subscribe_prop_size, i;
699-
const u32 *subcribe_prop;
756+
u32 subscribe_prop_size = 0, i;
757+
const u32 *subcribe_prop = NULL;
700758
u32 payload[32] = {0};
701759

702760
payload[0] = HFI_MODE_PROPERTY;
@@ -705,8 +763,23 @@ static int iris_hfi_gen2_subscribe_property(struct iris_inst *inst, u32 plane)
705763
subscribe_prop_size = core->iris_platform_data->dec_input_prop_size;
706764
subcribe_prop = core->iris_platform_data->dec_input_prop;
707765
} else {
708-
subscribe_prop_size = core->iris_platform_data->dec_output_prop_size;
709-
subcribe_prop = core->iris_platform_data->dec_output_prop;
766+
switch (inst->codec) {
767+
case V4L2_PIX_FMT_H264:
768+
subcribe_prop = core->iris_platform_data->dec_output_prop_avc;
769+
subscribe_prop_size =
770+
core->iris_platform_data->dec_output_prop_avc_size;
771+
break;
772+
case V4L2_PIX_FMT_HEVC:
773+
subcribe_prop = core->iris_platform_data->dec_output_prop_hevc;
774+
subscribe_prop_size =
775+
core->iris_platform_data->dec_output_prop_hevc_size;
776+
break;
777+
case V4L2_PIX_FMT_VP9:
778+
subcribe_prop = core->iris_platform_data->dec_output_prop_vp9;
779+
subscribe_prop_size =
780+
core->iris_platform_data->dec_output_prop_vp9_size;
781+
break;
782+
}
710783
}
711784

712785
for (i = 0; i < subscribe_prop_size; i++)

drivers/media/platform/qcom/iris/iris_hfi_gen2_response.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,7 @@ static void iris_hfi_gen2_read_input_subcr_params(struct iris_inst *inst)
587587
}
588588

589589
inst->fw_caps[POC].value = subsc_params.pic_order_cnt;
590+
inst->fw_caps[TIER].value = subsc_params.tier;
590591

591592
if (subsc_params.bit_depth != BIT_DEPTH_8 ||
592593
!(subsc_params.coded_frames & HFI_BITMASK_FRAME_MBS_ONLY_FLAG)) {
@@ -668,6 +669,9 @@ static int iris_hfi_gen2_handle_session_property(struct iris_inst *inst,
668669
inst_hfi_gen2->src_subcr_params.crop_offsets[0] = pkt->payload[0];
669670
inst_hfi_gen2->src_subcr_params.crop_offsets[1] = pkt->payload[1];
670671
break;
672+
case HFI_PROP_LUMA_CHROMA_BIT_DEPTH:
673+
inst_hfi_gen2->src_subcr_params.bit_depth = pkt->payload[0];
674+
break;
671675
case HFI_PROP_CODED_FRAMES:
672676
inst_hfi_gen2->src_subcr_params.coded_frames = pkt->payload[0];
673677
break;
@@ -686,6 +690,9 @@ static int iris_hfi_gen2_handle_session_property(struct iris_inst *inst,
686690
case HFI_PROP_LEVEL:
687691
inst_hfi_gen2->src_subcr_params.level = pkt->payload[0];
688692
break;
693+
case HFI_PROP_TIER:
694+
inst_hfi_gen2->src_subcr_params.tier = pkt->payload[0];
695+
break;
689696
case HFI_PROP_PICTURE_TYPE:
690697
inst_hfi_gen2->hfi_frame_info.picture_type = pkt->payload[0];
691698
break;

drivers/media/platform/qcom/iris/iris_platform_common.h

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -179,14 +179,22 @@ struct iris_platform_data {
179179
u32 max_session_count;
180180
/* max number of macroblocks per frame supported */
181181
u32 max_core_mbpf;
182-
const u32 *input_config_params;
183-
unsigned int input_config_params_size;
182+
const u32 *input_config_params_default;
183+
unsigned int input_config_params_default_size;
184+
const u32 *input_config_params_hevc;
185+
unsigned int input_config_params_hevc_size;
186+
const u32 *input_config_params_vp9;
187+
unsigned int input_config_params_vp9_size;
184188
const u32 *output_config_params;
185189
unsigned int output_config_params_size;
186190
const u32 *dec_input_prop;
187191
unsigned int dec_input_prop_size;
188-
const u32 *dec_output_prop;
189-
unsigned int dec_output_prop_size;
192+
const u32 *dec_output_prop_avc;
193+
unsigned int dec_output_prop_avc_size;
194+
const u32 *dec_output_prop_hevc;
195+
unsigned int dec_output_prop_hevc_size;
196+
const u32 *dec_output_prop_vp9;
197+
unsigned int dec_output_prop_vp9_size;
190198
const u32 *dec_ip_int_buf_tbl;
191199
unsigned int dec_ip_int_buf_tbl_size;
192200
const u32 *dec_op_int_buf_tbl;

0 commit comments

Comments
 (0)