ARM: zynq: Enable big-endian
authorMichal Simek <michal.simek@xilinx.com>
Fri, 11 Apr 2014 13:05:56 +0000 (15:05 +0200)
committerMichal Simek <michal.simek@xilinx.com>
Tue, 20 May 2014 14:17:13 +0000 (16:17 +0200)
Enable ARCH_SUPPORTS_BIG_ENDIAN in Kconfig.

zynq_secondary_trampoline is the first function
that is called on secondary CPU.
Reference:
"ARM: mcpm: fix big endian issue in mcpm startup code"
(sha1: 519ceb9fd10cd7e836d0aa97b2068cc9e97f463b)

Fix early printk support. Based on:
"ARM: pl01x debug code endian fix"
(sha1: 76e3faf156fa95b6465e747d702b94faf67117fc)

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
arch/arm/include/debug/zynq.S
arch/arm/mach-zynq/Kconfig
arch/arm/mach-zynq/headsmp.S

index 3edfef7b34aefcdbfd660d796e25ccb72a55e5b0..bd13dedbdeffe25cfc455ec3a1f9caa42f314ce4 100644 (file)
 
                .macro  waituart,rd,rx
 1001:          ldr     \rd, [\rx, #UART_SR_OFFSET]
+ARM_BE8(       rev     \rd, \rd )
                tst     \rd, #UART_SR_TXEMPTY
                beq     1001b
                .endm
 
                .macro  busyuart,rd,rx
 1002:          ldr     \rd, [\rx, #UART_SR_OFFSET]     @ get status register
+ARM_BE8(       rev     \rd, \rd )
                tst     \rd, #UART_SR_TXFULL            @
                bne     1002b                   @ wait if FIFO is full
                .endm
index afbb0b64b17b1bd756dedf908832b1a87a361361..573e0db1d0f0a928a9c2290c532490199e137204 100644 (file)
@@ -2,6 +2,7 @@ config ARCH_ZYNQ
        bool "Xilinx Zynq ARM Cortex A9 Platform" if ARCH_MULTI_V7
        select ARCH_HAS_CPUFREQ
        select ARCH_HAS_OPP
+       select ARCH_SUPPORTS_BIG_ENDIAN
        select ARM_AMBA
        select ARM_GIC
        select ARM_GLOBAL_TIMER if !CPU_FREQ
index 57a32869f0aa3215e0e49c282ca58d7f8976cad3..dd8c071941e7ff3b9f991989ede3acc5aaac856b 100644 (file)
@@ -8,9 +8,12 @@
  */
 #include <linux/linkage.h>
 #include <linux/init.h>
+#include <asm/assembler.h>
 
 ENTRY(zynq_secondary_trampoline)
-       ldr     r0, [pc]
+ARM_BE8(setend be)                             @ ensure we are in BE8 mode
+       ldr     r0, zynq_secondary_trampoline_jump
+ARM_BE8(rev    r0, r0)
        bx      r0
 .globl zynq_secondary_trampoline_jump
 zynq_secondary_trampoline_jump: