diff options
| -rw-r--r-- | drivers/pci/hotplug/pciehp_hpc.c | 12 | 
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c index db33688af58..a960faec102 100644 --- a/drivers/pci/hotplug/pciehp_hpc.c +++ b/drivers/pci/hotplug/pciehp_hpc.c @@ -606,6 +606,10 @@ int pciehp_power_on_slot(struct slot * slot)  	ctrl_dbg(ctrl, "%s: SLOTCTRL %x write cmd %x\n", __func__,  		 pci_pcie_cap(ctrl->pcie->port) + PCI_EXP_SLTCTL, slot_cmd); +	retval = pciehp_link_enable(ctrl); +	if (retval) +		ctrl_err(ctrl, "%s: Can not enable the link!\n", __func__); +  	return retval;  } @@ -616,6 +620,14 @@ int pciehp_power_off_slot(struct slot * slot)  	u16 cmd_mask;  	int retval; +	/* Disable the link at first */ +	pciehp_link_disable(ctrl); +	/* wait the link is down */ +	if (ctrl->link_active_reporting) +		pcie_wait_link_not_active(ctrl); +	else +		msleep(1000); +  	slot_cmd = POWER_OFF;  	cmd_mask = PCI_EXP_SLTCTL_PCC;  	retval = pcie_write_cmd(ctrl, slot_cmd, cmd_mask);  |