aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Hemminger <stephen@networkplumber.org>2014-01-10 16:00:57 -0500
committerBjorn Helgaas <bhelgaas@google.com>2014-01-10 18:58:32 -0500
commit3ea8197e1371abd68aef289cad97feb764281642 (patch)
tree924ed213d6518800f770d29cceb4867b78cedc1c
parentb340cacc1b47d8fc15051aaf9b2d44678e245ba9 (diff)
PCI: Remove unused Latency Tolerance Reporting support
My philosophy is unused code is dead code. And dead code is subject to bit rot and is a likely source of bugs. Use it or lose it. This reverts 51c2e0a7e5bc ("PCI: add latency tolerance reporting enable/disable support"), removing these interfaces: pci_enable_ltr() pci_disable_ltr() pci_set_ltr() [bhelgaas: split to separate patch, also remove prototypes from pci.h] Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> CC: Jesse Barnes <jbarnes@virtuousgeek.org>
-rw-r--r--drivers/pci/pci.c123
-rw-r--r--include/linux/pci.h4
2 files changed, 0 insertions, 127 deletions
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 33120d156668..020f672deabb 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -2223,129 +2223,6 @@ void pci_disable_obff(struct pci_dev *dev)
2223} 2223}
2224EXPORT_SYMBOL(pci_disable_obff); 2224EXPORT_SYMBOL(pci_disable_obff);
2225 2225
2226/**
2227 * pci_ltr_supported - check whether a device supports LTR
2228 * @dev: PCI device
2229 *
2230 * RETURNS:
2231 * True if @dev supports latency tolerance reporting, false otherwise.
2232 */
2233static bool pci_ltr_supported(struct pci_dev *dev)
2234{
2235 u32 cap;
2236
2237 pcie_capability_read_dword(dev, PCI_EXP_DEVCAP2, &cap);
2238
2239 return cap & PCI_EXP_DEVCAP2_LTR;
2240}
2241
2242/**
2243 * pci_enable_ltr - enable latency tolerance reporting
2244 * @dev: PCI device
2245 *
2246 * Enable LTR on @dev if possible, which means enabling it first on
2247 * upstream ports.
2248 *
2249 * RETURNS:
2250 * Zero on success, errno on failure.
2251 */
2252int pci_enable_ltr(struct pci_dev *dev)
2253{
2254 int ret;
2255
2256 /* Only primary function can enable/disable LTR */
2257 if (PCI_FUNC(dev->devfn) != 0)
2258 return -EINVAL;
2259
2260 if (!pci_ltr_supported(dev))
2261 return -ENOTSUPP;
2262
2263 /* Enable upstream ports first */
2264 if (dev->bus->self) {
2265 ret = pci_enable_ltr(dev->bus->self);
2266 if (ret)
2267 return ret;
2268 }
2269
2270 return pcie_capability_set_word(dev, PCI_EXP_DEVCTL2,
2271 PCI_EXP_DEVCTL2_LTR_EN);
2272}
2273EXPORT_SYMBOL(pci_enable_ltr);
2274
2275/**
2276 * pci_disable_ltr - disable latency tolerance reporting
2277 * @dev: PCI device
2278 */
2279void pci_disable_ltr(struct pci_dev *dev)
2280{
2281 /* Only primary function can enable/disable LTR */
2282 if (PCI_FUNC(dev->devfn) != 0)
2283 return;
2284
2285 if (!pci_ltr_supported(dev))
2286 return;
2287
2288 pcie_capability_clear_word(dev, PCI_EXP_DEVCTL2,
2289 PCI_EXP_DEVCTL2_LTR_EN);
2290}
2291EXPORT_SYMBOL(pci_disable_ltr);
2292
2293static int __pci_ltr_scale(int *val)
2294{
2295 int scale = 0;
2296
2297 while (*val > 1023) {
2298 *val = (*val + 31) / 32;
2299 scale++;
2300 }
2301 return scale;
2302}
2303
2304/**
2305 * pci_set_ltr - set LTR latency values
2306 * @dev: PCI device
2307 * @snoop_lat_ns: snoop latency in nanoseconds
2308 * @nosnoop_lat_ns: nosnoop latency in nanoseconds
2309 *
2310 * Figure out the scale and set the LTR values accordingly.
2311 */
2312int pci_set_ltr(struct pci_dev *dev, int snoop_lat_ns, int nosnoop_lat_ns)
2313{
2314 int pos, ret, snoop_scale, nosnoop_scale;
2315 u16 val;
2316
2317 if (!pci_ltr_supported(dev))
2318 return -ENOTSUPP;
2319
2320 snoop_scale = __pci_ltr_scale(&snoop_lat_ns);
2321 nosnoop_scale = __pci_ltr_scale(&nosnoop_lat_ns);
2322
2323 if (snoop_lat_ns > PCI_LTR_VALUE_MASK ||
2324 nosnoop_lat_ns > PCI_LTR_VALUE_MASK)
2325 return -EINVAL;
2326
2327 if ((snoop_scale > (PCI_LTR_SCALE_MASK >> PCI_LTR_SCALE_SHIFT)) ||
2328 (nosnoop_scale > (PCI_LTR_SCALE_MASK >> PCI_LTR_SCALE_SHIFT)))
2329 return -EINVAL;
2330
2331 pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_LTR);
2332 if (!pos)
2333 return -ENOTSUPP;
2334
2335 val = (snoop_scale << PCI_LTR_SCALE_SHIFT) | snoop_lat_ns;
2336 ret = pci_write_config_word(dev, pos + PCI_LTR_MAX_SNOOP_LAT, val);
2337 if (ret != 4)
2338 return -EIO;
2339
2340 val = (nosnoop_scale << PCI_LTR_SCALE_SHIFT) | nosnoop_lat_ns;
2341 ret = pci_write_config_word(dev, pos + PCI_LTR_MAX_NOSNOOP_LAT, val);
2342 if (ret != 4)
2343 return -EIO;
2344
2345 return 0;
2346}
2347EXPORT_SYMBOL(pci_set_ltr);
2348
2349static int pci_acs_enable; 2226static int pci_acs_enable;
2350 2227
2351/** 2228/**
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 1084a15175e0..ee26454746ba 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -1009,10 +1009,6 @@ enum pci_obff_signal_type {
1009int pci_enable_obff(struct pci_dev *dev, enum pci_obff_signal_type); 1009int pci_enable_obff(struct pci_dev *dev, enum pci_obff_signal_type);
1010void pci_disable_obff(struct pci_dev *dev); 1010void pci_disable_obff(struct pci_dev *dev);
1011 1011
1012int pci_enable_ltr(struct pci_dev *dev);
1013void pci_disable_ltr(struct pci_dev *dev);
1014int pci_set_ltr(struct pci_dev *dev, int snoop_lat_ns, int nosnoop_lat_ns);
1015
1016/* For use by arch with custom probe code */ 1012/* For use by arch with custom probe code */
1017void set_pcie_port_type(struct pci_dev *pdev); 1013void set_pcie_port_type(struct pci_dev *pdev);
1018void set_pcie_hotplug_bridge(struct pci_dev *pdev); 1014void set_pcie_hotplug_bridge(struct pci_dev *pdev);