]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
media: qcom: venus: add codec blacklist mechanism
authorErikas Bitovtas <xerikasxx@gmail.com>
Tue, 26 May 2026 13:24:27 +0000 (16:24 +0300)
committerBryan O'Donoghue <bod@kernel.org>
Sat, 30 May 2026 07:41:48 +0000 (08:41 +0100)
Add decode and encode blacklist properties to allow disabling different
codecs per Venus device, instead of doing it per HFI version.

Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Erikas Bitovtas <xerikasxx@gmail.com>
Signed-off-by: Bryan O'Donoghue <bod@kernel.org>
drivers/media/platform/qcom/venus/core.c
drivers/media/platform/qcom/venus/core.h
drivers/media/platform/qcom/venus/hfi_parser.c

index a87e8afb23dfb036738483a312c51c2e3fd05c6b..bd88e2b484a53e5682fc95b78b851c76cd289588 100644 (file)
@@ -18,6 +18,7 @@
 #include <linux/types.h>
 #include <linux/pm_domain.h>
 #include <linux/pm_runtime.h>
+#include <linux/videodev2.h>
 #include <media/videobuf2-v4l2.h>
 #include <media/v4l2-ctrls.h>
 #include <media/v4l2-mem2mem.h>
@@ -178,6 +179,8 @@ static void venus_sys_error_handler(struct work_struct *work)
 static u32 to_v4l2_codec_type(u32 codec)
 {
        switch (codec) {
+       case HFI_VIDEO_CODEC_HEVC:
+               return V4L2_PIX_FMT_HEVC;
        case HFI_VIDEO_CODEC_H264:
                return V4L2_PIX_FMT_H264;
        case HFI_VIDEO_CODEC_H263:
@@ -684,6 +687,8 @@ static const struct venus_resources msm8916_res = {
        .vmem_addr = 0,
        .dma_mask = 0xddc00000 - 1,
        .fwname = "qcom/venus-1.8/venus.mbn",
+       .dec_codec_blacklist = HFI_VIDEO_CODEC_HEVC | HFI_VIDEO_CODEC_SPARK,
+       .enc_codec_blacklist = HFI_VIDEO_CODEC_HEVC,
        .dec_nodename = "video-decoder",
        .enc_nodename = "video-encoder",
 };
index c1603eebd7574538215e37d3265d6f7825f450db..46705a6667762e8975e32947b4cb3355e20754d0 100644 (file)
@@ -88,6 +88,8 @@ struct venus_resources {
        const char **opp_pmdomain;
        unsigned int opp_pmdomain_num;
        unsigned int vcodec_num;
+       const u32 dec_codec_blacklist;
+       const u32 enc_codec_blacklist;
        const char * const resets[VIDC_RESETS_NUM_MAX];
        unsigned int resets_num;
        enum hfi_version hfi_version;
index c4cf6cd50a9a03dacc1e8d4d43e780cd9fb200fb..b1657443f23f6d043e3868fe9d8a81e7aa153ac5 100644 (file)
@@ -206,11 +206,11 @@ static int parse_codecs(struct venus_core *core, void *data)
        core->dec_codecs = codecs->dec_codecs;
        core->enc_codecs = codecs->enc_codecs;
 
-       if (IS_V1(core)) {
-               core->dec_codecs &= ~HFI_VIDEO_CODEC_HEVC;
-               core->dec_codecs &= ~HFI_VIDEO_CODEC_SPARK;
-               core->enc_codecs &= ~HFI_VIDEO_CODEC_HEVC;
-       }
+       if (core->res->dec_codec_blacklist)
+               core->dec_codecs &= ~core->res->dec_codec_blacklist;
+
+       if (core->res->enc_codec_blacklist)
+               core->enc_codecs &= ~core->res->enc_codec_blacklist;
 
        return sizeof(*codecs);
 }