blob: 6b1f088e0597975a2bd63c7f2fc7ab76d0e59dea [file] [log] [blame]
Russell Kinga09e64f2008-08-05 16:14:15 +01001/*
2 * arch/arm/mach-mv78xx0/include/mach/entry-macro.S
3 *
4 * Low-level IRQ helper macros for Marvell MV78xx0 platforms
5 *
6 * This file is licensed under the terms of the GNU General Public
7 * License version 2. This program is licensed "as is" without any
8 * warranty of any kind, whether express or implied.
9 */
10
Nicolas Pitrefdd8b072009-04-22 20:08:17 +010011#include <mach/bridge-regs.h>
Russell Kinga09e64f2008-08-05 16:14:15 +010012
Russell Kinga09e64f2008-08-05 16:14:15 +010013 .macro get_irqnr_preamble, base, tmp
14 ldr \base, =IRQ_VIRT_BASE
15 .endm
16
17 .macro get_irqnr_and_base, irqnr, irqstat, base, tmp
18 @ check low interrupts
19 ldr \irqstat, [\base, #IRQ_CAUSE_LOW_OFF]
20 ldr \tmp, [\base, #IRQ_MASK_LOW_OFF]
21 mov \irqnr, #31
22 ands \irqstat, \irqstat, \tmp
Lennert Buytenhek1f8081f2008-08-26 16:04:05 +020023 bne 1001f
Russell Kinga09e64f2008-08-05 16:14:15 +010024
25 @ if no low interrupts set, check high interrupts
Lennert Buytenhek1f8081f2008-08-26 16:04:05 +020026 ldr \irqstat, [\base, #IRQ_CAUSE_HIGH_OFF]
27 ldr \tmp, [\base, #IRQ_MASK_HIGH_OFF]
28 mov \irqnr, #63
29 ands \irqstat, \irqstat, \tmp
30 bne 1001f
31
32 @ if no high interrupts set, check error interrupts
33 ldr \irqstat, [\base, #IRQ_CAUSE_ERR_OFF]
34 ldr \tmp, [\base, #IRQ_MASK_ERR_OFF]
35 mov \irqnr, #95
36 ands \irqstat, \irqstat, \tmp
Russell Kinga09e64f2008-08-05 16:14:15 +010037
38 @ find first active interrupt source
Lennert Buytenhek1f8081f2008-08-26 16:04:05 +0200391001: clzne \irqstat, \irqstat
Russell Kinga09e64f2008-08-05 16:14:15 +010040 subne \irqnr, \irqnr, \irqstat
41 .endm