diff options
author | Shawn Guo <shawn.guo@linaro.org> | 2012-08-19 22:14:56 -0400 |
---|---|---|
committer | Shawn Guo <shawn.guo@linaro.org> | 2012-09-02 21:31:56 -0400 |
commit | 4e0a1b8c070fe204a406521496f01cf02c74e933 (patch) | |
tree | df92b9a008d11710a152aa3c00167d20fc8bf773 /arch/arm/mach-mxs | |
parent | eeca6e604032af8336baafef84144dd47f5a0f99 (diff) |
ARM: mxs: select MULTI_IRQ_HANDLER
As part of multi-platform effort, let's enable MULTI_IRQ_HANDLER for
mach-mxs and remove entry-macro.S.
Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Diffstat (limited to 'arch/arm/mach-mxs')
-rw-r--r-- | arch/arm/mach-mxs/icoll.c | 18 | ||||
-rw-r--r-- | arch/arm/mach-mxs/include/mach/common.h | 1 | ||||
-rw-r--r-- | arch/arm/mach-mxs/include/mach/entry-macro.S | 35 | ||||
-rw-r--r-- | arch/arm/mach-mxs/mach-mxs.c | 2 |
4 files changed, 20 insertions, 36 deletions
diff --git a/arch/arm/mach-mxs/icoll.c b/arch/arm/mach-mxs/icoll.c index 23ca9d083b2c..a11b6184026e 100644 --- a/arch/arm/mach-mxs/icoll.c +++ b/arch/arm/mach-mxs/icoll.c | |||
@@ -20,13 +20,14 @@ | |||
20 | #include <linux/init.h> | 20 | #include <linux/init.h> |
21 | #include <linux/irq.h> | 21 | #include <linux/irq.h> |
22 | #include <linux/io.h> | 22 | #include <linux/io.h> |
23 | 23 | #include <asm/exception.h> | |
24 | #include <mach/mxs.h> | 24 | #include <mach/mxs.h> |
25 | #include <mach/common.h> | 25 | #include <mach/common.h> |
26 | 26 | ||
27 | #define HW_ICOLL_VECTOR 0x0000 | 27 | #define HW_ICOLL_VECTOR 0x0000 |
28 | #define HW_ICOLL_LEVELACK 0x0010 | 28 | #define HW_ICOLL_LEVELACK 0x0010 |
29 | #define HW_ICOLL_CTRL 0x0020 | 29 | #define HW_ICOLL_CTRL 0x0020 |
30 | #define HW_ICOLL_STAT_OFFSET 0x0070 | ||
30 | #define HW_ICOLL_INTERRUPTn_SET(n) (0x0124 + (n) * 0x10) | 31 | #define HW_ICOLL_INTERRUPTn_SET(n) (0x0124 + (n) * 0x10) |
31 | #define HW_ICOLL_INTERRUPTn_CLR(n) (0x0128 + (n) * 0x10) | 32 | #define HW_ICOLL_INTERRUPTn_CLR(n) (0x0128 + (n) * 0x10) |
32 | #define BM_ICOLL_INTERRUPTn_ENABLE 0x00000004 | 33 | #define BM_ICOLL_INTERRUPTn_ENABLE 0x00000004 |
@@ -63,6 +64,21 @@ static struct irq_chip mxs_icoll_chip = { | |||
63 | .irq_unmask = icoll_unmask_irq, | 64 | .irq_unmask = icoll_unmask_irq, |
64 | }; | 65 | }; |
65 | 66 | ||
67 | asmlinkage void __exception_irq_entry icoll_handle_irq(struct pt_regs *regs) | ||
68 | { | ||
69 | u32 irqnr; | ||
70 | |||
71 | do { | ||
72 | irqnr = __raw_readl(icoll_base + HW_ICOLL_STAT_OFFSET); | ||
73 | if (irqnr != 0x7f) { | ||
74 | __raw_writel(irqnr, icoll_base + HW_ICOLL_VECTOR); | ||
75 | handle_IRQ(irqnr, regs); | ||
76 | continue; | ||
77 | } | ||
78 | break; | ||
79 | } while (1); | ||
80 | } | ||
81 | |||
66 | void __init icoll_init_irq(void) | 82 | void __init icoll_init_irq(void) |
67 | { | 83 | { |
68 | int i; | 84 | int i; |
diff --git a/arch/arm/mach-mxs/include/mach/common.h b/arch/arm/mach-mxs/include/mach/common.h index a7416c8a85ff..10e4e12df870 100644 --- a/arch/arm/mach-mxs/include/mach/common.h +++ b/arch/arm/mach-mxs/include/mach/common.h | |||
@@ -28,6 +28,7 @@ extern void mx28_map_io(void); | |||
28 | extern void mx28_init_irq(void); | 28 | extern void mx28_init_irq(void); |
29 | 29 | ||
30 | extern void icoll_init_irq(void); | 30 | extern void icoll_init_irq(void); |
31 | extern void icoll_handle_irq(struct pt_regs *); | ||
31 | 32 | ||
32 | extern struct platform_device *mxs_add_dma(const char *devid, | 33 | extern struct platform_device *mxs_add_dma(const char *devid, |
33 | resource_size_t base); | 34 | resource_size_t base); |
diff --git a/arch/arm/mach-mxs/include/mach/entry-macro.S b/arch/arm/mach-mxs/include/mach/entry-macro.S deleted file mode 100644 index 0c14259705b9..000000000000 --- a/arch/arm/mach-mxs/include/mach/entry-macro.S +++ /dev/null | |||
@@ -1,35 +0,0 @@ | |||
1 | /* | ||
2 | * Low-level IRQ helper macros for Freescale MXS-based | ||
3 | * | ||
4 | * Copyright (C) 2009-2010 Freescale Semiconductor, Inc. All Rights Reserved. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License along | ||
17 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
19 | */ | ||
20 | |||
21 | #include <mach/mxs.h> | ||
22 | |||
23 | #define MXS_ICOLL_VBASE MXS_IO_ADDRESS(MXS_ICOLL_BASE_ADDR) | ||
24 | #define HW_ICOLL_STAT_OFFSET 0x70 | ||
25 | |||
26 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
27 | ldr \irqnr, [\base, #HW_ICOLL_STAT_OFFSET] | ||
28 | cmp \irqnr, #0x7F | ||
29 | strne \irqnr, [\base] | ||
30 | moveqs \irqnr, #0 | ||
31 | .endm | ||
32 | |||
33 | .macro get_irqnr_preamble, base, tmp | ||
34 | ldr \base, =MXS_ICOLL_VBASE | ||
35 | .endm | ||
diff --git a/arch/arm/mach-mxs/mach-mxs.c b/arch/arm/mach-mxs/mach-mxs.c index 78bf07a8cd3c..b07af1c12cb6 100644 --- a/arch/arm/mach-mxs/mach-mxs.c +++ b/arch/arm/mach-mxs/mach-mxs.c | |||
@@ -294,6 +294,7 @@ static const char *imx28_dt_compat[] __initdata = { | |||
294 | DT_MACHINE_START(IMX23, "Freescale i.MX23 (Device Tree)") | 294 | DT_MACHINE_START(IMX23, "Freescale i.MX23 (Device Tree)") |
295 | .map_io = mx23_map_io, | 295 | .map_io = mx23_map_io, |
296 | .init_irq = mxs_dt_init_irq, | 296 | .init_irq = mxs_dt_init_irq, |
297 | .handle_irq = icoll_handle_irq, | ||
297 | .timer = &imx23_timer, | 298 | .timer = &imx23_timer, |
298 | .init_machine = mxs_machine_init, | 299 | .init_machine = mxs_machine_init, |
299 | .dt_compat = imx23_dt_compat, | 300 | .dt_compat = imx23_dt_compat, |
@@ -303,6 +304,7 @@ MACHINE_END | |||
303 | DT_MACHINE_START(IMX28, "Freescale i.MX28 (Device Tree)") | 304 | DT_MACHINE_START(IMX28, "Freescale i.MX28 (Device Tree)") |
304 | .map_io = mx28_map_io, | 305 | .map_io = mx28_map_io, |
305 | .init_irq = mxs_dt_init_irq, | 306 | .init_irq = mxs_dt_init_irq, |
307 | .handle_irq = icoll_handle_irq, | ||
306 | .timer = &imx28_timer, | 308 | .timer = &imx28_timer, |
307 | .init_machine = mxs_machine_init, | 309 | .init_machine = mxs_machine_init, |
308 | .dt_compat = imx28_dt_compat, | 310 | .dt_compat = imx28_dt_compat, |