thunder-pem, hisi and thunder-ecam set .probe = pci_host_common_probe but have no ->remove, so unbinding only runs devres_release_all(): gen_pci_unmap_cfg() -> pci_ecam_free() frees the ECAM config window while the bus tree stays registered - only pci_remove_bus() unlinks a bus, and only pci_host_common_remove() reaches it for a root bus. The next config access in pci_ecam_map_bus() reads cfg->ops->bus_shift. Trigger: DT overlay removal of the node that supplied or enabled it. Fix: give each driver the same .remove = pci_host_common_remove that pci-host-generic.c got in commit 01fcb7f777a9 ("PCI: Add support for unbinding the generic PCI host controller"), so the unlink comes first. Fixes: f12b76e56ada ("PCI: thunder: Add PCIe host driver for ThunderX processors") Fixes: a2ec1996098c ("PCI: hisi: Add DT almost-ECAM support for Hip06/Hip07 host controllers") Fixes: 7b6e7ba8e81a ("PCI: thunder: Add driver for ThunderX-pass{1,2} on-chip devices") Cc: stable@vger.kernel.org Signed-off-by: Hongyan Xu --- drivers/pci/controller/dwc/pcie-hisi.c | 1 + drivers/pci/controller/pci-thunder-ecam.c | 1 + drivers/pci/controller/pci-thunder-pem.c | 1 + 3 files changed, 3 insertions(+) diff --git a/drivers/pci/controller/dwc/pcie-hisi.c b/drivers/pci/controller/dwc/pcie-hisi.c index 3c17897e56fc..5ed58e5db797 100644 --- a/drivers/pci/controller/dwc/pcie-hisi.c +++ b/drivers/pci/controller/dwc/pcie-hisi.c @@ -169,6 +169,7 @@ static const struct of_device_id hisi_pcie_almost_ecam_of_match[] = { static struct platform_driver hisi_pcie_almost_ecam_driver = { .probe = pci_host_common_probe, + .remove = pci_host_common_remove, .driver = { .name = "hisi-pcie-almost-ecam", .of_match_table = hisi_pcie_almost_ecam_of_match, diff --git a/drivers/pci/controller/pci-thunder-ecam.c b/drivers/pci/controller/pci-thunder-ecam.c index b5b4a958e6a2..4745f5d00b5a 100644 --- a/drivers/pci/controller/pci-thunder-ecam.c +++ b/drivers/pci/controller/pci-thunder-ecam.c @@ -358,6 +358,7 @@ static struct platform_driver thunder_ecam_driver = { .suppress_bind_attrs = true, }, .probe = pci_host_common_probe, + .remove = pci_host_common_remove, }; builtin_platform_driver(thunder_ecam_driver); diff --git a/drivers/pci/controller/pci-thunder-pem.c b/drivers/pci/controller/pci-thunder-pem.c index 5fa037fb61dc..80cabbf263be 100644 --- a/drivers/pci/controller/pci-thunder-pem.c +++ b/drivers/pci/controller/pci-thunder-pem.c @@ -474,6 +474,7 @@ static struct platform_driver thunder_pem_driver = { .suppress_bind_attrs = true, }, .probe = pci_host_common_probe, + .remove = pci_host_common_remove, }; builtin_platform_driver(thunder_pem_driver); -- 2.50.1.windows.1