PCI: pciehp: Acknowledge spurious "cmd completed" event
authorRajat Jain <rajatxjain@gmail.com>
Fri, 21 Feb 2014 01:42:31 +0000 (17:42 -0800)
committerBjorn Helgaas <bhelgaas@google.com>
Thu, 24 Apr 2014 22:47:09 +0000 (16:47 -0600)
In case of a spurious "cmd completed", pcie_write_cmd() does not clear it,
but yet expects more "cmd completed" events to be generated.  This does not
happen because the previous (spurious) event has not been acknowledged.
Fix that.

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 d7d058fa19a428e5503c919979e5a6e1e5e5e0b2..1463412cf7f8e9b1d63cfc31a6d4a2085de3b21d 100644 (file)
@@ -159,6 +159,8 @@ static void pcie_write_cmd(struct controller *ctrl, u16 cmd, u16 mask)
 
        pcie_capability_read_word(pdev, PCI_EXP_SLTSTA, &slot_status);
        if (slot_status & PCI_EXP_SLTSTA_CC) {
+               pcie_capability_write_word(pdev, PCI_EXP_SLTSTA,
+                                          PCI_EXP_SLTSTA_CC);
                if (!ctrl->no_cmd_complete) {
                        /*
                         * After 1 sec and CMD_COMPLETED still not set, just