diff options
author | Gregory CLEMENT <gregory.clement@free-electrons.com> | 2014-04-14 15:54:06 +0200 |
---|---|---|
committer | Jason Cooper <jason@lakedaemon.net> | 2014-05-08 16:08:30 +0000 |
commit | 87384cc0b4bffbe26d9172d49d8b287332e9d397 (patch) | |
tree | f7ec16c6826131eea6bfd8016895dfec80860c61 /arch/arm/mach-mvebu/headsmp-a9.S | |
parent | 1ee89e2231a1b04dc34765edd195725ddf4ba998 (diff) | |
download | linux-87384cc0b4bffbe26d9172d49d8b287332e9d397.tar.bz2 |
ARM: mvebu: add workaround for SMP support for Armada 375 stepping Z1
Due to internal bootrom issue, CPU[1] initial jump code (four
instructions) should be placed in SRAM memory of the SoC. In order to
achieve this, we have to unmap the BootROM and at some specific
location where the BootROM was place, create a specific MBus window
for the SRAM. This SRAM is initialized with a few instructions of code
that allows to jump into the real secondary CPU boot address.
This workaround will most likely be disabled when newer steppings of
the Armada 375 will be made available, in which case a dynamic test
based on mvebu-soc-id will be added.
Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
Link: https://lkml.kernel.org/r/1397483648-26611-10-git-send-email-thomas.petazzoni@free-electrons.com
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Link: https://lkml.kernel.org/r/1397483648-26611-10-git-send-email-thomas.petazzoni@free-electrons.com
Signed-off-by: Jason Cooper <jason@lakedaemon.net>
Diffstat (limited to 'arch/arm/mach-mvebu/headsmp-a9.S')
-rw-r--r-- | arch/arm/mach-mvebu/headsmp-a9.S | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/arch/arm/mach-mvebu/headsmp-a9.S b/arch/arm/mach-mvebu/headsmp-a9.S index 78e66c96e718..5925366bc03c 100644 --- a/arch/arm/mach-mvebu/headsmp-a9.S +++ b/arch/arm/mach-mvebu/headsmp-a9.S @@ -16,6 +16,18 @@ #include <linux/init.h> __CPUINIT +#define CPU_RESUME_ADDR_REG 0xf10182d4 + +.global armada_375_smp_cpu1_enable_code_start +.global armada_375_smp_cpu1_enable_code_end + +armada_375_smp_cpu1_enable_code_start: + ldr r0, [pc, #4] + ldr r1, [r0] + mov pc, r1 + .word CPU_RESUME_ADDR_REG +armada_375_smp_cpu1_enable_code_end: + ENTRY(mvebu_cortex_a9_secondary_startup) bl v7_invalidate_l1 b secondary_startup |