1/* 2 * Copyright (C) 2007 Lennert Buytenhek <buytenh@wantstofly.org> 3 * Copyright 2004-2009 Freescale Semiconductor, Inc. All Rights Reserved. 4 */ 5 6/* 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as 9 * published by the Free Software Foundation. 10 */ 11 12#include <mach/hardware.h> 13 14#define AVIC_NIMASK 0x04 15 16 @ this macro disables fast irq (not implemented) 17 .macro disable_fiq 18 .endm 19 20 .macro get_irqnr_preamble, base, tmp 21#ifndef CONFIG_MXC_TZIC 22 ldr \base, =avic_base 23 ldr \base, [\base] 24#ifdef CONFIG_MXC_IRQ_PRIOR 25 ldr r4, [\base, #AVIC_NIMASK] 26#endif 27#elif defined CONFIG_MXC_TZIC 28 ldr \base, =tzic_base 29 ldr \base, [\base] 30#endif /* CONFIG_MXC_TZIC */ 31 .endm 32 33 .macro arch_ret_to_user, tmp1, tmp2 34 .endm 35 36 @ this macro checks which interrupt occurred 37 @ and returns its number in irqnr 38 @ and returns if an interrupt occurred in irqstat 39 .macro get_irqnr_and_base, irqnr, irqstat, base, tmp 40#ifndef CONFIG_MXC_TZIC 41 @ Load offset & priority of the highest priority 42 @ interrupt pending from AVIC_NIVECSR 43 ldr \irqstat, [\base, #0x40] 44 @ Shift to get the decoded IRQ number, using ASR so 45 @ 'no interrupt pending' becomes 0xffffffff 46 mov \irqnr, \irqstat, asr #16 47 @ set zero flag if IRQ + 1 == 0 48 adds \tmp, \irqnr, #1 49#ifdef CONFIG_MXC_IRQ_PRIOR 50 bicne \tmp, \irqstat, #0xFFFFFFE0 51 strne \tmp, [\base, #AVIC_NIMASK] 52 streq r4, [\base, #AVIC_NIMASK] 53#endif 54#elif defined CONFIG_MXC_TZIC 55 @ Load offset & priority of the highest priority 56 @ interrupt pending. 57 @ 0x080 is INTSEC0 register 58 @ 0xD80 is HIPND0 register 59 mov \irqnr, #0 601000: add \irqstat, \base, \irqnr, lsr #3 61 ldr \tmp, [\irqstat, #0xd80] 62 ldr \irqstat, [\irqstat, #0x080] 63 ands \tmp, \tmp, \irqstat 64 bne 1001f 65 add \irqnr, \irqnr, #32 66 cmp \irqnr, #128 67 blo 1000b 68 b 2001f 691001: mov \irqstat, #1 701002: tst \tmp, \irqstat 71 bne 2002f 72 movs \tmp, \tmp, lsr #1 73 addne \irqnr, \irqnr, #1 74 bne 1002b 752001: 76 mov \irqnr, #0 772002: 78 movs \irqnr, \irqnr 79#endif 80 .endm 81 82 @ irq priority table (not used) 83 .macro irq_prio_table 84 .endm 85