linux/drivers/pinctrl
Vladimir Oltean 4546760619 pinctrl: armada-37xx: use raw spinlocks for regmap to avoid invalid wait context
The irqchip->irq_set_type method is called by __irq_set_trigger() under
the desc->lock raw spinlock.

The armada-37xx implementation, armada_37xx_irq_set_type(), uses an MMIO
regmap created by of_syscon_register(), which uses plain spinlocks
(the kind that are sleepable on RT).

Therefore, this is an invalid locking scheme for which we get a kernel
splat stating just that ("[ BUG: Invalid wait context ]"), because the
context in which the plain spinlock may sleep is atomic due to the raw
spinlock. We need to go raw spinlocks all the way.

Make this driver create its own MMIO regmap, with use_raw_spinlock=true,
and stop relying on syscon to provide it.

This patch depends on commit 67021f25d9 ("regmap: teach regmap to use
raw spinlocks if requested in the config").

Cc: <stable@vger.kernel.org> # 5.15+
Fixes: 2f22760539 ("pinctrl: armada-37xx: Add irqchip support")
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Link: https://lore.kernel.org/r/20220716233745.1704677-3-vladimir.oltean@nxp.com
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
2022-07-19 00:57:38 +02:00
..
actions pinctrl: Get rid of duplicate of_node assignment in the drivers 2021-12-16 04:18:30 +01:00
aspeed pinctrl: aspeed: Fix potential NULL dereference in aspeed_pinmux_set_mux() 2022-06-15 15:19:57 +02:00
bcm pinctrl: bcm2835: implement hook for missing gpio-ranges 2022-04-21 16:12:08 +02:00
berlin pinctrl: berlin: bg4ct: Use devm_platform_*ioremap_resource() APIs 2022-05-22 22:45:47 +02:00
cirrus pinctrl: Propagate firmware node from a parent device 2021-12-22 03:09:56 +01:00
freescale pinctrl: imx: Add the zero base flag for imx93 2022-06-28 15:15:03 +02:00
intel pinctrl: intel: Fix kernel doc format, i.e. add return sections 2022-05-20 17:02:21 +03:00
mediatek Pin control bulk changes for the v5.19 series: 2022-05-28 11:15:54 -07:00
meson intel-gpio for v5.19-1 2022-05-04 23:15:21 +02:00
mvebu pinctrl: armada-37xx: use raw spinlocks for regmap to avoid invalid wait context 2022-07-19 00:57:38 +02:00
nomadik pinctrl: nomadik: Setup parent device and get rid of unnecessary of_node assignment 2022-05-05 00:08:06 +02:00
nuvoton Pin control bulk changes for the v5.19 series: 2022-05-28 11:15:54 -07:00
pxa drivers/pinctrl: remove redundant ret variable 2022-01-24 01:12:54 +01:00
qcom Updates for interrupt core and drivers: 2022-05-23 16:58:49 -07:00
ralink pinctrl: ralink: Check for null return of devm_kcalloc 2022-07-11 14:40:17 +02:00
renesas pinctrl: renesas: Updates for v5.19 (take two) 2022-05-14 01:01:56 +02:00
samsung gpio updates for v5.19 2022-05-26 14:51:38 -07:00
spear pinctrl: Get rid of duplicate of_node assignment in the drivers 2021-12-16 04:18:30 +01:00
sprd pinctrl: sprd: Simplify bool comparison 2021-01-18 14:41:42 +01:00
stm32 pinctrl: stm32: fix optional IRQ support to gpios 2022-06-28 16:12:40 +02:00
sunplus pinctrl: sunplus: Add check for kcalloc 2022-07-11 15:04:19 +02:00
sunxi pinctrl: sunxi: sunxi_pconf_set: use correct offset 2022-06-27 11:27:10 +02:00
tegra pinctrl: tegra: tegra194: drop unused pin groups 2022-05-04 23:40:05 +02:00
ti pinctrl: ti: fix error return code of ti_iodelay_dt_node_to_map() 2021-04-08 15:57:14 +02:00
uniphier pinctrl: uniphier: Add USB device pinmux settings 2022-02-11 01:37:21 +01:00
visconti gpio: visconti: Add Toshiba Visconti GPIO support 2021-02-15 11:43:26 +01:00
vt8500 pinctrl: Get rid of duplicate of_node assignment in the drivers 2021-12-16 04:18:30 +01:00
core.c Pin control changes for the v5.16 kernel cycle 2021-11-05 08:24:17 -07:00
core.h
devicetree.c
devicetree.h
Kconfig pinctrl: Don't allow PINCTRL_AMD to be a module 2022-07-18 12:47:28 +02:00
Makefile pinctrl: nuvoton: Add driver for WPCM450 2022-03-15 01:16:20 +01:00
pinconf-generic.c pinctrl: pinconf-generic: Print arguments for bias-pull-* 2022-03-15 01:24:15 +01:00
pinconf.c pinctrl: use to octal permissions for debugfs files 2021-03-10 14:41:58 +01:00
pinconf.h
pinctrl-amd.c pinctrl: amd: Make the irqchip immutable 2022-04-19 15:22:26 +01:00
pinctrl-amd.h pinctrl: amd: Add irq field data 2021-09-17 00:48:45 +02:00
pinctrl-apple-gpio.c pinctrl: apple: Use a raw spinlock for the regmap 2022-05-25 09:37:44 +02:00
pinctrl-artpec6.c
pinctrl-as3722.c pinctrl: Propagate firmware node from a parent device 2021-12-22 03:09:56 +01:00
pinctrl-at91-pio4.c pinctrl: at91-pio4: Use platform_get_irq() to get the interrupt 2022-01-24 01:12:54 +01:00
pinctrl-at91.c pinctrl: Get rid of duplicate of_node assignment in the drivers 2021-12-16 04:18:30 +01:00
pinctrl-at91.h
pinctrl-axp209.c
pinctrl-bm1880.c
pinctrl-da850-pupd.c
pinctrl-da9062.c pinctrl: Propagate firmware node from a parent device 2021-12-22 03:09:56 +01:00
pinctrl-digicolor.c pinctrl: Get rid of duplicate of_node assignment in the drivers 2021-12-16 04:18:30 +01:00
pinctrl-equilibrium.c pinctrl: equilibrium: Switch to use fwnode instead of of_node 2022-05-09 13:46:51 +02:00
pinctrl-equilibrium.h pinctrl: equilibrium: Switch to use fwnode instead of of_node 2022-05-09 13:46:51 +02:00
pinctrl-falcon.c pinctrl: falcon: add missing put_device() call in pinctrl_falcon_probe() 2020-12-04 09:17:51 +01:00
pinctrl-gemini.c pinctrl: gemini: fix typos 2021-10-14 01:22:58 +02:00
pinctrl-ingenic.c pinctrl: ingenic: Garbage-collect code paths for SoCs disabled by config 2022-04-22 22:58:23 +02:00
pinctrl-k210.c pinctrl: k210: Fix bias-pull-up 2022-02-11 02:19:47 +01:00
pinctrl-keembay.c pinctrl: keembay: rework loops looking for groups names 2021-12-22 02:57:27 +01:00
pinctrl-lantiq.c
pinctrl-lantiq.h
pinctrl-lpc18xx.c pinctrl: Introduce MODE group in enum pin_config_param 2021-04-22 02:03:01 +02:00
pinctrl-max77620.c pinctrl: max77620: drop unneeded MODULE_ALIAS 2022-04-22 22:56:46 +02:00
pinctrl-mcp23s08_i2c.c
pinctrl-mcp23s08_spi.c pinctrl: mcp23s08: Print error message when regmap init fails 2020-11-05 11:30:31 +01:00
pinctrl-mcp23s08.c pinctrl: Get rid of duplicate of_node assignment in the drivers 2021-12-16 04:18:30 +01:00
pinctrl-mcp23s08.h pinctrl: mcp23s08: Add optional reset GPIO 2021-06-12 01:58:10 +02:00
pinctrl-microchip-sgpio.c pinctrl: microchip-sgpio: Switch to use fwnode instead of of_node 2022-05-09 13:47:49 +02:00
pinctrl-ocelot.c pinctrl: ocelot: Fix pincfg 2022-07-18 11:22:43 +02:00
pinctrl-oxnas.c pinctrl: Get rid of duplicate of_node assignment in the drivers 2021-12-16 04:18:30 +01:00
pinctrl-palmas.c
pinctrl-pic32.c pinctrl: Get rid of duplicate of_node assignment in the drivers 2021-12-16 04:18:30 +01:00
pinctrl-pic32.h
pinctrl-pistachio.c pinctrl: pistachio: fix use of irq_of_parse_and_map() 2022-04-24 16:24:09 +02:00
pinctrl-rk805.c pinctrl: Propagate firmware node from a parent device 2021-12-22 03:09:56 +01:00
pinctrl-rockchip.c Linux 5.18-rc5 2022-05-01 23:25:10 +02:00
pinctrl-rockchip.h pinctrl/rockchip: add rk3588 support 2022-04-29 00:55:02 +02:00
pinctrl-single.c This is the bulk of pin control changes for the v5.15 kernel cycle, 2021-09-02 14:22:56 -07:00
pinctrl-st.c pinctrl: st: Switch to use devm_kasprintf_strarray() 2021-11-18 18:40:10 +02:00
pinctrl-starfive.c pinctrl: starfive: Make the irqchip immutable 2022-05-19 15:16:29 +02:00
pinctrl-stmfx.c pinctrl: Get rid of duplicate of_node assignment in the drivers 2021-12-16 04:18:30 +01:00
pinctrl-sx150x.c pinctrl: Get rid of duplicate of_node assignment in the drivers 2021-12-16 04:18:30 +01:00
pinctrl-tb10x.c
pinctrl-thunderbay.c pinctrl: thunderbay: Use devm_platform_ioremap_resource() 2022-04-23 00:01:55 +02:00
pinctrl-utils.c pinctrl: use krealloc_array() 2020-12-15 12:13:37 -08:00
pinctrl-utils.h
pinctrl-xway.c pinctrl: Get rid of duplicate of_node assignment in the drivers 2021-12-16 04:18:30 +01:00
pinctrl-zynq.c pinctrl: zynq: use module_platform_driver to simplify the code 2022-03-15 01:46:13 +01:00
pinctrl-zynqmp.c pinctrl: zynqmp: Revert "Unify pin naming" 2022-01-28 16:52:04 +02:00
pinmux.c pinctrl: add one more "const" for generic function groups 2021-12-22 02:57:27 +01:00
pinmux.h pinctrl: add one more "const" for generic function groups 2021-12-22 02:57:27 +01:00