On Fri May 9 14:08:50 2025 +0530, Dikshita Agarwal wrote:
> During reconfig, the firmware sends the resolution aligned to 8 bytes.
> If the driver sends the same resolution back to the firmware the resolution
> will be aligned to 16 bytes not 8.
> 
> The alignment mismatch would then subsequently cause the firmware to
> send another redundant sequence change event.
> 
> Fix this by not setting the resolution property during reconfig.
> 
> Cc: sta...@vger.kernel.org
> Fixes: 3a19d7b9e08b ("media: iris: implement set properties to firmware 
> during streamon")
> Reviewed-by: Bryan O'Donoghue <bryan.odonog...@linaro.org>
> 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_hfi_gen1_command.c | 15 ++++++++-------
 drivers/media/platform/qcom/iris/iris_state.c            |  2 +-
 drivers/media/platform/qcom/iris/iris_state.h            |  1 +
 3 files changed, 10 insertions(+), 8 deletions(-)

---

diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c 
b/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c
index 64f887d9a17d..2a86c27443ea 100644
--- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c
+++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c
@@ -546,14 +546,15 @@ static int iris_hfi_gen1_set_resolution(struct iris_inst 
*inst)
        struct hfi_framesize fs;
        int ret;
 
-       fs.buffer_type = HFI_BUFFER_INPUT;
-       fs.width = inst->fmt_src->fmt.pix_mp.width;
-       fs.height = inst->fmt_src->fmt.pix_mp.height;
-
-       ret = hfi_gen1_set_property(inst, ptype, &fs, sizeof(fs));
-       if (ret)
-               return ret;
+       if (!iris_drc_pending(inst)) {
+               fs.buffer_type = HFI_BUFFER_INPUT;
+               fs.width = inst->fmt_src->fmt.pix_mp.width;
+               fs.height = inst->fmt_src->fmt.pix_mp.height;
 
+               ret = hfi_gen1_set_property(inst, ptype, &fs, sizeof(fs));
+               if (ret)
+                       return ret;
+       }
        fs.buffer_type = HFI_BUFFER_OUTPUT2;
        fs.width = inst->fmt_dst->fmt.pix_mp.width;
        fs.height = inst->fmt_dst->fmt.pix_mp.height;
diff --git a/drivers/media/platform/qcom/iris/iris_state.c 
b/drivers/media/platform/qcom/iris/iris_state.c
index 5976e926c83d..104e1687ad39 100644
--- a/drivers/media/platform/qcom/iris/iris_state.c
+++ b/drivers/media/platform/qcom/iris/iris_state.c
@@ -245,7 +245,7 @@ int iris_inst_sub_state_change_pause(struct iris_inst 
*inst, u32 plane)
        return iris_inst_change_sub_state(inst, 0, set_sub_state);
 }
 
-static inline bool iris_drc_pending(struct iris_inst *inst)
+bool iris_drc_pending(struct iris_inst *inst)
 {
        return inst->sub_state & IRIS_INST_SUB_DRC &&
                inst->sub_state & IRIS_INST_SUB_DRC_LAST;
diff --git a/drivers/media/platform/qcom/iris/iris_state.h 
b/drivers/media/platform/qcom/iris/iris_state.h
index 78c61aac5e7e..e718386dbe04 100644
--- a/drivers/media/platform/qcom/iris/iris_state.h
+++ b/drivers/media/platform/qcom/iris/iris_state.h
@@ -140,5 +140,6 @@ int iris_inst_sub_state_change_drain_last(struct iris_inst 
*inst);
 int iris_inst_sub_state_change_drc_last(struct iris_inst *inst);
 int iris_inst_sub_state_change_pause(struct iris_inst *inst, u32 plane);
 bool iris_allow_cmd(struct iris_inst *inst, u32 cmd);
+bool iris_drc_pending(struct iris_inst *inst);
 
 #endif

Reply via email to