7b640feea9
commit 5616f36713ea77f57ae908bf2fef641364403c9f upstream. The secondary CPU starts up in ARM mode. When the kernel is compiled in thumb2 mode we have to explicitly compile the secondary startup trampoline in ARM mode, otherwise the CPU will go to Nirvana. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> Reported-by: Steffen Trumtrar <s.trumtrar@pengutronix.de> Suggested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Signed-off-by: Dinh Nguyen <dinguyen@opensource.altera.com> Signed-off-by: Kevin Hilman <khilman@baylibre.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Willy Tarreau <w@1wt.eu>
35 lines
869 B
ArmAsm
35 lines
869 B
ArmAsm
/*
|
|
* Copyright (c) 2003 ARM Limited
|
|
* Copyright (c) u-boot contributors
|
|
* Copyright (c) 2012 Pavel Machek <pavel@denx.de>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*/
|
|
#include <linux/linkage.h>
|
|
#include <linux/init.h>
|
|
|
|
__CPUINIT
|
|
.arch armv7-a
|
|
.arm
|
|
|
|
ENTRY(secondary_trampoline)
|
|
movw r2, #:lower16:cpu1start_addr
|
|
movt r2, #:upper16:cpu1start_addr
|
|
|
|
/* The socfpga VT cannot handle a 0xC0000000 page offset when loading
|
|
the cpu1start_addr, we bit clear it. Tested on HW and VT. */
|
|
bic r2, r2, #0x40000000
|
|
|
|
ldr r0, [r2]
|
|
ldr r1, [r0]
|
|
bx r1
|
|
|
|
ENTRY(secondary_trampoline_end)
|
|
|
|
ENTRY(socfpga_secondary_startup)
|
|
bl v7_invalidate_l1
|
|
b secondary_startup
|
|
ENDPROC(socfpga_secondary_startup)
|