87384cc0b4
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>
34 lines
951 B
ArmAsm
34 lines
951 B
ArmAsm
/*
|
|
* SMP support: Entry point for secondary CPUs of Marvell EBU
|
|
* Cortex-A9 based SOCs (Armada 375 and Armada 38x).
|
|
*
|
|
* Copyright (C) 2014 Marvell
|
|
*
|
|
* Gregory CLEMENT <gregory.clement@free-electrons.com>
|
|
* Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
|
*
|
|
* This file is licensed under the terms of the GNU General Public
|
|
* License version 2. This program is licensed "as is" without any
|
|
* warranty of any kind, whether express or implied.
|
|
*/
|
|
|
|
#include <linux/linkage.h>
|
|
#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
|
|
ENDPROC(mvebu_cortex_a9_secondary_startup)
|