|
|
@@ -600,9 +600,17 @@ void pcie_enable_notification(struct controller *ctrl)
|
|
|
* when it is cleared in the interrupt service routine, and
|
|
|
* next power fault detected interrupt was notified again.
|
|
|
*/
|
|
|
- cmd = PCI_EXP_SLTCTL_PDCE;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Always enable link events: thus link-up and link-down shall
|
|
|
+ * always be treated as hotplug and unplug respectively. Enable
|
|
|
+ * presence detect only if Attention Button is not present.
|
|
|
+ */
|
|
|
+ cmd = PCI_EXP_SLTCTL_DLLSCE;
|
|
|
if (ATTN_BUTTN(ctrl))
|
|
|
cmd |= PCI_EXP_SLTCTL_ABPE;
|
|
|
+ else
|
|
|
+ cmd |= PCI_EXP_SLTCTL_PDCE;
|
|
|
if (MRL_SENS(ctrl))
|
|
|
cmd |= PCI_EXP_SLTCTL_MRLSCE;
|
|
|
if (!pciehp_poll_mode)
|
|
|
@@ -610,7 +618,8 @@ void pcie_enable_notification(struct controller *ctrl)
|
|
|
|
|
|
mask = (PCI_EXP_SLTCTL_PDCE | PCI_EXP_SLTCTL_ABPE |
|
|
|
PCI_EXP_SLTCTL_MRLSCE | PCI_EXP_SLTCTL_PFDE |
|
|
|
- PCI_EXP_SLTCTL_HPIE | PCI_EXP_SLTCTL_CCIE);
|
|
|
+ PCI_EXP_SLTCTL_HPIE | PCI_EXP_SLTCTL_CCIE |
|
|
|
+ PCI_EXP_SLTCTL_DLLSCE);
|
|
|
|
|
|
pcie_write_cmd(ctrl, cmd, mask);
|
|
|
}
|