diff --git a/drivers/pci/controller/pci-loongson.c b/drivers/pci/controller/pci-loongson.c index 7fd53b8a567edd6c6ac2f7d65e3962600ca028e4..26a0b3268766f6455e08c5988a3f2180042e12f0 100644 --- a/drivers/pci/controller/pci-loongson.c +++ b/drivers/pci/controller/pci-loongson.c @@ -115,23 +115,6 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_LOONGSON, DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_LOONGSON, DEV_PCIE_PORT_2, loongson_mrrs_quirk); -static void loongson_bmaster_quirk(struct pci_dev *pdev) -{ - /* - * Some Loongson PCIe ports will cause CPU deadlock if disable - * the Bus Master bit during poweroff/reboot. - */ - struct pci_host_bridge *bridge = pci_find_host_bridge(pdev->bus); - - bridge->no_dis_bmaster = 1; -} -DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_LOONGSON, - DEV_PCIE_PORT_0, loongson_bmaster_quirk); -DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_LOONGSON, - DEV_PCIE_PORT_1, loongson_bmaster_quirk); -DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_LOONGSON, - DEV_PCIE_PORT_2, loongson_bmaster_quirk); - static void loongson_pci_pin_quirk(struct pci_dev *pdev) { pdev->pin = 1 + (PCI_FUNC(pdev->devfn) & 3); diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c index c0a49fa208665249ada13f16e9eb957c808ca714..3028307a9b146be2664af1da745ec4055085fd5c 100644 --- a/drivers/pci/pcie/portdrv_core.c +++ b/drivers/pci/pcie/portdrv_core.c @@ -486,6 +486,7 @@ void pcie_port_device_remove(struct pci_dev *dev) { device_for_each_child(&dev->dev, NULL, remove_iter); pci_free_irq_vectors(dev); + pci_disable_device(dev); } /** diff --git a/drivers/pci/pcie/portdrv_pci.c b/drivers/pci/pcie/portdrv_pci.c index 3ded5fe5f2cd44779b7a96f92beac917e60cad89..8bd4992a4f3286a19b8cc0e20bcf45ab9839ae89 100644 --- a/drivers/pci/pcie/portdrv_pci.c +++ b/drivers/pci/pcie/portdrv_pci.c @@ -148,24 +148,6 @@ static void pcie_portdrv_remove(struct pci_dev *dev) } pcie_port_device_remove(dev); - - pci_disable_device(dev); -} - -static void pcie_portdrv_shutdown(struct pci_dev *dev) -{ - struct pci_host_bridge *bridge = pci_find_host_bridge(dev->bus); - - if (pci_bridge_d3_possible(dev)) { - pm_runtime_forbid(&dev->dev); - pm_runtime_get_noresume(&dev->dev); - pm_runtime_dont_use_autosuspend(&dev->dev); - } - - pcie_port_device_remove(dev); - - if (!bridge->no_dis_bmaster) - pci_disable_device(dev); } static pci_ers_result_t pcie_portdrv_error_detected(struct pci_dev *dev, @@ -236,7 +218,7 @@ static struct pci_driver pcie_portdriver = { .probe = pcie_portdrv_probe, .remove = pcie_portdrv_remove, - .shutdown = pcie_portdrv_shutdown, + .shutdown = pcie_portdrv_remove, .err_handler = &pcie_portdrv_err_handler, diff --git a/include/linux/pci.h b/include/linux/pci.h index 46de0ade5c69272215b4ba4ded80f817c919567f..c05a2cc63c8a1be95b0eb31cecaa1b38fe4cd09a 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -575,7 +575,6 @@ struct pci_host_bridge { unsigned int ignore_reset_delay:1; /* For entire hierarchy */ unsigned int no_ext_tags:1; /* No Extended Tags */ unsigned int no_inc_mrrs:1; /* No Increase MRRS */ - unsigned int no_dis_bmaster:1; /* No Disable Bus Master */ unsigned int native_aer:1; /* OS may use PCIe AER */ unsigned int native_pcie_hotplug:1; /* OS may use PCIe hotplug */ unsigned int native_shpc_hotplug:1; /* OS may use SHPC hotplug */