PCI: remove redundant capabilities checking in pci_{save, restore}_pcie_state
authorMyron Stowe <myron.stowe@redhat.com>
Fri, 1 Jun 2012 21:16:43 +0000 (15:16 -0600)
committerBjorn Helgaas <bhelgaas@google.com>
Tue, 12 Jun 2012 02:41:28 +0000 (20:41 -0600)
Unlike PCI Express v1's Capabilities Structure, v2's requires the entire
structure to be implemented.  In v2 structures, register fields that
are not implemented are present but hardwired to 0x0.  These may
include: Link Capabilities, Status, and Control; Slot Capabilities,
Status, and Control; Root Capabilities, Status, and Control; and all of
the '2' (Device, Link, and Slot) Capabilities, Status, and Control
registers.

This patch removes the redundant capability checks corresponding to the
Link 2's and Slot 2's, Capabilities, Status, and Control registers as they
will be present if Device Capabilities 2's registers are (which explains
why the macros for each of the three are identical).

Signed-off-by: Myron Stowe <myron.stowe@redhat.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/pci.c

index 985df63aa59fe6fef05d30f2e3e1a3dc0e05d018..fe26df7cf5cd5eebe177b6b6df5e1bca1538c283 100644 (file)
@@ -854,12 +854,6 @@ EXPORT_SYMBOL(pci_choose_state);
                ((flags & PCI_EXP_FLAGS_VERS) > 1 ||    \
                 (type == PCI_EXP_TYPE_ROOT_PORT ||     \
                  type == PCI_EXP_TYPE_RC_EC))
-#define pcie_cap_has_devctl2(type, flags)              \
-               ((flags & PCI_EXP_FLAGS_VERS) > 1)
-#define pcie_cap_has_lnkctl2(type, flags)              \
-               ((flags & PCI_EXP_FLAGS_VERS) > 1)
-#define pcie_cap_has_sltctl2(type, flags)              \
-               ((flags & PCI_EXP_FLAGS_VERS) > 1)
 
 static struct pci_cap_saved_state *pci_find_saved_cap(
        struct pci_dev *pci_dev, char cap)
@@ -902,13 +896,14 @@ static int pci_save_pcie_state(struct pci_dev *dev)
                pci_read_config_word(dev, pos + PCI_EXP_SLTCTL, &cap[i++]);
        if (pcie_cap_has_rtctl(dev->pcie_type, flags))
                pci_read_config_word(dev, pos + PCI_EXP_RTCTL, &cap[i++]);
-       if (pcie_cap_has_devctl2(dev->pcie_type, flags))
-               pci_read_config_word(dev, pos + PCI_EXP_DEVCTL2, &cap[i++]);
-       if (pcie_cap_has_lnkctl2(dev->pcie_type, flags))
-               pci_read_config_word(dev, pos + PCI_EXP_LNKCTL2, &cap[i++]);
-       if (pcie_cap_has_sltctl2(dev->pcie_type, flags))
-               pci_read_config_word(dev, pos + PCI_EXP_SLTCTL2, &cap[i++]);
 
+       pos = pci_pcie_cap2(dev);
+       if (!pos)
+               return 0;
+
+       pci_read_config_word(dev, pos + PCI_EXP_DEVCTL2, &cap[i++]);
+       pci_read_config_word(dev, pos + PCI_EXP_LNKCTL2, &cap[i++]);
+       pci_read_config_word(dev, pos + PCI_EXP_SLTCTL2, &cap[i++]);
        return 0;
 }
 
@@ -935,12 +930,14 @@ static void pci_restore_pcie_state(struct pci_dev *dev)
                pci_write_config_word(dev, pos + PCI_EXP_SLTCTL, cap[i++]);
        if (pcie_cap_has_rtctl(dev->pcie_type, flags))
                pci_write_config_word(dev, pos + PCI_EXP_RTCTL, cap[i++]);
-       if (pcie_cap_has_devctl2(dev->pcie_type, flags))
-               pci_write_config_word(dev, pos + PCI_EXP_DEVCTL2, cap[i++]);
-       if (pcie_cap_has_lnkctl2(dev->pcie_type, flags))
-               pci_write_config_word(dev, pos + PCI_EXP_LNKCTL2, cap[i++]);
-       if (pcie_cap_has_sltctl2(dev->pcie_type, flags))
-               pci_write_config_word(dev, pos + PCI_EXP_SLTCTL2, cap[i++]);
+
+       pos = pci_pcie_cap2(dev);
+       if (!pos)
+               return;
+
+       pci_write_config_word(dev, pos + PCI_EXP_DEVCTL2, cap[i++]);
+       pci_write_config_word(dev, pos + PCI_EXP_LNKCTL2, cap[i++]);
+       pci_write_config_word(dev, pos + PCI_EXP_SLTCTL2, cap[i++]);
 }