import PULS_20160108
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / arch / arm / mach-mt8127 / include / mach / entry-macro.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