ARM: make a common low level IRQ helper macros for GIC based platforms
Subsystems (5)
PATCH 1/2 ARM: make a common low level IRQ helper macros for GIC based platforms
The IRQ helper macros for GIC based platforms are similar.
Signed-off-by srinidhi kasagar <[email protected]>
Acked-by Linus Walleij <[email protected]>
--- arch/arm/include/asm/entry-macro-gic.S | 74 ++++++++++++++++++++ arch/arm/mach-cns3xxx/include/mach/entry-macro.S | 73 +------------------- arch/arm/mach-omap2/include/mach/entry-macro.S | 67 +----------------- arch/arm/mach-realview/include/mach/entry-macro.S | 72 +------------------- arch/arm/mach-ux500/include/mach/entry-macro.S | 77 +-------------------- arch/arm/mach-vexpress/include/mach/entry-macro.S | 68 +------------------ 6 files changed, 81 insertions(+), 350 deletions(-) create mode 100644 arch/arm/include/asm/entry-macro-gic.S
arch/arm/include/asm/entry-macro-gic.S new file +74 -0
@@ -0,0 +1,74 @@ +/* + * Low-level IRQ helper macros for GIC based platforms + * + * This file is licensed under the terms of the GNU General Public + * License version 2. This program is licensed "as is" without any + * warranty of any kind, whether express or implied. + */ +#include <asm/hardware/gic.h> + + .macro disable_fiq + .endm + + .macro get_irqnr_preamble, base, tmp + ldr \base, =gic_cpu_base_addr + ldr \base, [\base] + .endm + + .macro arch_ret_to_user, tmp1, tmp2 + .endm + + /* + * The interrupt numbering scheme is defined in the + * interrupt controller spec. To wit: + * + * Interrupts 0-15 are IPI + * 16-28 are reserved + * 29-31 are local. We allow 30 to be used for the watchdog. + * 32-1020 are global + * 1021-1022 are reserved + * 1023 is "spurious" (no interrupt) + * + * For now, we ignore all local interrupts so only return an interrupt if it's + * between 30 and 1020. The test_for_ipi routine below will pick up on IPIs. + * + * A simple read from the controller will tell us the number of the highest + * priority enabled interrupt. We then just need to check whether it is in the + * valid range for an IRQ (30-1020 inclusive). + */ + + .macro get_irqnr_and_base, irqnr, irqstat, base, tmp + ldr \irqstat, [\base, #GIC_CPU_INTACK] /* bits 12-10 = src CPU, 9-0 = int # */ + ldr \tmp, =1021 + bic \irqnr, \irqstat, #0x1c00 + cmp \irqnr, #29 + cmpcc \irqnr, \irqnr + cmpne \irqnr, \tmp + cmpcs \irqnr, \irqnr + .endm + + /* + * We assume that irqstat (the raw value of the IRQ acknowledge + * register) is preserved from the macro above. + * If there is an IPI, we immediately signal end of interrupt on the + * controller, since this requires the original irqstat value which + * we won't easily be able to recreate later. + */ + + .macro test_for_ipi, irqnr, irqstat, base, tmp + bic \irqnr, \irqstat, #0x1c00 + cmp \irqnr, #16 + strcc \irqstat, [\base, #GIC_CPU_EOI] + cmpcs \irqnr, \irqnr + .endm + + /* As above, this assumes that irqstat and base are preserved.. */ + + .macro test_for_ltirq, irqnr, irqstat, base, tmp + bic \irqnr, \irqstat, #0x1c00 + mov \tmp, #0 + cmp \irqnr, #29 + moveq \tmp, #1 + streq \irqstat, [\base, #GIC_CPU_EOI] + cmp \tmp, #0 + .endm
arch/arm/mach-cns3xxx/include/mach/entry-macro.S +1 -72
76 lines not on this page · raw message
arch/arm/mach-omap2/include/mach/entry-macro.S +3 -64
84 lines not on this page · raw message
arch/arm/mach-realview/include/mach/entry-macro.S +1 -71
76 lines not on this page · raw message
arch/arm/mach-ux500/include/mach/entry-macro.S +1 -76
81 lines not on this page · raw message
arch/arm/mach-vexpress/include/mach/entry-macro.S +1 -67
68 lines not on this page · raw message
Signature · 1 line
1.6.3.3
PATCH 1/2 ARM: make a common low level IRQ helper macros for GIC based platforms
Quoted 4 lines · srinidhi
The IRQ helper macros for GIC based platforms are similar.
Signed-off-by srinidhi kasagar <[email protected]>Acked-by Linus Walleij <[email protected]>
Quoted 9 lines
--- arch/arm/include/asm/entry-macro-gic.S | 74 ++++++++++++++++++++ arch/arm/mach-cns3xxx/include/mach/entry-macro.S | 73 +------------------- arch/arm/mach-omap2/include/mach/entry-macro.S | 67 +----------------- arch/arm/mach-realview/include/mach/entry-macro.S | 72 +------------------- arch/arm/mach-ux500/include/mach/entry-macro.S | 77 +-------------------- arch/arm/mach-vexpress/include/mach/entry-macro.S | 68 +------------------ 6 files changed, 81 insertions(+), 350 deletions(-) create mode 100644 arch/arm/include/asm/entry-macro-gic.S
This works on CNS3xxx.
Acked-by Anton Vorontsov <[email protected]>
Thanks!