Commit fc4e188789b01dc9f18c80869c43fdd7d1a51378
Committed by
Wolfgang Denk
1 parent
2903ad33a7
Exists in
master
and in
54 other branches
ppc: Loose GOT access in IRQ
Using the GOT in IRQ handlers requires r14 to be -ffixed-r14. Avoid this by relocatate transfer_to_handler too. This will allow to free up r14 later on. Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>
Showing 15 changed files with 108 additions and 407 deletions Side-by-side Diff
cpu/74xx_7xx/start.S
... | ... | @@ -132,28 +132,15 @@ |
132 | 132 | mfspr r5,DSISR |
133 | 133 | stw r5,_DSISR(r21) |
134 | 134 | addi r3,r1,STACK_FRAME_OVERHEAD |
135 | - li r20,MSR_KERNEL | |
136 | - rlwimi r20,r23,0,16,16 /* copy EE bit from saved MSR */ | |
137 | - lwz r6,GOT(transfer_to_handler) | |
138 | - mtlr r6 | |
139 | - blrl | |
140 | -.L_Alignment: | |
141 | - .long AlignmentException - _start + EXC_OFF_SYS_RESET | |
142 | - .long int_return - _start + EXC_OFF_SYS_RESET | |
135 | + EXC_XFER_TEMPLATE(Alignment, AlignmentException, MSR_KERNEL, COPY_EE) | |
143 | 136 | |
144 | 137 | /* Program check exception */ |
145 | 138 | . = 0x700 |
146 | 139 | ProgramCheck: |
147 | 140 | EXCEPTION_PROLOG(SRR0, SRR1) |
148 | 141 | addi r3,r1,STACK_FRAME_OVERHEAD |
149 | - li r20,MSR_KERNEL | |
150 | - rlwimi r20,r23,0,16,16 /* copy EE bit from saved MSR */ | |
151 | - lwz r6,GOT(transfer_to_handler) | |
152 | - mtlr r6 | |
153 | - blrl | |
154 | -.L_ProgramCheck: | |
155 | - .long ProgramCheckException - _start + EXC_OFF_SYS_RESET | |
156 | - .long int_return - _start + EXC_OFF_SYS_RESET | |
142 | + EXC_XFER_TEMPLATE(ProgramCheck, ProgramCheckException, | |
143 | + MSR_KERNEL, COPY_EE) | |
157 | 144 | |
158 | 145 | /* No FPU on MPC8xx. This exception is not supposed to happen. |
159 | 146 | */ |
... | ... | @@ -835,23 +822,6 @@ |
835 | 822 | mtmsr r7 |
836 | 823 | |
837 | 824 | mtlr r4 /* restore link register */ |
838 | - blr | |
839 | - | |
840 | - /* | |
841 | - * Function: relocate entries for one exception vector | |
842 | - */ | |
843 | -trap_reloc: | |
844 | - lwz r0, 0(r7) /* hdlr ... */ | |
845 | - add r0, r0, r3 /* ... += dest_addr */ | |
846 | - stw r0, 0(r7) | |
847 | - | |
848 | - lwz r0, 4(r7) /* int_return ... */ | |
849 | - add r0, r0, r3 /* ... += dest_addr */ | |
850 | - stw r0, 4(r7) | |
851 | - | |
852 | - sync | |
853 | - isync | |
854 | - | |
855 | 825 | blr |
856 | 826 | |
857 | 827 | #ifdef CONFIG_SYS_INIT_RAM_LOCK |
cpu/mpc512x/start.S
... | ... | @@ -127,30 +127,15 @@ |
127 | 127 | mfspr r5,DSISR |
128 | 128 | stw r5,_DSISR(r21) |
129 | 129 | addi r3,r1,STACK_FRAME_OVERHEAD |
130 | - li r20,MSR_KERNEL | |
131 | - rlwimi r20,r23,0,16,16 /* copy EE bit from saved MSR */ | |
132 | - rlwimi r20,r23,0,25,25 /* copy IP bit from saved MSR */ | |
133 | - lwz r6,GOT(transfer_to_handler) | |
134 | - mtlr r6 | |
135 | - blrl | |
136 | -.L_Alignment: | |
137 | - .long AlignmentException - _start + EXC_OFF_SYS_RESET | |
138 | - .long int_return - _start + EXC_OFF_SYS_RESET | |
130 | + EXC_XFER_TEMPLATE(Alignment, AlignmentException, MSR_KERNEL, COPY_EE) | |
139 | 131 | |
140 | 132 | /* Program check exception */ |
141 | 133 | . = 0x700 |
142 | 134 | ProgramCheck: |
143 | 135 | EXCEPTION_PROLOG(SRR0, SRR1) |
144 | 136 | addi r3,r1,STACK_FRAME_OVERHEAD |
145 | - li r20,MSR_KERNEL | |
146 | - rlwimi r20,r23,0,16,16 /* copy EE bit from saved MSR */ | |
147 | - rlwimi r20,r23,0,25,25 /* copy IP bit from saved MSR */ | |
148 | - lwz r6,GOT(transfer_to_handler) | |
149 | - mtlr r6 | |
150 | - blrl | |
151 | -.L_ProgramCheck: | |
152 | - .long ProgramCheckException - _start + EXC_OFF_SYS_RESET | |
153 | - .long int_return - _start + EXC_OFF_SYS_RESET | |
137 | + EXC_XFER_TEMPLATE(ProgramCheck, ProgramCheckException, | |
138 | + MSR_KERNEL, COPY_EE) | |
154 | 139 | |
155 | 140 | /* Floating Point Unit unavailable exception */ |
156 | 141 | STD_EXCEPTION(0x800, FPUnavailable, UnknownException) |
... | ... | @@ -722,19 +707,5 @@ |
722 | 707 | SYNC |
723 | 708 | |
724 | 709 | mtlr r4 /* restore link register */ |
725 | - blr | |
726 | - | |
727 | - /* | |
728 | - * Function: relocate entries for one exception vector | |
729 | - */ | |
730 | -trap_reloc: | |
731 | - lwz r0, 0(r7) /* hdlr ... */ | |
732 | - add r0, r0, r3 /* ... += dest_addr */ | |
733 | - stw r0, 0(r7) | |
734 | - | |
735 | - lwz r0, 4(r7) /* int_return ... */ | |
736 | - add r0, r0, r3 /* ... += dest_addr */ | |
737 | - stw r0, 4(r7) | |
738 | - | |
739 | 710 | blr |
cpu/mpc5xx/start.S
... | ... | @@ -217,28 +217,15 @@ |
217 | 217 | mfspr r5,DSISR |
218 | 218 | stw r5,_DSISR(r21) |
219 | 219 | addi r3,r1,STACK_FRAME_OVERHEAD |
220 | - li r20,MSR_KERNEL | |
221 | - rlwimi r20,r23,0,16,16 /* copy EE bit from saved MSR */ | |
222 | - lwz r6,GOT(transfer_to_handler) | |
223 | - mtlr r6 | |
224 | - blrl | |
225 | -.L_Alignment: | |
226 | - .long AlignmentException - _start + EXC_OFF_SYS_RESET | |
227 | - .long int_return - _start + EXC_OFF_SYS_RESET | |
220 | + EXC_XFER_TEMPLATE(Alignment, AlignmentException, MSR_KERNEL, COPY_EE) | |
228 | 221 | |
229 | 222 | /* Program check exception */ |
230 | 223 | . = 0x700 |
231 | 224 | ProgramCheck: |
232 | 225 | EXCEPTION_PROLOG(SRR0, SRR1) |
233 | 226 | addi r3,r1,STACK_FRAME_OVERHEAD |
234 | - li r20,MSR_KERNEL | |
235 | - rlwimi r20,r23,0,16,16 /* copy EE bit from saved MSR */ | |
236 | - lwz r6,GOT(transfer_to_handler) | |
237 | - mtlr r6 | |
238 | - blrl | |
239 | -.L_ProgramCheck: | |
240 | - .long ProgramCheckException - _start + EXC_OFF_SYS_RESET | |
241 | - .long int_return - _start + EXC_OFF_SYS_RESET | |
227 | + EXC_XFER_TEMPLATE(ProgramCheck, ProgramCheckException, | |
228 | + MSR_KERNEL, COPY_EE) | |
242 | 229 | |
243 | 230 | /* FPU on MPC5xx available. We will use it later. |
244 | 231 | */ |
... | ... | @@ -562,24 +549,6 @@ |
562 | 549 | |
563 | 550 | mtlr r4 /* restore link register */ |
564 | 551 | blr |
565 | - | |
566 | - /* | |
567 | - * Function: relocate entries for one exception vector | |
568 | - */ | |
569 | -trap_reloc: | |
570 | - lwz r0, 0(r7) /* hdlr ... */ | |
571 | - add r0, r0, r3 /* ... += dest_addr */ | |
572 | - stw r0, 0(r7) | |
573 | - | |
574 | - lwz r0, 4(r7) /* int_return ... */ | |
575 | - add r0, r0, r3 /* ... += dest_addr */ | |
576 | - stw r0, 4(r7) | |
577 | - | |
578 | - sync | |
579 | - isync | |
580 | - | |
581 | - blr | |
582 | - | |
583 | 552 | |
584 | 553 | #if defined(CONFIG_PATI) |
585 | 554 | /* Program the PLL */ |
cpu/mpc5xxx/start.S
... | ... | @@ -215,30 +215,15 @@ |
215 | 215 | mfspr r5,DSISR |
216 | 216 | stw r5,_DSISR(r21) |
217 | 217 | addi r3,r1,STACK_FRAME_OVERHEAD |
218 | - li r20,MSR_KERNEL | |
219 | - rlwimi r20,r23,0,16,16 /* copy EE bit from saved MSR */ | |
220 | - rlwimi r20,r23,0,25,25 /* copy IP bit from saved MSR */ | |
221 | - lwz r6,GOT(transfer_to_handler) | |
222 | - mtlr r6 | |
223 | - blrl | |
224 | -.L_Alignment: | |
225 | - .long AlignmentException - _start + EXC_OFF_SYS_RESET | |
226 | - .long int_return - _start + EXC_OFF_SYS_RESET | |
218 | + EXC_XFER_TEMPLATE(Alignment, AlignmentException, MSR_KERNEL, COPY_EE) | |
227 | 219 | |
228 | 220 | /* Program check exception */ |
229 | 221 | . = 0x700 |
230 | 222 | ProgramCheck: |
231 | 223 | EXCEPTION_PROLOG(SRR0, SRR1) |
232 | 224 | addi r3,r1,STACK_FRAME_OVERHEAD |
233 | - li r20,MSR_KERNEL | |
234 | - rlwimi r20,r23,0,16,16 /* copy EE bit from saved MSR */ | |
235 | - rlwimi r20,r23,0,25,25 /* copy IP bit from saved MSR */ | |
236 | - lwz r6,GOT(transfer_to_handler) | |
237 | - mtlr r6 | |
238 | - blrl | |
239 | -.L_ProgramCheck: | |
240 | - .long ProgramCheckException - _start + EXC_OFF_SYS_RESET | |
241 | - .long int_return - _start + EXC_OFF_SYS_RESET | |
225 | + EXC_XFER_TEMPLATE(ProgramCheck, ProgramCheckException, | |
226 | + MSR_KERNEL, COPY_EE) | |
242 | 227 | |
243 | 228 | STD_EXCEPTION(0x800, FPUnavailable, UnknownException) |
244 | 229 | |
... | ... | @@ -796,19 +781,5 @@ |
796 | 781 | SYNC |
797 | 782 | |
798 | 783 | mtlr r4 /* restore link register */ |
799 | - blr | |
800 | - | |
801 | - /* | |
802 | - * Function: relocate entries for one exception vector | |
803 | - */ | |
804 | -trap_reloc: | |
805 | - lwz r0, 0(r7) /* hdlr ... */ | |
806 | - add r0, r0, r3 /* ... += dest_addr */ | |
807 | - stw r0, 0(r7) | |
808 | - | |
809 | - lwz r0, 4(r7) /* int_return ... */ | |
810 | - add r0, r0, r3 /* ... += dest_addr */ | |
811 | - stw r0, 4(r7) | |
812 | - | |
813 | 784 | blr |
cpu/mpc8220/start.S
... | ... | @@ -176,30 +176,15 @@ |
176 | 176 | mfspr r5,DSISR |
177 | 177 | stw r5,_DSISR(r21) |
178 | 178 | addi r3,r1,STACK_FRAME_OVERHEAD |
179 | - li r20,MSR_KERNEL | |
180 | - rlwimi r20,r23,0,16,16 /* copy EE bit from saved MSR */ | |
181 | - rlwimi r20,r23,0,25,25 /* copy IP bit from saved MSR */ | |
182 | - lwz r6,GOT(transfer_to_handler) | |
183 | - mtlr r6 | |
184 | - blrl | |
185 | -.L_Alignment: | |
186 | - .long AlignmentException - _start + EXC_OFF_SYS_RESET | |
187 | - .long int_return - _start + EXC_OFF_SYS_RESET | |
179 | + EXC_XFER_TEMPLATE(Alignment, AlignmentException, MSR_KERNEL, COPY_EE) | |
188 | 180 | |
189 | 181 | /* Program check exception */ |
190 | 182 | . = 0x700 |
191 | 183 | ProgramCheck: |
192 | 184 | EXCEPTION_PROLOG(SRR0, SRR1) |
193 | 185 | addi r3,r1,STACK_FRAME_OVERHEAD |
194 | - li r20,MSR_KERNEL | |
195 | - rlwimi r20,r23,0,16,16 /* copy EE bit from saved MSR */ | |
196 | - rlwimi r20,r23,0,25,25 /* copy IP bit from saved MSR */ | |
197 | - lwz r6,GOT(transfer_to_handler) | |
198 | - mtlr r6 | |
199 | - blrl | |
200 | -.L_ProgramCheck: | |
201 | - .long ProgramCheckException - _start + EXC_OFF_SYS_RESET | |
202 | - .long int_return - _start + EXC_OFF_SYS_RESET | |
186 | + EXC_XFER_TEMPLATE(ProgramCheck, ProgramCheckException, | |
187 | + MSR_KERNEL, COPY_EE) | |
203 | 188 | |
204 | 189 | STD_EXCEPTION(0x800, FPUnavailable, UnknownException) |
205 | 190 | |
... | ... | @@ -761,19 +746,5 @@ |
761 | 746 | SYNC |
762 | 747 | |
763 | 748 | mtlr r4 /* restore link register */ |
764 | - blr | |
765 | - | |
766 | - /* | |
767 | - * Function: relocate entries for one exception vector | |
768 | - */ | |
769 | -trap_reloc: | |
770 | - lwz r0, 0(r7) /* hdlr ... */ | |
771 | - add r0, r0, r3 /* ... += dest_addr */ | |
772 | - stw r0, 0(r7) | |
773 | - | |
774 | - lwz r0, 4(r7) /* int_return ... */ | |
775 | - add r0, r0, r3 /* ... += dest_addr */ | |
776 | - stw r0, 4(r7) | |
777 | - | |
778 | 749 | blr |
cpu/mpc824x/start.S
... | ... | @@ -227,28 +227,15 @@ |
227 | 227 | mfspr r5,DSISR |
228 | 228 | stw r5,_DSISR(r21) |
229 | 229 | addi r3,r1,STACK_FRAME_OVERHEAD |
230 | - li r20,MSR_KERNEL | |
231 | - rlwimi r20,r23,0,16,16 /* copy EE bit from saved MSR */ | |
232 | - lwz r6,GOT(transfer_to_handler) | |
233 | - mtlr r6 | |
234 | - blrl | |
235 | -.L_Alignment: | |
236 | - .long AlignmentException - _start + EXC_OFF_SYS_RESET | |
237 | - .long int_return - _start + EXC_OFF_SYS_RESET | |
230 | + EXC_XFER_TEMPLATE(Alignment, AlignmentException, MSR_KERNEL, COPY_EE) | |
238 | 231 | |
239 | 232 | /* Program check exception */ |
240 | 233 | . = EXC_OFF_PROGRAM |
241 | 234 | ProgramCheck: |
242 | 235 | EXCEPTION_PROLOG(SRR0, SRR1) |
243 | 236 | addi r3,r1,STACK_FRAME_OVERHEAD |
244 | - li r20,MSR_KERNEL | |
245 | - rlwimi r20,r23,0,16,16 /* copy EE bit from saved MSR */ | |
246 | - lwz r6,GOT(transfer_to_handler) | |
247 | - mtlr r6 | |
248 | - blrl | |
249 | -.L_ProgramCheck: | |
250 | - .long ProgramCheckException - _start + EXC_OFF_SYS_RESET | |
251 | - .long int_return - _start + EXC_OFF_SYS_RESET | |
237 | + EXC_XFER_TEMPLATE(ProgramCheck, ProgramCheckException, | |
238 | + MSR_KERNEL, COPY_EE) | |
252 | 239 | |
253 | 240 | /* No FPU on MPC8xx. This exception is not supposed to happen. |
254 | 241 | */ |
... | ... | @@ -693,20 +680,6 @@ |
693 | 680 | blt 4b |
694 | 681 | |
695 | 682 | mtlr r4 /* restore link register */ |
696 | - blr | |
697 | - | |
698 | - /* | |
699 | - * Function: relocate entries for one exception vector | |
700 | - */ | |
701 | -trap_reloc: | |
702 | - lwz r0, 0(r7) /* hdlr ... */ | |
703 | - add r0, r0, r3 /* ... += dest_addr */ | |
704 | - stw r0, 0(r7) | |
705 | - | |
706 | - lwz r0, 4(r7) /* int_return ... */ | |
707 | - add r0, r0, r3 /* ... += dest_addr */ | |
708 | - stw r0, 4(r7) | |
709 | - | |
710 | 683 | blr |
711 | 684 | |
712 | 685 | /* Setup the BAT registers. |
cpu/mpc8260/start.S
... | ... | @@ -286,30 +286,15 @@ |
286 | 286 | mfspr r5,DSISR |
287 | 287 | stw r5,_DSISR(r21) |
288 | 288 | addi r3,r1,STACK_FRAME_OVERHEAD |
289 | - li r20,MSR_KERNEL | |
290 | - rlwimi r20,r23,0,16,16 /* copy EE bit from saved MSR */ | |
291 | - rlwimi r20,r23,0,25,25 /* copy IP bit from saved MSR */ | |
292 | - lwz r6,GOT(transfer_to_handler) | |
293 | - mtlr r6 | |
294 | - blrl | |
295 | -.L_Alignment: | |
296 | - .long AlignmentException - _start + EXC_OFF_SYS_RESET | |
297 | - .long int_return - _start + EXC_OFF_SYS_RESET | |
289 | + EXC_XFER_TEMPLATE(Alignment, AlignmentException, MSR_KERNEL, COPY_EE) | |
298 | 290 | |
299 | 291 | /* Program check exception */ |
300 | 292 | . = 0x700 |
301 | 293 | ProgramCheck: |
302 | 294 | EXCEPTION_PROLOG(SRR0, SRR1) |
303 | 295 | addi r3,r1,STACK_FRAME_OVERHEAD |
304 | - li r20,MSR_KERNEL | |
305 | - rlwimi r20,r23,0,16,16 /* copy EE bit from saved MSR */ | |
306 | - rlwimi r20,r23,0,25,25 /* copy IP bit from saved MSR */ | |
307 | - lwz r6,GOT(transfer_to_handler) | |
308 | - mtlr r6 | |
309 | - blrl | |
310 | -.L_ProgramCheck: | |
311 | - .long ProgramCheckException - _start + EXC_OFF_SYS_RESET | |
312 | - .long int_return - _start + EXC_OFF_SYS_RESET | |
296 | + EXC_XFER_TEMPLATE(ProgramCheck, ProgramCheckException, | |
297 | + MSR_KERNEL, COPY_EE) | |
313 | 298 | |
314 | 299 | STD_EXCEPTION(0x800, FPUnavailable, UnknownException) |
315 | 300 | |
... | ... | @@ -1032,19 +1017,5 @@ |
1032 | 1017 | SYNC |
1033 | 1018 | |
1034 | 1019 | mtlr r4 /* restore link register */ |
1035 | - blr | |
1036 | - | |
1037 | - /* | |
1038 | - * Function: relocate entries for one exception vector | |
1039 | - */ | |
1040 | -trap_reloc: | |
1041 | - lwz r0, 0(r7) /* hdlr ... */ | |
1042 | - add r0, r0, r3 /* ... += dest_addr */ | |
1043 | - stw r0, 0(r7) | |
1044 | - | |
1045 | - lwz r0, 4(r7) /* int_return ... */ | |
1046 | - add r0, r0, r3 /* ... += dest_addr */ | |
1047 | - stw r0, 4(r7) | |
1048 | - | |
1049 | 1020 | blr |
cpu/mpc83xx/start.S
... | ... | @@ -338,30 +338,15 @@ |
338 | 338 | mfspr r5,DSISR |
339 | 339 | stw r5,_DSISR(r21) |
340 | 340 | addi r3,r1,STACK_FRAME_OVERHEAD |
341 | - li r20,MSR_KERNEL | |
342 | - rlwimi r20,r23,0,16,16 /* copy EE bit from saved MSR */ | |
343 | - rlwimi r20,r23,0,25,25 /* copy IP bit from saved MSR */ | |
344 | - lwz r6,GOT(transfer_to_handler) | |
345 | - mtlr r6 | |
346 | - blrl | |
347 | -.L_Alignment: | |
348 | - .long AlignmentException - _start + EXC_OFF_SYS_RESET | |
349 | - .long int_return - _start + EXC_OFF_SYS_RESET | |
341 | + EXC_XFER_TEMPLATE(Alignment, AlignmentException, MSR_KERNEL, COPY_EE) | |
350 | 342 | |
351 | 343 | /* Program check exception */ |
352 | 344 | . = 0x700 |
353 | 345 | ProgramCheck: |
354 | 346 | EXCEPTION_PROLOG(SRR0, SRR1) |
355 | 347 | addi r3,r1,STACK_FRAME_OVERHEAD |
356 | - li r20,MSR_KERNEL | |
357 | - rlwimi r20,r23,0,16,16 /* copy EE bit from saved MSR */ | |
358 | - rlwimi r20,r23,0,25,25 /* copy IP bit from saved MSR */ | |
359 | - lwz r6,GOT(transfer_to_handler) | |
360 | - mtlr r6 | |
361 | - blrl | |
362 | -.L_ProgramCheck: | |
363 | - .long ProgramCheckException - _start + EXC_OFF_SYS_RESET | |
364 | - .long int_return - _start + EXC_OFF_SYS_RESET | |
348 | + EXC_XFER_TEMPLATE(ProgramCheck, ProgramCheckException, | |
349 | + MSR_KERNEL, COPY_EE) | |
365 | 350 | |
366 | 351 | STD_EXCEPTION(0x800, FPUnavailable, UnknownException) |
367 | 352 | |
... | ... | @@ -1086,19 +1071,6 @@ |
1086 | 1071 | mtlr r4 /* restore link register */ |
1087 | 1072 | blr |
1088 | 1073 | |
1089 | - /* | |
1090 | - * Function: relocate entries for one exception vector | |
1091 | - */ | |
1092 | -trap_reloc: | |
1093 | - lwz r0, 0(r7) /* hdlr ... */ | |
1094 | - add r0, r0, r3 /* ... += dest_addr */ | |
1095 | - stw r0, 0(r7) | |
1096 | - | |
1097 | - lwz r0, 4(r7) /* int_return ... */ | |
1098 | - add r0, r0, r3 /* ... += dest_addr */ | |
1099 | - stw r0, 4(r7) | |
1100 | - | |
1101 | - blr | |
1102 | 1074 | #endif /* !CONFIG_NAND_SPL */ |
1103 | 1075 | |
1104 | 1076 | #ifdef CONFIG_SYS_INIT_RAM_LOCK |
cpu/mpc85xx/start.S
... | ... | @@ -415,28 +415,15 @@ |
415 | 415 | mfspr r5,DSISR |
416 | 416 | stw r5,_DSISR(r21) |
417 | 417 | addi r3,r1,STACK_FRAME_OVERHEAD |
418 | - li r20,MSR_KERNEL | |
419 | - rlwimi r20,r23,0,16,16 /* copy EE bit from saved MSR */ | |
420 | - lwz r6,GOT(transfer_to_handler) | |
421 | - mtlr r6 | |
422 | - blrl | |
423 | -.L_Alignment: | |
424 | - .long AlignmentException - _start + _START_OFFSET | |
425 | - .long int_return - _start + _START_OFFSET | |
418 | + EXC_XFER_TEMPLATE(Alignment, AlignmentException, MSR_KERNEL, COPY_EE) | |
426 | 419 | |
427 | 420 | /* Program check exception */ |
428 | 421 | . = 0x0700 |
429 | 422 | ProgramCheck: |
430 | 423 | EXCEPTION_PROLOG(SRR0, SRR1) |
431 | 424 | addi r3,r1,STACK_FRAME_OVERHEAD |
432 | - li r20,MSR_KERNEL | |
433 | - rlwimi r20,r23,0,16,16 /* copy EE bit from saved MSR */ | |
434 | - lwz r6,GOT(transfer_to_handler) | |
435 | - mtlr r6 | |
436 | - blrl | |
437 | -.L_ProgramCheck: | |
438 | - .long ProgramCheckException - _start + _START_OFFSET | |
439 | - .long int_return - _start + _START_OFFSET | |
425 | + EXC_XFER_TEMPLATE(ProgramCheck, ProgramCheckException, | |
426 | + MSR_KERNEL, COPY_EE) | |
440 | 427 | |
441 | 428 | /* No FPU on MPC85xx. This exception is not supposed to happen. |
442 | 429 | */ |
... | ... | @@ -1087,20 +1074,6 @@ |
1087 | 1074 | mtspr IVPR,r7 |
1088 | 1075 | |
1089 | 1076 | mtlr r4 /* restore link register */ |
1090 | - blr | |
1091 | - | |
1092 | - /* | |
1093 | - * Function: relocate entries for one exception vector | |
1094 | - */ | |
1095 | -trap_reloc: | |
1096 | - lwz r0,0(r7) /* hdlr ... */ | |
1097 | - add r0,r0,r3 /* ... += dest_addr */ | |
1098 | - stw r0,0(r7) | |
1099 | - | |
1100 | - lwz r0,4(r7) /* int_return ... */ | |
1101 | - add r0,r0,r3 /* ... += dest_addr */ | |
1102 | - stw r0,4(r7) | |
1103 | - | |
1104 | 1077 | blr |
1105 | 1078 | |
1106 | 1079 | .globl unlock_ram_in_cache |
cpu/mpc86xx/start.S
... | ... | @@ -121,28 +121,15 @@ |
121 | 121 | mfspr r5,DSISR |
122 | 122 | stw r5,_DSISR(r21) |
123 | 123 | addi r3,r1,STACK_FRAME_OVERHEAD |
124 | - li r20,MSR_KERNEL | |
125 | - rlwimi r20,r23,0,16,16 /* copy EE bit from saved MSR */ | |
126 | - lwz r6,GOT(transfer_to_handler) | |
127 | - mtlr r6 | |
128 | - blrl | |
129 | -.L_Alignment: | |
130 | - .long AlignmentException - _start + EXC_OFF_SYS_RESET | |
131 | - .long int_return - _start + EXC_OFF_SYS_RESET | |
124 | + EXC_XFER_TEMPLATE(Alignment, AlignmentException, MSR_KERNEL, COPY_EE) | |
132 | 125 | |
133 | 126 | /* Program check exception */ |
134 | 127 | . = 0x700 |
135 | 128 | ProgramCheck: |
136 | 129 | EXCEPTION_PROLOG(SRR0, SRR1) |
137 | 130 | addi r3,r1,STACK_FRAME_OVERHEAD |
138 | - li r20,MSR_KERNEL | |
139 | - rlwimi r20,r23,0,16,16 /* copy EE bit from saved MSR */ | |
140 | - lwz r6,GOT(transfer_to_handler) | |
141 | - mtlr r6 | |
142 | - blrl | |
143 | -.L_ProgramCheck: | |
144 | - .long ProgramCheckException - _start + EXC_OFF_SYS_RESET | |
145 | - .long int_return - _start + EXC_OFF_SYS_RESET | |
131 | + EXC_XFER_TEMPLATE(ProgramCheck, ProgramCheckException, | |
132 | + MSR_KERNEL, COPY_EE) | |
146 | 133 | |
147 | 134 | STD_EXCEPTION(0x800, FPUnavailable, UnknownException) |
148 | 135 | |
... | ... | @@ -846,23 +833,6 @@ |
846 | 833 | mtmsr r7 |
847 | 834 | |
848 | 835 | mtlr r4 /* restore link register */ |
849 | - blr | |
850 | - | |
851 | - /* | |
852 | - * Function: relocate entries for one exception vector | |
853 | - */ | |
854 | -trap_reloc: | |
855 | - lwz r0, 0(r7) /* hdlr ... */ | |
856 | - add r0, r0, r3 /* ... += dest_addr */ | |
857 | - stw r0, 0(r7) | |
858 | - | |
859 | - lwz r0, 4(r7) /* int_return ... */ | |
860 | - add r0, r0, r3 /* ... += dest_addr */ | |
861 | - stw r0, 4(r7) | |
862 | - | |
863 | - sync | |
864 | - isync | |
865 | - | |
866 | 836 | blr |
867 | 837 | |
868 | 838 | .globl enable_ext_addr |
cpu/mpc8xx/start.S
... | ... | @@ -231,28 +231,15 @@ |
231 | 231 | mfspr r5,DSISR |
232 | 232 | stw r5,_DSISR(r21) |
233 | 233 | addi r3,r1,STACK_FRAME_OVERHEAD |
234 | - li r20,MSR_KERNEL | |
235 | - rlwimi r20,r23,0,16,16 /* copy EE bit from saved MSR */ | |
236 | - lwz r6,GOT(transfer_to_handler) | |
237 | - mtlr r6 | |
238 | - blrl | |
239 | -.L_Alignment: | |
240 | - .long AlignmentException - _start + EXC_OFF_SYS_RESET | |
241 | - .long int_return - _start + EXC_OFF_SYS_RESET | |
234 | + EXC_XFER_TEMPLATE(Alignment, AlignmentException, MSR_KERNEL, COPY_EE) | |
242 | 235 | |
243 | 236 | /* Program check exception */ |
244 | 237 | . = 0x700 |
245 | 238 | ProgramCheck: |
246 | 239 | EXCEPTION_PROLOG(SRR0, SRR1) |
247 | 240 | addi r3,r1,STACK_FRAME_OVERHEAD |
248 | - li r20,MSR_KERNEL | |
249 | - rlwimi r20,r23,0,16,16 /* copy EE bit from saved MSR */ | |
250 | - lwz r6,GOT(transfer_to_handler) | |
251 | - mtlr r6 | |
252 | - blrl | |
253 | -.L_ProgramCheck: | |
254 | - .long ProgramCheckException - _start + EXC_OFF_SYS_RESET | |
255 | - .long int_return - _start + EXC_OFF_SYS_RESET | |
241 | + EXC_XFER_TEMPLATE(ProgramCheck, ProgramCheckException, | |
242 | + MSR_KERNEL, COPY_EE) | |
256 | 243 | |
257 | 244 | /* No FPU on MPC8xx. This exception is not supposed to happen. |
258 | 245 | */ |
... | ... | @@ -693,22 +680,5 @@ |
693 | 680 | blt 4b |
694 | 681 | |
695 | 682 | mtlr r4 /* restore link register */ |
696 | - blr | |
697 | - | |
698 | - /* | |
699 | - * Function: relocate entries for one exception vector | |
700 | - */ | |
701 | -trap_reloc: | |
702 | - lwz r0, 0(r7) /* hdlr ... */ | |
703 | - add r0, r0, r3 /* ... += dest_addr */ | |
704 | - stw r0, 0(r7) | |
705 | - | |
706 | - lwz r0, 4(r7) /* int_return ... */ | |
707 | - add r0, r0, r3 /* ... += dest_addr */ | |
708 | - stw r0, 4(r7) | |
709 | - | |
710 | - sync | |
711 | - isync | |
712 | - | |
713 | 683 | blr |
cpu/ppc4xx/start.S
... | ... | @@ -574,28 +574,15 @@ |
574 | 574 | mfspr r5,DSISR |
575 | 575 | stw r5,_DSISR(r21) |
576 | 576 | addi r3,r1,STACK_FRAME_OVERHEAD |
577 | - li r20,MSR_KERNEL | |
578 | - rlwimi r20,r23,0,16,16 /* copy EE bit from saved MSR */ | |
579 | - lwz r6,GOT(transfer_to_handler) | |
580 | - mtlr r6 | |
581 | - blrl | |
582 | -.L_Alignment: | |
583 | - .long AlignmentException - _start + _START_OFFSET | |
584 | - .long int_return - _start + _START_OFFSET | |
577 | + EXC_XFER_TEMPLATE(Alignment, AlignmentException, MSR_KERNEL, COPY_EE) | |
585 | 578 | |
586 | 579 | /* Program check exception */ |
587 | 580 | . = 0x700 |
588 | 581 | ProgramCheck: |
589 | 582 | EXCEPTION_PROLOG(SRR0, SRR1) |
590 | 583 | addi r3,r1,STACK_FRAME_OVERHEAD |
591 | - li r20,MSR_KERNEL | |
592 | - rlwimi r20,r23,0,16,16 /* copy EE bit from saved MSR */ | |
593 | - lwz r6,GOT(transfer_to_handler) | |
594 | - mtlr r6 | |
595 | - blrl | |
596 | -.L_ProgramCheck: | |
597 | - .long ProgramCheckException - _start + _START_OFFSET | |
598 | - .long int_return - _start + _START_OFFSET | |
584 | + EXC_XFER_TEMPLATE(ProgramCheck, ProgramCheckException, | |
585 | + MSR_KERNEL, COPY_EE) | |
599 | 586 | |
600 | 587 | #ifdef CONFIG_440 |
601 | 588 | STD_EXCEPTION(0x800, FPUnavailable, UnknownException) |
... | ... | @@ -1740,20 +1727,6 @@ |
1740 | 1727 | #endif |
1741 | 1728 | |
1742 | 1729 | mtlr r4 /* restore link register */ |
1743 | - blr | |
1744 | - | |
1745 | - /* | |
1746 | - * Function: relocate entries for one exception vector | |
1747 | - */ | |
1748 | -trap_reloc: | |
1749 | - lwz r0, 0(r7) /* hdlr ... */ | |
1750 | - add r0, r0, r3 /* ... += dest_addr */ | |
1751 | - stw r0, 0(r7) | |
1752 | - | |
1753 | - lwz r0, 4(r7) /* int_return ... */ | |
1754 | - add r0, r0, r3 /* ... += dest_addr */ | |
1755 | - stw r0, 4(r7) | |
1756 | - | |
1757 | 1730 | blr |
1758 | 1731 | |
1759 | 1732 | #if defined(CONFIG_440) |
include/ppc_asm.tmpl
... | ... | @@ -257,47 +257,44 @@ |
257 | 257 | * OFFSET values only; they must be relocated first before they can |
258 | 258 | * be used! |
259 | 259 | */ |
260 | -#define STD_EXCEPTION(n, label, hdlr) \ | |
261 | - . = n; \ | |
262 | -label: \ | |
263 | - EXCEPTION_PROLOG(SRR0, SRR1); \ | |
264 | - lwz r3,GOT(transfer_to_handler); \ | |
265 | - mtlr r3; \ | |
266 | - addi r3,r1,STACK_FRAME_OVERHEAD; \ | |
267 | - li r20,MSR_KERNEL; \ | |
260 | +#define COPY_EE(d, s) rlwimi d,s,0,16,16 | |
261 | +#define NOCOPY(d, s) | |
262 | +#define EXC_XFER_TEMPLATE(label, hdlr, msr, copyee) \ | |
263 | + bl 1f; \ | |
264 | +1: mflr r20; \ | |
265 | + lwz r20,(.L_ ## label)-1b+8(r20); \ | |
266 | + mtlr r20; \ | |
267 | + li r20,msr; \ | |
268 | + copyee(r20,r23); \ | |
268 | 269 | rlwimi r20,r23,0,25,25; \ |
269 | 270 | blrl; \ |
270 | 271 | .L_ ## label : \ |
271 | 272 | .long hdlr - _start + _START_OFFSET; \ |
272 | - .long int_return - _start + _START_OFFSET | |
273 | + .long int_return - _start + _START_OFFSET; \ | |
274 | + .long transfer_to_handler - _start + _START_OFFSET | |
273 | 275 | |
276 | +#define STD_EXCEPTION(n, label, hdlr) \ | |
277 | + . = n; \ | |
278 | +label: \ | |
279 | + EXCEPTION_PROLOG(SRR0, SRR1); \ | |
280 | + addi r3,r1,STACK_FRAME_OVERHEAD; \ | |
281 | + EXC_XFER_TEMPLATE(label, hdlr, MSR_KERNEL, NOCOPY) \ | |
282 | + | |
274 | 283 | #define CRIT_EXCEPTION(n, label, hdlr) \ |
275 | 284 | . = n; \ |
276 | 285 | label: \ |
277 | 286 | EXCEPTION_PROLOG(CSRR0, CSRR1); \ |
278 | - lwz r3,GOT(transfer_to_handler); \ | |
279 | - mtlr r3; \ | |
280 | 287 | addi r3,r1,STACK_FRAME_OVERHEAD; \ |
281 | - li r20,(MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE)); \ | |
282 | - rlwimi r20,r23,0,25,25; \ | |
283 | - blrl; \ | |
284 | -.L_ ## label : \ | |
285 | - .long hdlr - _start + _START_OFFSET; \ | |
286 | - .long crit_return - _start + _START_OFFSET | |
288 | + EXC_XFER_TEMPLATE(label, hdlr, \ | |
289 | + MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE), NOCOPY) \ | |
287 | 290 | |
288 | 291 | #define MCK_EXCEPTION(n, label, hdlr) \ |
289 | 292 | . = n; \ |
290 | 293 | label: \ |
291 | 294 | EXCEPTION_PROLOG(MCSRR0, MCSRR1); \ |
292 | - lwz r3,GOT(transfer_to_handler); \ | |
293 | - mtlr r3; \ | |
294 | 295 | addi r3,r1,STACK_FRAME_OVERHEAD; \ |
295 | - li r20,(MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE)); \ | |
296 | - rlwimi r20,r23,0,25,25; \ | |
297 | - blrl; \ | |
298 | -.L_ ## label : \ | |
299 | - .long hdlr - _start + _START_OFFSET; \ | |
300 | - .long mck_return - _start + _START_OFFSET | |
296 | + EXC_XFER_TEMPLATE(label, hdlr, \ | |
297 | + MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE), NOCOPY) \ | |
301 | 298 | |
302 | 299 | #endif /* __PPC_ASM_TMPL__ */ |
lib_ppc/Makefile
lib_ppc/reloc.S
1 | +/* | |
2 | + * Copyright (C) 2009 Wolfgang Denk <wd@denx.de> | |
3 | + * | |
4 | + * See file CREDITS for list of people who contributed to this | |
5 | + * project. | |
6 | + * | |
7 | + * This program is free software; you can redistribute it and/or | |
8 | + * modify it under the terms of the GNU General Public License as | |
9 | + * published by the Free Software Foundation; either version 2 of | |
10 | + * the License, or (at your option) any later version. | |
11 | + * | |
12 | + * This program is distributed in the hope that it will be useful, | |
13 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | + * GNU General Public License for more details. | |
16 | + * | |
17 | + * You should have received a copy of the GNU General Public License | |
18 | + * along with this program; if not, write to the Free Software | |
19 | + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, | |
20 | + * MA 02111-1307 USA | |
21 | + */ | |
22 | + | |
23 | +#include <ppc_asm.tmpl> | |
24 | + | |
25 | + .file "reloc.S" | |
26 | + | |
27 | + .text | |
28 | +#ifndef CONFIG_NAND_SPL | |
29 | + /* | |
30 | + * Function: relocate entries for one exception vector | |
31 | + */ | |
32 | + .globl trap_reloc | |
33 | + .type trap_reloc, @function | |
34 | +trap_reloc: | |
35 | + lwz r0, 0(r7) /* hdlr ... */ | |
36 | + add r0, r0, r3 /* ... += dest_addr */ | |
37 | + stw r0, 0(r7) | |
38 | + | |
39 | + lwz r0, 4(r7) /* int_return ... */ | |
40 | + add r0, r0, r3 /* ... += dest_addr */ | |
41 | + stw r0, 4(r7) | |
42 | + | |
43 | + lwz r0, 8(r7) /* transfer_to_handler ...*/ | |
44 | + add r0, r0, r3 /* ... += dest_addr */ | |
45 | + stw r0, 8(r7) | |
46 | + | |
47 | + blr | |
48 | + .size trap_reloc, .-trap_reloc | |
49 | +#endif |