* ISCR can only be cleared if the type is falling-edge, rising-edge or
         * falling/rising-edge.
         */
-       if ((iscr & bit) && (iitsr & IITSR_IITSEL_MASK(hw_irq)))
+       if ((iscr & bit) && (iitsr & IITSR_IITSEL_MASK(hw_irq))) {
                writel_relaxed(iscr & ~bit, priv->base + ISCR);
+               /*
+                * Enforce that the posted write is flushed to prevent that the
+                * just handled interrupt is raised again.
+                */
+               readl_relaxed(priv->base + ISCR);
+       }
 }
 
 static void rzg2l_tint_eoi(struct irq_data *d)
        u32 reg;
 
        reg = readl_relaxed(priv->base + TSCR);
-       if (reg & bit)
+       if (reg & bit) {
                writel_relaxed(reg & ~bit, priv->base + TSCR);
+               /*
+                * Enforce that the posted write is flushed to prevent that the
+                * just handled interrupt is raised again.
+                */
+               readl_relaxed(priv->base + TSCR);
+       }
 }
 
 static void rzg2l_irqc_eoi(struct irq_data *d)