diff options
author | Mike Frysinger <vapier@gentoo.org> | 2011-05-29 23:12:51 -0400 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2011-07-23 01:10:43 -0400 |
commit | fb1d9be5967fff0a3c93b06304fd992e3c438b7f (patch) | |
tree | 0c1c8a2fe6ad2b9c52bdc4a58e0f396058dc75c3 /arch/blackfin/mach-bf561 | |
parent | 072a5cff2fcaa4648c98bea6d549fac7ee4174fe (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.S | 36 |
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); |