diff options
| author | Kevin Cernekee <cernekee@gmail.com> | 2014-11-07 01:44:19 -0500 |
|---|---|---|
| committer | Jason Cooper <jason@lakedaemon.net> | 2014-11-08 23:02:00 -0500 |
| commit | b79055952badbd73710685643bab44104f2509ea (patch) | |
| tree | c079abc538b1a269c55a7941ca59ab3a942daa1a /kernel | |
| parent | 2b28037632b1e62b92c0616f08652d806008c80d (diff) | |
genirq: Generic chip: Add big endian I/O accessors
Use io{read,write}32be if the caller specified IRQ_GC_BE_IO when creating
the irqchip.
Signed-off-by: Kevin Cernekee <cernekee@gmail.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Acked-by: Arnd Bergmann <arnd@arndb.de>
Link: https://lkml.kernel.org/r/1415342669-30640-5-git-send-email-cernekee@gmail.com
Signed-off-by: Jason Cooper <jason@lakedaemon.net>
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/irq/generic-chip.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/kernel/irq/generic-chip.c b/kernel/irq/generic-chip.c index db458c68e392..61024e8abdef 100644 --- a/kernel/irq/generic-chip.c +++ b/kernel/irq/generic-chip.c | |||
| @@ -191,6 +191,16 @@ int irq_gc_set_wake(struct irq_data *d, unsigned int on) | |||
| 191 | return 0; | 191 | return 0; |
| 192 | } | 192 | } |
| 193 | 193 | ||
| 194 | static u32 irq_readl_be(void __iomem *addr) | ||
| 195 | { | ||
| 196 | return ioread32be(addr); | ||
| 197 | } | ||
| 198 | |||
| 199 | static void irq_writel_be(u32 val, void __iomem *addr) | ||
| 200 | { | ||
| 201 | iowrite32be(val, addr); | ||
| 202 | } | ||
| 203 | |||
| 194 | static void | 204 | static void |
| 195 | irq_init_generic_chip(struct irq_chip_generic *gc, const char *name, | 205 | irq_init_generic_chip(struct irq_chip_generic *gc, const char *name, |
| 196 | int num_ct, unsigned int irq_base, | 206 | int num_ct, unsigned int irq_base, |
| @@ -300,7 +310,13 @@ int irq_alloc_domain_generic_chips(struct irq_domain *d, int irqs_per_chip, | |||
| 300 | dgc->gc[i] = gc = tmp; | 310 | dgc->gc[i] = gc = tmp; |
| 301 | irq_init_generic_chip(gc, name, num_ct, i * irqs_per_chip, | 311 | irq_init_generic_chip(gc, name, num_ct, i * irqs_per_chip, |
| 302 | NULL, handler); | 312 | NULL, handler); |
| 313 | |||
| 303 | gc->domain = d; | 314 | gc->domain = d; |
| 315 | if (gcflags & IRQ_GC_BE_IO) { | ||
| 316 | gc->reg_readl = &irq_readl_be; | ||
| 317 | gc->reg_writel = &irq_writel_be; | ||
| 318 | } | ||
| 319 | |||
| 304 | raw_spin_lock_irqsave(&gc_lock, flags); | 320 | raw_spin_lock_irqsave(&gc_lock, flags); |
| 305 | list_add_tail(&gc->list, &gc_list); | 321 | list_add_tail(&gc->list, &gc_list); |
| 306 | raw_spin_unlock_irqrestore(&gc_lock, flags); | 322 | raw_spin_unlock_irqrestore(&gc_lock, flags); |
