linux/drivers/irqchip
Sebastian Hesselbarth bffbc6eabd irqchip: orion: Reverse irq handling priority
Non-DT irq handlers were working through irq causes from most-significant
to least-significant bit, while DT irqchip driver does it the other way
round. This revealed some more HW issues on Kirkwood peripheral IP, where
spurious sdio irqs can happen although irqs are masked.

Also, the generated binaries show that original non-DT order compared
to DT order save two instructions for each bit count check:

irqchip DT order with ffs():
  60:   e3a06001        mov     r6, #1
  64:   e2643000        rsb     r3, r4, #0
  68:   e0033004        and     r3, r3, r4
  6c:   e16f3f13        clz     r3, r3
  70:   e263301f        rsb     r3, r3, #31
  74:   e1c44316        bic     r4, r4, r6, lsl r3
  78:   e5971004        ldr     r1, [r7, #4]

Original non-DT order with fls():
  60:   e3a07001        mov     r7, #1
  64:   e16f3f14        clz     r3, r4
  68:   e263301f        rsb     r3, r3, #31
  6c:   e1c44317        bic     r4, r4, r7, lsl r3
  70:   e5951004        ldr     r1, [r5, #4]

Therefore, reverse irq bit handling back to original order by replacing
ffs() with fls().

Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Link: https://lkml.kernel.org/r/1398719528-23607-1-git-send-email-sebastian.hesselbarth@gmail.com
Acked-by: Jason Cooper <jason@lakedaemon.net>
Signed-off-by: Jason Cooper <jason@lakedaemon.net>
2014-05-08 14:42:09 +00:00
..
exynos-combiner.c irqchip: exynos-combiner: call handle_bad_irq directly 2014-02-14 07:27:40 +09:00
irq-armada-370-xp.c irqchip: irq-armada-370-xp: Use cpu notifier to initialize secondary CPUs 2014-05-08 14:42:00 +00:00
irq-bcm2835.c irqchip: Remove asmlinkage from static functions 2014-03-12 13:00:41 +01:00
irq-clps711x.c ARM: clps711x: Add CLPS711X irqchip driver 2014-02-28 17:27:30 +01:00
irq-crossbar.c DRIVERS: IRQCHIP: CROSSBAR: Add support for Crossbar IP 2014-02-05 20:08:34 +05:30
irq-dw-apb-ictl.c irqchip: add DesignWare APB ICTL interrupt controller 2013-12-13 16:29:40 +01:00
irq-gic.c ARM: SoC: driver changes 2014-04-05 15:37:40 -07:00
irq-imgpdc.c irq-imgpdc: add ImgTec PDC irqchip driver 2013-08-21 14:17:56 +01:00
irq-metag-ext.c irq-metag*: stop set_affinity vectoring to offline cpus 2014-02-25 22:35:06 +00:00
irq-metag.c irq-metag*: stop set_affinity vectoring to offline cpus 2014-02-25 22:35:06 +00:00
irq-mmp.c ARM: SoC: cleanups for 3.15 2014-04-05 13:51:19 -07:00
irq-moxart.c irqchip: Remove asmlinkage from static functions 2014-03-12 13:00:41 +01:00
irq-mxs.c ARM: mxs: icoll: Fix interrupts gpio bank 0 2013-06-03 23:18:15 +08:00
irq-nvic.c irqchip: nvic: Fix wrong num_ct argument for irq_alloc_domain_generic_chips() 2013-07-05 11:39:24 +02:00
irq-orion.c irqchip: orion: Reverse irq handling priority 2014-05-08 14:42:09 +00:00
irq-renesas-intc-irqpin.c irqchip: renesas-intc-irqpin: Fix register bitfield shift calculation 2013-11-24 15:55:17 +09:00
irq-renesas-irqc.c irqchip: renesas-irqc: Enable mask on suspend 2014-01-22 21:48:55 +01:00
irq-s3c24xx.c ARM: arm-soc driver changes for 3.10 2013-05-04 12:31:18 -07:00
irq-sirfsoc.c irqchip: Remove asmlinkage from static functions 2014-03-12 13:00:41 +01:00
irq-sun4i.c irqchip: sun4i: Simplify sun4i_irq_ack 2014-03-19 12:34:29 +01:00
irq-sunxi-nmi.c irqchip: sun7i/sun6i: Disable NMI before registering the handler 2014-03-31 11:12:57 +02:00
irq-tb10x.c irqchip: Add TB10x interrupt controller driver 2013-06-25 18:54:21 +02:00
irq-versatile-fpga.c irqchip: versatile FPGA: support cascaded interrupts from DT 2014-01-03 22:26:13 +01:00
irq-vic.c ARM: SoC: driver changes 2014-04-05 15:37:40 -07:00
irq-vt8500.c irqchip: Remove asmlinkage from static functions 2014-03-12 13:00:41 +01:00
irq-xtensa-mx.c irqchip: xtensa: Select only an online cpu 2014-03-04 17:37:55 +01:00
irq-xtensa-pic.c xtensa: move built-in PIC to drivers/irqchip 2014-01-14 10:19:56 -08:00
irq-zevio.c irqchip: Remove asmlinkage from static functions 2014-03-12 13:00:41 +01:00
irqchip.c irqchip: Remove unused include 2014-03-12 13:12:04 +01:00
irqchip.h irqchip: add basic infrastructure 2013-01-10 11:44:38 -06:00
Kconfig ARM: SoC: driver changes 2014-04-05 15:37:40 -07:00
Makefile ARM: SoC: driver changes 2014-04-05 15:37:40 -07:00
spear-shirq.c ARM: spear: use common irqchip_init function 2013-01-12 10:52:15 -06:00