linux/drivers/pinctrl/bcm
Lukas Wunner 3c7b30f704 pinctrl: bcm2835: Use raw spinlock for RT compatibility
The BCM2835 pinctrl driver acquires a spinlock in its ->irq_enable,
->irq_disable and ->irq_set_type callbacks.  Spinlocks become sleeping
locks with CONFIG_PREEMPT_RT_FULL=y, therefore invocation of one of the
callbacks in atomic context may cause a hard lockup if at least two GPIO
pins in the same bank are used as interrupts.  The issue doesn't occur
with just a single interrupt pin per bank because the lock is never
contended.  I'm experiencing such lockups with GPIO 8 and 28 used as
level-triggered interrupts, i.e. with ->irq_disable being invoked on
reception of every IRQ.

The critical section protected by the spinlock is very small (one bitop
and one RMW of an MMIO register), hence converting to a raw spinlock
seems a better trade-off than converting the driver to threaded IRQ
handling (which would increase latency to handle an interrupt).

Cc: Mathias Duckeck <m.duckeck@kunbus.de>
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Acked-by: Julia Cartwright <julia@ni.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
2018-11-05 09:33:33 +01:00
..
Kconfig pinctrl: bcm: add Northstar driver 2018-10-10 09:16:54 +02:00
Makefile pinctrl: bcm: add Northstar driver 2018-10-10 09:16:54 +02:00
pinctrl-bcm281xx.c pinctrl: bcm281xx: constify pinconf_ops, pinctrl_ops, and pinmux_ops structures 2017-08-22 14:36:25 +02:00
pinctrl-bcm2835.c pinctrl: bcm2835: Use raw spinlock for RT compatibility 2018-11-05 09:33:33 +01:00
pinctrl-cygnus-mux.c pinctrl: bcm: cleanup Broadcom license headers 2017-06-09 11:09:43 +02:00
pinctrl-iproc-gpio.c Merge branch 'gpio-irqchip-rework' of /home/linus/linux-gpio into devel 2017-11-09 09:38:42 +01:00
pinctrl-ns2-mux.c pinctrl: Widen the generic pinconf argument from 16 to 24 bits 2017-01-26 15:22:32 +01:00
pinctrl-ns.c pinctrl: bcm: ns: Use uintptr_t for casting data 2018-10-12 11:14:59 +02:00
pinctrl-nsp-gpio.c pinctrl: bcm: nsp: Use library functions 2017-10-07 00:00:13 +02:00
pinctrl-nsp-mux.c pinctrl: nsp: Fix potential NULL dereference 2018-07-14 12:47:04 +02:00