Merge branch 'pci/vpd'
[muen/linux.git] / drivers / pci / pci-sysfs.c
index 4415e624cf7e3f5a4f82970477bb335a25bb2a0d..366d93af051d45f174fe96af4e6c1c3f106f678d 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;
@@ -1489,11 +1462,10 @@ static int pci_create_capabilities_sysfs(struct pci_dev *dev)
        pcie_vpd_create_sysfs_dev_files(dev);
        pcie_aspm_create_sysfs_dev_files(dev);
 
-       if (!pci_probe_reset_function(dev)) {
+       if (dev->reset_fn) {
                retval = device_create_file(&dev->dev, &reset_attr);
                if (retval)
                        goto error;
-               dev->reset_fn = 1;
        }
        return 0;