diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2016-12-12 11:25:01 -0600 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2016-12-12 11:25:01 -0600 |
commit | a7d51491110d039e42ea881aa4d9c08ea8b7d6ea (patch) | |
tree | ef9e649c3cb4156ac6507fabd3f045c788cd8566 /drivers/pci | |
parent | 1001354ca34179f3db924eb66672442a173147dc (diff) | |
parent | e53f9a28bee35932a0ae4d2ec2784f55491ec6d3 (diff) | |
download | lwn-a7d51491110d039e42ea881aa4d9c08ea8b7d6ea.tar.gz lwn-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/pci')
-rw-r--r-- | drivers/pci/pcie/aspm.c | 22 |
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) |