On Fri Jul 31 02:48:26 2026 +0300, Dikshita Agarwal wrote:
> The raw formats supported by Iris were previously advertised
> unconditionally, assuming UBWC support on all platforms. However, some
> platforms do not support UBWC which results in incorrect format
> capability exposure.
>
> Use the UBWC configuration provided by the platform to dynamically
> filter raw formats at runtime. If UBWC is not supported, UBWC-based
> formats are omitted from the advertised capability list, while linear
> formats remain available.
>
> Signed-off-by: Dikshita Agarwal <[email protected]>
> Reviewed-by: Vishnu Reddy <[email protected]>
> Signed-off-by: Dmitry Baryshkov <[email protected]>
> Signed-off-by: Bryan O'Donoghue <[email protected]>
Patch committed.
Thanks,
Bryan O'Donoghue
drivers/media/platform/qcom/iris/iris_vdec.c | 26 ++++++++++++++++++++++----
drivers/media/platform/qcom/iris/iris_venc.c | 25 +++++++++++++++++++++----
2 files changed, 43 insertions(+), 8 deletions(-)
---
diff --git a/drivers/media/platform/qcom/iris/iris_vdec.c
b/drivers/media/platform/qcom/iris/iris_vdec.c
index c4d13ae58336..0dd33ff447bb 100644
--- a/drivers/media/platform/qcom/iris/iris_vdec.c
+++ b/drivers/media/platform/qcom/iris/iris_vdec.c
@@ -3,6 +3,7 @@
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights
reserved.
*/
+#include <linux/soc/qcom/ubwc.h>
#include <media/v4l2-event.h>
#include <media/v4l2-mem2mem.h>
@@ -69,8 +70,14 @@ static const u32 iris_vdec_formats_cap[] = {
V4L2_PIX_FMT_QC10C,
};
+static const u32 iris_vdec_formats_noubwc_cap[] = {
+ V4L2_PIX_FMT_NV12,
+ V4L2_PIX_FMT_P010,
+};
+
static bool check_format(struct iris_inst *inst, u32 pixfmt, u32 type)
{
+ const struct qcom_ubwc_cfg_data *ubwc = inst->core->ubwc_cfg;
unsigned int size, i;
const u32 *fmt;
@@ -80,8 +87,13 @@ static bool check_format(struct iris_inst *inst, u32 pixfmt,
u32 type)
size = inst->core->iris_platform_data->inst_iris_fmts_size;
break;
case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
- fmt = iris_vdec_formats_cap;
- size = ARRAY_SIZE(iris_vdec_formats_cap);
+ if (ubwc->ubwc_enc_version) {
+ fmt = iris_vdec_formats_cap;
+ size = ARRAY_SIZE(iris_vdec_formats_cap);
+ } else {
+ fmt = iris_vdec_formats_noubwc_cap;
+ size = ARRAY_SIZE(iris_vdec_formats_noubwc_cap);
+ }
break;
default:
return false;
@@ -100,6 +112,7 @@ static bool check_format(struct iris_inst *inst, u32
pixfmt, u32 type)
static u32 find_format_by_index(struct iris_inst *inst, u32 index, u32 type)
{
+ const struct qcom_ubwc_cfg_data *ubwc = inst->core->ubwc_cfg;
unsigned int size;
const u32 *fmt;
@@ -109,8 +122,13 @@ static u32 find_format_by_index(struct iris_inst *inst,
u32 index, u32 type)
size = inst->core->iris_platform_data->inst_iris_fmts_size;
break;
case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
- fmt = iris_vdec_formats_cap;
- size = ARRAY_SIZE(iris_vdec_formats_cap);
+ if (ubwc->ubwc_enc_version) {
+ fmt = iris_vdec_formats_cap;
+ size = ARRAY_SIZE(iris_vdec_formats_cap);
+ } else {
+ fmt = iris_vdec_formats_noubwc_cap;
+ size = ARRAY_SIZE(iris_vdec_formats_noubwc_cap);
+ }
break;
default:
return 0;
diff --git a/drivers/media/platform/qcom/iris/iris_venc.c
b/drivers/media/platform/qcom/iris/iris_venc.c
index 16c52ad07e2c..2f2c56bf9122 100644
--- a/drivers/media/platform/qcom/iris/iris_venc.c
+++ b/drivers/media/platform/qcom/iris/iris_venc.c
@@ -3,6 +3,7 @@
* Copyright (c) 2022-2025 Qualcomm Innovation Center, Inc. All rights
reserved.
*/
+#include <linux/soc/qcom/ubwc.h>
#include <media/v4l2-event.h>
#include <media/v4l2-mem2mem.h>
@@ -89,15 +90,25 @@ static const u32 iris_venc_formats_out[] = {
V4L2_PIX_FMT_QC08C,
};
+static const u32 iris_venc_formats_noubwc_out[] = {
+ V4L2_PIX_FMT_NV12,
+};
+
static bool check_format(struct iris_inst *inst, u32 pixfmt, u32 type)
{
+ const struct qcom_ubwc_cfg_data *ubwc = inst->core->ubwc_cfg;
unsigned int size, i;
const u32 *fmt;
switch (type) {
case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE:
- fmt = iris_venc_formats_out;
- size = ARRAY_SIZE(iris_venc_formats_out);
+ if (ubwc->ubwc_enc_version) {
+ fmt = iris_venc_formats_out;
+ size = ARRAY_SIZE(iris_venc_formats_out);
+ } else {
+ fmt = iris_venc_formats_noubwc_out;
+ size = ARRAY_SIZE(iris_venc_formats_noubwc_out);
+ }
break;
case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
fmt = iris_venc_formats_cap;
@@ -117,13 +128,19 @@ static bool check_format(struct iris_inst *inst, u32
pixfmt, u32 type)
static u32 find_format_by_index(struct iris_inst *inst, u32 index, u32 type)
{
+ const struct qcom_ubwc_cfg_data *ubwc = inst->core->ubwc_cfg;
unsigned int size;
const u32 *fmt;
switch (type) {
case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE:
- fmt = iris_venc_formats_out;
- size = ARRAY_SIZE(iris_venc_formats_out);
+ if (ubwc->ubwc_enc_version) {
+ fmt = iris_venc_formats_out;
+ size = ARRAY_SIZE(iris_venc_formats_out);
+ } else {
+ fmt = iris_venc_formats_noubwc_out;
+ size = ARRAY_SIZE(iris_venc_formats_noubwc_out);
+ }
break;
case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
fmt = iris_venc_formats_cap;
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]