On Wed Dec 10 10:59:06 2025 -0800, Deepa Guthyappa Madivalara wrote:
> Extend iris decoder driver to support format V4L2_PIX_FMT_AV1.
> This change updates the format enumeration (VIDIOC_ENUM_FMT)
> and allows setting AV1 format via VIDIOC_S_FMT for gen2 and beyond.
> Gen1 iris hardware decoder does not support AV1 format.
> 
> Reviewed-by: Bryan O'Donoghue <[email protected]>
> Reviewed-by: Dikshita Agarwal <[email protected]>
> Signed-off-by: Deepa Guthyappa Madivalara <[email protected]>
> Tested-by: Val Packett <[email protected]>
> Signed-off-by: Bryan O'Donoghue <[email protected]>
> Signed-off-by: Hans Verkuil <[email protected]>

Patch committed.

Thanks,
Hans Verkuil

 .../platform/qcom/iris/iris_hfi_gen2_defines.h     |  1 +
 drivers/media/platform/qcom/iris/iris_instance.h   |  1 +
 .../platform/qcom/iris/iris_platform_common.h      |  2 ++
 .../media/platform/qcom/iris/iris_platform_gen1.c  | 22 ++++++++++++++++-
 .../media/platform/qcom/iris/iris_platform_gen2.c  | 28 +++++++++++++++++++++-
 drivers/media/platform/qcom/iris/iris_vdec.c       | 23 ++++--------------
 6 files changed, 56 insertions(+), 21 deletions(-)

---

diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h 
b/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h
index 1b6a4dbac828..3d56f257bc56 100644
--- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h
+++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h
@@ -139,6 +139,7 @@ enum hfi_codec_type {
        HFI_CODEC_DECODE_HEVC                   = 3,
        HFI_CODEC_ENCODE_HEVC                   = 4,
        HFI_CODEC_DECODE_VP9                    = 5,
+       HFI_CODEC_DECODE_AV1                    = 7,
 };
 
 enum hfi_picture_type {
diff --git a/drivers/media/platform/qcom/iris/iris_instance.h 
b/drivers/media/platform/qcom/iris/iris_instance.h
index 62fbb30691ff..7e4f5f1dd892 100644
--- a/drivers/media/platform/qcom/iris/iris_instance.h
+++ b/drivers/media/platform/qcom/iris/iris_instance.h
@@ -19,6 +19,7 @@ enum iris_fmt_type_out {
        IRIS_FMT_H264,
        IRIS_FMT_HEVC,
        IRIS_FMT_VP9,
+       IRIS_FMT_AV1,
 };
 
 enum iris_fmt_type_cap {
diff --git a/drivers/media/platform/qcom/iris/iris_platform_common.h 
b/drivers/media/platform/qcom/iris/iris_platform_common.h
index 8d8cdb56a3c7..6e8e762bd5cf 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_common.h
+++ b/drivers/media/platform/qcom/iris/iris_platform_common.h
@@ -217,6 +217,8 @@ struct iris_platform_data {
        u64 dma_mask;
        const char *fwname;
        u32 pas_id;
+       struct iris_fmt *inst_iris_fmts;
+       u32 inst_iris_fmts_size;
        struct platform_inst_caps *inst_caps;
        const struct platform_inst_fw_cap *inst_fw_caps_dec;
        u32 inst_fw_caps_dec_size;
diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen1.c 
b/drivers/media/platform/qcom/iris/iris_platform_gen1.c
index 34cbeb8f52e2..712515b0f329 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_gen1.c
+++ b/drivers/media/platform/qcom/iris/iris_platform_gen1.c
@@ -11,6 +11,7 @@
 #include "iris_hfi_gen1_defines.h"
 #include "iris_vpu_buffer.h"
 #include "iris_vpu_common.h"
+#include "iris_instance.h"
 
 #include "iris_platform_sc7280.h"
 
@@ -19,7 +20,22 @@
 #define BITRATE_PEAK_DEFAULT   (BITRATE_DEFAULT * 2)
 #define BITRATE_STEP           100
 
-static const struct platform_inst_fw_cap inst_fw_cap_sm8250_dec[] = {
+static struct iris_fmt platform_fmts_sm8250_dec[] = {
+       [IRIS_FMT_H264] = {
+               .pixfmt = V4L2_PIX_FMT_H264,
+               .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
+       },
+       [IRIS_FMT_HEVC] = {
+               .pixfmt = V4L2_PIX_FMT_HEVC,
+               .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
+       },
+       [IRIS_FMT_VP9] = {
+               .pixfmt = V4L2_PIX_FMT_VP9,
+               .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
+       },
+};
+
+static struct platform_inst_fw_cap inst_fw_cap_sm8250_dec[] = {
        {
                .cap_id = PIPE,
                /* .max, .min and .value are set via platform data */
@@ -337,6 +353,8 @@ const struct iris_platform_data sm8250_data = {
        .dma_mask = 0xe0000000 - 1,
        .fwname = "qcom/vpu-1.0/venus.mbn",
        .pas_id = IRIS_PAS_ID,
+       .inst_iris_fmts = platform_fmts_sm8250_dec,
+       .inst_iris_fmts_size = ARRAY_SIZE(platform_fmts_sm8250_dec),
        .inst_caps = &platform_inst_cap_sm8250,
        .inst_fw_caps_dec = inst_fw_cap_sm8250_dec,
        .inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_sm8250_dec),
@@ -386,6 +404,8 @@ const struct iris_platform_data sc7280_data = {
        .dma_mask = 0xe0000000 - 1,
        .fwname = "qcom/vpu/vpu20_p1.mbn",
        .pas_id = IRIS_PAS_ID,
+       .inst_iris_fmts = platform_fmts_sm8250_dec,
+       .inst_iris_fmts_size = ARRAY_SIZE(platform_fmts_sm8250_dec),
        .inst_caps = &platform_inst_cap_sm8250,
        .inst_fw_caps_dec = inst_fw_cap_sm8250_dec,
        .inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_sm8250_dec),
diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen2.c 
b/drivers/media/platform/qcom/iris/iris_platform_gen2.c
index c1989240c248..010f6b804e0a 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_gen2.c
+++ b/drivers/media/platform/qcom/iris/iris_platform_gen2.c
@@ -19,6 +19,25 @@
 #define VIDEO_ARCH_LX 1
 #define BITRATE_MAX                            245000000
 
+static struct iris_fmt platform_fmts_sm8550_dec[] = {
+       [IRIS_FMT_H264] = {
+               .pixfmt = V4L2_PIX_FMT_H264,
+               .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
+       },
+       [IRIS_FMT_HEVC] = {
+               .pixfmt = V4L2_PIX_FMT_HEVC,
+               .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
+       },
+       [IRIS_FMT_VP9] = {
+               .pixfmt = V4L2_PIX_FMT_VP9,
+               .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
+       },
+       [IRIS_FMT_AV1] = {
+               .pixfmt = V4L2_PIX_FMT_AV1,
+               .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
+       },
+};
+
 static const struct platform_inst_fw_cap inst_fw_cap_sm8550_dec[] = {
        {
                .cap_id = PROFILE_H264,
@@ -759,6 +778,8 @@ const struct iris_platform_data sm8550_data = {
        .dma_mask = 0xe0000000 - 1,
        .fwname = "qcom/vpu/vpu30_p4.mbn",
        .pas_id = IRIS_PAS_ID,
+       .inst_iris_fmts = platform_fmts_sm8550_dec,
+       .inst_iris_fmts_size = ARRAY_SIZE(platform_fmts_sm8550_dec),
        .inst_caps = &platform_inst_cap_sm8550,
        .inst_fw_caps_dec = inst_fw_cap_sm8550_dec,
        .inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_sm8550_dec),
@@ -809,7 +830,6 @@ const struct iris_platform_data sm8550_data = {
        .dec_output_prop_vp9 = sm8550_vdec_subscribe_output_properties_vp9,
        .dec_output_prop_vp9_size =
                ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_vp9),
-
        .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,
@@ -851,6 +871,8 @@ const struct iris_platform_data sm8650_data = {
        .dma_mask = 0xe0000000 - 1,
        .fwname = "qcom/vpu/vpu33_p4.mbn",
        .pas_id = IRIS_PAS_ID,
+       .inst_iris_fmts = platform_fmts_sm8550_dec,
+       .inst_iris_fmts_size = ARRAY_SIZE(platform_fmts_sm8550_dec),
        .inst_caps = &platform_inst_cap_sm8550,
        .inst_fw_caps_dec = inst_fw_cap_sm8550_dec,
        .inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_sm8550_dec),
@@ -933,6 +955,8 @@ const struct iris_platform_data sm8750_data = {
        .dma_mask = 0xe0000000 - 1,
        .fwname = "qcom/vpu/vpu35_p4.mbn",
        .pas_id = IRIS_PAS_ID,
+       .inst_iris_fmts = platform_fmts_sm8550_dec,
+       .inst_iris_fmts_size = ARRAY_SIZE(platform_fmts_sm8550_dec),
        .inst_caps = &platform_inst_cap_sm8550,
        .inst_fw_caps_dec = inst_fw_cap_sm8550_dec,
        .inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_sm8550_dec),
@@ -1019,6 +1043,8 @@ const struct iris_platform_data qcs8300_data = {
        .dma_mask = 0xe0000000 - 1,
        .fwname = "qcom/vpu/vpu30_p4_s6.mbn",
        .pas_id = IRIS_PAS_ID,
+       .inst_iris_fmts = platform_fmts_sm8550_dec,
+       .inst_iris_fmts_size = ARRAY_SIZE(platform_fmts_sm8550_dec),
        .inst_caps = &platform_inst_cap_qcs8300,
        .inst_fw_caps_dec = inst_fw_cap_sm8550_dec,
        .inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_sm8550_dec),
diff --git a/drivers/media/platform/qcom/iris/iris_vdec.c 
b/drivers/media/platform/qcom/iris/iris_vdec.c
index 69ffe52590d3..bf7b9c621cb7 100644
--- a/drivers/media/platform/qcom/iris/iris_vdec.c
+++ b/drivers/media/platform/qcom/iris/iris_vdec.c
@@ -67,21 +67,6 @@ void iris_vdec_inst_deinit(struct iris_inst *inst)
        kfree(inst->fmt_src);
 }
 
-static const struct iris_fmt iris_vdec_formats_out[] = {
-       [IRIS_FMT_H264] = {
-               .pixfmt = V4L2_PIX_FMT_H264,
-               .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
-       },
-       [IRIS_FMT_HEVC] = {
-               .pixfmt = V4L2_PIX_FMT_HEVC,
-               .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
-       },
-       [IRIS_FMT_VP9] = {
-               .pixfmt = V4L2_PIX_FMT_VP9,
-               .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
-       },
-};
-
 static const struct iris_fmt iris_vdec_formats_cap[] = {
        [IRIS_FMT_NV12] = {
                .pixfmt = V4L2_PIX_FMT_NV12,
@@ -101,8 +86,8 @@ find_format(struct iris_inst *inst, u32 pixfmt, u32 type)
        unsigned int i;
        switch (type) {
        case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE:
-               fmt = iris_vdec_formats_out;
-               size = ARRAY_SIZE(iris_vdec_formats_out);
+               fmt = inst->core->iris_platform_data->inst_iris_fmts;
+               size = inst->core->iris_platform_data->inst_iris_fmts_size;
                break;
        case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
                fmt = iris_vdec_formats_cap;
@@ -131,8 +116,8 @@ find_format_by_index(struct iris_inst *inst, u32 index, u32 
type)
 
        switch (type) {
        case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE:
-               fmt = iris_vdec_formats_out;
-               size = ARRAY_SIZE(iris_vdec_formats_out);
+               fmt = inst->core->iris_platform_data->inst_iris_fmts;
+               size = inst->core->iris_platform_data->inst_iris_fmts_size;
                break;
        case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
                fmt = iris_vdec_formats_cap;
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to