• Thomas Petazzoni's avatar
    ARM: mvebu: fix SMP boot for Armada 38x and Armada 375 Z1 in big endian · 0e2be4c1
    Thomas Petazzoni authored
    The SMP boot on Armada 38x and Armada 375 Z1 is currently broken in
    big-endian configurations, and this commit fixes it for both
    platforms.
    
    For Armada 375 Z1, the problem was in the
    armada_375_smp_cpu1_enable_code part of the code that gets copied to
    the Crypto SRAM as a work-around for an issue of the Z1 stepping. This
    piece of code was not switching the CPU core to big-endian, and not
    endian-swapping the value read from the Resume Address register (the
    value is stored little-endian). Due to the introduction of the
    conditional 'rev r1, r1' instruction, the offset between the 'ldr r0,
    [pc, #4]' instruction and the value it was looking is different
    between LE and BE configurations. To solve this, we instead use one
    'adr' instruction followed by one 'ldr'.
    
    For Armada 38x, the problem was simply that the CPU core was not
    switched to big endian in the secondary CPU startup function.
    
    This change was tested in LE and BE configurations on Armada 385,
    Armada 375 Z1 and Armada 375 A0.
    Signed-off-by: default avatarThomas Petazzoni <thomas.petazzoni@free-electrons.com>
    Link: https://lkml.kernel.org/r/1404228186-21203-1-git-send-email-thomas.petazzoni@free-electrons.comSigned-off-by: default avatarJason Cooper <jason@lakedaemon.net>
    0e2be4c1
headsmp-a9.S 1.02 KB