|
@@ -858,11 +858,16 @@ struct controller *pcie_init(struct pcie_device *dev)
|
|
|
if (link_cap & PCI_EXP_LNKCAP_DLLLARC)
|
|
|
ctrl->link_active_reporting = 1;
|
|
|
|
|
|
- /* Clear all remaining event bits in Slot Status register */
|
|
|
+ /*
|
|
|
+ * Clear all remaining event bits in Slot Status register except
|
|
|
+ * Presence Detect Changed. We want to make sure possible
|
|
|
+ * hotplug event is triggered when the interrupt is unmasked so
|
|
|
+ * that we don't lose that event.
|
|
|
+ */
|
|
|
pcie_capability_write_word(pdev, PCI_EXP_SLTSTA,
|
|
|
PCI_EXP_SLTSTA_ABP | PCI_EXP_SLTSTA_PFD |
|
|
|
- PCI_EXP_SLTSTA_MRLSC | PCI_EXP_SLTSTA_PDC |
|
|
|
- PCI_EXP_SLTSTA_CC | PCI_EXP_SLTSTA_DLLSC);
|
|
|
+ PCI_EXP_SLTSTA_MRLSC | PCI_EXP_SLTSTA_CC |
|
|
|
+ PCI_EXP_SLTSTA_DLLSC);
|
|
|
|
|
|
ctrl_info(ctrl, "Slot #%d AttnBtn%c PwrCtrl%c MRL%c AttnInd%c PwrInd%c HotPlug%c Surprise%c Interlock%c NoCompl%c LLActRep%c\n",
|
|
|
(slot_cap & PCI_EXP_SLTCAP_PSN) >> 19,
|