Revert "PCI: pciehp: Add runtime PM support for PCIe hotplug ports"
This reverts commit68db9bc814
. Yinghai reported that the following manual hotplug sequence: # echo 0 > /sys/bus/pci/slots/8/power # echo 1 > /sys/bus/pci/slots/8/power worked in v4.9, but fails in v4.10-rc1, and that reverting68db9bc814
("PCI: pciehp: Add runtime PM support for PCIe hotplug ports") makes it work again. Fixes:68db9bc814
("PCI: pciehp: Add runtime PM support for PCIe hotplug ports") Link: https://lkml.kernel.org/r/CAE9FiQVCMCa7iVyuwp9z6VrY0cE7V_xghuXip28Ft52=8QmTWw@mail.gmail.com Link: https://bugzilla.kernel.org/show_bug.cgi?id=193951 Reported-by: Yinghai Lu <yinghai@kernel.org> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
This commit is contained in:
parent
dfef358bd1
commit
d98e092907
@ -31,7 +31,6 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/pci.h>
|
||||
#include "../pci.h"
|
||||
#include "pciehp.h"
|
||||
@ -99,7 +98,6 @@ static int board_added(struct slot *p_slot)
|
||||
pciehp_green_led_blink(p_slot);
|
||||
|
||||
/* Check link training status */
|
||||
pm_runtime_get_sync(&ctrl->pcie->port->dev);
|
||||
retval = pciehp_check_link_status(ctrl);
|
||||
if (retval) {
|
||||
ctrl_err(ctrl, "Failed to check link status\n");
|
||||
@ -120,14 +118,12 @@ static int board_added(struct slot *p_slot)
|
||||
if (retval != -EEXIST)
|
||||
goto err_exit;
|
||||
}
|
||||
pm_runtime_put(&ctrl->pcie->port->dev);
|
||||
|
||||
pciehp_green_led_on(p_slot);
|
||||
pciehp_set_attention_status(p_slot, 0);
|
||||
return 0;
|
||||
|
||||
err_exit:
|
||||
pm_runtime_put(&ctrl->pcie->port->dev);
|
||||
set_slot_off(ctrl, p_slot);
|
||||
return retval;
|
||||
}
|
||||
@ -141,9 +137,7 @@ static int remove_board(struct slot *p_slot)
|
||||
int retval;
|
||||
struct controller *ctrl = p_slot->ctrl;
|
||||
|
||||
pm_runtime_get_sync(&ctrl->pcie->port->dev);
|
||||
retval = pciehp_unconfigure_device(p_slot);
|
||||
pm_runtime_put(&ctrl->pcie->port->dev);
|
||||
if (retval)
|
||||
return retval;
|
||||
|
||||
|
@ -2241,10 +2241,13 @@ bool pci_bridge_d3_possible(struct pci_dev *bridge)
|
||||
return false;
|
||||
|
||||
/*
|
||||
* Hotplug ports handled by firmware in System Management Mode
|
||||
* Hotplug interrupts cannot be delivered if the link is down,
|
||||
* so parents of a hotplug port must stay awake. In addition,
|
||||
* hotplug ports handled by firmware in System Management Mode
|
||||
* may not be put into D3 by the OS (Thunderbolt on non-Macs).
|
||||
* For simplicity, disallow in general for now.
|
||||
*/
|
||||
if (bridge->is_hotplug_bridge && !pciehp_is_native(bridge))
|
||||
if (bridge->is_hotplug_bridge)
|
||||
return false;
|
||||
|
||||
if (pci_bridge_d3_force)
|
||||
@ -2276,10 +2279,7 @@ static int pci_dev_check_d3cold(struct pci_dev *dev, void *data)
|
||||
!pci_pme_capable(dev, PCI_D3cold)) ||
|
||||
|
||||
/* If it is a bridge it must be allowed to go to D3. */
|
||||
!pci_power_manageable(dev) ||
|
||||
|
||||
/* Hotplug interrupts cannot be delivered if the link is down. */
|
||||
dev->is_hotplug_bridge)
|
||||
!pci_power_manageable(dev))
|
||||
|
||||
*d3cold_ok = false;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user