aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/pci/acpi.c46
-rw-r--r--arch/x86/pci/common.c2
-rw-r--r--drivers/acpi/pci_bind.c12
-rw-r--r--drivers/acpi/pci_irq.c17
-rw-r--r--drivers/acpi/pci_root.c165
-rw-r--r--drivers/pci/bus.c3
-rw-r--r--drivers/pci/ioapic.c2
-rw-r--r--drivers/pci/irq.c10
-rw-r--r--drivers/pci/pci-driver.c18
-rw-r--r--drivers/pci/pci-stub.c2
-rw-r--r--drivers/pci/pci-sysfs.c34
-rw-r--r--drivers/pci/pci.c65
-rw-r--r--drivers/pci/pci.h2
-rw-r--r--drivers/pci/pcie/aer/aerdrv.h5
-rw-r--r--drivers/pci/pcie/aer/aerdrv_core.c38
-rw-r--r--drivers/pci/pcie/aspm.c7
-rw-r--r--drivers/pci/pcie/portdrv_core.c3
-rw-r--r--drivers/pci/probe.c22
-rw-r--r--drivers/pci/proc.c8
-rw-r--r--drivers/pci/quirks.c39
-rw-r--r--drivers/pci/remove.c36
-rw-r--r--drivers/pci/setup-bus.c22
-rw-r--r--include/acpi/acpi_drivers.h4
-rw-r--r--include/linux/pci.h8
-rw-r--r--include/uapi/linux/pci_regs.h6
25 files changed, 378 insertions, 198 deletions
diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c
index 192397c98606..0c01261fe5a8 100644
--- a/arch/x86/pci/acpi.c
+++ b/arch/x86/pci/acpi.c
@@ -12,6 +12,7 @@ struct pci_root_info {
12 char name[16]; 12 char name[16];
13 unsigned int res_num; 13 unsigned int res_num;
14 struct resource *res; 14 struct resource *res;
15 resource_size_t *res_offset;
15 struct pci_sysdata sd; 16 struct pci_sysdata sd;
16#ifdef CONFIG_PCI_MMCONFIG 17#ifdef CONFIG_PCI_MMCONFIG
17 bool mcfg_added; 18 bool mcfg_added;
@@ -22,6 +23,7 @@ struct pci_root_info {
22}; 23};
23 24
24static bool pci_use_crs = true; 25static bool pci_use_crs = true;
26static bool pci_ignore_seg = false;
25 27
26static int __init set_use_crs(const struct dmi_system_id *id) 28static int __init set_use_crs(const struct dmi_system_id *id)
27{ 29{
@@ -35,7 +37,14 @@ static int __init set_nouse_crs(const struct dmi_system_id *id)
35 return 0; 37 return 0;
36} 38}
37 39
38static const struct dmi_system_id pci_use_crs_table[] __initconst = { 40static int __init set_ignore_seg(const struct dmi_system_id *id)
41{
42 printk(KERN_INFO "PCI: %s detected: ignoring ACPI _SEG\n", id->ident);
43 pci_ignore_seg = true;
44 return 0;
45}
46
47static const struct dmi_system_id pci_crs_quirks[] __initconst = {
39 /* http://bugzilla.kernel.org/show_bug.cgi?id=14183 */ 48 /* http://bugzilla.kernel.org/show_bug.cgi?id=14183 */
40 { 49 {
41 .callback = set_use_crs, 50 .callback = set_use_crs,
@@ -98,6 +107,16 @@ static const struct dmi_system_id pci_use_crs_table[] __initconst = {
98 DMI_MATCH(DMI_BIOS_VERSION, "6JET85WW (1.43 )"), 107 DMI_MATCH(DMI_BIOS_VERSION, "6JET85WW (1.43 )"),
99 }, 108 },
100 }, 109 },
110
111 /* https://bugzilla.kernel.org/show_bug.cgi?id=15362 */
112 {
113 .callback = set_ignore_seg,
114 .ident = "HP xw9300",
115 .matches = {
116 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
117 DMI_MATCH(DMI_PRODUCT_NAME, "HP xw9300 Workstation"),
118 },
119 },
101 {} 120 {}
102}; 121};
103 122
@@ -108,7 +127,7 @@ void __init pci_acpi_crs_quirks(void)
108 if (dmi_get_date(DMI_BIOS_DATE, &year, NULL, NULL) && year < 2008) 127 if (dmi_get_date(DMI_BIOS_DATE, &year, NULL, NULL) && year < 2008)
109 pci_use_crs = false; 128 pci_use_crs = false;
110 129
111 dmi_check_system(pci_use_crs_table); 130 dmi_check_system(pci_crs_quirks);
112 131
113 /* 132 /*
114 * If the user specifies "pci=use_crs" or "pci=nocrs" explicitly, that 133 * If the user specifies "pci=use_crs" or "pci=nocrs" explicitly, that
@@ -305,6 +324,7 @@ setup_resource(struct acpi_resource *acpi_res, void *data)
305 res->flags = flags; 324 res->flags = flags;
306 res->start = start; 325 res->start = start;
307 res->end = end; 326 res->end = end;
327 info->res_offset[info->res_num] = addr.translation_offset;
308 328
309 if (!pci_use_crs) { 329 if (!pci_use_crs) {
310 dev_printk(KERN_DEBUG, &info->bridge->dev, 330 dev_printk(KERN_DEBUG, &info->bridge->dev,
@@ -374,7 +394,8 @@ static void add_resources(struct pci_root_info *info,
374 "ignoring host bridge window %pR (conflicts with %s %pR)\n", 394 "ignoring host bridge window %pR (conflicts with %s %pR)\n",
375 res, conflict->name, conflict); 395 res, conflict->name, conflict);
376 else 396 else
377 pci_add_resource(resources, res); 397 pci_add_resource_offset(resources, res,
398 info->res_offset[i]);
378 } 399 }
379} 400}
380 401
@@ -382,6 +403,8 @@ static void free_pci_root_info_res(struct pci_root_info *info)
382{ 403{
383 kfree(info->res); 404 kfree(info->res);
384 info->res = NULL; 405 info->res = NULL;
406 kfree(info->res_offset);
407 info->res_offset = NULL;
385 info->res_num = 0; 408 info->res_num = 0;
386} 409}
387 410
@@ -432,10 +455,20 @@ probe_pci_root_info(struct pci_root_info *info, struct acpi_device *device,
432 return; 455 return;
433 456
434 size = sizeof(*info->res) * info->res_num; 457 size = sizeof(*info->res) * info->res_num;
435 info->res_num = 0;
436 info->res = kzalloc(size, GFP_KERNEL); 458 info->res = kzalloc(size, GFP_KERNEL);
437 if (!info->res) 459 if (!info->res) {
460 info->res_num = 0;
461 return;
462 }
463
464 size = sizeof(*info->res_offset) * info->res_num;
465 info->res_num = 0;
466 info->res_offset = kzalloc(size, GFP_KERNEL);
467 if (!info->res_offset) {
468 kfree(info->res);
469 info->res = NULL;
438 return; 470 return;
471 }
439 472
440 acpi_walk_resources(device->handle, METHOD_NAME__CRS, setup_resource, 473 acpi_walk_resources(device->handle, METHOD_NAME__CRS, setup_resource,
441 info); 474 info);
@@ -455,6 +488,9 @@ struct pci_bus * __devinit pci_acpi_scan_root(struct acpi_pci_root *root)
455 int pxm; 488 int pxm;
456#endif 489#endif
457 490
491 if (pci_ignore_seg)
492 domain = 0;
493
458 if (domain && !pci_domains_supported) { 494 if (domain && !pci_domains_supported) {
459 printk(KERN_WARNING "pci_bus %04x:%02x: " 495 printk(KERN_WARNING "pci_bus %04x:%02x: "
460 "ignored (multiple domains not supported)\n", 496 "ignored (multiple domains not supported)\n",
diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c
index 720e973fc34a..52dbf1aeeb63 100644
--- a/arch/x86/pci/common.c
+++ b/arch/x86/pci/common.c
@@ -626,7 +626,7 @@ void pcibios_disable_device (struct pci_dev *dev)
626 pcibios_disable_irq(dev); 626 pcibios_disable_irq(dev);
627} 627}
628 628
629int pci_ext_cfg_avail(struct pci_dev *dev) 629int pci_ext_cfg_avail(void)
630{ 630{
631 if (raw_pci_ext_ops) 631 if (raw_pci_ext_ops)
632 return 1; 632 return 1;
diff --git a/drivers/acpi/pci_bind.c b/drivers/acpi/pci_bind.c
index 2ef04098cc1d..a1dee29beed3 100644
--- a/drivers/acpi/pci_bind.c
+++ b/drivers/acpi/pci_bind.c
@@ -45,11 +45,12 @@ static int acpi_pci_unbind(struct acpi_device *device)
45 45
46 device_set_run_wake(&dev->dev, false); 46 device_set_run_wake(&dev->dev, false);
47 pci_acpi_remove_pm_notifier(device); 47 pci_acpi_remove_pm_notifier(device);
48 acpi_power_resource_unregister_device(&dev->dev, device->handle);
48 49
49 if (!dev->subordinate) 50 if (!dev->subordinate)
50 goto out; 51 goto out;
51 52
52 acpi_pci_irq_del_prt(dev->subordinate); 53 acpi_pci_irq_del_prt(pci_domain_nr(dev->bus), dev->subordinate->number);
53 54
54 device->ops.bind = NULL; 55 device->ops.bind = NULL;
55 device->ops.unbind = NULL; 56 device->ops.unbind = NULL;
@@ -63,7 +64,7 @@ static int acpi_pci_bind(struct acpi_device *device)
63{ 64{
64 acpi_status status; 65 acpi_status status;
65 acpi_handle handle; 66 acpi_handle handle;
66 struct pci_bus *bus; 67 unsigned char bus;
67 struct pci_dev *dev; 68 struct pci_dev *dev;
68 69
69 dev = acpi_get_pci_dev(device->handle); 70 dev = acpi_get_pci_dev(device->handle);
@@ -71,6 +72,7 @@ static int acpi_pci_bind(struct acpi_device *device)
71 return 0; 72 return 0;
72 73
73 pci_acpi_add_pm_notifier(device, dev); 74 pci_acpi_add_pm_notifier(device, dev);
75 acpi_power_resource_register_device(&dev->dev, device->handle);
74 if (device->wakeup.flags.run_wake) 76 if (device->wakeup.flags.run_wake)
75 device_set_run_wake(&dev->dev, true); 77 device_set_run_wake(&dev->dev, true);
76 78
@@ -100,11 +102,11 @@ static int acpi_pci_bind(struct acpi_device *device)
100 goto out; 102 goto out;
101 103
102 if (dev->subordinate) 104 if (dev->subordinate)
103 bus = dev->subordinate; 105 bus = dev->subordinate->number;
104 else 106 else
105 bus = dev->bus; 107 bus = dev->bus->number;
106 108
107 acpi_pci_irq_add_prt(device->handle, bus); 109 acpi_pci_irq_add_prt(device->handle, pci_domain_nr(dev->bus), bus);
108 110
109out: 111out:
110 pci_dev_put(dev); 112 pci_dev_put(dev);
diff --git a/drivers/acpi/pci_irq.c b/drivers/acpi/pci_irq.c
index 0eefa12e648c..8835cc38aa30 100644
--- a/drivers/acpi/pci_irq.c
+++ b/drivers/acpi/pci_irq.c
@@ -184,7 +184,7 @@ static void do_prt_fixups(struct acpi_prt_entry *entry,
184 } 184 }
185} 185}
186 186
187static int acpi_pci_irq_add_entry(acpi_handle handle, struct pci_bus *bus, 187static int acpi_pci_irq_add_entry(acpi_handle handle, int segment, int bus,
188 struct acpi_pci_routing_table *prt) 188 struct acpi_pci_routing_table *prt)
189{ 189{
190 struct acpi_prt_entry *entry; 190 struct acpi_prt_entry *entry;
@@ -198,8 +198,8 @@ static int acpi_pci_irq_add_entry(acpi_handle handle, struct pci_bus *bus,
198 * 1=INTA, 2=INTB. We use the PCI encoding throughout, so convert 198 * 1=INTA, 2=INTB. We use the PCI encoding throughout, so convert
199 * it here. 199 * it here.
200 */ 200 */
201 entry->id.segment = pci_domain_nr(bus); 201 entry->id.segment = segment;
202 entry->id.bus = bus->number; 202 entry->id.bus = bus;
203 entry->id.device = (prt->address >> 16) & 0xFFFF; 203 entry->id.device = (prt->address >> 16) & 0xFFFF;
204 entry->pin = prt->pin + 1; 204 entry->pin = prt->pin + 1;
205 205
@@ -244,7 +244,7 @@ static int acpi_pci_irq_add_entry(acpi_handle handle, struct pci_bus *bus,
244 return 0; 244 return 0;
245} 245}
246 246
247int acpi_pci_irq_add_prt(acpi_handle handle, struct pci_bus *bus) 247int acpi_pci_irq_add_prt(acpi_handle handle, int segment, int bus)
248{ 248{
249 acpi_status status; 249 acpi_status status;
250 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; 250 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
@@ -273,7 +273,7 @@ int acpi_pci_irq_add_prt(acpi_handle handle, struct pci_bus *bus)
273 273
274 entry = buffer.pointer; 274 entry = buffer.pointer;
275 while (entry && (entry->length > 0)) { 275 while (entry && (entry->length > 0)) {
276 acpi_pci_irq_add_entry(handle, bus, entry); 276 acpi_pci_irq_add_entry(handle, segment, bus, entry);
277 entry = (struct acpi_pci_routing_table *) 277 entry = (struct acpi_pci_routing_table *)
278 ((unsigned long)entry + entry->length); 278 ((unsigned long)entry + entry->length);
279 } 279 }
@@ -282,17 +282,16 @@ int acpi_pci_irq_add_prt(acpi_handle handle, struct pci_bus *bus)
282 return 0; 282 return 0;
283} 283}
284 284
285void acpi_pci_irq_del_prt(struct pci_bus *bus) 285void acpi_pci_irq_del_prt(int segment, int bus)
286{ 286{
287 struct acpi_prt_entry *entry, *tmp; 287 struct acpi_prt_entry *entry, *tmp;
288 288
289 printk(KERN_DEBUG 289 printk(KERN_DEBUG
290 "ACPI: Delete PCI Interrupt Routing Table for %04x:%02x\n", 290 "ACPI: Delete PCI Interrupt Routing Table for %04x:%02x\n",
291 pci_domain_nr(bus), bus->number); 291 segment, bus);
292 spin_lock(&acpi_prt_lock); 292 spin_lock(&acpi_prt_lock);
293 list_for_each_entry_safe(entry, tmp, &acpi_prt_list, list) { 293 list_for_each_entry_safe(entry, tmp, &acpi_prt_list, list) {
294 if (pci_domain_nr(bus) == entry->id.segment 294 if (segment == entry->id.segment && bus == entry->id.bus) {
295 && bus->number == entry->id.bus) {
296 list_del(&entry->list); 295 list_del(&entry->list);
297 kfree(entry); 296 kfree(entry);
298 } 297 }
diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c
index bce469c0b48a..ab781f00e32d 100644
--- a/drivers/acpi/pci_root.c
+++ b/drivers/acpi/pci_root.c
@@ -454,6 +454,7 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device)
454 acpi_handle handle; 454 acpi_handle handle;
455 struct acpi_device *child; 455 struct acpi_device *child;
456 u32 flags, base_flags; 456 u32 flags, base_flags;
457 bool is_osc_granted = false;
457 458
458 root = kzalloc(sizeof(struct acpi_pci_root), GFP_KERNEL); 459 root = kzalloc(sizeof(struct acpi_pci_root), GFP_KERNEL);
459 if (!root) 460 if (!root)
@@ -501,85 +502,47 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device)
501 strcpy(acpi_device_class(device), ACPI_PCI_ROOT_CLASS); 502 strcpy(acpi_device_class(device), ACPI_PCI_ROOT_CLASS);
502 device->driver_data = root; 503 device->driver_data = root;
503 504
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", 505 printk(KERN_INFO PREFIX "%s [%s] (domain %04x %pR)\n",
522 acpi_device_name(device), acpi_device_bid(device), 506 acpi_device_name(device), acpi_device_bid(device),
523 root->segment, &root->secondary); 507 root->segment, &root->secondary);
524 508
525 /* 509 /*
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 510 * PCI Routing Table
552 * ----------------- 511 * -----------------
553 * Evaluate and parse _PRT, if exists. 512 * Evaluate and parse _PRT, if exists.
554 */ 513 */
555 status = acpi_get_handle(device->handle, METHOD_NAME__PRT, &handle); 514 status = acpi_get_handle(device->handle, METHOD_NAME__PRT, &handle);
556 if (ACPI_SUCCESS(status)) 515 if (ACPI_SUCCESS(status))
557 result = acpi_pci_irq_add_prt(device->handle, root->bus); 516 result = acpi_pci_irq_add_prt(device->handle, root->segment,
517 root->secondary.start);
518
519 root->mcfg_addr = acpi_pci_root_get_mcfg_addr(device->handle);
558 520
559 /* 521 /*
560 * Scan and bind all _ADR-Based Devices 522 * All supported architectures that use ACPI have support for
523 * PCI domains, so we indicate this in _OSC support capabilities.
561 */ 524 */
562 list_for_each_entry(child, &device->children, node) 525 flags = base_flags = OSC_PCI_SEGMENT_GROUPS_SUPPORT;
563 acpi_pci_bridge_scan(child); 526 acpi_pci_osc_support(root, flags);
564 527
565 /* Indicate support for various _OSC capabilities. */ 528 /* Indicate support for various _OSC capabilities. */
566 if (pci_ext_cfg_avail(root->bus->self)) 529 if (pci_ext_cfg_avail())
567 flags |= OSC_EXT_PCI_CONFIG_SUPPORT; 530 flags |= OSC_EXT_PCI_CONFIG_SUPPORT;
568 if (pcie_aspm_support_enabled()) 531 if (pcie_aspm_support_enabled()) {
569 flags |= OSC_ACTIVE_STATE_PWR_SUPPORT | 532 flags |= OSC_ACTIVE_STATE_PWR_SUPPORT |
570 OSC_CLOCK_PWR_CAPABILITY_SUPPORT; 533 OSC_CLOCK_PWR_CAPABILITY_SUPPORT;
534 }
571 if (pci_msi_enabled()) 535 if (pci_msi_enabled())
572 flags |= OSC_MSI_SUPPORT; 536 flags |= OSC_MSI_SUPPORT;
573 if (flags != base_flags) { 537 if (flags != base_flags) {
574 status = acpi_pci_osc_support(root, flags); 538 status = acpi_pci_osc_support(root, flags);
575 if (ACPI_FAILURE(status)) { 539 if (ACPI_FAILURE(status)) {
576 dev_info(root->bus->bridge, "ACPI _OSC support " 540 dev_info(&device->dev, "ACPI _OSC support "
577 "notification failed, disabling PCIe ASPM\n"); 541 "notification failed, disabling PCIe ASPM\n");
578 pcie_no_aspm(); 542 pcie_no_aspm();
579 flags = base_flags; 543 flags = base_flags;
580 } 544 }
581 } 545 }
582
583 if (!pcie_ports_disabled 546 if (!pcie_ports_disabled
584 && (flags & ACPI_PCIE_REQ_SUPPORT) == ACPI_PCIE_REQ_SUPPORT) { 547 && (flags & ACPI_PCIE_REQ_SUPPORT) == ACPI_PCIE_REQ_SUPPORT) {
585 flags = OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL 548 flags = OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL
@@ -588,40 +551,81 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device)
588 551
589 if (pci_aer_available()) { 552 if (pci_aer_available()) {
590 if (aer_acpi_firmware_first()) 553 if (aer_acpi_firmware_first())
591 dev_dbg(root->bus->bridge, 554 dev_dbg(&device->dev,
592 "PCIe errors handled by BIOS.\n"); 555 "PCIe errors handled by BIOS.\n");
593 else 556 else
594 flags |= OSC_PCI_EXPRESS_AER_CONTROL; 557 flags |= OSC_PCI_EXPRESS_AER_CONTROL;
595 } 558 }
596 559
597 dev_info(root->bus->bridge, 560 dev_info(&device->dev,
598 "Requesting ACPI _OSC control (0x%02x)\n", flags); 561 "Requesting ACPI _OSC control (0x%02x)\n", flags);
599 562
600 status = acpi_pci_osc_control_set(device->handle, &flags, 563 status = acpi_pci_osc_control_set(device->handle, &flags,
601 OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL); 564 OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL);
602 if (ACPI_SUCCESS(status)) { 565 if (ACPI_SUCCESS(status)) {
603 dev_info(root->bus->bridge, 566 is_osc_granted = true;
567 dev_info(&device->dev,
604 "ACPI _OSC control (0x%02x) granted\n", flags); 568 "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 { 569 } else {
613 dev_info(root->bus->bridge, 570 is_osc_granted = false;
571 dev_info(&device->dev,
614 "ACPI _OSC request failed (%s), " 572 "ACPI _OSC request failed (%s), "
615 "returned control mask: 0x%02x\n", 573 "returned control mask: 0x%02x\n",
616 acpi_format_exception(status), flags); 574 acpi_format_exception(status), flags);
617 pr_info("ACPI _OSC control for PCIe not granted, "
618 "disabling ASPM\n");
619 pcie_no_aspm();
620 } 575 }
621 } else { 576 } else {
622 dev_info(root->bus->bridge, 577 dev_info(&device->dev,
623 "Unable to request _OSC control " 578 "Unable to request _OSC control "
624 "(_OSC support mask: 0x%02x)\n", flags); 579 "(_OSC support mask: 0x%02x)\n", flags);
580 }
581
582 /*
583 * TBD: Need PCI interface for enumeration/configuration of roots.
584 */
585
586 mutex_lock(&acpi_pci_root_lock);
587 list_add_tail(&root->node, &acpi_pci_roots);
588 mutex_unlock(&acpi_pci_root_lock);
589
590 /*
591 * Scan the Root Bridge
592 * --------------------
593 * Must do this prior to any attempt to bind the root device, as the
594 * PCI namespace does not get created until this call is made (and
595 * thus the root bridge's pci_dev does not exist).
596 */
597 root->bus = pci_acpi_scan_root(root);
598 if (!root->bus) {
599 printk(KERN_ERR PREFIX
600 "Bus %04x:%02x not present in PCI namespace\n",
601 root->segment, (unsigned int)root->secondary.start);
602 result = -ENODEV;
603 goto out_del_root;
604 }
605
606 /*
607 * Attach ACPI-PCI Context
608 * -----------------------
609 * Thus binding the ACPI and PCI devices.
610 */
611 result = acpi_pci_bind_root(device);
612 if (result)
613 goto out_del_root;
614
615 /*
616 * Scan and bind all _ADR-Based Devices
617 */
618 list_for_each_entry(child, &device->children, node)
619 acpi_pci_bridge_scan(child);
620
621 /* ASPM setting */
622 if (is_osc_granted) {
623 if (acpi_gbl_FADT.boot_flags & ACPI_FADT_NO_ASPM)
624 pcie_clear_aspm(root->bus);
625 } else {
626 pr_info("ACPI _OSC control for PCIe not granted, "
627 "disabling ASPM\n");
628 pcie_no_aspm();
625 } 629 }
626 630
627 pci_acpi_add_bus_pm_notifier(device, root->bus); 631 pci_acpi_add_bus_pm_notifier(device, root->bus);
@@ -634,6 +638,8 @@ out_del_root:
634 mutex_lock(&acpi_pci_root_lock); 638 mutex_lock(&acpi_pci_root_lock);
635 list_del(&root->node); 639 list_del(&root->node);
636 mutex_unlock(&acpi_pci_root_lock); 640 mutex_unlock(&acpi_pci_root_lock);
641
642 acpi_pci_irq_del_prt(root->segment, root->secondary.start);
637end: 643end:
638 kfree(root); 644 kfree(root);
639 return result; 645 return result;
@@ -644,12 +650,19 @@ static int acpi_pci_root_start(struct acpi_device *device)
644 struct acpi_pci_root *root = acpi_driver_data(device); 650 struct acpi_pci_root *root = acpi_driver_data(device);
645 struct acpi_pci_driver *driver; 651 struct acpi_pci_driver *driver;
646 652
653 if (system_state != SYSTEM_BOOTING)
654 pci_assign_unassigned_bus_resources(root->bus);
655
647 mutex_lock(&acpi_pci_root_lock); 656 mutex_lock(&acpi_pci_root_lock);
648 list_for_each_entry(driver, &acpi_pci_drivers, node) 657 list_for_each_entry(driver, &acpi_pci_drivers, node)
649 if (driver->add) 658 if (driver->add)
650 driver->add(root); 659 driver->add(root);
651 mutex_unlock(&acpi_pci_root_lock); 660 mutex_unlock(&acpi_pci_root_lock);
652 661
662 /* need to after hot-added ioapic is registered */
663 if (system_state != SYSTEM_BOOTING)
664 pci_enable_bridges(root->bus);
665
653 pci_bus_add_devices(root->bus); 666 pci_bus_add_devices(root->bus);
654 667
655 return 0; 668 return 0;
@@ -657,17 +670,29 @@ static int acpi_pci_root_start(struct acpi_device *device)
657 670
658static int acpi_pci_root_remove(struct acpi_device *device, int type) 671static int acpi_pci_root_remove(struct acpi_device *device, int type)
659{ 672{
673 acpi_status status;
674 acpi_handle handle;
660 struct acpi_pci_root *root = acpi_driver_data(device); 675 struct acpi_pci_root *root = acpi_driver_data(device);
661 struct acpi_pci_driver *driver; 676 struct acpi_pci_driver *driver;
662 677
678 pci_stop_root_bus(root->bus);
679
663 mutex_lock(&acpi_pci_root_lock); 680 mutex_lock(&acpi_pci_root_lock);
664 list_for_each_entry(driver, &acpi_pci_drivers, node) 681 list_for_each_entry_reverse(driver, &acpi_pci_drivers, node)
665 if (driver->remove) 682 if (driver->remove)
666 driver->remove(root); 683 driver->remove(root);
684 mutex_unlock(&acpi_pci_root_lock);
667 685
668 device_set_run_wake(root->bus->bridge, false); 686 device_set_run_wake(root->bus->bridge, false);
669 pci_acpi_remove_bus_pm_notifier(device); 687 pci_acpi_remove_bus_pm_notifier(device);
670 688
689 status = acpi_get_handle(device->handle, METHOD_NAME__PRT, &handle);
690 if (ACPI_SUCCESS(status))
691 acpi_pci_irq_del_prt(root->segment, root->secondary.start);
692
693 pci_remove_root_bus(root->bus);
694
695 mutex_lock(&acpi_pci_root_lock);
671 list_del(&root->node); 696 list_del(&root->node);
672 mutex_unlock(&acpi_pci_root_lock); 697 mutex_unlock(&acpi_pci_root_lock);
673 kfree(root); 698 kfree(root);
diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c
index 6241fd05bd41..a543746fb354 100644
--- a/drivers/pci/bus.c
+++ b/drivers/pci/bus.c
@@ -320,10 +320,7 @@ void pci_walk_bus(struct pci_bus *top, int (*cb)(struct pci_dev *, void *),
320 } else 320 } else
321 next = dev->bus_list.next; 321 next = dev->bus_list.next;
322 322
323 /* Run device routines with the device locked */
324 device_lock(&dev->dev);
325 retval = cb(dev, userdata); 323 retval = cb(dev, userdata);
326 device_unlock(&dev->dev);
327 if (retval) 324 if (retval)
328 break; 325 break;
329 } 326 }
diff --git a/drivers/pci/ioapic.c b/drivers/pci/ioapic.c
index 205af8dc83c2..22436f74eb50 100644
--- a/drivers/pci/ioapic.c
+++ b/drivers/pci/ioapic.c
@@ -125,3 +125,5 @@ static void __exit ioapic_exit(void)
125 125
126module_init(ioapic_init); 126module_init(ioapic_init);
127module_exit(ioapic_exit); 127module_exit(ioapic_exit);
128
129MODULE_LICENSE("GPL");
diff --git a/drivers/pci/irq.c b/drivers/pci/irq.c
index e5f69a43b1b1..b008cf86b9c3 100644
--- a/drivers/pci/irq.c
+++ b/drivers/pci/irq.c
@@ -14,11 +14,11 @@ static void pci_note_irq_problem(struct pci_dev *pdev, const char *reason)
14{ 14{
15 struct pci_dev *parent = to_pci_dev(pdev->dev.parent); 15 struct pci_dev *parent = to_pci_dev(pdev->dev.parent);
16 16
17 dev_printk(KERN_ERR, &pdev->dev, 17 dev_err(&pdev->dev,
18 "Potentially misrouted IRQ (Bridge %s %04x:%04x)\n", 18 "Potentially misrouted IRQ (Bridge %s %04x:%04x)\n",
19 dev_name(&parent->dev), parent->vendor, parent->device); 19 dev_name(&parent->dev), parent->vendor, parent->device);
20 dev_printk(KERN_ERR, &pdev->dev, "%s\n", reason); 20 dev_err(&pdev->dev, "%s\n", reason);
21 dev_printk(KERN_ERR, &pdev->dev, "Please report to linux-kernel@vger.kernel.org\n"); 21 dev_err(&pdev->dev, "Please report to linux-kernel@vger.kernel.org\n");
22 WARN_ON(1); 22 WARN_ON(1);
23} 23}
24 24
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
index 94c6e2aa03d6..24aa44c6ed02 100644
--- a/drivers/pci/pci-driver.c
+++ b/drivers/pci/pci-driver.c
@@ -398,6 +398,8 @@ static void pci_device_shutdown(struct device *dev)
398 struct pci_dev *pci_dev = to_pci_dev(dev); 398 struct pci_dev *pci_dev = to_pci_dev(dev);
399 struct pci_driver *drv = pci_dev->driver; 399 struct pci_driver *drv = pci_dev->driver;
400 400
401 pm_runtime_resume(dev);
402
401 if (drv && drv->shutdown) 403 if (drv && drv->shutdown)
402 drv->shutdown(pci_dev); 404 drv->shutdown(pci_dev);
403 pci_msi_shutdown(pci_dev); 405 pci_msi_shutdown(pci_dev);
@@ -408,16 +410,6 @@ static void pci_device_shutdown(struct device *dev)
408 * continue to do DMA 410 * continue to do DMA
409 */ 411 */
410 pci_disable_device(pci_dev); 412 pci_disable_device(pci_dev);
411
412 /*
413 * Devices may be enabled to wake up by runtime PM, but they need not
414 * be supposed to wake up the system from its "power off" state (e.g.
415 * ACPI S5). Therefore disable wakeup for all devices that aren't
416 * supposed to wake up the system at this point. The state argument
417 * will be ignored by pci_enable_wake().
418 */
419 if (!device_may_wakeup(dev))
420 pci_enable_wake(pci_dev, PCI_UNKNOWN, false);
421} 413}
422 414
423#ifdef CONFIG_PM 415#ifdef CONFIG_PM
@@ -1023,10 +1015,10 @@ static int pci_pm_runtime_suspend(struct device *dev)
1023 return 0; 1015 return 0;
1024 } 1016 }
1025 1017
1026 if (!pci_dev->state_saved) 1018 if (!pci_dev->state_saved) {
1027 pci_save_state(pci_dev); 1019 pci_save_state(pci_dev);
1028 1020 pci_finish_runtime_suspend(pci_dev);
1029 pci_finish_runtime_suspend(pci_dev); 1021 }
1030 1022
1031 return 0; 1023 return 0;
1032} 1024}
diff --git a/drivers/pci/pci-stub.c b/drivers/pci/pci-stub.c
index 775e933c2225..6e47c519c510 100644
--- a/drivers/pci/pci-stub.c
+++ b/drivers/pci/pci-stub.c
@@ -28,7 +28,7 @@ MODULE_PARM_DESC(ids, "Initial PCI IDs to add to the stub driver, format is "
28 28
29static int pci_stub_probe(struct pci_dev *dev, const struct pci_device_id *id) 29static int pci_stub_probe(struct pci_dev *dev, const struct pci_device_id *id)
30{ 30{
31 dev_printk(KERN_INFO, &dev->dev, "claimed by stub\n"); 31 dev_info(&dev->dev, "claimed by stub\n");
32 return 0; 32 return 0;
33} 33}
34 34
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
index 2f21991b8bcd..5d883a152789 100644
--- a/drivers/pci/pci-sysfs.c
+++ b/drivers/pci/pci-sysfs.c
@@ -558,40 +558,6 @@ boot_vga_show(struct device *dev, struct device_attribute *attr, char *buf)
558} 558}
559struct device_attribute vga_attr = __ATTR_RO(boot_vga); 559struct device_attribute vga_attr = __ATTR_RO(boot_vga);
560 560
561static void
562pci_config_pm_runtime_get(struct pci_dev *pdev)
563{
564 struct device *dev = &pdev->dev;
565 struct device *parent = dev->parent;
566
567 if (parent)
568 pm_runtime_get_sync(parent);
569 pm_runtime_get_noresume(dev);
570 /*
571 * pdev->current_state is set to PCI_D3cold during suspending,
572 * so wait until suspending completes
573 */
574 pm_runtime_barrier(dev);
575 /*
576 * Only need to resume devices in D3cold, because config
577 * registers are still accessible for devices suspended but
578 * not in D3cold.
579 */
580 if (pdev->current_state == PCI_D3cold)
581 pm_runtime_resume(dev);
582}
583
584static void
585pci_config_pm_runtime_put(struct pci_dev *pdev)
586{
587 struct device *dev = &pdev->dev;
588 struct device *parent = dev->parent;
589
590 pm_runtime_put(dev);
591 if (parent)
592 pm_runtime_put_sync(parent);
593}
594
595static ssize_t 561static ssize_t
596pci_read_config(struct file *filp, struct kobject *kobj, 562pci_read_config(struct file *filp, struct kobject *kobj,
597 struct bin_attribute *bin_attr, 563 struct bin_attribute *bin_attr,
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 54858838f098..adffc6f621e5 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -1578,15 +1578,25 @@ void pci_pme_active(struct pci_dev *dev, bool enable)
1578 1578
1579 pci_write_config_word(dev, dev->pm_cap + PCI_PM_CTRL, pmcsr); 1579 pci_write_config_word(dev, dev->pm_cap + PCI_PM_CTRL, pmcsr);
1580 1580
1581 /* PCI (as opposed to PCIe) PME requires that the device have 1581 /*
1582 its PME# line hooked up correctly. Not all hardware vendors 1582 * PCI (as opposed to PCIe) PME requires that the device have
1583 do this, so the PME never gets delivered and the device 1583 * its PME# line hooked up correctly. Not all hardware vendors
1584 remains asleep. The easiest way around this is to 1584 * do this, so the PME never gets delivered and the device
1585 periodically walk the list of suspended devices and check 1585 * remains asleep. The easiest way around this is to
1586 whether any have their PME flag set. The assumption is that 1586 * periodically walk the list of suspended devices and check
1587 we'll wake up often enough anyway that this won't be a huge 1587 * whether any have their PME flag set. The assumption is that
1588 hit, and the power savings from the devices will still be a 1588 * we'll wake up often enough anyway that this won't be a huge
1589 win. */ 1589 * hit, and the power savings from the devices will still be a
1590 * win.
1591 *
1592 * Although PCIe uses in-band PME message instead of PME# line
1593 * to report PME, PME does not work for some PCIe devices in
1594 * reality. For example, there are devices that set their PME
1595 * status bits, but don't really bother to send a PME message;
1596 * there are PCI Express Root Ports that don't bother to
1597 * trigger interrupts when they receive PME messages from the
1598 * devices below. So PME poll is used for PCIe devices too.
1599 */
1590 1600
1591 if (dev->pme_poll) { 1601 if (dev->pme_poll) {
1592 struct pci_pme_device *pme_dev; 1602 struct pci_pme_device *pme_dev;
@@ -1858,6 +1868,38 @@ bool pci_dev_run_wake(struct pci_dev *dev)
1858} 1868}
1859EXPORT_SYMBOL_GPL(pci_dev_run_wake); 1869EXPORT_SYMBOL_GPL(pci_dev_run_wake);
1860 1870
1871void pci_config_pm_runtime_get(struct pci_dev *pdev)
1872{
1873 struct device *dev = &pdev->dev;
1874 struct device *parent = dev->parent;
1875
1876 if (parent)
1877 pm_runtime_get_sync(parent);
1878 pm_runtime_get_noresume(dev);
1879 /*
1880 * pdev->current_state is set to PCI_D3cold during suspending,
1881 * so wait until suspending completes
1882 */
1883 pm_runtime_barrier(dev);
1884 /*
1885 * Only need to resume devices in D3cold, because config
1886 * registers are still accessible for devices suspended but
1887 * not in D3cold.
1888 */
1889 if (pdev->current_state == PCI_D3cold)
1890 pm_runtime_resume(dev);
1891}
1892
1893void pci_config_pm_runtime_put(struct pci_dev *pdev)
1894{
1895 struct device *dev = &pdev->dev;
1896 struct device *parent = dev->parent;
1897
1898 pm_runtime_put(dev);
1899 if (parent)
1900 pm_runtime_put_sync(parent);
1901}
1902
1861/** 1903/**
1862 * pci_pm_init - Initialize PM functions of given PCI device 1904 * pci_pm_init - Initialize PM functions of given PCI device
1863 * @dev: PCI device to handle. 1905 * @dev: PCI device to handle.
@@ -3833,14 +3875,13 @@ static void __devinit pci_no_domains(void)
3833} 3875}
3834 3876
3835/** 3877/**
3836 * pci_ext_cfg_enabled - can we access extended PCI config space? 3878 * pci_ext_cfg_avail - can we access extended PCI config space?
3837 * @dev: The PCI device of the root bridge.
3838 * 3879 *
3839 * Returns 1 if we can access PCI extended config space (offsets 3880 * Returns 1 if we can access PCI extended config space (offsets
3840 * greater than 0xff). This is the default implementation. Architecture 3881 * greater than 0xff). This is the default implementation. Architecture
3841 * implementations can override this. 3882 * implementations can override this.
3842 */ 3883 */
3843int __weak pci_ext_cfg_avail(struct pci_dev *dev) 3884int __weak pci_ext_cfg_avail(void)
3844{ 3885{
3845 return 1; 3886 return 1;
3846} 3887}
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
index 3c9443ee00e6..11a713bc7293 100644
--- a/drivers/pci/pci.h
+++ b/drivers/pci/pci.h
@@ -72,6 +72,8 @@ extern void pci_disable_enabled_device(struct pci_dev *dev);
72extern int pci_finish_runtime_suspend(struct pci_dev *dev); 72extern int pci_finish_runtime_suspend(struct pci_dev *dev);
73extern int __pci_pme_wakeup(struct pci_dev *dev, void *ign); 73extern int __pci_pme_wakeup(struct pci_dev *dev, void *ign);
74extern void pci_wakeup_bus(struct pci_bus *bus); 74extern void pci_wakeup_bus(struct pci_bus *bus);
75extern void pci_config_pm_runtime_get(struct pci_dev *dev);
76extern void pci_config_pm_runtime_put(struct pci_dev *dev);
75extern void pci_pm_init(struct pci_dev *dev); 77extern void pci_pm_init(struct pci_dev *dev);
76extern void platform_pci_wakeup_init(struct pci_dev *dev); 78extern void platform_pci_wakeup_init(struct pci_dev *dev);
77extern void pci_allocate_cap_save_buffers(struct pci_dev *dev); 79extern void pci_allocate_cap_save_buffers(struct pci_dev *dev);
diff --git a/drivers/pci/pcie/aer/aerdrv.h b/drivers/pci/pcie/aer/aerdrv.h
index 94a7598eb262..22f840f4dda1 100644
--- a/drivers/pci/pcie/aer/aerdrv.h
+++ b/drivers/pci/pcie/aer/aerdrv.h
@@ -87,6 +87,9 @@ struct aer_broadcast_data {
87static inline pci_ers_result_t merge_result(enum pci_ers_result orig, 87static inline pci_ers_result_t merge_result(enum pci_ers_result orig,
88 enum pci_ers_result new) 88 enum pci_ers_result new)
89{ 89{
90 if (new == PCI_ERS_RESULT_NO_AER_DRIVER)
91 return PCI_ERS_RESULT_NO_AER_DRIVER;
92
90 if (new == PCI_ERS_RESULT_NONE) 93 if (new == PCI_ERS_RESULT_NONE)
91 return orig; 94 return orig;
92 95
@@ -97,7 +100,7 @@ static inline pci_ers_result_t merge_result(enum pci_ers_result orig,
97 break; 100 break;
98 case PCI_ERS_RESULT_DISCONNECT: 101 case PCI_ERS_RESULT_DISCONNECT:
99 if (new == PCI_ERS_RESULT_NEED_RESET) 102 if (new == PCI_ERS_RESULT_NEED_RESET)
100 orig = new; 103 orig = PCI_ERS_RESULT_NEED_RESET;
101 break; 104 break;
102 default: 105 default:
103 break; 106 break;
diff --git a/drivers/pci/pcie/aer/aerdrv_core.c b/drivers/pci/pcie/aer/aerdrv_core.c
index 06bad96af415..421bbc5fee32 100644
--- a/drivers/pci/pcie/aer/aerdrv_core.c
+++ b/drivers/pci/pcie/aer/aerdrv_core.c
@@ -213,6 +213,7 @@ static int report_error_detected(struct pci_dev *dev, void *data)
213 struct aer_broadcast_data *result_data; 213 struct aer_broadcast_data *result_data;
214 result_data = (struct aer_broadcast_data *) data; 214 result_data = (struct aer_broadcast_data *) data;
215 215
216 device_lock(&dev->dev);
216 dev->error_state = result_data->state; 217 dev->error_state = result_data->state;
217 218
218 if (!dev->driver || 219 if (!dev->driver ||
@@ -231,12 +232,28 @@ static int report_error_detected(struct pci_dev *dev, void *data)
231 dev->driver ? 232 dev->driver ?
232 "no AER-aware driver" : "no driver"); 233 "no AER-aware driver" : "no driver");
233 } 234 }
234 return 0; 235
236 /*
237 * If there's any device in the subtree that does not
238 * have an error_detected callback, returning
239 * PCI_ERS_RESULT_NO_AER_DRIVER prevents calling of
240 * the subsequent mmio_enabled/slot_reset/resume
241 * callbacks of "any" device in the subtree. All the
242 * devices in the subtree are left in the error state
243 * without recovery.
244 */
245
246 if (!(dev->hdr_type & PCI_HEADER_TYPE_BRIDGE))
247 vote = PCI_ERS_RESULT_NO_AER_DRIVER;
248 else
249 vote = PCI_ERS_RESULT_NONE;
250 } else {
251 err_handler = dev->driver->err_handler;
252 vote = err_handler->error_detected(dev, result_data->state);
235 } 253 }
236 254
237 err_handler = dev->driver->err_handler;
238 vote = err_handler->error_detected(dev, result_data->state);
239 result_data->result = merge_result(result_data->result, vote); 255 result_data->result = merge_result(result_data->result, vote);
256 device_unlock(&dev->dev);
240 return 0; 257 return 0;
241} 258}
242 259
@@ -247,14 +264,17 @@ static int report_mmio_enabled(struct pci_dev *dev, void *data)
247 struct aer_broadcast_data *result_data; 264 struct aer_broadcast_data *result_data;
248 result_data = (struct aer_broadcast_data *) data; 265 result_data = (struct aer_broadcast_data *) data;
249 266
267 device_lock(&dev->dev);
250 if (!dev->driver || 268 if (!dev->driver ||
251 !dev->driver->err_handler || 269 !dev->driver->err_handler ||
252 !dev->driver->err_handler->mmio_enabled) 270 !dev->driver->err_handler->mmio_enabled)
253 return 0; 271 goto out;
254 272
255 err_handler = dev->driver->err_handler; 273 err_handler = dev->driver->err_handler;
256 vote = err_handler->mmio_enabled(dev); 274 vote = err_handler->mmio_enabled(dev);
257 result_data->result = merge_result(result_data->result, vote); 275 result_data->result = merge_result(result_data->result, vote);
276out:
277 device_unlock(&dev->dev);
258 return 0; 278 return 0;
259} 279}
260 280
@@ -265,14 +285,17 @@ static int report_slot_reset(struct pci_dev *dev, void *data)
265 struct aer_broadcast_data *result_data; 285 struct aer_broadcast_data *result_data;
266 result_data = (struct aer_broadcast_data *) data; 286 result_data = (struct aer_broadcast_data *) data;
267 287
288 device_lock(&dev->dev);
268 if (!dev->driver || 289 if (!dev->driver ||
269 !dev->driver->err_handler || 290 !dev->driver->err_handler ||
270 !dev->driver->err_handler->slot_reset) 291 !dev->driver->err_handler->slot_reset)
271 return 0; 292 goto out;
272 293
273 err_handler = dev->driver->err_handler; 294 err_handler = dev->driver->err_handler;
274 vote = err_handler->slot_reset(dev); 295 vote = err_handler->slot_reset(dev);
275 result_data->result = merge_result(result_data->result, vote); 296 result_data->result = merge_result(result_data->result, vote);
297out:
298 device_unlock(&dev->dev);
276 return 0; 299 return 0;
277} 300}
278 301
@@ -280,15 +303,18 @@ static int report_resume(struct pci_dev *dev, void *data)
280{ 303{
281 const struct pci_error_handlers *err_handler; 304 const struct pci_error_handlers *err_handler;
282 305
306 device_lock(&dev->dev);
283 dev->error_state = pci_channel_io_normal; 307 dev->error_state = pci_channel_io_normal;
284 308
285 if (!dev->driver || 309 if (!dev->driver ||
286 !dev->driver->err_handler || 310 !dev->driver->err_handler ||
287 !dev->driver->err_handler->resume) 311 !dev->driver->err_handler->resume)
288 return 0; 312 goto out;
289 313
290 err_handler = dev->driver->err_handler; 314 err_handler = dev->driver->err_handler;
291 err_handler->resume(dev); 315 err_handler->resume(dev);
316out:
317 device_unlock(&dev->dev);
292 return 0; 318 return 0;
293} 319}
294 320
diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
index 213753b283a6..3da9ecc9ab84 100644
--- a/drivers/pci/pcie/aspm.c
+++ b/drivers/pci/pcie/aspm.c
@@ -242,8 +242,7 @@ static void pcie_aspm_configure_common_clock(struct pcie_link_state *link)
242 return; 242 return;
243 243
244 /* Training failed. Restore common clock configurations */ 244 /* Training failed. Restore common clock configurations */
245 dev_printk(KERN_ERR, &parent->dev, 245 dev_err(&parent->dev, "ASPM: Could not configure common clock\n");
246 "ASPM: Could not configure common clock\n");
247 list_for_each_entry(child, &linkbus->devices, bus_list) 246 list_for_each_entry(child, &linkbus->devices, bus_list)
248 pcie_capability_write_word(child, PCI_EXP_LNKCTL, 247 pcie_capability_write_word(child, PCI_EXP_LNKCTL,
249 child_reg[PCI_FUNC(child->devfn)]); 248 child_reg[PCI_FUNC(child->devfn)]);
@@ -507,9 +506,7 @@ static int pcie_aspm_sanity_check(struct pci_dev *pdev)
507 */ 506 */
508 pcie_capability_read_dword(child, PCI_EXP_DEVCAP, &reg32); 507 pcie_capability_read_dword(child, PCI_EXP_DEVCAP, &reg32);
509 if (!(reg32 & PCI_EXP_DEVCAP_RBER) && !aspm_force) { 508 if (!(reg32 & PCI_EXP_DEVCAP_RBER) && !aspm_force) {
510 dev_printk(KERN_INFO, &child->dev, "disabling ASPM" 509 dev_info(&child->dev, "disabling ASPM on pre-1.1 PCIe device. You can enable it with 'pcie_aspm=force'\n");
511 " on pre-1.1 PCIe device. You can enable it"
512 " with 'pcie_aspm=force'\n");
513 return -EINVAL; 510 return -EINVAL;
514 } 511 }
515 } 512 }
diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c
index d03a7a39b2d8..ed129b414624 100644
--- a/drivers/pci/pcie/portdrv_core.c
+++ b/drivers/pci/pcie/portdrv_core.c
@@ -272,7 +272,8 @@ static int get_port_device_capability(struct pci_dev *dev)
272 } 272 }
273 273
274 /* Hot-Plug Capable */ 274 /* Hot-Plug Capable */
275 if (cap_mask & PCIE_PORT_SERVICE_HP) { 275 if ((cap_mask & PCIE_PORT_SERVICE_HP) &&
276 dev->pcie_flags_reg & PCI_EXP_FLAGS_SLOT) {
276 pcie_capability_read_dword(dev, PCI_EXP_SLTCAP, &reg32); 277 pcie_capability_read_dword(dev, PCI_EXP_SLTCAP, &reg32);
277 if (reg32 & PCI_EXP_SLTCAP_HPC) { 278 if (reg32 & PCI_EXP_SLTCAP_HPC) {
278 services |= PCIE_PORT_SERVICE_HP; 279 services |= PCIE_PORT_SERVICE_HP;
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index 0312f1c48b3c..293af5a6f912 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -1891,6 +1891,28 @@ unsigned int __ref pci_rescan_bus_bridge_resize(struct pci_dev *bridge)
1891 return max; 1891 return max;
1892} 1892}
1893 1893
1894/**
1895 * pci_rescan_bus - scan a PCI bus for devices.
1896 * @bus: PCI bus to scan
1897 *
1898 * Scan a PCI bus and child buses for new devices, adds them,
1899 * and enables them.
1900 *
1901 * Returns the max number of subordinate bus discovered.
1902 */
1903unsigned int __ref pci_rescan_bus(struct pci_bus *bus)
1904{
1905 unsigned int max;
1906
1907 max = pci_scan_child_bus(bus);
1908 pci_assign_unassigned_bus_resources(bus);
1909 pci_enable_bridges(bus);
1910 pci_bus_add_devices(bus);
1911
1912 return max;
1913}
1914EXPORT_SYMBOL_GPL(pci_rescan_bus);
1915
1894EXPORT_SYMBOL(pci_add_new_bus); 1916EXPORT_SYMBOL(pci_add_new_bus);
1895EXPORT_SYMBOL(pci_scan_slot); 1917EXPORT_SYMBOL(pci_scan_slot);
1896EXPORT_SYMBOL(pci_scan_bridge); 1918EXPORT_SYMBOL(pci_scan_bridge);
diff --git a/drivers/pci/proc.c b/drivers/pci/proc.c
index eb907a8faf2a..9b8505ccc56d 100644
--- a/drivers/pci/proc.c
+++ b/drivers/pci/proc.c
@@ -76,6 +76,8 @@ proc_bus_pci_read(struct file *file, char __user *buf, size_t nbytes, loff_t *pp
76 if (!access_ok(VERIFY_WRITE, buf, cnt)) 76 if (!access_ok(VERIFY_WRITE, buf, cnt))
77 return -EINVAL; 77 return -EINVAL;
78 78
79 pci_config_pm_runtime_get(dev);
80
79 if ((pos & 1) && cnt) { 81 if ((pos & 1) && cnt) {
80 unsigned char val; 82 unsigned char val;
81 pci_user_read_config_byte(dev, pos, &val); 83 pci_user_read_config_byte(dev, pos, &val);
@@ -121,6 +123,8 @@ proc_bus_pci_read(struct file *file, char __user *buf, size_t nbytes, loff_t *pp
121 cnt--; 123 cnt--;
122 } 124 }
123 125
126 pci_config_pm_runtime_put(dev);
127
124 *ppos = pos; 128 *ppos = pos;
125 return nbytes; 129 return nbytes;
126} 130}
@@ -146,6 +150,8 @@ proc_bus_pci_write(struct file *file, const char __user *buf, size_t nbytes, lof
146 if (!access_ok(VERIFY_READ, buf, cnt)) 150 if (!access_ok(VERIFY_READ, buf, cnt))
147 return -EINVAL; 151 return -EINVAL;
148 152
153 pci_config_pm_runtime_get(dev);
154
149 if ((pos & 1) && cnt) { 155 if ((pos & 1) && cnt) {
150 unsigned char val; 156 unsigned char val;
151 __get_user(val, buf); 157 __get_user(val, buf);
@@ -191,6 +197,8 @@ proc_bus_pci_write(struct file *file, const char __user *buf, size_t nbytes, lof
191 cnt--; 197 cnt--;
192 } 198 }
193 199
200 pci_config_pm_runtime_put(dev);
201
194 *ppos = pos; 202 *ppos = pos;
195 i_size_write(ino, dp->size); 203 i_size_write(ino, dp->size);
196 return nbytes; 204 return nbytes;
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 7a451ff56ecc..0c59f7aba12b 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -1790,6 +1790,45 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_TOSHIBA_2,
1790 PCI_DEVICE_ID_TOSHIBA_TC86C001_IDE, 1790 PCI_DEVICE_ID_TOSHIBA_TC86C001_IDE,
1791 quirk_tc86c001_ide); 1791 quirk_tc86c001_ide);
1792 1792
1793/*
1794 * PLX PCI 9050 PCI Target bridge controller has an errata that prevents the
1795 * local configuration registers accessible via BAR0 (memory) or BAR1 (i/o)
1796 * being read correctly if bit 7 of the base address is set.
1797 * The BAR0 or BAR1 region may be disabled (size 0) or enabled (size 128).
1798 * Re-allocate the regions to a 256-byte boundary if necessary.
1799 */
1800static void __devinit quirk_plx_pci9050(struct pci_dev *dev)
1801{
1802 unsigned int bar;
1803
1804 /* Fixed in revision 2 (PCI 9052). */
1805 if (dev->revision >= 2)
1806 return;
1807 for (bar = 0; bar <= 1; bar++)
1808 if (pci_resource_len(dev, bar) == 0x80 &&
1809 (pci_resource_start(dev, bar) & 0x80)) {
1810 struct resource *r = &dev->resource[bar];
1811 dev_info(&dev->dev,
1812 "Re-allocating PLX PCI 9050 BAR %u to length 256 to avoid bit 7 bug\n",
1813 bar);
1814 r->start = 0;
1815 r->end = 0xff;
1816 }
1817}
1818DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
1819 quirk_plx_pci9050);
1820/*
1821 * The following Meilhaus (vendor ID 0x1402) device IDs (amongst others)
1822 * may be using the PLX PCI 9050: 0x0630, 0x0940, 0x0950, 0x0960, 0x100b,
1823 * 0x1400, 0x140a, 0x140b, 0x14e0, 0x14ea, 0x14eb, 0x1604, 0x1608, 0x160c,
1824 * 0x168f, 0x2000, 0x2600, 0x3000, 0x810a, 0x810b.
1825 *
1826 * Currently, device IDs 0x2000 and 0x2600 are used by the Comedi "me_daq"
1827 * driver.
1828 */
1829DECLARE_PCI_FIXUP_HEADER(0x1402, 0x2000, quirk_plx_pci9050);
1830DECLARE_PCI_FIXUP_HEADER(0x1402, 0x2600, quirk_plx_pci9050);
1831
1793static void __devinit quirk_netmos(struct pci_dev *dev) 1832static void __devinit quirk_netmos(struct pci_dev *dev)
1794{ 1833{
1795 unsigned int num_parallel = (dev->subsystem_device & 0xf0) >> 4; 1834 unsigned int num_parallel = (dev->subsystem_device & 0xf0) >> 4;
diff --git a/drivers/pci/remove.c b/drivers/pci/remove.c
index 513972f3ed13..7c0fd9252e6f 100644
--- a/drivers/pci/remove.c
+++ b/drivers/pci/remove.c
@@ -111,3 +111,39 @@ void pci_stop_and_remove_bus_device(struct pci_dev *dev)
111 pci_remove_bus_device(dev); 111 pci_remove_bus_device(dev);
112} 112}
113EXPORT_SYMBOL(pci_stop_and_remove_bus_device); 113EXPORT_SYMBOL(pci_stop_and_remove_bus_device);
114
115void pci_stop_root_bus(struct pci_bus *bus)
116{
117 struct pci_dev *child, *tmp;
118 struct pci_host_bridge *host_bridge;
119
120 if (!pci_is_root_bus(bus))
121 return;
122
123 host_bridge = to_pci_host_bridge(bus->bridge);
124 list_for_each_entry_safe_reverse(child, tmp,
125 &bus->devices, bus_list)
126 pci_stop_bus_device(child);
127
128 /* stop the host bridge */
129 device_del(&host_bridge->dev);
130}
131
132void pci_remove_root_bus(struct pci_bus *bus)
133{
134 struct pci_dev *child, *tmp;
135 struct pci_host_bridge *host_bridge;
136
137 if (!pci_is_root_bus(bus))
138 return;
139
140 host_bridge = to_pci_host_bridge(bus->bridge);
141 list_for_each_entry_safe(child, tmp,
142 &bus->devices, bus_list)
143 pci_remove_bus_device(child);
144 pci_remove_bus(bus);
145 host_bridge->bus = NULL;
146
147 /* remove the host bridge */
148 put_device(&host_bridge->dev);
149}
diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
index 1e808ca338f8..6d3591d57ea0 100644
--- a/drivers/pci/setup-bus.c
+++ b/drivers/pci/setup-bus.c
@@ -1550,25 +1550,12 @@ enable_all:
1550} 1550}
1551EXPORT_SYMBOL_GPL(pci_assign_unassigned_bridge_resources); 1551EXPORT_SYMBOL_GPL(pci_assign_unassigned_bridge_resources);
1552 1552
1553#ifdef CONFIG_HOTPLUG 1553void pci_assign_unassigned_bus_resources(struct pci_bus *bus)
1554/**
1555 * pci_rescan_bus - scan a PCI bus for devices.
1556 * @bus: PCI bus to scan
1557 *
1558 * Scan a PCI bus and child buses for new devices, adds them,
1559 * and enables them.
1560 *
1561 * Returns the max number of subordinate bus discovered.
1562 */
1563unsigned int __ref pci_rescan_bus(struct pci_bus *bus)
1564{ 1554{
1565 unsigned int max;
1566 struct pci_dev *dev; 1555 struct pci_dev *dev;
1567 LIST_HEAD(add_list); /* list of resources that 1556 LIST_HEAD(add_list); /* list of resources that
1568 want additional resources */ 1557 want additional resources */
1569 1558
1570 max = pci_scan_child_bus(bus);
1571
1572 down_read(&pci_bus_sem); 1559 down_read(&pci_bus_sem);
1573 list_for_each_entry(dev, &bus->devices, bus_list) 1560 list_for_each_entry(dev, &bus->devices, bus_list)
1574 if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE || 1561 if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE ||
@@ -1579,11 +1566,4 @@ unsigned int __ref pci_rescan_bus(struct pci_bus *bus)
1579 up_read(&pci_bus_sem); 1566 up_read(&pci_bus_sem);
1580 __pci_bus_assign_resources(bus, &add_list, NULL); 1567 __pci_bus_assign_resources(bus, &add_list, NULL);
1581 BUG_ON(!list_empty(&add_list)); 1568 BUG_ON(!list_empty(&add_list));
1582
1583 pci_enable_bridges(bus);
1584 pci_bus_add_devices(bus);
1585
1586 return max;
1587} 1569}
1588EXPORT_SYMBOL_GPL(pci_rescan_bus);
1589#endif
diff --git a/include/acpi/acpi_drivers.h b/include/acpi/acpi_drivers.h
index bb145e4b935e..8b1d7a6a9695 100644
--- a/include/acpi/acpi_drivers.h
+++ b/include/acpi/acpi_drivers.h
@@ -92,8 +92,8 @@ int acpi_pci_link_free_irq(acpi_handle handle);
92 92
93/* ACPI PCI Interrupt Routing (pci_irq.c) */ 93/* ACPI PCI Interrupt Routing (pci_irq.c) */
94 94
95int acpi_pci_irq_add_prt(acpi_handle handle, struct pci_bus *bus); 95int acpi_pci_irq_add_prt(acpi_handle handle, int segment, int bus);
96void acpi_pci_irq_del_prt(struct pci_bus *bus); 96void acpi_pci_irq_del_prt(int segment, int bus);
97 97
98/* ACPI PCI Device Binding (pci_bind.c) */ 98/* ACPI PCI Device Binding (pci_bind.c) */
99 99
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 1ad824966e64..a98a5f9ac1d5 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -538,6 +538,9 @@ enum pci_ers_result {
538 538
539 /* Device driver is fully recovered and operational */ 539 /* Device driver is fully recovered and operational */
540 PCI_ERS_RESULT_RECOVERED = (__force pci_ers_result_t) 5, 540 PCI_ERS_RESULT_RECOVERED = (__force pci_ers_result_t) 5,
541
542 /* No AER capabilities registered for the driver */
543 PCI_ERS_RESULT_NO_AER_DRIVER = (__force pci_ers_result_t) 6,
541}; 544};
542 545
543/* PCI bus error event callbacks */ 546/* PCI bus error event callbacks */
@@ -713,6 +716,8 @@ extern struct pci_dev *pci_dev_get(struct pci_dev *dev);
713extern void pci_dev_put(struct pci_dev *dev); 716extern void pci_dev_put(struct pci_dev *dev);
714extern void pci_remove_bus(struct pci_bus *b); 717extern void pci_remove_bus(struct pci_bus *b);
715extern void pci_stop_and_remove_bus_device(struct pci_dev *dev); 718extern void pci_stop_and_remove_bus_device(struct pci_dev *dev);
719void pci_stop_root_bus(struct pci_bus *bus);
720void pci_remove_root_bus(struct pci_bus *bus);
716void pci_setup_cardbus(struct pci_bus *bus); 721void pci_setup_cardbus(struct pci_bus *bus);
717extern void pci_sort_breadthfirst(void); 722extern void pci_sort_breadthfirst(void);
718#define dev_is_pci(d) ((d)->bus == &pci_bus_type) 723#define dev_is_pci(d) ((d)->bus == &pci_bus_type)
@@ -959,6 +964,7 @@ void pci_bus_size_bridges(struct pci_bus *bus);
959int pci_claim_resource(struct pci_dev *, int); 964int pci_claim_resource(struct pci_dev *, int);
960void pci_assign_unassigned_resources(void); 965void pci_assign_unassigned_resources(void);
961void pci_assign_unassigned_bridge_resources(struct pci_dev *bridge); 966void pci_assign_unassigned_bridge_resources(struct pci_dev *bridge);
967void pci_assign_unassigned_bus_resources(struct pci_bus *bus);
962void pdev_enable_device(struct pci_dev *); 968void pdev_enable_device(struct pci_dev *);
963int pci_enable_resources(struct pci_dev *, int mask); 969int pci_enable_resources(struct pci_dev *, int mask);
964void pci_fixup_irqs(u8 (*)(struct pci_dev *, u8 *), 970void pci_fixup_irqs(u8 (*)(struct pci_dev *, u8 *),
@@ -1602,7 +1608,7 @@ static inline void pci_mmcfg_early_init(void) { }
1602static inline void pci_mmcfg_late_init(void) { } 1608static inline void pci_mmcfg_late_init(void) { }
1603#endif 1609#endif
1604 1610
1605int pci_ext_cfg_avail(struct pci_dev *dev); 1611int pci_ext_cfg_avail(void);
1606 1612
1607void __iomem *pci_ioremap_bar(struct pci_dev *pdev, int bar); 1613void __iomem *pci_ioremap_bar(struct pci_dev *pdev, int bar);
1608 1614
diff --git a/include/uapi/linux/pci_regs.h b/include/uapi/linux/pci_regs.h
index 20ae747ddf34..259763d2df71 100644
--- a/include/uapi/linux/pci_regs.h
+++ b/include/uapi/linux/pci_regs.h
@@ -544,9 +544,9 @@
544#define PCI_EXP_OBFF_WAKE_EN 0x6000 /* OBFF using WAKE# signaling */ 544#define PCI_EXP_OBFF_WAKE_EN 0x6000 /* OBFF using WAKE# signaling */
545#define PCI_CAP_EXP_ENDPOINT_SIZEOF_V2 44 /* v2 endpoints end here */ 545#define PCI_CAP_EXP_ENDPOINT_SIZEOF_V2 44 /* v2 endpoints end here */
546#define PCI_EXP_LNKCAP2 44 /* Link Capability 2 */ 546#define PCI_EXP_LNKCAP2 44 /* Link Capability 2 */
547#define PCI_EXP_LNKCAP2_SLS_2_5GB 0x01 /* Current Link Speed 2.5GT/s */ 547#define PCI_EXP_LNKCAP2_SLS_2_5GB 0x02 /* Supported Link Speed 2.5GT/s */
548#define PCI_EXP_LNKCAP2_SLS_5_0GB 0x02 /* Current Link Speed 5.0GT/s */ 548#define PCI_EXP_LNKCAP2_SLS_5_0GB 0x04 /* Supported Link Speed 5.0GT/s */
549#define PCI_EXP_LNKCAP2_SLS_8_0GB 0x04 /* Current Link Speed 8.0GT/s */ 549#define PCI_EXP_LNKCAP2_SLS_8_0GB 0x08 /* Supported Link Speed 8.0GT/s */
550#define PCI_EXP_LNKCAP2_CROSSLINK 0x100 /* Crosslink supported */ 550#define PCI_EXP_LNKCAP2_CROSSLINK 0x100 /* Crosslink supported */
551#define PCI_EXP_LNKCTL2 48 /* Link Control 2 */ 551#define PCI_EXP_LNKCTL2 48 /* Link Control 2 */
552#define PCI_EXP_LNKSTA2 50 /* Link Status 2 */ 552#define PCI_EXP_LNKSTA2 50 /* Link Status 2 */