Merge branch 'pci/virtualization'
[muen/linux.git] / drivers / pci / pci-sysfs.c
index 4933f0270471014db7cc3fd58f569308293137fb..116e97dafda0c6fa7da5852bd9093f01fa066d94 100644 (file)
@@ -1,7 +1,5 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * drivers/pci/pci-sysfs.c
- *
  * (C) Copyright 2002-2004 Greg Kroah-Hartman <greg@kroah.com>
  * (C) Copyright 2002-2004 IBM Corp.
  * (C) Copyright 2003 Matthew Wilcox
@@ -12,7 +10,6 @@
  * File attributes for PCI devices
  *
  * Modeled after usb's driverfs.c
- *
  */
 
 
@@ -158,45 +155,18 @@ static DEVICE_ATTR_RO(resource);
 static ssize_t max_link_speed_show(struct device *dev,
                                   struct device_attribute *attr, char *buf)
 {
-       struct pci_dev *pci_dev = to_pci_dev(dev);
-       u32 linkcap;
-       int err;
-       const char *speed;
-
-       err = pcie_capability_read_dword(pci_dev, PCI_EXP_LNKCAP, &linkcap);
-       if (err)
-               return -EINVAL;
-
-       switch (linkcap & PCI_EXP_LNKCAP_SLS) {
-       case PCI_EXP_LNKCAP_SLS_8_0GB:
-               speed = "8 GT/s";
-               break;
-       case PCI_EXP_LNKCAP_SLS_5_0GB:
-               speed = "5 GT/s";
-               break;
-       case PCI_EXP_LNKCAP_SLS_2_5GB:
-               speed = "2.5 GT/s";
-               break;
-       default:
-               speed = "Unknown speed";
-       }
+       struct pci_dev *pdev = to_pci_dev(dev);
 
-       return sprintf(buf, "%s\n", speed);
+       return sprintf(buf, "%s\n", PCIE_SPEED2STR(pcie_get_speed_cap(pdev)));
 }
 static DEVICE_ATTR_RO(max_link_speed);
 
 static ssize_t max_link_width_show(struct device *dev,
                                   struct device_attribute *attr, char *buf)
 {
-       struct pci_dev *pci_dev = to_pci_dev(dev);
-       u32 linkcap;
-       int err;
-
-       err = pcie_capability_read_dword(pci_dev, PCI_EXP_LNKCAP, &linkcap);
-       if (err)
-               return -EINVAL;
+       struct pci_dev *pdev = to_pci_dev(dev);
 
-       return sprintf(buf, "%u\n", (linkcap & PCI_EXP_LNKCAP_MLW) >> 4);
+       return sprintf(buf, "%u\n", pcie_get_width_cap(pdev));
 }
 static DEVICE_ATTR_RO(max_link_width);
 
@@ -213,6 +183,9 @@ static ssize_t current_link_speed_show(struct device *dev,
                return -EINVAL;
 
        switch (linkstat & PCI_EXP_LNKSTA_CLS) {
+       case PCI_EXP_LNKSTA_CLS_16_0GB:
+               speed = "16 GT/s";
+               break;
        case PCI_EXP_LNKSTA_CLS_8_0GB:
                speed = "8 GT/s";
                break;