mmc: dw_mmc: fix the transmission handling in IDMAC
DTO interrupt can be later than transmit interrupt(IDMAC) in case of write. Current handling of IDMAC interrupt sets EVENT_DATA_COMPLETE as well as EVENT_XFER_COMPLETE regardless of DTO rising. This makes the current request finish in tasklet and permits the next request even though current data transfer is still in progress. As a result, sequence is broken and lock-up happens. Setting EVENT_DATA_COMPLETE is not proper after IDMAC interrupt. It should be taken after DTO interrupt is generated. Reported-by: Dmitry Shmidt <dimitrysh@android.com> Signed-off-by: Seungwon Jeon <tgih.jun@samsung.com> Signed-off-by: Hyeonsu Kim <hyeonsu.kim@samsung.com> Acked-by: Will Newton <will.newton@imgtec.com> Signed-off-by: Chris Ball <cjb@laptop.org>
This commit is contained in:
parent
2a0fe914a3
commit
eed6c63cef
|
@ -1623,7 +1623,6 @@ static irqreturn_t dw_mci_interrupt(int irq, void *dev_id)
|
|||
if (pending & (SDMMC_IDMAC_INT_TI | SDMMC_IDMAC_INT_RI)) {
|
||||
mci_writel(host, IDSTS, SDMMC_IDMAC_INT_TI | SDMMC_IDMAC_INT_RI);
|
||||
mci_writel(host, IDSTS, SDMMC_IDMAC_INT_NI);
|
||||
set_bit(EVENT_DATA_COMPLETE, &host->pending_events);
|
||||
host->dma_ops->complete(host);
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue