Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci
Linus Torvalds [Fri, 23 Mar 2012 21:02:12 +0000 (14:02 -0700)]
Pull PCI changes (including maintainer change) from Jesse Barnes:
 "This pull has some good cleanups from Bjorn and Yinghai, as well as
  some more code from Yinghai to better handle resource re-allocation
  when enabled.

  There's also a new initcall_debug feature from Arjan which will print
  out quirk timing information to help identify slow quirks for fixing
  or refinement (Yinghai sent in a few patches to do just that once the
  new debug code landed).

  Beyond that, I'm handing off PCI maintainership to Bjorn Helgaas.
  He's been a core PCI and Linux contributor for some time now, and has
  kindly volunteered to take over.  I just don't feel I have the time
  for PCI review and work that it deserves lately (I've taken on some
  other projects), and haven't been as responsive lately as I'd like, so
  I approached Bjorn asking if he'd like to manage things.  He's going
  to give it a try, and I'm confident he'll do at least as well as I
  have in keeping the tree managed, patches flowing, and keeping things
  stable."

Fix up some fairly trivial conflicts due to other cleanups (mips device
resource fixup cleanups clashing with list handling cleanup, ppc iseries
removal clashing with pci_probe_only cleanup etc)

* 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci: (112 commits)
  PCI: Bjorn gets PCI hotplug too
  PCI: hand PCI maintenance over to Bjorn Helgaas
  unicore32/PCI: move <asm-generic/pci-bridge.h> include to asm/pci.h
  sparc/PCI: convert devtree and arch-probed bus addresses to resource
  powerpc/PCI: allow reallocation on PA Semi
  powerpc/PCI: convert devtree bus addresses to resource
  powerpc/PCI: compute I/O space bus-to-resource offset consistently
  arm/PCI: don't export pci_flags
  PCI: fix bridge I/O window bus-to-resource conversion
  x86/PCI: add spinlock held check to 'pcibios_fwaddrmap_lookup()'
  PCI / PCIe: Introduce command line option to disable ARI
  PCI: make acpihp use __pci_remove_bus_device instead
  PCI: export __pci_remove_bus_device
  PCI: Rename pci_remove_behind_bridge to pci_stop_and_remove_behind_bridge
  PCI: Rename pci_remove_bus_device to pci_stop_and_remove_bus_device
  PCI: print out PCI device info along with duration
  PCI: Move "pci reassigndev resource alignment" out of quirks.c
  PCI: Use class for quirk for usb host controller fixup
  PCI: Use class for quirk for ti816x class fixup
  PCI: Use class for quirk for intel e100 interrupt fixup
  ...

19 files changed:
1  2 
Documentation/kernel-parameters.txt
MAINTAINERS
arch/arm/common/it8152.c
arch/powerpc/include/asm/ppc-pci.h
arch/powerpc/kernel/pci-common.c
arch/powerpc/kernel/rtas_pci.c
arch/powerpc/platforms/powernv/pci.c
arch/powerpc/platforms/pseries/pci_dlpar.c
arch/powerpc/platforms/pseries/setup.c
arch/powerpc/platforms/wsp/wsp_pci.c
arch/sh/drivers/pci/pci.c
arch/x86/pci/acpi.c
drivers/pci/pci-driver.c
drivers/pci/pcie/aspm.c
drivers/pci/quirks.c
drivers/pci/xen-pcifront.c
drivers/scsi/mpt2sas/mpt2sas_base.c
drivers/usb/host/pci-quirks.c
include/linux/pci.h

