Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
pci_root.c
Go to the documentation of this file.
1 /*
2  * pci_root.c - ACPI PCI Root Bridge Driver ($Revision: 40 $)
3  *
4  * Copyright (C) 2001, 2002 Andy Grover <[email protected]>
5  * Copyright (C) 2001, 2002 Paul Diefenbaugh <[email protected]>
6  *
7  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or (at
12  * your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful, but
15  * WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  * General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License along
20  * with this program; if not, write to the Free Software Foundation, Inc.,
21  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
22  *
23  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
24  */
25 
26 #include <linux/kernel.h>
27 #include <linux/module.h>
28 #include <linux/init.h>
29 #include <linux/types.h>
30 #include <linux/mutex.h>
31 #include <linux/pm.h>
32 #include <linux/pm_runtime.h>
33 #include <linux/pci.h>
34 #include <linux/pci-acpi.h>
35 #include <linux/pci-aspm.h>
36 #include <linux/acpi.h>
37 #include <linux/slab.h>
38 #include <acpi/acpi_bus.h>
39 #include <acpi/acpi_drivers.h>
40 #include <acpi/apei.h>
41 
42 #define PREFIX "ACPI: "
43 
44 #define _COMPONENT ACPI_PCI_COMPONENT
45 ACPI_MODULE_NAME("pci_root");
46 #define ACPI_PCI_ROOT_CLASS "pci_bridge"
47 #define ACPI_PCI_ROOT_DEVICE_NAME "PCI Root Bridge"
48 static int acpi_pci_root_add(struct acpi_device *device);
49 static int acpi_pci_root_remove(struct acpi_device *device, int type);
50 static int acpi_pci_root_start(struct acpi_device *device);
51 
52 #define ACPI_PCIE_REQ_SUPPORT (OSC_EXT_PCI_CONFIG_SUPPORT \
53  | OSC_ACTIVE_STATE_PWR_SUPPORT \
54  | OSC_CLOCK_PWR_CAPABILITY_SUPPORT \
55  | OSC_MSI_SUPPORT)
56 
57 static const struct acpi_device_id root_device_ids[] = {
58  {"PNP0A03", 0},
59  {"", 0},
60 };
61 MODULE_DEVICE_TABLE(acpi, root_device_ids);
62 
63 static struct acpi_driver acpi_pci_root_driver = {
64  .name = "pci_root",
65  .class = ACPI_PCI_ROOT_CLASS,
66  .ids = root_device_ids,
67  .ops = {
68  .add = acpi_pci_root_add,
69  .remove = acpi_pci_root_remove,
70  .start = acpi_pci_root_start,
71  },
72 };
73 
74 /* Lock to protect both acpi_pci_roots and acpi_pci_drivers lists */
75 static DEFINE_MUTEX(acpi_pci_root_lock);
76 static LIST_HEAD(acpi_pci_roots);
77 static LIST_HEAD(acpi_pci_drivers);
78 
79 static DEFINE_MUTEX(osc_lock);
80 
81 int acpi_pci_register_driver(struct acpi_pci_driver *driver)
82 {
83  int n = 0;
84  struct acpi_pci_root *root;
85 
86  mutex_lock(&acpi_pci_root_lock);
87  list_add_tail(&driver->node, &acpi_pci_drivers);
88  if (driver->add)
89  list_for_each_entry(root, &acpi_pci_roots, node) {
90  driver->add(root);
91  n++;
92  }
93  mutex_unlock(&acpi_pci_root_lock);
94 
95  return n;
96 }
98 
99 void acpi_pci_unregister_driver(struct acpi_pci_driver *driver)
100 {
101  struct acpi_pci_root *root;
102 
103  mutex_lock(&acpi_pci_root_lock);
104  list_del(&driver->node);
105  if (driver->remove)
106  list_for_each_entry(root, &acpi_pci_roots, node)
107  driver->remove(root);
108  mutex_unlock(&acpi_pci_root_lock);
109 }
111 
113 {
114  struct acpi_pci_root *root;
116 
117  mutex_lock(&acpi_pci_root_lock);
118  list_for_each_entry(root, &acpi_pci_roots, node)
119  if ((root->segment == (u16) seg) &&
120  (root->secondary.start == (u16) bus)) {
121  handle = root->device->handle;
122  break;
123  }
124  mutex_unlock(&acpi_pci_root_lock);
125  return handle;
126 }
127 
129 
138 {
139  int ret;
140  struct acpi_device *device;
141 
142  ret = acpi_bus_get_device(handle, &device);
143  if (ret)
144  return 0;
145 
146  ret = acpi_match_device_ids(device, root_device_ids);
147  if (ret)
148  return 0;
149  else
150  return 1;
151 }
153 
154 static acpi_status
155 get_root_bridge_busnr_callback(struct acpi_resource *resource, void *data)
156 {
157  struct resource *res = data;
159 
160  if (resource->type != ACPI_RESOURCE_TYPE_ADDRESS16 &&
161  resource->type != ACPI_RESOURCE_TYPE_ADDRESS32 &&
162  resource->type != ACPI_RESOURCE_TYPE_ADDRESS64)
163  return AE_OK;
164 
166  if ((address.address_length > 0) &&
167  (address.resource_type == ACPI_BUS_NUMBER_RANGE)) {
168  res->start = address.minimum;
169  res->end = address.minimum + address.address_length - 1;
170  }
171 
172  return AE_OK;
173 }
174 
175 static acpi_status try_get_root_bridge_busnr(acpi_handle handle,
176  struct resource *res)
177 {
179 
180  res->start = -1;
181  status =
183  get_root_bridge_busnr_callback, res);
184  if (ACPI_FAILURE(status))
185  return status;
186  if (res->start == -1)
187  return AE_ERROR;
188  return AE_OK;
189 }
190 
191 static void acpi_pci_bridge_scan(struct acpi_device *device)
192 {
193  int status;
194  struct acpi_device *child = NULL;
195 
196  if (device->flags.bus_address)
197  if (device->parent && device->parent->ops.bind) {
198  status = device->parent->ops.bind(device);
199  if (!status) {
200  list_for_each_entry(child, &device->children, node)
201  acpi_pci_bridge_scan(child);
202  }
203  }
204 }
205 
206 static u8 pci_osc_uuid_str[] = "33DB4D5B-1FF7-401C-9657-7441C03DD766";
207 
208 static acpi_status acpi_pci_run_osc(acpi_handle handle,
209  const u32 *capbuf, u32 *retval)
210 {
211  struct acpi_osc_context context = {
212  .uuid_str = pci_osc_uuid_str,
213  .rev = 1,
214  .cap.length = 12,
215  .cap.pointer = (void *)capbuf,
216  };
218 
219  status = acpi_run_osc(handle, &context);
220  if (ACPI_SUCCESS(status)) {
221  *retval = *((u32 *)(context.ret.pointer + 8));
222  kfree(context.ret.pointer);
223  }
224  return status;
225 }
226 
227 static acpi_status acpi_pci_query_osc(struct acpi_pci_root *root,
228  u32 support,
229  u32 *control)
230 {
232  u32 result, capbuf[3];
233 
234  support &= OSC_PCI_SUPPORT_MASKS;
235  support |= root->osc_support_set;
236 
237  capbuf[OSC_QUERY_TYPE] = OSC_QUERY_ENABLE;
238  capbuf[OSC_SUPPORT_TYPE] = support;
239  if (control) {
240  *control &= OSC_PCI_CONTROL_MASKS;
241  capbuf[OSC_CONTROL_TYPE] = *control | root->osc_control_set;
242  } else {
243  /* Run _OSC query for all possible controls. */
244  capbuf[OSC_CONTROL_TYPE] = OSC_PCI_CONTROL_MASKS;
245  }
246 
247  status = acpi_pci_run_osc(root->device->handle, capbuf, &result);
248  if (ACPI_SUCCESS(status)) {
249  root->osc_support_set = support;
250  if (control)
251  *control = result;
252  }
253  return status;
254 }
255 
256 static acpi_status acpi_pci_osc_support(struct acpi_pci_root *root, u32 flags)
257 {
260 
261  status = acpi_get_handle(root->device->handle, "_OSC", &tmp);
262  if (ACPI_FAILURE(status))
263  return status;
264  mutex_lock(&osc_lock);
265  status = acpi_pci_query_osc(root, flags, NULL);
266  mutex_unlock(&osc_lock);
267  return status;
268 }
269 
270 struct acpi_pci_root *acpi_pci_find_root(acpi_handle handle)
271 {
272  struct acpi_pci_root *root;
273  struct acpi_device *device;
274 
275  if (acpi_bus_get_device(handle, &device) ||
276  acpi_match_device_ids(device, root_device_ids))
277  return NULL;
278 
279  root = acpi_driver_data(device);
280 
281  return root;
282 }
284 
286  struct list_head node;
288 };
289 
303 {
304  int dev, fn;
305  unsigned long long adr;
308  struct pci_bus *pbus;
309  struct pci_dev *pdev = NULL;
310  struct acpi_handle_node *node, *tmp;
311  struct acpi_pci_root *root;
313 
314  /*
315  * Walk up the ACPI CA namespace until we reach a PCI root bridge.
316  */
317  phandle = handle;
318  while (!acpi_is_root_bridge(phandle)) {
319  node = kzalloc(sizeof(struct acpi_handle_node), GFP_KERNEL);
320  if (!node)
321  goto out;
322 
323  INIT_LIST_HEAD(&node->node);
324  node->handle = phandle;
325  list_add(&node->node, &device_list);
326 
327  status = acpi_get_parent(phandle, &phandle);
328  if (ACPI_FAILURE(status))
329  goto out;
330  }
331 
332  root = acpi_pci_find_root(phandle);
333  if (!root)
334  goto out;
335 
336  pbus = root->bus;
337 
338  /*
339  * Now, walk back down the PCI device tree until we return to our
340  * original handle. Assumes that everything between the PCI root
341  * bridge and the device we're looking for must be a P2P bridge.
342  */
343  list_for_each_entry(node, &device_list, node) {
344  acpi_handle hnd = node->handle;
345  status = acpi_evaluate_integer(hnd, "_ADR", NULL, &adr);
346  if (ACPI_FAILURE(status))
347  goto out;
348  dev = (adr >> 16) & 0xffff;
349  fn = adr & 0xffff;
350 
351  pdev = pci_get_slot(pbus, PCI_DEVFN(dev, fn));
352  if (!pdev || hnd == handle)
353  break;
354 
355  pbus = pdev->subordinate;
356  pci_dev_put(pdev);
357 
358  /*
359  * This function may be called for a non-PCI device that has a
360  * PCI parent (eg. a disk under a PCI SATA controller). In that
361  * case pdev->subordinate will be NULL for the parent.
362  */
363  if (!pbus) {
364  dev_dbg(&pdev->dev, "Not a PCI-to-PCI bridge\n");
365  pdev = NULL;
366  break;
367  }
368  }
369 out:
370  list_for_each_entry_safe(node, tmp, &device_list, node)
371  kfree(node);
372 
373  return pdev;
374 }
376 
393 {
394  struct acpi_pci_root *root;
396  u32 ctrl, capbuf[3];
398 
399  if (!mask)
400  return AE_BAD_PARAMETER;
401 
402  ctrl = *mask & OSC_PCI_CONTROL_MASKS;
403  if ((ctrl & req) != req)
404  return AE_TYPE;
405 
406  root = acpi_pci_find_root(handle);
407  if (!root)
408  return AE_NOT_EXIST;
409 
410  status = acpi_get_handle(handle, "_OSC", &tmp);
411  if (ACPI_FAILURE(status))
412  return status;
413 
414  mutex_lock(&osc_lock);
415 
416  *mask = ctrl | root->osc_control_set;
417  /* No need to evaluate _OSC if the control was already granted. */
418  if ((root->osc_control_set & ctrl) == ctrl)
419  goto out;
420 
421  /* Need to check the available controls bits before requesting them. */
422  while (*mask) {
423  status = acpi_pci_query_osc(root, root->osc_support_set, mask);
424  if (ACPI_FAILURE(status))
425  goto out;
426  if (ctrl == *mask)
427  break;
428  ctrl = *mask;
429  }
430 
431  if ((ctrl & req) != req) {
432  status = AE_SUPPORT;
433  goto out;
434  }
435 
436  capbuf[OSC_QUERY_TYPE] = 0;
437  capbuf[OSC_SUPPORT_TYPE] = root->osc_support_set;
438  capbuf[OSC_CONTROL_TYPE] = ctrl;
439  status = acpi_pci_run_osc(handle, capbuf, mask);
440  if (ACPI_SUCCESS(status))
441  root->osc_control_set = *mask;
442 out:
443  mutex_unlock(&osc_lock);
444  return status;
445 }
447 
448 static int __devinit acpi_pci_root_add(struct acpi_device *device)
449 {
450  unsigned long long segment, bus;
452  int result;
453  struct acpi_pci_root *root;
455  struct acpi_device *child;
456  u32 flags, base_flags;
457 
458  root = kzalloc(sizeof(struct acpi_pci_root), GFP_KERNEL);
459  if (!root)
460  return -ENOMEM;
461 
462  segment = 0;
463  status = acpi_evaluate_integer(device->handle, METHOD_NAME__SEG, NULL,
464  &segment);
465  if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
466  printk(KERN_ERR PREFIX "can't evaluate _SEG\n");
467  result = -ENODEV;
468  goto end;
469  }
470 
471  /* Check _CRS first, then _BBN. If no _BBN, default to zero. */
472  root->secondary.flags = IORESOURCE_BUS;
473  status = try_get_root_bridge_busnr(device->handle, &root->secondary);
474  if (ACPI_FAILURE(status)) {
475  /*
476  * We need both the start and end of the downstream bus range
477  * to interpret _CBA (MMCONFIG base address), so it really is
478  * supposed to be in _CRS. If we don't find it there, all we
479  * can do is assume [_BBN-0xFF] or [0-0xFF].
480  */
481  root->secondary.end = 0xFF;
483  "no secondary bus range in _CRS\n");
484  status = acpi_evaluate_integer(device->handle, METHOD_NAME__BBN,
485  NULL, &bus);
486  if (ACPI_SUCCESS(status))
487  root->secondary.start = bus;
488  else if (status == AE_NOT_FOUND)
489  root->secondary.start = 0;
490  else {
491  printk(KERN_ERR PREFIX "can't evaluate _BBN\n");
492  result = -ENODEV;
493  goto end;
494  }
495  }
496 
497  INIT_LIST_HEAD(&root->node);
498  root->device = device;
499  root->segment = segment & 0xFFFF;
500  strcpy(acpi_device_name(device), ACPI_PCI_ROOT_DEVICE_NAME);
501  strcpy(acpi_device_class(device), ACPI_PCI_ROOT_CLASS);
502  device->driver_data = root;
503 
504  root->mcfg_addr = acpi_pci_root_get_mcfg_addr(device->handle);
505 
506  /*
507  * All supported architectures that use ACPI have support for
508  * PCI domains, so we indicate this in _OSC support capabilities.
509  */
510  flags = base_flags = OSC_PCI_SEGMENT_GROUPS_SUPPORT;
511  acpi_pci_osc_support(root, flags);
512 
513  /*
514  * TBD: Need PCI interface for enumeration/configuration of roots.
515  */
516 
517  mutex_lock(&acpi_pci_root_lock);
518  list_add_tail(&root->node, &acpi_pci_roots);
519  mutex_unlock(&acpi_pci_root_lock);
520 
521  printk(KERN_INFO PREFIX "%s [%s] (domain %04x %pR)\n",
522  acpi_device_name(device), acpi_device_bid(device),
523  root->segment, &root->secondary);
524 
525  /*
526  * Scan the Root Bridge
527  * --------------------
528  * Must do this prior to any attempt to bind the root device, as the
529  * PCI namespace does not get created until this call is made (and
530  * thus the root bridge's pci_dev does not exist).
531  */
532  root->bus = pci_acpi_scan_root(root);
533  if (!root->bus) {
534  printk(KERN_ERR PREFIX
535  "Bus %04x:%02x not present in PCI namespace\n",
536  root->segment, (unsigned int)root->secondary.start);
537  result = -ENODEV;
538  goto out_del_root;
539  }
540 
541  /*
542  * Attach ACPI-PCI Context
543  * -----------------------
544  * Thus binding the ACPI and PCI devices.
545  */
546  result = acpi_pci_bind_root(device);
547  if (result)
548  goto out_del_root;
549 
550  /*
551  * PCI Routing Table
552  * -----------------
553  * Evaluate and parse _PRT, if exists.
554  */
555  status = acpi_get_handle(device->handle, METHOD_NAME__PRT, &handle);
556  if (ACPI_SUCCESS(status))
557  result = acpi_pci_irq_add_prt(device->handle, root->bus);
558 
559  /*
560  * Scan and bind all _ADR-Based Devices
561  */
562  list_for_each_entry(child, &device->children, node)
563  acpi_pci_bridge_scan(child);
564 
565  /* Indicate support for various _OSC capabilities. */
566  if (pci_ext_cfg_avail(root->bus->self))
567  flags |= OSC_EXT_PCI_CONFIG_SUPPORT;
569  flags |= OSC_ACTIVE_STATE_PWR_SUPPORT |
570  OSC_CLOCK_PWR_CAPABILITY_SUPPORT;
571  if (pci_msi_enabled())
572  flags |= OSC_MSI_SUPPORT;
573  if (flags != base_flags) {
574  status = acpi_pci_osc_support(root, flags);
575  if (ACPI_FAILURE(status)) {
576  dev_info(root->bus->bridge, "ACPI _OSC support "
577  "notification failed, disabling PCIe ASPM\n");
578  pcie_no_aspm();
579  flags = base_flags;
580  }
581  }
582 
584  && (flags & ACPI_PCIE_REQ_SUPPORT) == ACPI_PCIE_REQ_SUPPORT) {
585  flags = OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL
586  | OSC_PCI_EXPRESS_NATIVE_HP_CONTROL
587  | OSC_PCI_EXPRESS_PME_CONTROL;
588 
589  if (pci_aer_available()) {
590  if (aer_acpi_firmware_first())
591  dev_dbg(root->bus->bridge,
592  "PCIe errors handled by BIOS.\n");
593  else
594  flags |= OSC_PCI_EXPRESS_AER_CONTROL;
595  }
596 
597  dev_info(root->bus->bridge,
598  "Requesting ACPI _OSC control (0x%02x)\n", flags);
599 
600  status = acpi_pci_osc_control_set(device->handle, &flags,
601  OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL);
602  if (ACPI_SUCCESS(status)) {
603  dev_info(root->bus->bridge,
604  "ACPI _OSC control (0x%02x) granted\n", flags);
605  if (acpi_gbl_FADT.boot_flags & ACPI_FADT_NO_ASPM) {
606  /*
607  * We have ASPM control, but the FADT indicates
608  * that it's unsupported. Clear it.
609  */
610  pcie_clear_aspm(root->bus);
611  }
612  } else {
613  dev_info(root->bus->bridge,
614  "ACPI _OSC request failed (%s), "
615  "returned control mask: 0x%02x\n",
616  acpi_format_exception(status), flags);
617  pr_info("ACPI _OSC control for PCIe not granted, "
618  "disabling ASPM\n");
619  pcie_no_aspm();
620  }
621  } else {
622  dev_info(root->bus->bridge,
623  "Unable to request _OSC control "
624  "(_OSC support mask: 0x%02x)\n", flags);
625  }
626 
627  pci_acpi_add_bus_pm_notifier(device, root->bus);
628  if (device->wakeup.flags.run_wake)
629  device_set_run_wake(root->bus->bridge, true);
630 
631  return 0;
632 
633 out_del_root:
634  mutex_lock(&acpi_pci_root_lock);
635  list_del(&root->node);
636  mutex_unlock(&acpi_pci_root_lock);
637 end:
638  kfree(root);
639  return result;
640 }
641 
642 static int acpi_pci_root_start(struct acpi_device *device)
643 {
644  struct acpi_pci_root *root = acpi_driver_data(device);
645  struct acpi_pci_driver *driver;
646 
647  mutex_lock(&acpi_pci_root_lock);
648  list_for_each_entry(driver, &acpi_pci_drivers, node)
649  if (driver->add)
650  driver->add(root);
651  mutex_unlock(&acpi_pci_root_lock);
652 
653  pci_bus_add_devices(root->bus);
654 
655  return 0;
656 }
657 
658 static int acpi_pci_root_remove(struct acpi_device *device, int type)
659 {
660  struct acpi_pci_root *root = acpi_driver_data(device);
661  struct acpi_pci_driver *driver;
662 
663  mutex_lock(&acpi_pci_root_lock);
664  list_for_each_entry(driver, &acpi_pci_drivers, node)
665  if (driver->remove)
666  driver->remove(root);
667 
668  device_set_run_wake(root->bus->bridge, false);
670 
671  list_del(&root->node);
672  mutex_unlock(&acpi_pci_root_lock);
673  kfree(root);
674  return 0;
675 }
676 
677 static int __init acpi_pci_root_init(void)
678 {
679  acpi_hest_init();
680 
681  if (acpi_pci_disabled)
682  return 0;
683 
685  if (acpi_bus_register_driver(&acpi_pci_root_driver) < 0)
686  return -ENODEV;
687 
688  return 0;
689 }
690 
691 subsys_initcall(acpi_pci_root_init);