aboutsummaryrefslogtreecommitdiffstats
path: root/arch/blackfin/mach-bf561
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2011-05-29 23:12:51 -0400
committerMike Frysinger <vapier@gentoo.org>2011-07-23 01:10:43 -0400
commitfb1d9be5967fff0a3c93b06304fd992e3c438b7f (patch)
tree0c1c8a2fe6ad2b9c52bdc4a58e0f396058dc75c3 /arch/blackfin/mach-bf561
parent072a5cff2fcaa4648c98bea6d549fac7ee4174fe (diff)
Blackfin: optimize double fault boot checking
This moves the double fault data used at boot time into a single struct which can then easily be addressed with indexed loads rather than having to explicitly load multiple addresses. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'arch/blackfin/mach-bf561')
-rw-r--r--arch/blackfin/mach-bf561/secondary.S36
1 files changed, 12 insertions, 24 deletions
diff --git a/arch/blackfin/mach-bf561/secondary.S b/arch/blackfin/mach-bf561/secondary.S
index 348c9191d19f..01e5408620ac 100644
--- a/arch/blackfin/mach-bf561/secondary.S
+++ b/arch/blackfin/mach-bf561/secondary.S
@@ -76,37 +76,25 @@ ENTRY(_coreb_trampoline_start)
76 SSYNC; 76 SSYNC;
77 77
78 /* in case of double faults, save a few things */ 78 /* in case of double faults, save a few things */
79 p0.l = _init_retx_coreb; 79 p1.l = _initial_pda_coreb;
80 p0.h = _init_retx_coreb; 80 p1.h = _initial_pda_coreb;
81 R0 = RETX; 81 r4 = RETX;
82 [P0] = R0;
83
84#ifdef CONFIG_DEBUG_DOUBLEFAULT 82#ifdef CONFIG_DEBUG_DOUBLEFAULT
85 /* Only save these if we are storing them, 83 /* Only save these if we are storing them,
86 * This happens here, since L1 gets clobbered 84 * This happens here, since L1 gets clobbered
87 * below 85 * below
88 */ 86 */
89 GET_PDA(p0, r0); 87 GET_PDA(p0, r0);
90 r5 = [p0 + PDA_DF_RETX]; 88 r0 = [p0 + PDA_DF_RETX];
91 p1.l = _init_saved_retx_coreb; 89 r1 = [p0 + PDA_DF_DCPLB];
92 p1.h = _init_saved_retx_coreb; 90 r2 = [p0 + PDA_DF_ICPLB];
93 [p1] = r5; 91 r3 = [p0 + PDA_DF_SEQSTAT];
94 92 [p1 + PDA_INIT_DF_RETX] = r0;
95 r5 = [p0 + PDA_DF_DCPLB]; 93 [p1 + PDA_INIT_DF_DCPLB] = r1;
96 p1.l = _init_saved_dcplb_fault_addr_coreb; 94 [p1 + PDA_INIT_DF_ICPLB] = r2;
97 p1.h = _init_saved_dcplb_fault_addr_coreb; 95 [p1 + PDA_INIT_DF_SEQSTAT] = r3;
98 [p1] = r5;
99
100 r5 = [p0 + PDA_DF_ICPLB];
101 p1.l = _init_saved_icplb_fault_addr_coreb;
102 p1.h = _init_saved_icplb_fault_addr_coreb;
103 [p1] = r5;
104
105 r5 = [p0 + PDA_DF_SEQSTAT];
106 p1.l = _init_saved_seqstat_coreb;
107 p1.h = _init_saved_seqstat_coreb;
108 [p1] = r5;
109#endif 96#endif
97 [p1 + PDA_INIT_RETX] = r4;
110 98
111 /* Initialize stack pointer */ 99 /* Initialize stack pointer */
112 sp.l = lo(INITIAL_STACK); 100 sp.l = lo(INITIAL_STACK);