mirror of
https://github.com/torvalds/linux.git
synced 2026-06-05 13:06:59 +02:00
mailbox: sprd: clear delivery flag before handling TX done
If there are any pending messages in the mailbox queue, they are sent as soon as a TX done event arrives from the driver. This may trigger a new delivery interrupt while the previous one is still being handled. If the delivery status is cleared after this, the interrupt is lost. To prevent this from happening, clear the delivery status immediately after checking it and before any new messages are sent. Signed-off-by: Otto Pflüger <otto.pflueger@abscue.de> Signed-off-by: Jassi Brar <jassisinghbrar@gmail.com>
This commit is contained in:
parent
0856aed508
commit
c77661d60d
|
|
@ -166,6 +166,11 @@ static irqreturn_t sprd_mbox_inbox_isr(int irq, void *data)
|
|||
return IRQ_NONE;
|
||||
}
|
||||
|
||||
/* Clear FIFO delivery and overflow status first */
|
||||
writel(fifo_sts &
|
||||
(SPRD_INBOX_FIFO_DELIVER_MASK | SPRD_INBOX_FIFO_OVERLOW_MASK),
|
||||
priv->inbox_base + SPRD_MBOX_FIFO_RST);
|
||||
|
||||
while (send_sts) {
|
||||
id = __ffs(send_sts);
|
||||
send_sts &= (send_sts - 1);
|
||||
|
|
@ -181,11 +186,6 @@ static irqreturn_t sprd_mbox_inbox_isr(int irq, void *data)
|
|||
mbox_chan_txdone(chan, 0);
|
||||
}
|
||||
|
||||
/* Clear FIFO delivery and overflow status */
|
||||
writel(fifo_sts &
|
||||
(SPRD_INBOX_FIFO_DELIVER_MASK | SPRD_INBOX_FIFO_OVERLOW_MASK),
|
||||
priv->inbox_base + SPRD_MBOX_FIFO_RST);
|
||||
|
||||
/* Clear irq status */
|
||||
writel(SPRD_MBOX_IRQ_CLR, priv->inbox_base + SPRD_MBOX_IRQ_STS);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user