|
@@ -667,7 +667,7 @@ static irqreturn_t pcie_isr(int irq, void *dev_id)
|
|
return handled;
|
|
return handled;
|
|
}
|
|
}
|
|
|
|
|
|
-void pcie_enable_notification(struct controller *ctrl)
|
|
|
|
|
|
+static void pcie_enable_notification(struct controller *ctrl)
|
|
{
|
|
{
|
|
u16 cmd, mask;
|
|
u16 cmd, mask;
|
|
|
|
|
|
@@ -705,6 +705,17 @@ void pcie_enable_notification(struct controller *ctrl)
|
|
pci_pcie_cap(ctrl->pcie->port) + PCI_EXP_SLTCTL, cmd);
|
|
pci_pcie_cap(ctrl->pcie->port) + PCI_EXP_SLTCTL, cmd);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void pcie_reenable_notification(struct controller *ctrl)
|
|
|
|
+{
|
|
|
|
+ /*
|
|
|
|
+ * Clear both Presence and Data Link Layer Changed to make sure
|
|
|
|
+ * those events still fire after we have re-enabled them.
|
|
|
|
+ */
|
|
|
|
+ pcie_capability_write_word(ctrl->pcie->port, PCI_EXP_SLTSTA,
|
|
|
|
+ PCI_EXP_SLTSTA_PDC | PCI_EXP_SLTSTA_DLLSC);
|
|
|
|
+ pcie_enable_notification(ctrl);
|
|
|
|
+}
|
|
|
|
+
|
|
static void pcie_disable_notification(struct controller *ctrl)
|
|
static void pcie_disable_notification(struct controller *ctrl)
|
|
{
|
|
{
|
|
u16 mask;
|
|
u16 mask;
|