Skip to content

Commit de88cbb

Browse files
committed
arm: Move chained_irq_(enter|exit) to a generic file
These functions have been introduced by commit 10a8c38 (irq: introduce entry and exit functions for chained handlers) in asm/mach/irq.h. This patch moves them to linux/irqchip/chained_irq.h so that generic irqchip drivers do not rely on architecture specific header files. Signed-off-by: Catalin Marinas <[email protected]> Tested-by: Marc Zyngier <[email protected]> Cc: Russell King <[email protected]> Cc: Thomas Gleixner <[email protected]> Cc: Rob Herring <[email protected]>
1 parent f36a3bb commit de88cbb

File tree

21 files changed

+71
-55
lines changed

21 files changed

+71
-55
lines changed

arch/arm/include/asm/mach/irq.h

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -30,35 +30,4 @@ do { \
3030
raw_spin_unlock(&desc->lock); \
3131
} while(0)
3232

33-
#ifndef __ASSEMBLY__
34-
/*
35-
* Entry/exit functions for chained handlers where the primary IRQ chip
36-
* may implement either fasteoi or level-trigger flow control.
37-
*/
38-
static inline void chained_irq_enter(struct irq_chip *chip,
39-
struct irq_desc *desc)
40-
{
41-
/* FastEOI controllers require no action on entry. */
42-
if (chip->irq_eoi)
43-
return;
44-
45-
if (chip->irq_mask_ack) {
46-
chip->irq_mask_ack(&desc->irq_data);
47-
} else {
48-
chip->irq_mask(&desc->irq_data);
49-
if (chip->irq_ack)
50-
chip->irq_ack(&desc->irq_data);
51-
}
52-
}
53-
54-
static inline void chained_irq_exit(struct irq_chip *chip,
55-
struct irq_desc *desc)
56-
{
57-
if (chip->irq_eoi)
58-
chip->irq_eoi(&desc->irq_data);
59-
else
60-
chip->irq_unmask(&desc->irq_data);
61-
}
62-
#endif
63-
6433
#endif

arch/arm/mach-at91/gpio.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,9 @@
2222
#include <linux/module.h>
2323
#include <linux/io.h>
2424
#include <linux/irqdomain.h>
25+
#include <linux/irqchip/chained_irq.h>
2526
#include <linux/of_address.h>
2627

27-
#include <asm/mach/irq.h>
28-
2928
#include <mach/hardware.h>
3029
#include <mach/at91_pio.h>
3130

arch/arm/mach-exynos/common.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include <linux/irqchip.h>
2727
#include <linux/of_address.h>
2828
#include <linux/irqchip/arm-gic.h>
29+
#include <linux/irqchip/chained_irq.h>
2930

3031
#include <asm/proc-fns.h>
3132
#include <asm/exception.h>

arch/arm/mach-s3c24xx/irq.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include <linux/ioport.h>
2626
#include <linux/device.h>
2727
#include <linux/irqdomain.h>
28+
#include <linux/irqchip/chained_irq.h>
2829

2930
#include <asm/mach/irq.h>
3031

arch/arm/plat-samsung/irq-vic-timer.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,14 @@
1616
#include <linux/kernel.h>
1717
#include <linux/interrupt.h>
1818
#include <linux/irq.h>
19+
#include <linux/irqchip/chained_irq.h>
1920
#include <linux/io.h>
2021

2122
#include <mach/map.h>
2223
#include <plat/cpu.h>
2324
#include <plat/irq-vic-timer.h>
2425
#include <plat/regs-timer.h>
2526

