On Tue Dec 30 18:09:16 2025 +0100, Tommaso Merciai wrote:
> On RZ/G3E the CRU driver relies on the frame end interrupt to detect the
> completion of an active frame transfer when stopping DMA.
> 
> Update the driver to enable only frame end interrupts (CRUnIE2_FExE),
> dropping the usage of the frame start interrupts, which is not required
> for this operations flow.
> 
> Fix the interrupt status handling in the DMA stopping state by checking
> the correct frame end status bits (FExS) instead of the frame start one
> (FSxS). Add a dedicated CRUnINTS2_FExS() macro to reflect the actual
> register bit layout and drop the now unused CRUnIE2_FSxE() and
> CRUnINTS2_FSxS() macros.
> 
> This ensures that DMA stopping is triggered by the intended frame end
> events and avoids incorrect interrupt handling.
> 
> Signed-off-by: Tommaso Merciai <[email protected]>
> Signed-off-by: Jacopo Mondi <[email protected]>
> Reviewed-by: Lad Prabhakar <[email protected]>
> Signed-off-by: Hans Verkuil <[email protected]>

Patch committed.

Thanks,
Hans Verkuil

 drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru-regs.h | 3 +--
 drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c    | 9 ++++-----
 2 files changed, 5 insertions(+), 7 deletions(-)

---

diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru-regs.h 
b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru-regs.h
index 10e62f2646d0..23cb50ee8e57 100644
--- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru-regs.h
+++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru-regs.h
@@ -14,12 +14,11 @@
 
 #define CRUnIE_EFE                     BIT(17)
 
-#define CRUnIE2_FSxE(x)                        BIT(((x) * 3))
 #define CRUnIE2_FExE(x)                        BIT(((x) * 3) + 1)
 
 #define CRUnINTS_SFS                   BIT(16)
 
-#define CRUnINTS2_FSxS(x)              BIT(((x) * 3))
+#define CRUnINTS2_FExS(x)              BIT(((x) * 3) + 1)
 
 #define CRUnRST_VRESETN                        BIT(0)
 
diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c 
b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c
index 6aea7c244df1..98b6afbc708d 100644
--- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c
+++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c
@@ -440,7 +440,6 @@ static int rzg2l_cru_get_virtual_channel(struct 
rzg2l_cru_dev *cru)
 
 void rzg3e_cru_enable_interrupts(struct rzg2l_cru_dev *cru)
 {
-       rzg2l_cru_write(cru, CRUnIE2, CRUnIE2_FSxE(cru->svc_channel));
        rzg2l_cru_write(cru, CRUnIE2, CRUnIE2_FExE(cru->svc_channel));
 }
 
@@ -700,10 +699,10 @@ irqreturn_t rzg3e_cru_irq(int irq, void *data)
                }
 
                if (cru->state == RZG2L_CRU_DMA_STOPPING) {
-                       if (irq_status & CRUnINTS2_FSxS(0) ||
-                           irq_status & CRUnINTS2_FSxS(1) ||
-                           irq_status & CRUnINTS2_FSxS(2) ||
-                           irq_status & CRUnINTS2_FSxS(3))
+                       if (irq_status & CRUnINTS2_FExS(0) ||
+                           irq_status & CRUnINTS2_FExS(1) ||
+                           irq_status & CRUnINTS2_FExS(2) ||
+                           irq_status & CRUnINTS2_FExS(3))
                                dev_dbg(cru->dev, "IRQ while state stopping\n");
                        return IRQ_HANDLED;
                }
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to