[PATCH 0/9] gpio: mxc: bug fixes and probe cleanup
From: Peng Fan (OSS)
Date: Sat Oct 03 2026 - 08:09:33 EST
Two bug fixes and follows up with probe modernization and bitops cleanup.
We not receive bug report and met issues during our test, so patch 1&2
are not critial for now.
Patches 1-2 are bug fixes:
1. Fix a race where the chained IRQ handler is installed before the
IRQ domain, generic IRQ chip, and port list entry are ready.
Also fixes a latent use-after-free on probe failure paths that
never unregistered the handler.
2. Fix wakeup_pads being typed as u32 while accessed through
set_bit/clear_bit (unsigned long *), causing adjacent field
corruption on 64-bit platforms. Switch to atomic bitops for
concurrency safety and fix the disable path to preserve the
wakeup_pads bit on disable_irq_wake() failure.
Patches 3-9 are cleanups, each building on the previous:
3. Cache of_device_is_compatible() results at probe into struct
fields, avoiding repeated DT string comparisons in suspend/resume.
4. Use devm_add_action_or_reset() for irq_domain_remove(), removing
manual cleanup in error paths.
5. Switch to devm-managed PM runtime and dev_err_probe(), eliminating
the remaining goto error labels entirely.
6. Introduce a local 'dev' variable and migrate to
device_is_compatible() for firmware-agnostic matching.
7. Introduce MXC_ICR_REG/MXC_ICR_MASK macros and use
field_prep()/field_get() for ICR register access, replacing
duplicated magic-number arithmetic in gpio_set_irq_type() and
mxc_flip_edge().
8. Replace open-coded '1 << n' with BIT() throughout the driver.
9. Simplify gpio_set_wake_irq() using irq_set_irq_wake() and
assign_bit().
Signed-off-by: Peng Fan <peng.fan@xxxxxxx>
---
Peng Fan (9):
gpio: mxc: fix race between chained IRQ handler install and probe completion
gpio: mxc: fix wakeup_pads bit operations for correctness
gpio: mxc: cache compatible checks at probe time
gpio: mxc: use devm action for irq_domain cleanup
gpio: mxc: use devres-managed PM runtime and dev_err_probe
gpio: mxc: use local dev variable and device_is_compatible()
gpio: mxc: introduce MXC_ICR macros and use field_prep/field_get
gpio: mxc: use BIT() macro for single-bit operations
gpio: mxc: simplify gpio_set_wake_irq() with irq_set_irq_wake and assign_bit
drivers/gpio/gpio-mxc.c | 158 ++++++++++++++++++++++++------------------------
1 file changed, 79 insertions(+), 79 deletions(-)
---
base-commit: f0406245cb9855e6318335a8a223551354291a46
change-id: 20261003-gpio-mxc-cleanup-e49cc626c51e
Best regards,
--
Peng Fan <peng.fan@xxxxxxx>