[PATCH v6 0/9] irqchip/imx-irqsteer: Allow building as module

From: Zhipeng . wang_1

Date: Thu Oct 08 2026 - 05:03:11 EST


From: Zhipeng Wang <zhipeng.wang_1@xxxxxxx>

This series makes the i.MX IRQSTEER driver buildable as a module, along
with the pre-existing bug fixes that become reachable once the driver
can be unbound and reloaded.

The fixes come first so they can be picked up (and backported) on their
own, followed by the runtime-PM/clock rework, the module conversion and
the irqdomain helper cleanup:

1. Call chained_irq_exit() on the handler error path.
2. Validate IRQ count before creating the domain (Fabio).
3. Dispose of the parent IRQ mappings in remove().
4. Convert to devm_pm_runtime_set_active_enabled() - fixes the
"Unbalanced pm_runtime_enable!" on unbind, with a Fixes tag so it can
be backported to stable (e.g. 6.18).
5. Let devres own the clock.
6. Mask all interrupts in probe().
7. Allow building as module.
8. genirq/irqdomain: add devm_irq_domain_create_linear().
9. Use devm_irq_domain_create_linear() in the driver.

Changes in v6:
- Split the runtime-PM fix out of the devres rework into its own patch
(patch 4) with Fixes: 4730d2233311, so the "Unbalanced
pm_runtime_enable!" fix can be backported to stable independently of
the clock rework (Fabio Estevam). devm_pm_runtime_set_active_enabled()
is now set up before the IRQ domain is created, so its error path just
bails out and no err_irq unwind is needed.
- Drop the err_irq and out labels in probe(); each failure path now
returns directly (Radu Rendec).
- In remove(), drop the runtime-PM reference taken by
pm_runtime_resume_and_get() with pm_runtime_put_noidle() (guarded by
the return value), so the usage count is not leaked and autosuspend
keeps working across module reload (Sashiko AI).
- Reorder so the Fixes-tagged patches come before the rework/cleanup.
- Rebased onto the current irq/core.

Changes in v5:
- Consolidate the three previously-scattered series/patches into one
coherent series (Thomas Gleixner).

v5: https://lore.kernel.org/r/20260821101039.4037925-1-Zhipeng.wang_1@xxxxxxxxxxx
v4: https://lore.kernel.org/r/20260819090543.585131-1-Zhipeng.wang_1@xxxxxxxxxxx
v3: https://lore.kernel.org/r/20260807072346.1222389-1-Zhipeng.wang_1@xxxxxxxxxxx
v2: https://lore.kernel.org/r/20260728092219.525449-1-Zhipeng.wang_1@xxxxxxxxxxx
v1: https://lore.kernel.org/r/20260724090136.3595894-1-Zhipeng.wang_1@xxxxxxxxxxx

Fabio Estevam (1):
irqchip/imx-irqsteer: Validate IRQ count before creating domain

Jindong Yue (1):
irqchip/imx-irqsteer: Allow building as module

Zhipeng Wang (7):
irqchip/imx-irqsteer: Call chained_irq_exit() on the handler error
path
irqchip/imx-irqsteer: Dispose of parent IRQ mappings in remove()
irqchip/imx-irqsteer: Convert to devm_pm_runtime_set_active_enabled()
irqchip/imx-irqsteer: Mask all interrupts in probe()
irqchip/imx-irqsteer: Let devres own the clock
genirq/irqdomain: Add devm_irq_domain_create_linear()
irqchip/imx-irqsteer: Use devm_irq_domain_create_linear()

drivers/irqchip/Kconfig | 2 +-
drivers/irqchip/irq-imx-irqsteer.c | 74 ++++++++++++++++++------------
include/linux/irqdomain.h | 30 ++++++++++++
3 files changed, 75 insertions(+), 31 deletions(-)


base-commit: a0e1fdb96578ea562a03c487f70673d228824d0a
--
2.34.1