patch-2.4.0-test2 linux/arch/arm/kernel/entry-armv.S
Next file: linux/arch/arm/kernel/entry-common.S
Previous file: linux/arch/arm/kernel/ecard.c
Back to the patch index
Back to the overall index
- Lines: 193
- Date:
Mon Jun 19 17:59:34 2000
- Orig file:
v2.4.0-test1/linux/arch/arm/kernel/entry-armv.S
- Orig date:
Fri May 12 14:18:55 2000
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/kernel/entry-armv.S linux/arch/arm/kernel/entry-armv.S
@@ -32,7 +32,7 @@
.text
-#define PF_TRACESYS 0x20
+#define PT_TRACESYS 0x00000002
@ Bad Abort numbers
@ -----------------
@@ -233,14 +233,12 @@
.macro irq_prio_table
.endm
-#elif defined(CONFIG_HOST_FOOTBRIDGE) || defined(CONFIG_ADDIN_FOOTBRIDGE)
+#elif defined(CONFIG_FOOTBRIDGE)
#include <asm/dec21285.h>
.macro disable_fiq
.endm
- .equ irq_mask_pci_err_high, IRQ_MASK_PCI_ERR & 0xff000000
- .equ irq_mask_pci_err_low, IRQ_MASK_PCI_ERR & 0x00ffffff
.equ dc21285_high, ARMCSR_BASE & 0xff000000
.equ dc21285_low, ARMCSR_BASE & 0x00ffffff
@@ -311,10 +309,24 @@
movne \irqnr, #IRQ_CONTX
bne 1001f
- tst \irqstat, #irq_mask_pci_err_high
- tsteq \irqstat, #irq_mask_pci_err_low
- movne \irqnr, #IRQ_PCI_ERR
+ tst \irqstat, #IRQ_MASK_PCI_ABORT
+ movne \irqnr, #IRQ_PCI_ABORT
bne 1001f
+
+ tst \irqstat, #IRQ_MASK_PCI_SERR
+ movne \irqnr, #IRQ_PCI_SERR
+ bne 1001f
+
+ tst \irqstat, #IRQ_MASK_DISCARD_TIMER
+ movne \irqnr, #IRQ_DISCARD_TIMER
+ bne 1001f
+
+ tst \irqstat, #IRQ_MASK_PCI_DPERR
+ movne \irqnr, #IRQ_PCI_DPERR
+ bne 1001f
+
+ tst \irqstat, #IRQ_MASK_PCI_PERR
+ movne \irqnr, #IRQ_PCI_PERR
1001:
.endm
@@ -389,12 +401,25 @@
ldr \irqnr, [r4, #4] @ ICMR = 0xfa050004
ands \irqstat, \irqstat, \irqnr
mov \irqnr, #0
- beq 1002f
-1001: tst \irqstat, #1
- addeq \irqnr, \irqnr, #1
- moveq \irqstat, \irqstat, lsr #1
- beq 1001b
-1002:
+ beq 1001f
+ tst \irqstat, #0xff
+ moveq \irqstat, \irqstat, lsr #8
+ addeq \irqnr, \irqnr, #8
+ tsteq \irqstat, #0xff
+ moveq \irqstat, \irqstat, lsr #8
+ addeq \irqnr, \irqnr, #8
+ tsteq \irqstat, #0xff
+ moveq \irqstat, \irqstat, lsr #8
+ addeq \irqnr, \irqnr, #8
+ tst \irqstat, #0x0f
+ moveq \irqstat, \irqstat, lsr #4
+ addeq \irqnr, \irqnr, #4
+ tst \irqstat, #0x03
+ moveq \irqstat, \irqstat, lsr #2
+ addeq \irqnr, \irqnr, #2
+ tst \irqstat, #0x01
+ addeqs \irqnr, \irqnr, #1
+1001:
.endm
.macro irq_prio_table
@@ -441,7 +466,8 @@
.macro restore_user_regs
ldr r0, [sp, #S_PSR] @ Get calling cpsr
- msr cpsr_c, #I_BIT | MODE_SVC @ disable IRQs
+ mov ip, #I_BIT | MODE_SVC
+ msr cpsr_c, ip @ disable IRQs
msr spsr, r0 @ save in spsr_svc
ldmia sp, {r0 - lr}^ @ Get calling r0 - lr
mov r0, r0
@@ -592,9 +618,10 @@
bl cpu_data_abort
#endif
msr cpsr_c, r9
- mov r3, sp
+ mov r2, sp
bl SYMBOL_NAME(do_DataAbort)
- msr cpsr_c, #I_BIT | MODE_SVC
+ mov r0, #I_BIT | MODE_SVC
+ msr cpsr_c, r0
ldr r0, [sp, #S_PSR]
msr spsr, r0
ldmia sp, {r0 - pc}^ @ load r0 - pc, cpsr
@@ -636,7 +663,8 @@
mov r1, sp @ struct pt_regs *regs
bl SYMBOL_NAME(do_undefinstr)
-1: msr cpsr_c, #I_BIT | MODE_SVC
+1: mov r0, #I_BIT | MODE_SVC
+ msr cpsr_c, r0
ldr lr, [sp, #S_PSR] @ Get SVC cpsr
msr spsr, lr
ldmia sp, {r0 - pc}^ @ Restore SVC registers
@@ -675,8 +703,9 @@
#else
bl cpu_data_abort
#endif
- msr cpsr_c, #MODE_SVC @ Enable interrupts
- mov r3, sp
+ mov r2, #MODE_SVC
+ msr cpsr_c, r2 @ Enable interrupts
+ mov r2, sp
adrsvc al, lr, ret_from_sys_call
b SYMBOL_NAME(do_DataAbort)
@@ -720,9 +749,10 @@
add r10, r10, #TSS_FPESAVE @ r10 = workspace
ldr pc, [r4] @ Call FP module USR entry point
-fpundefinstr: mov r0, lr
+fpundefinstr: mov r0, #MODE_SVC
+ msr cpsr_c, r0 @ Enable interrupts
+ mov r0, lr
mov r1, sp
- msr cpsr_c, #MODE_SVC @ Enable interrupts
adrsvc al, lr, ret_from_sys_call
b SYMBOL_NAME(do_undefinstr)
@@ -736,7 +766,8 @@
stmdb r8, {sp, lr}^ @ Save sp_usr lr_usr
alignment_trap r4, r7, __temp_abt
zero_fp
- msr cpsr_c, #MODE_SVC @ Enable interrupts
+ mov r0, #MODE_SVC
+ msr cpsr_c, r0 @ Enable interrupts
mov r0, r5 @ address (pc)
mov r1, sp @ regs
bl SYMBOL_NAME(do_PrefetchAbort) @ call abort handler
@@ -816,7 +847,8 @@
@
@ now branch to the relevent MODE handling routine
@
- msr spsr_c, #I_BIT | MODE_SVC @ switch to SVC_32 mode
+ mov r13, #I_BIT | MODE_SVC
+ msr spsr_c, r13 @ switch to SVC_32 mode
and lr, lr, #15
ldr lr, [pc, lr, lsl #2]
@@ -856,7 +888,8 @@
@
@ now branch to the relevent MODE handling routine
@
- msr spsr_c, #I_BIT | MODE_SVC @ switch to SVC_32 mode
+ mov r13, #I_BIT | MODE_SVC
+ msr spsr_c, r13 @ switch to SVC_32 mode
and lr, lr, #15
ldr lr, [pc, lr, lsl #2]
@@ -897,7 +930,8 @@
@
@ now branch to the relevent MODE handling routine
@
- msr spsr_c, #I_BIT | MODE_SVC @ switch to SVC_32 mode
+ mov r13, #I_BIT | MODE_SVC
+ msr spsr_c, r13 @ switch to SVC_32 mode
ands lr, lr, #15
ldreq lr, .LCtab_pabt
@@ -924,7 +958,8 @@
@
@ now branch to the relevent MODE handling routine
@
- msr spsr_c, #I_BIT | MODE_SVC @ switch to SVC_32 mode
+ mov r13, #I_BIT | MODE_SVC
+ msr spsr_c, r13 @ switch to SVC_32 mode
and lr, lr, #15
ldr lr, [pc, lr, lsl #2]
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)