diff options
Diffstat (limited to 'arch/arm/mach-omap2/omap-headsmp.S')
-rw-r--r-- | arch/arm/mach-omap2/omap-headsmp.S | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/omap-headsmp.S b/arch/arm/mach-omap2/omap-headsmp.S index 502e3135aad3..0ea09faf327b 100644 --- a/arch/arm/mach-omap2/omap-headsmp.S +++ b/arch/arm/mach-omap2/omap-headsmp.S | |||
@@ -18,6 +18,8 @@ | |||
18 | #include <linux/linkage.h> | 18 | #include <linux/linkage.h> |
19 | #include <linux/init.h> | 19 | #include <linux/init.h> |
20 | 20 | ||
21 | #include "omap44xx.h" | ||
22 | |||
21 | __CPUINIT | 23 | __CPUINIT |
22 | 24 | ||
23 | /* Physical address needed since MMU not enabled yet on secondary core */ | 25 | /* Physical address needed since MMU not enabled yet on secondary core */ |
@@ -64,3 +66,39 @@ hold: ldr r12,=0x103 | |||
64 | b secondary_startup | 66 | b secondary_startup |
65 | ENDPROC(omap_secondary_startup) | 67 | ENDPROC(omap_secondary_startup) |
66 | 68 | ||
69 | ENTRY(omap_secondary_startup_4460) | ||
70 | hold_2: ldr r12,=0x103 | ||
71 | dsb | ||
72 | smc #0 @ read from AuxCoreBoot0 | ||
73 | mov r0, r0, lsr #9 | ||
74 | mrc p15, 0, r4, c0, c0, 5 | ||
75 | and r4, r4, #0x0f | ||
76 | cmp r0, r4 | ||
77 | bne hold_2 | ||
78 | |||
79 | /* | ||
80 | * GIC distributor control register has changed between | ||
81 | * CortexA9 r1pX and r2pX. The Control Register secure | ||
82 | * banked version is now composed of 2 bits: | ||
83 | * bit 0 == Secure Enable | ||
84 | * bit 1 == Non-Secure Enable | ||
85 | * The Non-Secure banked register has not changed | ||
86 | * Because the ROM Code is based on the r1pX GIC, the CPU1 | ||
87 | * GIC restoration will cause a problem to CPU0 Non-Secure SW. | ||
88 | * The workaround must be: | ||
89 | * 1) Before doing the CPU1 wakeup, CPU0 must disable | ||
90 | * the GIC distributor | ||
91 | * 2) CPU1 must re-enable the GIC distributor on | ||
92 | * it's wakeup path. | ||
93 | */ | ||
94 | ldr r1, =OMAP44XX_GIC_DIST_BASE | ||
95 | ldr r0, [r1] | ||
96 | orr r0, #1 | ||
97 | str r0, [r1] | ||
98 | |||
99 | /* | ||
100 | * we've been released from the wait loop,secondary_stack | ||
101 | * should now contain the SVC stack for this core | ||
102 | */ | ||
103 | b secondary_startup | ||
104 | ENDPROC(omap_secondary_startup_4460) | ||