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]

Reply via email to