[PATCH v3 0/3] Small INTx fixes for Rockchip's dwc based PCIe controller driver

Shawn Lin shawn.lin at rock-chips.com
Mon Sep 21 19:36:59 PDT 2026


This short series fixes the INTx handling around the newly introduced
.reset_root_port() (b376b3ff9cb0), and is split in three patches per
Niklas' suggestion:

Patch 1 stops .reset_root_port() from recreating the INTx irq domain
on every root port reset, which leaked the old domain and silently
broke INTx delivery afterwards, the downstream devices' virqs were
allocated in the previous domain and were never re-mapped. By moving
the of_irq_get_byname() lookup, the INTx irq domain creation and the
chained handler installation into rockchip_pcie_configure_rc(), right
after dw_pcie_host_init(). This leaves .init() with nothing but
idempotent register programming, so it can safely be re-run by
.reset_root_port() and dw_pcie_resume_noirq().

Patch 2 makes the irq domain and the chained handler devm-managed, so
that they are released with the device instead of leaking, which also
addresses the probe failure leak/use-after-free flagged by the Sashiko
review.

Patch 3 keeps the INTx IRQ masked while .reset_root_port() gates the
controller clocks, so the chained handler cannot read the unclocked
APB bus and raise a synchronous external abort.


Changes in v3:
- split devm-managed part into a seperate patch

Changes in v2:
- Moved the of_irq_get_byname() lookup, the INTx irq domain creation
  and the chained handler installation out of the host ops .init()
  callback into rockchip_pcie_configure_rc(), right after
  dw_pcie_host_init(), as suggested by Niklas Cassel. This supersedes
  v1 patch 1/2, as .init() no longer creates the irq domain, and
  removes the rockchip_pcie_host_hw_init() helper from v1.
- Made the INTx irq domain devm-managed with
  devm_irq_domain_instantiate() and uninstall the chained handler
  through a devres action, addressing the probe failure leak and
  use-after-free flagged by the Sashiko review.
- keep the INTx IRQ masked while .reset_root_port()
  gates the controller clocks, responding to the Sashiko review
  finding about accessing the unclocked APB bus.

Shawn Lin (3):
  PCI: dw-rockchip: Move the INTx irq setup to probe
  PCI: dw-rockchip: Make the INTx irq setup devm-managed
  PCI: dw-rockchip: Mask the INTx IRQ while the controller clocks are
    gated

 drivers/pci/controller/dwc/pcie-dw-rockchip.c | 77 ++++++++++++++++++++-------
 1 file changed, 57 insertions(+), 20 deletions(-)

-- 
2.7.4




More information about the Linux-rockchip mailing list