summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErikas Bitovtas <xerikasxx@gmail.com>2026-05-26 16:24:27 +0300
committerBryan O'Donoghue <bod@kernel.org>2026-05-30 10:41:48 +0300
commitcc41341d1209169d7928794ae90386c17827cc76 (patch)
treea0efa8412ab4ba4fd150daad209a0270a33d72aa
parent86a366c02ddbee289d0f04c63a3ebd940404cd07 (diff)
downloadlinux-cc41341d1209169d7928794ae90386c17827cc76.tar.xz
media: qcom: venus: add codec blacklist mechanism
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>
-rw-r--r--drivers/media/platform/qcom/venus/core.c5
-rw-r--r--drivers/media/platform/qcom/venus/core.h2
-rw-r--r--drivers/media/platform/qcom/venus/hfi_parser.c10
3 files changed, 12 insertions, 5 deletions
diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platform/qcom/venus/core.c
index a87e8afb23df..bd88e2b484a5 100644
--- a/drivers/media/platform/qcom/venus/core.c
+++ b/drivers/media/platform/qcom/venus/core.c
@@ -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",
};
diff --git a/drivers/media/platform/qcom/venus/core.h b/drivers/media/platform/qcom/venus/core.h
index c1603eebd757..46705a666776 100644
--- a/drivers/media/platform/qcom/venus/core.h
+++ b/drivers/media/platform/qcom/venus/core.h
@@ -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;
diff --git a/drivers/media/platform/qcom/venus/hfi_parser.c b/drivers/media/platform/qcom/venus/hfi_parser.c
index c4cf6cd50a9a..b1657443f23f 100644
--- a/drivers/media/platform/qcom/venus/hfi_parser.c
+++ b/drivers/media/platform/qcom/venus/hfi_parser.c
@@ -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);
}