ARM: bcm283x mbox: Fix send status register
authorFabian Vogt <fvogt@suse.com>
Tue, 16 Jul 2019 11:09:47 +0000 (13:09 +0200)
committerMatthias Brugger <mbrugger@suse.com>
Fri, 6 Sep 2019 16:16:59 +0000 (18:16 +0200)
Before we can send a message to the mailbox we have to check that there
is space to do so. Therefore we poll the status register. But up to now
the wrong status register, the one of mailbox 0, was checked. Fix this
by polling the status regiser of mailbox 1.

Signed-off-by: Fabian Vogt <fvogt@suse.com>
Acked-by: Stephen Warren <swarren@wwwdotorg.org>
[mb: rename registers and update commit message]
Signed-off-by: Matthias Brugger <mbrugger@suse.com>
arch/arm/mach-bcm283x/include/mach/mbox.h
arch/arm/mach-bcm283x/mbox.c

index e3a893e49cf528181ac6cae26cde7771e40be3be..f8928035584cddd42d0533dd9af1c9c30d4fda36 100644 (file)
 struct bcm2835_mbox_regs {
        u32 read;
        u32 rsvd0[5];
-       u32 status;
-       u32 config;
+       u32 mail0_status;
+       u32 mail0_config;
        u32 write;
+       u32 rsvd1[5];
+       u32 mail1_status;
+       u32 mail1_config;
 };
 
 #define BCM2835_MBOX_STATUS_WR_FULL    0x80000000
index 1642ebd1031ff44aca88b453dccb637888aeff8c..3c67f68c1781f5fa103e8e3ca5a30cefb9b51af1 100644 (file)
@@ -27,7 +27,7 @@ int bcm2835_mbox_call_raw(u32 chan, u32 send, u32 *recv)
        /* Drain any stale responses */
 
        for (;;) {
-               val = readl(&regs->status);
+               val = readl(&regs->mail0_status);
                if (val & BCM2835_MBOX_STATUS_RD_EMPTY)
                        break;
                if (get_timer(0) >= endtime) {
@@ -40,7 +40,7 @@ int bcm2835_mbox_call_raw(u32 chan, u32 send, u32 *recv)
        /* Wait for space to send */
 
        for (;;) {
-               val = readl(&regs->status);
+               val = readl(&regs->mail1_status);
                if (!(val & BCM2835_MBOX_STATUS_WR_FULL))
                        break;
                if (get_timer(0) >= endtime) {
@@ -58,7 +58,7 @@ int bcm2835_mbox_call_raw(u32 chan, u32 send, u32 *recv)
        /* Wait for the response */
 
        for (;;) {
-               val = readl(&regs->status);
+               val = readl(&regs->mail0_status);
                if (!(val & BCM2835_MBOX_STATUS_RD_EMPTY))
                        break;
                if (get_timer(0) >= endtime) {