PCI: pciehp: Enable link state change notifications
authorRajat Jain <rajatxjain@gmail.com>
Wed, 5 Feb 2014 02:29:23 +0000 (18:29 -0800)
committerBjorn Helgaas <bhelgaas@google.com>
Tue, 11 Feb 2014 23:08:43 +0000 (16:08 -0700)
Enable the Link state notifications unconditionally. Enable the
presence detection notification only if attention button is absent.
This was discussed at this thread:
    https://lkml.kernel.org/r/529E5C0E.80903@gmail.com

Signed-off-by: Rajat Jain <rajatxjain@gmail.com>
Signed-off-by: Rajat Jain <rajatjain@juniper.net>
Signed-off-by: Guenter Roeck <groeck@juniper.net>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/hotplug/pciehp_hpc.c

index b413dce8f19436aed0963e45aecf1916f875bd89..245a3cb5d2f3230a4d59e42c132d3356c72cbc01 100644 (file)
@@ -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);
 }