summaryrefslogtreecommitdiff
path: root/drivers/misc/mbox.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/misc/mbox.c')
-rw-r--r--drivers/misc/mbox.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/misc/mbox.c b/drivers/misc/mbox.c
index b2810718822..5f5a457b277 100644
--- a/drivers/misc/mbox.c
+++ b/drivers/misc/mbox.c
@@ -348,6 +348,7 @@ static irqreturn_t mbox_irq(int irq, void *arg)
if (nbr_occup == 0)
goto exit;
+redo:
if (mbox->cb == NULL) {
dev_dbg(&(mbox->pdev->dev), "No receive callback registered, "
"leaving %d incoming messages in fifo!\n", nbr_occup);
@@ -363,6 +364,11 @@ static irqreturn_t mbox_irq(int irq, void *arg)
mbox_value);
mbox->cb(mbox_value, mbox->client_data);
+ nbr_occup = readl(mbox->virtbase_local + MBOX_FIFO_STATUS) & 0x7;
+
+ if (nbr_occup > 0)
+ goto redo;
+
exit:
dev_dbg(&(mbox->pdev->dev), "Exit mbox IRQ. ri = %d, wi = %d\n",
mbox->read_index, mbox->write_index);