On Fri May 9 14:08:59 2025 +0530, Dikshita Agarwal wrote:
> When the resolution changes, the driver internally updates the width and
> height, but the client continue to queue buffers with the older
> resolution until the last flag is received. This results in a mismatch
> when the buffers are prepared, causing failure due to outdated size.
> 
> Introduce a check to prevent size validation during buffer preparation
> if a resolution reconfiguration is in progress, to handle this.
> 
> Cc: sta...@vger.kernel.org
> Fixes: 17f2a485ca67 ("media: iris: implement vb2 ops for buf_queue and 
> firmware response")
> Reviewed-by: Vikash Garodia <quic_vgaro...@quicinc.com>
> Tested-by: Neil Armstrong <neil.armstr...@linaro.org> # on SM8550-QRD
> Tested-by: Neil Armstrong <neil.armstr...@linaro.org> # on SM8550-HDK
> Tested-by: Neil Armstrong <neil.armstr...@linaro.org> # on SM8650-QRD
> Tested-by: Neil Armstrong <neil.armstr...@linaro.org> # on SM8650-HDK
> Signed-off-by: Dikshita Agarwal <quic_diksh...@quicinc.com>
> Tested-by: Vikash Garodia <quic_vgaro...@quicinc.com> # on sa8775p-ride
> Signed-off-by: Bryan O'Donoghue <b...@kernel.org>
> Signed-off-by: Hans Verkuil <hverk...@xs4all.nl>

Patch committed.

Thanks,
Hans Verkuil

 drivers/media/platform/qcom/iris/iris_vb2.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

---

diff --git a/drivers/media/platform/qcom/iris/iris_vb2.c 
b/drivers/media/platform/qcom/iris/iris_vb2.c
index cdf11feb590b..b3bde10eb6d2 100644
--- a/drivers/media/platform/qcom/iris/iris_vb2.c
+++ b/drivers/media/platform/qcom/iris/iris_vb2.c
@@ -259,13 +259,14 @@ int iris_vb2_buf_prepare(struct vb2_buffer *vb)
                        return -EINVAL;
        }
 
-       if (vb->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE &&
-           vb2_plane_size(vb, 0) < iris_get_buffer_size(inst, BUF_OUTPUT))
-               return -EINVAL;
-       if (vb->type == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE &&
-           vb2_plane_size(vb, 0) < iris_get_buffer_size(inst, BUF_INPUT))
-               return -EINVAL;
-
+       if (!(inst->sub_state & IRIS_INST_SUB_DRC)) {
+               if (vb->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE &&
+                   vb2_plane_size(vb, 0) < iris_get_buffer_size(inst, 
BUF_OUTPUT))
+                       return -EINVAL;
+               if (vb->type == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE &&
+                   vb2_plane_size(vb, 0) < iris_get_buffer_size(inst, 
BUF_INPUT))
+                       return -EINVAL;
+       }
        return 0;
 }
 

Reply via email to