diff options
Diffstat (limited to 'arch/arm/mach-socfpga/headsmp.S')
-rw-r--r-- | arch/arm/mach-socfpga/headsmp.S | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/arch/arm/mach-socfpga/headsmp.S b/arch/arm/mach-socfpga/headsmp.S index f09b1283ffca..9004bfb1756e 100644 --- a/arch/arm/mach-socfpga/headsmp.S +++ b/arch/arm/mach-socfpga/headsmp.S | |||
@@ -13,13 +13,21 @@ | |||
13 | __CPUINIT | 13 | __CPUINIT |
14 | .arch armv7-a | 14 | .arch armv7-a |
15 | 15 | ||
16 | #define CPU1_START_ADDR 0xffd08010 | ||
17 | |||
18 | ENTRY(secondary_trampoline) | 16 | ENTRY(secondary_trampoline) |
19 | movw r0, #:lower16:CPU1_START_ADDR | 17 | movw r2, #:lower16:cpu1start_addr |
20 | movt r0, #:upper16:CPU1_START_ADDR | 18 | movt r2, #:upper16:cpu1start_addr |
19 | |||
20 | /* The socfpga VT cannot handle a 0xC0000000 page offset when loading | ||
21 | the cpu1start_addr, we bit clear it. Tested on HW and VT. */ | ||
22 | bic r2, r2, #0x40000000 | ||
21 | 23 | ||
24 | ldr r0, [r2] | ||
22 | ldr r1, [r0] | 25 | ldr r1, [r0] |
23 | bx r1 | 26 | bx r1 |
24 | 27 | ||
25 | ENTRY(secondary_trampoline_end) | 28 | ENTRY(secondary_trampoline_end) |
29 | |||
30 | ENTRY(socfpga_secondary_startup) | ||
31 | bl v7_invalidate_l1 | ||
32 | b secondary_startup | ||
33 | ENDPROC(socfpga_secondary_startup) | ||