On Tue, Jul 23, 2024 at 06:49:31PM +0530, Mrinmay Sarkar wrote: > The current logic is enabling both STOP_INT_MASK and ABORT_INT_MASK > bit. This is apparently masking those particular interrupts rather than > unmasking the same. If the interrupts are masked, they would never get > triggered. > > So fix the issue by unmasking the STOP and ABORT interrupts properly. > > Fixes: e74c39573d35 ("dmaengine: dw-edma: Add support for native HDMA") > cc: stable@xxxxxxxxxxxxxxx > Signed-off-by: Mrinmay Sarkar <quic_msarkar@xxxxxxxxxxx> Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxx> - Mani > --- > drivers/dma/dw-edma/dw-hdma-v0-core.c | 9 +++++---- > 1 file changed, 5 insertions(+), 4 deletions(-) > > diff --git a/drivers/dma/dw-edma/dw-hdma-v0-core.c b/drivers/dma/dw-edma/dw-hdma-v0-core.c > index 10e8f07..fa89b3a 100644 > --- a/drivers/dma/dw-edma/dw-hdma-v0-core.c > +++ b/drivers/dma/dw-edma/dw-hdma-v0-core.c > @@ -247,10 +247,11 @@ static void dw_hdma_v0_core_start(struct dw_edma_chunk *chunk, bool first) > if (first) { > /* Enable engine */ > SET_CH_32(dw, chan->dir, chan->id, ch_en, BIT(0)); > - /* Interrupt enable&unmask - done, abort */ > - tmp = GET_CH_32(dw, chan->dir, chan->id, int_setup) | > - HDMA_V0_STOP_INT_MASK | HDMA_V0_ABORT_INT_MASK | > - HDMA_V0_LOCAL_STOP_INT_EN | HDMA_V0_LOCAL_ABORT_INT_EN; > + /* Interrupt unmask - STOP, ABORT */ > + tmp = GET_CH_32(dw, chan->dir, chan->id, int_setup) & > + ~HDMA_V0_STOP_INT_MASK & ~HDMA_V0_ABORT_INT_MASK; > + /* Interrupt enable - STOP, ABORT */ > + tmp |= HDMA_V0_LOCAL_STOP_INT_EN | HDMA_V0_LOCAL_ABORT_INT_EN; > if (!(dw->chip->flags & DW_EDMA_CHIP_LOCAL)) > tmp |= HDMA_V0_REMOTE_STOP_INT_EN | HDMA_V0_REMOTE_ABORT_INT_EN; > SET_CH_32(dw, chan->dir, chan->id, int_setup, tmp); > -- > 2.7.4 > -- மணிவண்ணன் சதாசிவம்