Simple merge
diff --cc MAINTAINERS
Simple merge
Simple merge
@@@ -45,23 -45,92 +45,21 @@@ extern void init_pci_config_tokens (voi
  extern unsigned long get_phb_buid (struct device_node *);
  extern int rtas_setup_phb(struct pci_controller *phb);
  
- extern unsigned long pci_probe_only;
 -/* ---- EEH internal-use-only related routines ---- */
  #ifdef CONFIG_EEH
  
 +void pci_addr_cache_build(void);
  void pci_addr_cache_insert_device(struct pci_dev *dev);
  void pci_addr_cache_remove_device(struct pci_dev *dev);
 -void pci_addr_cache_build(void);
 -struct pci_dev *pci_get_device_by_addr(unsigned long addr);
 -
 -/**
 - * eeh_slot_error_detail -- record and EEH error condition to the log
 - * @pdn:      pci device node
 - * @severity: EEH_LOG_TEMP_FAILURE or EEH_LOG_PERM_FAILURE
 - *
 - * Obtains the EEH error details from the RTAS subsystem,
 - * and then logs these details with the RTAS error log system.
 - */
 -#define EEH_LOG_TEMP_FAILURE 1
 -#define EEH_LOG_PERM_FAILURE 2
 -void eeh_slot_error_detail (struct pci_dn *pdn, int severity);
 -
 -/**
 - * rtas_pci_enable - enable IO transfers for this slot
 - * @pdn:       pci device node
 - * @function:  either EEH_THAW_MMIO or EEH_THAW_DMA 
 - *
 - * Enable I/O transfers to this slot 
 - */
 -#define EEH_THAW_MMIO 2
 -#define EEH_THAW_DMA  3
 -int rtas_pci_enable(struct pci_dn *pdn, int function);
 -
 -/**
 - * rtas_set_slot_reset -- unfreeze a frozen slot
 - * @pdn:       pci device node
 - *
 - * Clear the EEH-frozen condition on a slot.  This routine
 - * does this by asserting the PCI #RST line for 1/8th of
 - * a second; this routine will sleep while the adapter is
 - * being reset.
 - *
 - * Returns a non-zero value if the reset failed.
 - */
 -int rtas_set_slot_reset (struct pci_dn *);
 -int eeh_wait_for_slot_status(struct pci_dn *pdn, int max_wait_msecs);
 -
 -/** 
 - * eeh_restore_bars - Restore device configuration info.
 - * @pdn:       pci device node
 - *
 - * A reset of a PCI device will clear out its config space.
 - * This routines will restore the config space for this
 - * device, and is children, to values previously obtained
 - * from the firmware.
 - */
 -void eeh_restore_bars(struct pci_dn *);
 -
 -/**
 - * rtas_configure_bridge -- firmware initialization of pci bridge
 - * @pdn:       pci device node
 - *
 - * Ask the firmware to configure all PCI bridges devices
 - * located behind the indicated node. Required after a
 - * pci device reset. Does essentially the same hing as
 - * eeh_restore_bars, but for brdges, and lets firmware 
 - * do the work.
 - */
 -void rtas_configure_bridge(struct pci_dn *);
 -
 +struct pci_dev *pci_addr_cache_get_device(unsigned long addr);
 +void eeh_slot_error_detail(struct eeh_dev *edev, int severity);
 +int eeh_pci_enable(struct eeh_dev *edev, int function);
 +int eeh_reset_pe(struct eeh_dev *);
 +void eeh_restore_bars(struct eeh_dev *);
  int rtas_write_config(struct pci_dn *, int where, int size, u32 val);
  int rtas_read_config(struct pci_dn *, int where, int size, u32 *val);
 -
 -/**
 - * eeh_mark_slot -- set mode flags for pertition endpoint
 - * @pdn:       pci device node
 - *
 - * mark and clear slots: find "partition endpoint" PE and set or 
 - * clear the flags for each subnode of the PE.
 - */
 -void eeh_mark_slot (struct device_node *dn, int mode_flag);
 -void eeh_clear_slot (struct device_node *dn, int mode_flag);
 -
 -/**
 - * find_device_pe -- Find the associated "Partiationable Endpoint" PE
 - * @pdn:       pci device node
 - */
 -struct device_node * find_device_pe(struct device_node *dn);
 +void eeh_mark_slot(struct device_node *dn, int mode_flag);
 +void eeh_clear_slot(struct device_node *dn, int mode_flag);
 +struct device_node *eeh_find_device_pe(struct device_node *dn);
  
  void eeh_sysfs_add_device(struct pci_dev *pdev);
  void eeh_sysfs_remove_device(struct pci_dev *pdev);
Simple merge
@@@ -275,11 -275,8 +275,11 @@@ void __init find_and_init_phbs(void
        of_node_put(root);
        pci_devs_phb_init();
  
 +      /* Create EEH devices for all PHBs */
 +      eeh_dev_phb_init();
 +
        /*
-        * pci_probe_only and pci_assign_all_buses can be set via properties
+        * PCI_PROBE_ONLY and PCI_REASSIGN_ALL_BUS can be set via properties
         * in chosen.
         */
        if (of_chosen) {
Simple merge
@@@ -383,9 -380,11 +383,12 @@@ static void __init pSeries_setup_arch(v
  
        fwnmi_init();
  
+       /* By default, only probe PCI (can be overriden by rtas_pci) */
+       pci_add_flags(PCI_PROBE_ONLY);
        /* Find and initialize PCI host bridges */
        init_pci_config_tokens();
 +      eeh_pseries_init();
        find_and_init_phbs();
        pSeries_reconfig_notifier_register(&pci_dn_reconfig_nb);
        eeh_init();
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -891,6 -875,6 +891,7 @@@ static void __devinit quirk_usb_early_h
                quirk_usb_disable_ehci(pdev);
        else if (pdev->class == PCI_CLASS_SERIAL_USB_XHCI)
                quirk_usb_handoff_xhci(pdev);
 +      pci_disable_device(pdev);
  }
- DECLARE_PCI_FIXUP_FINAL(PCI_ANY_ID, PCI_ANY_ID, quirk_usb_early_handoff);
+ DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_ANY_ID, PCI_ANY_ID,
+                       PCI_CLASS_SERIAL_USB, 8, quirk_usb_early_handoff);
@@@ -947,20 -947,7 +947,20 @@@ int __must_check __pci_register_driver(
        __pci_register_driver(driver, THIS_MODULE, KBUILD_MODNAME)
  
  void pci_unregister_driver(struct pci_driver *dev);
 +
 +/**
 + * module_pci_driver() - Helper macro for registering a PCI driver
 + * @__pci_driver: pci_driver struct
 + *
 + * Helper macro for PCI drivers which do not do anything special in module
 + * init/exit. This eliminates a lot of boilerplate. Each module may only
 + * use this macro once, and calling it replaces module_init() and module_exit()
 + */
 +#define module_pci_driver(__pci_driver) \
 +      module_driver(__pci_driver, pci_register_driver, \
 +                     pci_unregister_driver)
 +
- void pci_remove_behind_bridge(struct pci_dev *dev);
+ void pci_stop_and_remove_behind_bridge(struct pci_dev *dev);
  struct pci_driver *pci_dev_driver(const struct pci_dev *dev);
  int pci_add_dynid(struct pci_driver *drv,
                  unsigned int vendor, unsigned int device,