diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-01-22 19:39:28 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-01-22 19:39:28 -0500 |
| commit | e1ba84597c9012b9f9075aac283ac7537d7561ba (patch) | |
| tree | 41ab1a74c71ce55e72ef73424346e8e0a7f4616e /arch/powerpc/kernel | |
| parent | 60eaa0190f6b39dce18eb1975d9773ed8bc9a534 (diff) | |
| parent | cef09b808e584c13b7126b83dc37c80b00234137 (diff) | |
Merge tag 'pci-v3.14-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci
Pull PCI updates from Bjorn Helgaas:
"PCI changes for the v3.14 merge window:
Resource management
- Change pci_bus_region addresses to dma_addr_t (Bjorn Helgaas)
- Support 64-bit AGP BARs (Bjorn Helgaas, Yinghai Lu)
- Add pci_bus_address() to get bus address of a BAR (Bjorn Helgaas)
- Use pci_resource_start() for CPU address of AGP BARs (Bjorn Helgaas)
- Enforce bus address limits in resource allocation (Yinghai Lu)
- Allocate 64-bit BARs above 4G when possible (Yinghai Lu)
- Convert pcibios_resource_to_bus() to take pci_bus, not pci_dev (Yinghai Lu)
PCI device hotplug
- Major rescan/remove locking update (Rafael J. Wysocki)
- Make ioapic builtin only (not modular) (Yinghai Lu)
- Fix release/free issues (Yinghai Lu)
- Clean up pciehp (Bjorn Helgaas)
- Announce pciehp slot info during enumeration (Bjorn Helgaas)
MSI
- Add pci_msi_vec_count(), pci_msix_vec_count() (Alexander Gordeev)
- Add pci_enable_msi_range(), pci_enable_msix_range() (Alexander Gordeev)
- Deprecate "tri-state" interfaces: fail/success/fail+info (Alexander Gordeev)
- Export MSI mode using attributes, not kobjects (Greg Kroah-Hartman)
- Drop "irq" param from *_restore_msi_irqs() (DuanZhenzhong)
SR-IOV
- Clear NumVFs when disabling SR-IOV in sriov_init() (ethan.zhao)
Virtualization
- Add support for save/restore of extended capabilities (Alex Williamson)
- Add Virtual Channel to save/restore support (Alex Williamson)
- Never treat a VF as a multifunction device (Alex Williamson)
- Add pci_try_reset_function(), et al (Alex Williamson)
AER
- Ignore non-PCIe error sources (Betty Dall)
- Support ACPI HEST error sources for domains other than 0 (Betty Dall)
- Consolidate HEST error source parsers (Bjorn Helgaas)
- Add a TLP header print helper (Borislav Petkov)
Freescale i.MX6
- Remove unnecessary code (Fabio Estevam)
- Make reset-gpio optional (Marek Vasut)
- Report "link up" only after link training completes (Marek Vasut)
- Start link in Gen1 before negotiating for Gen2 mode (Marek Vasut)
- Fix PCIe startup code (Richard Zhu)
Marvell MVEBU
- Remove duplicate of_clk_get_by_name() call (Andrew Lunn)
- Drop writes to bridge Secondary Status register (Jason Gunthorpe)
- Obey bridge PCI_COMMAND_MEM and PCI_COMMAND_IO bits (Jason Gunthorpe)
- Support a bridge with no IO port window (Jason Gunthorpe)
- Use max_t() instead of max(resource_size_t,) (Jingoo Han)
- Remove redundant of_match_ptr (Sachin Kamat)
- Call pci_ioremap_io() at startup instead of dynamically (Thomas Petazzoni)
NVIDIA Tegra
- Disable Gen2 for Tegra20 and Tegra30 (Eric Brower)
Renesas R-Car
- Add runtime PM support (Valentine Barshak)
- Fix rcar_pci_probe() return value check (Wei Yongjun)
Synopsys DesignWare
- Fix crash in dw_msi_teardown_irq() (Bjørn Erik Nilsen)
- Remove redundant call to pci_write_config_word() (Bjørn Erik Nilsen)
- Fix missing MSI IRQs (Harro Haan)
- Add dw_pcie prefix before cfg_read/write (Pratyush Anand)
- Fix I/O transfers by using CPU (not realio) address (Pratyush Anand)
- Whitespace cleanup (Jingoo Han)
EISA
- Call put_device() if device_register() fails (Levente Kurusa)
- Revert EISA initialization breakage ((Bjorn Helgaas)
Miscellaneous
- Remove unused code, including PCIe 3.0 interfaces (Stephen Hemminger)
- Prevent bus conflicts while checking for bridge apertures (Bjorn Helgaas)
- Stop clearing bridge Secondary Status when setting up I/O aperture (Bjorn Helgaas)
- Use dev_is_pci() to identify PCI devices (Yijing Wang)
- Deprecate DEFINE_PCI_DEVICE_TABLE (Joe Perches)
- Update documentation 00-INDEX (Erik Ekman)"
* tag 'pci-v3.14-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (119 commits)
Revert "EISA: Initialize device before its resources"
Revert "EISA: Log device resources in dmesg"
vfio-pci: Use pci "try" reset interface
PCI: Check parent kobject in pci_destroy_dev()
xen/pcifront: Use global PCI rescan-remove locking
powerpc/eeh: Use global PCI rescan-remove locking
PCI: Fix pci_check_and_unmask_intx() comment typos
PCI: Add pci_try_reset_function(), pci_try_reset_slot(), pci_try_reset_bus()
MPT / PCI: Use pci_stop_and_remove_bus_device_locked()
platform / x86: Use global PCI rescan-remove locking
PCI: hotplug: Use global PCI rescan-remove locking
pcmcia: Use global PCI rescan-remove locking
ACPI / hotplug / PCI: Use global PCI rescan-remove locking
ACPI / PCI: Use global PCI rescan-remove locking in PCI root hotplug
PCI: Add global pci_lock_rescan_remove()
PCI: Cleanup pci.h whitespace
PCI: Reorder so actual code comes before stubs
PCI/AER: Support ACPI HEST AER error sources for PCI domains other than 0
ACPICA: Add helper macros to extract bus/segment numbers from HEST table.
PCI: Make local functions static
...
Diffstat (limited to 'arch/powerpc/kernel')
| -rw-r--r-- | arch/powerpc/kernel/eeh_driver.c | 19 | ||||
| -rw-r--r-- | arch/powerpc/kernel/pci-common.c | 4 | ||||
| -rw-r--r-- | arch/powerpc/kernel/pci_of_scan.c | 4 |
3 files changed, 20 insertions, 7 deletions
diff --git a/arch/powerpc/kernel/eeh_driver.c b/arch/powerpc/kernel/eeh_driver.c index 36bed5a12750..c17f90d0f73c 100644 --- a/arch/powerpc/kernel/eeh_driver.c +++ b/arch/powerpc/kernel/eeh_driver.c | |||
| @@ -369,7 +369,9 @@ static void *eeh_rmv_device(void *data, void *userdata) | |||
| 369 | edev->mode |= EEH_DEV_DISCONNECTED; | 369 | edev->mode |= EEH_DEV_DISCONNECTED; |
| 370 | (*removed)++; | 370 | (*removed)++; |
| 371 | 371 | ||
| 372 | pci_lock_rescan_remove(); | ||
| 372 | pci_stop_and_remove_bus_device(dev); | 373 | pci_stop_and_remove_bus_device(dev); |
| 374 | pci_unlock_rescan_remove(); | ||
| 373 | 375 | ||
| 374 | return NULL; | 376 | return NULL; |
| 375 | } | 377 | } |
| @@ -416,10 +418,13 @@ static int eeh_reset_device(struct eeh_pe *pe, struct pci_bus *bus) | |||
| 416 | * into pcibios_add_pci_devices(). | 418 | * into pcibios_add_pci_devices(). |
| 417 | */ | 419 | */ |
| 418 | eeh_pe_state_mark(pe, EEH_PE_KEEP); | 420 | eeh_pe_state_mark(pe, EEH_PE_KEEP); |
| 419 | if (bus) | 421 | if (bus) { |
| 422 | pci_lock_rescan_remove(); | ||
| 420 | pcibios_remove_pci_devices(bus); | 423 | pcibios_remove_pci_devices(bus); |
| 421 | else if (frozen_bus) | 424 | pci_unlock_rescan_remove(); |
| 425 | } else if (frozen_bus) { | ||
| 422 | eeh_pe_dev_traverse(pe, eeh_rmv_device, &removed); | 426 | eeh_pe_dev_traverse(pe, eeh_rmv_device, &removed); |
| 427 | } | ||
| 423 | 428 | ||
| 424 | /* Reset the pci controller. (Asserts RST#; resets config space). | 429 | /* Reset the pci controller. (Asserts RST#; resets config space). |
| 425 | * Reconfigure bridges and devices. Don't try to bring the system | 430 | * Reconfigure bridges and devices. Don't try to bring the system |
| @@ -429,6 +434,8 @@ static int eeh_reset_device(struct eeh_pe *pe, struct pci_bus *bus) | |||
| 429 | if (rc) | 434 | if (rc) |
| 430 | return rc; | 435 | return rc; |
| 431 | 436 | ||
| 437 | pci_lock_rescan_remove(); | ||
| 438 | |||
| 432 | /* Restore PE */ | 439 | /* Restore PE */ |
| 433 | eeh_ops->configure_bridge(pe); | 440 | eeh_ops->configure_bridge(pe); |
| 434 | eeh_pe_restore_bars(pe); | 441 | eeh_pe_restore_bars(pe); |
| @@ -462,6 +469,7 @@ static int eeh_reset_device(struct eeh_pe *pe, struct pci_bus *bus) | |||
| 462 | pe->tstamp = tstamp; | 469 | pe->tstamp = tstamp; |
| 463 | pe->freeze_count = cnt; | 470 | pe->freeze_count = cnt; |
| 464 | 471 | ||
| 472 | pci_unlock_rescan_remove(); | ||
| 465 | return 0; | 473 | return 0; |
| 466 | } | 474 | } |
| 467 | 475 | ||
| @@ -618,8 +626,11 @@ perm_error: | |||
| 618 | eeh_pe_dev_traverse(pe, eeh_report_failure, NULL); | 626 | eeh_pe_dev_traverse(pe, eeh_report_failure, NULL); |
| 619 | 627 | ||
| 620 | /* Shut down the device drivers for good. */ | 628 | /* Shut down the device drivers for good. */ |
| 621 | if (frozen_bus) | 629 | if (frozen_bus) { |
| 630 | pci_lock_rescan_remove(); | ||
| 622 | pcibios_remove_pci_devices(frozen_bus); | 631 | pcibios_remove_pci_devices(frozen_bus); |
| 632 | pci_unlock_rescan_remove(); | ||
| 633 | } | ||
| 623 | } | 634 | } |
| 624 | 635 | ||
| 625 | static void eeh_handle_special_event(void) | 636 | static void eeh_handle_special_event(void) |
| @@ -692,6 +703,7 @@ static void eeh_handle_special_event(void) | |||
| 692 | if (rc == 2 || rc == 1) | 703 | if (rc == 2 || rc == 1) |
| 693 | eeh_handle_normal_event(pe); | 704 | eeh_handle_normal_event(pe); |
| 694 | else { | 705 | else { |
| 706 | pci_lock_rescan_remove(); | ||
| 695 | list_for_each_entry_safe(hose, tmp, | 707 | list_for_each_entry_safe(hose, tmp, |
| 696 | &hose_list, list_node) { | 708 | &hose_list, list_node) { |
| 697 | phb_pe = eeh_phb_pe_get(hose); | 709 | phb_pe = eeh_phb_pe_get(hose); |
| @@ -703,6 +715,7 @@ static void eeh_handle_special_event(void) | |||
| 703 | eeh_pe_dev_traverse(pe, eeh_report_failure, NULL); | 715 | eeh_pe_dev_traverse(pe, eeh_report_failure, NULL); |
| 704 | pcibios_remove_pci_devices(bus); | 716 | pcibios_remove_pci_devices(bus); |
| 705 | } | 717 | } |
| 718 | pci_unlock_rescan_remove(); | ||
| 706 | } | 719 | } |
| 707 | } | 720 | } |
| 708 | 721 | ||
diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c index a1e3e40ca3fd..d9476c1fc959 100644 --- a/arch/powerpc/kernel/pci-common.c +++ b/arch/powerpc/kernel/pci-common.c | |||
| @@ -835,7 +835,7 @@ static void pcibios_fixup_resources(struct pci_dev *dev) | |||
| 835 | * at 0 as unset as well, except if PCI_PROBE_ONLY is also set | 835 | * at 0 as unset as well, except if PCI_PROBE_ONLY is also set |
| 836 | * since in that case, we don't want to re-assign anything | 836 | * since in that case, we don't want to re-assign anything |
| 837 | */ | 837 | */ |
| 838 | pcibios_resource_to_bus(dev, ®, res); | 838 | pcibios_resource_to_bus(dev->bus, ®, res); |
| 839 | if (pci_has_flag(PCI_REASSIGN_ALL_RSRC) || | 839 | if (pci_has_flag(PCI_REASSIGN_ALL_RSRC) || |
| 840 | (reg.start == 0 && !pci_has_flag(PCI_PROBE_ONLY))) { | 840 | (reg.start == 0 && !pci_has_flag(PCI_PROBE_ONLY))) { |
| 841 | /* Only print message if not re-assigning */ | 841 | /* Only print message if not re-assigning */ |
| @@ -886,7 +886,7 @@ static int pcibios_uninitialized_bridge_resource(struct pci_bus *bus, | |||
| 886 | 886 | ||
| 887 | /* Job is a bit different between memory and IO */ | 887 | /* Job is a bit different between memory and IO */ |
| 888 | if (res->flags & IORESOURCE_MEM) { | 888 | if (res->flags & IORESOURCE_MEM) { |
| 889 | pcibios_resource_to_bus(dev, ®ion, res); | 889 | pcibios_resource_to_bus(dev->bus, ®ion, res); |
| 890 | 890 | ||
| 891 | /* If the BAR is non-0 then it's probably been initialized */ | 891 | /* If the BAR is non-0 then it's probably been initialized */ |
| 892 | if (region.start != 0) | 892 | if (region.start != 0) |
diff --git a/arch/powerpc/kernel/pci_of_scan.c b/arch/powerpc/kernel/pci_of_scan.c index ac0b034f9ae0..83c26d829991 100644 --- a/arch/powerpc/kernel/pci_of_scan.c +++ b/arch/powerpc/kernel/pci_of_scan.c | |||
| @@ -111,7 +111,7 @@ static void of_pci_parse_addrs(struct device_node *node, struct pci_dev *dev) | |||
| 111 | res->name = pci_name(dev); | 111 | res->name = pci_name(dev); |
| 112 | region.start = base; | 112 | region.start = base; |
| 113 | region.end = base + size - 1; | 113 | region.end = base + size - 1; |
| 114 | pcibios_bus_to_resource(dev, res, ®ion); | 114 | pcibios_bus_to_resource(dev->bus, res, ®ion); |
| 115 | } | 115 | } |
| 116 | } | 116 | } |
| 117 | 117 | ||
| @@ -280,7 +280,7 @@ void of_scan_pci_bridge(struct pci_dev *dev) | |||
| 280 | res->flags = flags; | 280 | res->flags = flags; |
| 281 | region.start = of_read_number(&ranges[1], 2); | 281 | region.start = of_read_number(&ranges[1], 2); |
| 282 | region.end = region.start + size - 1; | 282 | region.end = region.start + size - 1; |
| 283 | pcibios_bus_to_resource(dev, res, ®ion); | 283 | pcibios_bus_to_resource(dev->bus, res, ®ion); |
| 284 | } | 284 | } |
| 285 | sprintf(bus->name, "PCI Bus %04x:%02x", pci_domain_nr(bus), | 285 | sprintf(bus->name, "PCI Bus %04x:%02x", pci_domain_nr(bus), |
| 286 | bus->number); | 286 | bus->number); |
