ARM: brcmstb: Add appropriate ARM_BE8() macros for swapping
authorFlorian Fainelli <f.fainelli@gmail.com>
Tue, 29 Aug 2017 18:03:39 +0000 (11:03 -0700)
committerFlorian Fainelli <f.fainelli@gmail.com>
Mon, 25 Sep 2017 18:56:04 +0000 (11:56 -0700)
Building a big-endian kernel for ARCH_BRCMSTB revealed that we would not
be correctly polling for the right bit in the busyuart macro, turns out
there are a few transformations needed to work with big-endian kernels.
First we need to swap the value we read from SUN_TOP_CTRL to properly
compare it against our local tables. Then, just like 8250.S we need to
swap the value before storing it, and conversely swap it after a load.

Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
arch/arm/include/debug/brcmstb.S

index 52aaed2..c826f15 100644 (file)
@@ -58,6 +58,7 @@
                /* Check SUN_TOP_CTRL base */
                ldr     \rp, =SUN_TOP_CTRL_BASE @ load SUN_TOP_CTRL PA
                ldr     \rv, [\rp, #0]          @ get register contents
+ARM_BE8(       rev     \rv, \rv )
                and     \rv, \rv, #0xffffff00   @ strip revision bits [7:0]
 
                /* Chip specific detection starts here */
                .endm
 
                .macro  store, rd, rx:vararg
+ARM_BE8(       rev     \rd, \rd )
                str     \rd, \rx
                .endm
 
                .macro  load, rd, rx:vararg
                ldr     \rd, \rx
+ARM_BE8(       rev     \rd, \rd )
                .endm
 
                .macro  senduart,rd,rx