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) | ||
