Re: [PATCH v2 2/2] pinctrl: meson: restore non-sleeping GPIO access
Linus Walleij <[email protected]>
| Newsgroups | org.infradead.lists.linux-amlogic,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-gpio,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <CAD++jLmprP3Ur_BFB9K_we3wdRkZ7dqX3vX-4mPOZZD7WujxJA@mail.gmail.com> |
On Thu, Jun 25, 2026 at 1:58 PM Viacheslav Bocharov <[email protected]> wrote: > Commit 28f240683871 ("pinctrl: meson: mark the GPIO controller as > sleeping") set gpio_chip.can_sleep = true to work around > gpio-shared-proxy holding a spinlock across a sleeping pinctrl config > path. That locking bug is now fixed in the shared-proxy itself ("gpio: > shared-proxy: always serialize with a sleeping mutex"), so the > controller-wide workaround is no longer needed; the meson GPIO > controller does not sleep. > > meson_gpio_get/set/direction_* access MMIO through regmap. The > regmap_mmio bus uses fast I/O (spinlock) locking, so these value > callbacks do not contain sleeping operations. Since gpio_chip.can_sleep > describes the get/set value path, restore can_sleep = false. > > Marking the controller sleeping also broke atomic value consumers such > as w1-gpio (1-Wire bitbang): w1_io.c runs its read time slot under > local_irq_save() and uses the non-cansleep gpiod_set_value() / > gpiod_get_value(), which with can_sleep=true trigger WARN_ON(can_sleep) > in gpiolib on every transferred bit (from w1_gpio_write_bit() / > w1_gpio_read_bit() via w1_reset_bus() and w1_search()). The printk and > stack dump inside the IRQs-off, microsecond-scale time slot destroy the > bit timing, so reset/presence detection and ROM search fail: the bus > master registers but w1_master_slave_count stays at 0 and no devices > are found. Verified on an Amlogic A113X board (DS18B20 on GPIOA_14): > with can_sleep restored to false the warnings are gone and the sensor > is detected and read again. > > This must not be applied or backported without the shared-proxy locking > fix above; otherwise the original Khadas VIM3 splat returns on boards > that genuinely share a meson GPIO. > > Fixes: 28f240683871 ("pinctrl: meson: mark the GPIO controller as sleeping") > Link: https://lore.kernel.org/all/[email protected]/ > Signed-off-by: Viacheslav Bocharov <[email protected]> Acked-by: Linus Walleij <[email protected]> Yours, Linus Walleij _______________________________________________ linux-amlogic mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-amlogic