Hi Wolfram, On Thu, Oct 6, 2022 at 9:06 PM Wolfram Sang <wsa+renesas@xxxxxxxxxxxxxxxxxxxx> wrote: > So far, we have been relying on access_end interrupts only to mark DMA > transfers as done implying that DMA end interrupts have occurred by then > anyhow. On some SoCs under some conditions, this turned out to be not > enough. So, we enable DMA interrupts as well and make sure that both > events, DMA irq and access_end irq, have happened before finishing the > DMA transfer. > > Signed-off-by: Wolfram Sang <wsa+renesas@xxxxxxxxxxxxxxxxxxxx> Thanks for your patch! > --- a/drivers/mmc/host/renesas_sdhi_internal_dmac.c > +++ b/drivers/mmc/host/renesas_sdhi_internal_dmac.c > @@ -285,12 +284,14 @@ static void > renesas_sdhi_internal_dmac_enable_dma(struct tmio_mmc_host *host, bool enable) > { > struct renesas_sdhi *priv = host_to_priv(host); > + u32 dma_irqs = INFO1_DTRANEND0 | > + (priv->quirks && priv->quirks->old_info1_layout ? > + INFO1_DTRANEND1_OLD : INFO1_DTRANEND1); Perhaps it makes sense to store the dma_irqs mask in priv->quirks, or even in priv, to simplify this code (repeated below)? Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds