I have encountered an interrupt storm during the eMMC chip probing (and the chip finally didn't get detected). It turned out that U-Boot left the SDHI DMA interrupts enabled while the Linux driver didn't use those. Masking those interrupts in renesas_sdhi_internal_dmac_request_dma() gets rid of both issues...
Signed-off-by: Sergei Shtylyov <sergei.shtyl...@cogentembedded.com> --- The patch is against Ulf Hansson's 'mmc.git' repo's 'fixes' branch. drivers/mmc/host/renesas_sdhi_internal_dmac.c | 11 +++++++++++ 1 file changed, 11 insertions(+) Index: mmc/drivers/mmc/host/renesas_sdhi_internal_dmac.c =================================================================== --- mmc.orig/drivers/mmc/host/renesas_sdhi_internal_dmac.c +++ mmc/drivers/mmc/host/renesas_sdhi_internal_dmac.c @@ -51,10 +51,12 @@ #define INFO1_CLEAR 0 #define INFO1_DTRANEND1 BIT(17) #define INFO1_DTRANEND0 BIT(16) +#define INFO1_RESERVED_BITS GENMASK_ULL(32, 0) /* DM_CM_INFO2 and DM_CM_INFO2_MASK */ #define INFO2_DTRANERR1 BIT(17) #define INFO2_DTRANERR0 BIT(16) +#define INFO2_RESERVED_BITS GENMASK_ULL(32, 0) /* * Specification of this driver: @@ -236,6 +238,15 @@ renesas_sdhi_internal_dmac_request_dma(s { struct renesas_sdhi *priv = host_to_priv(host); + /* + * We don't use the DMA interrupts, but they might have been enabled + * by a bootloader, so mask them to avoid an interrupt storm... + */ + renesas_sdhi_internal_dmac_dm_write(host, DM_CM_INFO1_MASK, + INFO1_RESERVED_BITS); + renesas_sdhi_internal_dmac_dm_write(host, DM_CM_INFO2_MASK, + INFO2_RESERVED_BITS); + /* Each value is set to non-zero to assume "enabling" each DMA */ host->chan_rx = host->chan_tx = (void *)0xdeadbeaf;