Commit | Line | Data |
---|---|---|
6fa3eb70 S |
1 | #include <mach/hardware.h> |
2 | #include <linux/version.h> | |
3 | ||
4 | #if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) | |
5 | #include <asm/hardware/gic.h> | |
6 | #else | |
7 | #include <linux/irqchip/arm-gic.h> | |
8 | #endif | |
9 | ||
10 | #include "mt_reg_base.h" | |
11 | #include "irqs.h" | |
12 | ||
13 | /* leave disable_fiq as an empty macro */ | |
14 | .macro disable_fiq | |
15 | .endm | |
16 | ||
17 | .macro get_irqnr_preamble, base, tmp | |
18 | ldr \base, =GIC_CPU_BASE | |
19 | .endm | |
20 | ||
21 | .macro arch_ret_to_user, tmp1, tmp2 | |
22 | .endm | |
23 | ||
24 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | |
25 | #if defined(CONFIG_FIQ) && !defined(CONFIG_MTK_IN_HOUSE_TEE_SUPPORT) | |
26 | ldr \irqstat, [\base, #GIC_CPU_AIAR] /* bits 12-10 = src CPU, 9-0 = int # */ | |
27 | #else | |
28 | ldr \irqstat, [\base, #GIC_CPU_INTACK] /* bits 12-10 = src CPU, 9-0 = int # */ | |
29 | #endif | |
30 | ldr \tmp, =NR_IRQS | |
31 | bic \irqnr, \irqstat, #0x1c00 | |
32 | ||
33 | /* if (irqnr >= NR_IRQS) return NO_IRQ (0) */ | |
34 | cmp \irqnr, \tmp | |
35 | movcs \tmp, #0 | |
36 | bcs BSYM(702f) | |
37 | ||
38 | /* if (irqnr >= 27) return HAVE_IRQ (1) */ | |
39 | cmp \irqnr, #(27) | |
40 | movcs \tmp, #1 | |
41 | bcs BSYM(702f) | |
42 | ||
43 | /* if (irqnr == FIQ_DBG_SGI) return HAVE_IRQ (1) */ | |
44 | cmp \irqnr, #FIQ_DBG_SGI | |
45 | moveq \tmp, #1 | |
46 | beq BSYM(702f) | |
47 | ||
48 | /* otherwise, return NO_IRQ (0) */ | |
49 | mov \tmp, #0 | |
50 | ||
51 | 702: | |
52 | cmp \tmp, #0 | |
53 | cmpeq \irqnr, \irqnr | |
54 | .endm | |
55 | ||
56 | .macro test_for_ipi, irqnr, irqstat, base, tmp | |
57 | bic \irqnr, \irqstat, #0x1c00 | |
58 | cmp \irqnr, #16 | |
59 | #if defined(CONFIG_FIQ) && !defined(CONFIG_MTK_IN_HOUSE_TEE_SUPPORT) | |
60 | strcc \irqstat, [\base, #GIC_CPU_AEOI] | |
61 | #else | |
62 | strcc \irqstat, [\base, #GIC_CPU_EOI] | |
63 | #endif | |
64 | cmpcs \irqnr, \irqnr | |
65 | .endm | |
66 | ||
67 | .macro test_for_ltirq, irqnr, irqstat, base, tmp | |
68 | bic \irqnr, \irqstat, #0x1c00 | |
69 | mov \tmp, #0 | |
70 | cmp \irqnr, #29 | |
71 | moveq \tmp, #1 | |
72 | #if defined(CONFIG_FIQ) && !defined(CONFIG_MTK_IN_HOUSE_TEE_SUPPORT) | |
73 | streq \irqstat, [\base, #GIC_CPU_AEOI] | |
74 | #else | |
75 | streq \irqstat, [\base, #GIC_CPU_EOI] | |
76 | #endif | |
77 | cmp \tmp, #0 | |
78 | .endm | |
79 | .macro test_for_wdtirq, irqnr, irqstat, base, tmp | |
80 | bic \irqnr, \irqstat, #0x1c00 | |
81 | mov \tmp, #0 | |
82 | cmp \irqnr, #30 | |
83 | moveq \tmp, #1 | |
84 | #if defined(CONFIG_FIQ) && !defined(CONFIG_MTK_IN_HOUSE_TEE_SUPPORT) | |
85 | streq \irqstat, [\base, #GIC_CPU_AEOI] | |
86 | #else | |
87 | streq \irqstat, [\base, #GIC_CPU_EOI] | |
88 | #endif | |
89 | cmp \tmp, #0 | |
90 | .endm | |
91 |