aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorBjorn Helgaas <bhelgaas@google.com>2016-12-12 11:25:01 -0600
committerBjorn Helgaas <bhelgaas@google.com>2016-12-12 11:25:01 -0600
commita7d51491110d039e42ea881aa4d9c08ea8b7d6ea (patch)
treeef9e649c3cb4156ac6507fabd3f045c788cd8566 /drivers
parentLinux 4.9-rc1 (diff)
parentPCI/ASPM: Don't retrain link if ASPM not possible (diff)
downloadlinux-dev-a7d51491110d039e42ea881aa4d9c08ea8b7d6ea.tar.xz
linux-dev-a7d51491110d039e42ea881aa4d9c08ea8b7d6ea.zip
Merge branch 'pci/aspm' into next
* pci/aspm: PCI/ASPM: Don't retrain link if ASPM not possible PCI/ASPM: Use permission-specific DEVICE_ATTR variants
Diffstat (limited to 'drivers')
-rw-r--r--drivers/pci/pcie/aspm.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
index 0ec649d961d7..17ac1dce3286 100644
--- a/drivers/pci/pcie/aspm.c
+++ b/drivers/pci/pcie/aspm.c
@@ -351,12 +351,26 @@ static void pcie_aspm_cap_init(struct pcie_link_state *link, int blacklist)
return;
}
+ /* Get upstream/downstream components' register state */
+ pcie_get_aspm_reg(parent, &upreg);
+ child = list_entry(linkbus->devices.next, struct pci_dev, bus_list);
+ pcie_get_aspm_reg(child, &dwreg);
+
+ /*
+ * If ASPM not supported, don't mess with the clocks and link,
+ * bail out now.
+ */
+ if (!(upreg.support & dwreg.support))
+ return;
+
/* Configure common clock before checking latencies */
pcie_aspm_configure_common_clock(link);
- /* Get upstream/downstream components' register state */
+ /*
+ * Re-read upstream/downstream components' register state
+ * after clock configuration
+ */
pcie_get_aspm_reg(parent, &upreg);
- child = list_entry(linkbus->devices.next, struct pci_dev, bus_list);
pcie_get_aspm_reg(child, &dwreg);
/*
@@ -886,8 +900,8 @@ static ssize_t clk_ctl_store(struct device *dev,
return n;
}
-static DEVICE_ATTR(link_state, 0644, link_state_show, link_state_store);
-static DEVICE_ATTR(clk_ctl, 0644, clk_ctl_show, clk_ctl_store);
+static DEVICE_ATTR_RW(link_state);
+static DEVICE_ATTR_RW(clk_ctl);
static char power_group[] = "power";
void pcie_aspm_create_sysfs_dev_files(struct pci_dev *pdev)