diff options
Diffstat (limited to 'arch/arm/kernel/entry-armv.S')
-rw-r--r-- | arch/arm/kernel/entry-armv.S | 87 |
1 files changed, 83 insertions, 4 deletions
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index f2d752cd4..a7553d350 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S @@ -9,13 +9,13 @@ * Note: there is a StrongARM bug in the STMIA rn, {regs}^ instruction that causes * it to save wrong values... Be aware! */ -#include <linux/config.h> /* for CONFIG_ARCH_EBSA110 */ -#include <linux/autoconf.h> +#include <linux/config.h> /* for CONFIG_ARCH_xxxx */ #include <linux/linkage.h> #include <asm/assembler.h> #include <asm/errno.h> #include <asm/hardware.h> +#include <asm/arch/irqs.h> #include "../lib/constants.h" @@ -90,7 +90,7 @@ adreq \base, irq_prio_l teq \irqstat, #0 - ldrneb \irqnr, [r5, \irqstat] @ get IRQ number + ldrneb \irqnr, [\base, \irqstat] @ get IRQ number .endm /* @@ -160,7 +160,7 @@ irq_prio_h: .byte 0, 8, 9, 8,10,10,10,10,11,11,11,11,10,10,10,10 adr \base, irq_prio_ebsa110 teq \irqstat, #0 - ldrneb \irqnr, [r5, \irqstat] @ get IRQ number + ldrneb \irqnr, [\base, \irqstat] @ get IRQ number .endm .macro irq_prio_table @@ -206,6 +206,85 @@ irq_prio_ebsa110: .macro irq_prio_table .endm +#elif defined(CONFIG_ARCH_NEXUSPCI) + + .macro disable_fiq + .endm + + .macro get_irqnr_and_base, irqnr, irqstat, base + ldr r4, =0xffe00000 + ldr \irqstat, [r4, #0x180] @ get interrupts + mov \irqnr, #0 +1001: tst \irqstat, #1 + addeq \irqnr, \irqnr, #1 + moveq \irqstat, \irqstat, lsr #1 + tsteq \irqnr, #32 + beq 1001b + teq \irqnr, #32 + .endm + + .macro irq_prio_table + .endm + +#elif defined(CONFIG_ARCH_VNC) + + .macro disable_fiq + .endm + + .macro get_irqnr_and_base, irqnr, irqstat, base + mov r4, #IO_BASE_ARM_CSR + ldr \irqstat, [r4, #IRQ_STATUS] @ just show us the unmasked ones + + @ run through hard priorities + @ timer + tst \irqstat, #IRQ_MASK_TIMER0 + movne \irqnr, #IRQ_TIMER0 + bne 1f + + @ ether10 + tst \irqstat, #IRQ_MASK_ETHER10 + movne \irqnr, #IRQ_ETHER10 + bne 1f + + @ ether100 + tst \irqstat, #IRQ_MASK_ETHER100 + movne \irqnr, #IRQ_ETHER100 + bne 1f + + @ video compressor + tst \irqstat, #IRQ_VIDCOMP_MASK + movne \irqnr, #IRQ_VIDCOMP + bne 1f + + @ now try all the PIC sources + @ determine whether we have an irq + tst \irqstat, #IRQ_MASK_EXTERN_IRQ + beq 3f + mov r4, #(IO_BASE_PCI_IACK & 0xff000000) + orr r4, r4, #(IO_BASE_PCI_IACK & 0x00ff0000) + ldrb \irqnr, [r4] @ get the IACK byte + b 1f + +3: @ PCI errors + tst \irqstat, #IRQ_MASK_PCI_ERR + movne \irqnr, #IRQ_PCI_ERR + bne 1f + + @ softint + tst \irqstat, #IRQ_MASK_SOFT_IRQ + movne \irqnr, #IRQ_SOFT_IRQ + bne 1f + + @ debug uart + tst \irqstat, #IRQ_MASK_UART_DEBUG + movne \irqnr, #IRQ_UART_DEBUG + bne 1f + + @ watchdog + tst \irqstat, #IRQ_WATCHDOG_MASK + movne \irqnr, #IRQ_WATCHDOG + +1: @ If Z is set, then we will not enter an interrupt #else #error Unknown architecture #endif |