26-
#include <asm/mach/irq.h>
27-
2827
static void s3c_irq_demux_vic_timer(unsigned int irq, struct irq_desc *desc)
2928
{
3029
struct irq_chip *chip = irq_get_chip(irq);

arch/arm/plat-samsung/s5p-irq-gpioint.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include <linux/kernel.h>
1515
#include <linux/interrupt.h>
1616
#include <linux/irq.h>
17+
#include <linux/irqchip/chained_irq.h>
1718
#include <linux/io.h>
1819
#include <linux/gpio.h>
1920
#include <linux/slab.h>
@@ -22,8 +23,6 @@
2223
#include <plat/gpio-core.h>
2324
#include <plat/gpio-cfg.h>
2425

25-
#include <asm/mach/irq.h>
26-
2726
#define GPIO_BASE(chip) ((void __iomem *)((unsigned long)((chip)->base) & 0xFFFFF000u))
2827

2928
#define CON_OFFSET 0x700

drivers/gpio/gpio-msm-v2.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,12 @@
2323
#include <linux/init.h>
2424
#include <linux/interrupt.h>
2525
#include <linux/io.h>
26+
#include <linux/irqchip/chained_irq.h>
2627
#include <linux/irq.h>
2728
#include <linux/module.h>
2829
#include <linux/platform_device.h>
2930
#include <linux/spinlock.h>
3031

31-
#include <asm/mach/irq.h>
32-
3332
#include <mach/msm_gpiomux.h>
3433
#include <mach/msm_iomap.h>
3534

drivers/gpio/gpio-mxc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include <linux/io.h>
2525
#include <linux/irq.h>
2626
#include <linux/irqdomain.h>
27+
#include <linux/irqchip/chained_irq.h>
2728
#include <linux/gpio.h>
2829
#include <linux/platform_device.h>
2930
#include <linux/slab.h>
@@ -32,7 +33,6 @@
3233
#include <linux/of_device.h>
3334
#include <linux/module.h>
3435
#include <asm-generic/bug.h>
35-
#include <asm/mach/irq.h>
3636

3737
enum mxc_gpio_hwtype {
3838
IMX1_GPIO, /* runs on i.mx1 */

drivers/gpio/gpio-omap.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,10 @@
2525
#include <linux/of.h>
2626
#include <linux/of_device.h>
2727
#include <linux/irqdomain.h>
28+
#include <linux/irqchip/chained_irq.h>
2829
#include <linux/gpio.h>
2930
#include <linux/platform_data/gpio-omap.h>
3031

31-
#include <asm/mach/irq.h>
32-
3332
#define OFF_MODE 1
3433

3534
static LIST_HEAD(omap_gpio_list);

drivers/gpio/gpio-pl061.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include <linux/io.h>
1616
#include <linux/ioport.h>
1717
#include <linux/irq.h>
18+
#include <linux/irqchip/chained_irq.h>
1819
#include <linux/bitops.h>
1920
#include <linux/workqueue.h>
2021
#include <linux/gpio.h>
@@ -23,7 +24,6 @@
2324
#include <linux/amba/pl061.h>
2425
#include <linux/slab.h>
2526
#include <linux/pm.h>
26-
#include <asm/mach/irq.h>
2727

2828
#define GPIODIR 0x400
2929
#define GPIOIS 0x404

drivers/gpio/gpio-pxa.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,14 @@
1919
#include <linux/init.h>
2020
#include <linux/irq.h>
2121
#include <linux/irqdomain.h>
22+
#include <linux/irqchip/chained_irq.h>
2223
#include <linux/io.h>
2324
#include <linux/of.h>
2425
#include <linux/of_device.h>
2526
#include <linux/platform_device.h>
2627
#include <linux/syscore_ops.h>
2728
#include <linux/slab.h>
2829

29-
#include <asm/mach/irq.h>
30-
3130
#include <mach/irqs.h>
3231

3332
/*

drivers/gpio/gpio-tegra.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,10 @@
2727
#include <linux/platform_device.h>
2828
#include <linux/module.h>
2929
#include <linux/irqdomain.h>
30+
#include <linux/irqchip/chained_irq.h>
3031
#include <linux/pinctrl/consumer.h>
3132
#include <linux/pm.h>
3233

33-
#include <asm/mach/irq.h>
34-
3534
#define GPIO_BANK(x) ((x) >> 5)
3635
#define GPIO_PORT(x) (((x) >> 3) & 0x3)
3736
#define GPIO_BIT(x) ((x) & 0x7)

drivers/irqchip/exynos-combiner.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include <linux/init.h>
1414
#include <linux/io.h>
1515
#include <linux/irqdomain.h>
16+
#include <linux/irqchip/chained_irq.h>
1617
#include <linux/of_address.h>
1718
#include <linux/of_irq.h>
1819
#include <asm/mach/irq.h>

drivers/irqchip/irq-gic.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
#include <linux/interrupt.h>
3939
#include <linux/percpu.h>
4040
#include <linux/slab.h>
41+
#include <linux/irqchip/chained_irq.h>
4142
#include <linux/irqchip/arm-gic.h>
4243

4344
#include <asm/irq.h>

drivers/pinctrl/pinctrl-at91.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <linux/interrupt.h>
1919
#include <linux/irq.h>
2020
#include <linux/irqdomain.h>
21+
#include <linux/irqchip/chained_irq.h>
2122
#include <linux/io.h>
2223
#include <linux/gpio.h>
2324
#include <linux/pinctrl/machine.h>
@@ -27,8 +28,6 @@
2728
/* Since we request GPIOs from ourself */
2829
#include <linux/pinctrl/consumer.h>
2930

30-
#include <asm/mach/irq.h>
31-
3231
#include <mach/hardware.h>
3332
#include <mach/at91_pio.h>
3433

drivers/pinctrl/pinctrl-exynos.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,12 @@
2323
#include <linux/interrupt.h>
2424
#include <linux/irqdomain.h>
2525
#include <linux/irq.h>
26+
#include <linux/irqchip/chained_irq.h>
2627
#include <linux/of_irq.h>
2728
#include <linux/io.h>
2829
#include <linux/slab.h>
2930
#include <linux/err.h>
3031

31-
#include <asm/mach/irq.h>
32-
3332
#include "pinctrl-samsung.h"
3433
#include "pinctrl-exynos.h"
3534

drivers/pinctrl/pinctrl-nomadik.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include <linux/interrupt.h>
2424
#include <linux/irq.h>
2525
#include <linux/irqdomain.h>
26+
#include <linux/irqchip/chained_irq.h>
2627
#include <linux/slab.h>
2728
#include <linux/of_device.h>
2829
#include <linux/of_address.h>
@@ -33,7 +34,6 @@
3334
/* Since we request GPIOs from ourself */
3435
#include <linux/pinctrl/consumer.h>
3536
#include <linux/platform_data/pinctrl-nomadik.h>
36-
#include <asm/mach/irq.h>
3737
#include "pinctrl-nomadik.h"
3838
#include "core.h"
3939

drivers/pinctrl/pinctrl-sirf.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include <linux/slab.h>
1515
#include <linux/err.h>
1616
#include <linux/irqdomain.h>
17+
#include <linux/irqchip/chained_irq.h>
1718
#include <linux/pinctrl/pinctrl.h>
1819
#include <linux/pinctrl/pinmux.h>
1920
#include <linux/pinctrl/consumer.h>
@@ -25,7 +26,6 @@
2526
#include <linux/bitops.h>
2627
#include <linux/gpio.h>
2728
#include <linux/of_gpio.h>
28-
#include <asm/mach/irq.h>
2929

3030
#define DRIVER_NAME "pinmux-sirf"
3131

drivers/pinctrl/spear/pinctrl-plgpio.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@
1515
#include <linux/io.h>
1616
#include <linux/irq.h>
1717
#include <linux/irqdomain.h>
18+
#include <linux/irqchip/chained_irq.h>
1819
#include <linux/module.h>
1920
#include <linux/pinctrl/consumer.h>
2021
#include <linux/platform_device.h>
2122
#include <linux/pm.h>
2223
#include <linux/spinlock.h>
23-
#include <asm/mach/irq.h>
2424

2525
#define MAX_GPIO_PER_REG 32
2626
#define PIN_OFFSET(pin) (pin % MAX_GPIO_PER_REG)

drivers/staging/imx-drm/ipu-v3/ipu-common.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525
#include <linux/clk.h>
2626
#include <linux/list.h>
2727
#include <linux/irq.h>
28+
#include <linux/irqchip/chained_irq.h>
2829
#include <linux/of_device.h>
29-
#include <asm/mach/irq.h>
3030

3131
#include "imx-ipu-v3.h"
3232
#include "ipu-prv.h"

include/linux/irqchip/chained_irq.h

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
* Chained IRQ handlers support.
3+
*
4+
* Copyright (C) 2011 ARM Ltd.
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 version 2 as
8+
* published by the Free Software Foundation.
9+
*
10+
* This program is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU General Public License
16+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17+
*/
18+
#ifndef __IRQCHIP_CHAINED_IRQ_H
19+
#define __IRQCHIP_CHAINED_IRQ_H
20+
21+
#include <linux/irq.h>
22+
23+
/*
24+
* Entry/exit functions for chained handlers where the primary IRQ chip
25+
* may implement either fasteoi or level-trigger flow control.
26+
*/
27+
static inline void chained_irq_enter(struct irq_chip *chip,
28+
struct irq_desc *desc)
29+
{
30+
/* FastEOI controllers require no action on entry. */
31+
if (chip->irq_eoi)
32+
return;
33+
34+
if (chip->irq_mask_ack) {
35+
chip->irq_mask_ack(&desc->irq_data);
36+
} else {
37+
chip->irq_mask(&desc->irq_data);
38+
if (chip->irq_ack)
39+
chip->irq_ack(&desc->irq_data);
40+
}
41+
}
42+
43+
static inline void chained_irq_exit(struct irq_chip *chip,
44+
struct irq_desc *desc)
45+
{
46+
if (chip->irq_eoi)
47+
chip->irq_eoi(&desc->irq_data);
48+
else
49+
chip->irq_unmask(&desc->irq_data);
50+
}
51+
52+
#endif /* __IRQCHIP_CHAINED_IRQ_H */

0 commit comments

Comments
 (0)