]> Git Repo - linux.git/commitdiff
Merge tag 'pci-v4.14-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaa...
authorLinus Torvalds <[email protected]>
Fri, 8 Sep 2017 22:47:43 +0000 (15:47 -0700)
committerLinus Torvalds <[email protected]>
Fri, 8 Sep 2017 22:47:43 +0000 (15:47 -0700)
Pull PCI updates from Bjorn Helgaas:

 - add enhanced Downstream Port Containment support, which prints more
   details about Root Port Programmed I/O errors (Dongdong Liu)

 - add Layerscape ls1088a and ls2088a support (Hou Zhiqiang)

 - add MediaTek MT2712 and MT7622 support (Ryder Lee)

 - add MediaTek MT2712 and MT7622 MSI support (Honghui Zhang)

 - add Qualcom IPQ8074 support (Varadarajan Narayanan)

 - add R-Car r8a7743/5 device tree support (Biju Das)

 - add Rockchip per-lane PHY support for better power management (Shawn
   Lin)

 - fix IRQ mapping for hot-added devices by replacing the
   pci_fixup_irqs() boot-time design with a host bridge hook called at
   probe-time (Lorenzo Pieralisi, Matthew Minter)

 - fix race when enabling two devices that results in upstream bridge
   not being enabled correctly (Srinath Mannam)

 - fix pciehp power fault infinite loop (Keith Busch)

 - fix SHPC bridge MSI hotplug events by enabling bus mastering
   (Aleksandr Bezzubikov)

 - fix a VFIO issue by correcting PCIe capability sizes (Alex
   Williamson)

 - fix an INTD issue on Xilinx and possibly other drivers by unifying
   INTx IRQ domain support (Paul Burton)

 - avoid IOMMU stalls by marking AMD Stoney GPU ATS as broken (Joerg
   Roedel)

 - allow APM X-Gene device assignment to guests by adding an ACS quirk
   (Feng Kan)

 - fix driver crashes by disabling Extended Tags on Broadcom HT2100
   (Extended Tags support is required for PCIe Receivers but not
   Requesters, and we now enable them by default when Requesters support
   them) (Sinan Kaya)

 - fix MSIs for devices that use phantom RIDs for DMA by assuming MSIs
   use the real Requester ID (not a phantom RID) (Robin Murphy)

 - prevent assignment of Intel VMD children to guests (which may be
   supported eventually, but isn't yet) by not associating an IOMMU with
   them (Jon Derrick)

 - fix Intel VMD suspend/resume by releasing IRQs on suspend (Scott
   Bauer)

 - fix a Function-Level Reset issue with Intel 750 NVMe by waiting
   longer (up to 60sec instead of 1sec) for device to become ready
   (Sinan Kaya)

 - fix a Function-Level Reset issue on iProc Stingray by working around
   hardware defects in the CRS implementation (Oza Pawandeep)

 - fix an issue with Intel NVMe P3700 after an iProc reset by adding a
   delay during shutdown (Oza Pawandeep)

 - fix a Microsoft Hyper-V lockdep issue by polling instead of blocking
   in compose_msi_msg() (Stephen Hemminger)

 - fix a wireless LAN driver timeout by clearing DesignWare MSI
   interrupt status after it is handled, not before (Faiz Abbas)

 - fix DesignWare ATU enable checking (Jisheng Zhang)

 - reduce Layerscape dependencies on the bootloader by doing more
   initialization in the driver (Hou Zhiqiang)

 - improve Intel VMD performance allowing allocation of more IRQ vectors
   than present CPUs (Keith Busch)

 - improve endpoint framework support for initial DMA mask, different
   BAR sizes, configurable page sizes, MSI, test driver, etc (Kishon
   Vijay Abraham I, Stan Drozd)

 - rework CRS support to add periodic messages while we poll during
   enumeration and after Function-Level Reset and prepare for possible
   other uses of CRS (Sinan Kaya)

 - clean up Root Port AER handling by removing unnecessary code and
   moving error handler methods to struct pcie_port_service_driver
   (Christoph Hellwig)

 - clean up error handling paths in various drivers (Bjorn Andersson,
   Fabio Estevam, Gustavo A. R. Silva, Harunobu Kurokawa, Jeffy Chen,
   Lorenzo Pieralisi, Sergei Shtylyov)

 - clean up SR-IOV resource handling by disabling VF decoding before
   updating the corresponding resource structs (Gavin Shan)

 - clean up DesignWare-based drivers by unifying quirks to update Class
   Code and Interrupt Pin and related handling of write-protected
   registers (Hou Zhiqiang)

 - clean up by adding empty generic pcibios_align_resource() and
   pcibios_fixup_bus() and removing empty arch-specific implementations
   (Palmer Dabbelt)

 - request exclusive reset control for several drivers to allow cleanup
   elsewhere (Philipp Zabel)

 - constify various structures (Arvind Yadav, Bhumika Goyal)

 - convert from full_name() to %pOF (Rob Herring)

 - remove unused variables from iProc, HiSi, Altera, Keystone (Shawn
   Lin)

* tag 'pci-v4.14-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (170 commits)
  PCI: xgene: Clean up whitespace
  PCI: xgene: Define XGENE_PCI_EXP_CAP and use generic PCI_EXP_RTCTL offset
  PCI: xgene: Fix platform_get_irq() error handling
  PCI: xilinx-nwl: Fix platform_get_irq() error handling
  PCI: rockchip: Fix platform_get_irq() error handling
  PCI: altera: Fix platform_get_irq() error handling
  PCI: spear13xx: Fix platform_get_irq() error handling
  PCI: artpec6: Fix platform_get_irq() error handling
  PCI: armada8k: Fix platform_get_irq() error handling
  PCI: dra7xx: Fix platform_get_irq() error handling
  PCI: exynos: Fix platform_get_irq() error handling
  PCI: iproc: Clean up whitespace
  PCI: iproc: Rename PCI_EXP_CAP to IPROC_PCI_EXP_CAP
  PCI: iproc: Add 500ms delay during device shutdown
  PCI: Fix typos and whitespace errors
  PCI: Remove unused "res" variable from pci_resource_io()
  PCI: Correct kernel-doc of pci_vpd_srdt_size(), pci_vpd_srdt_tag()
  PCI/AER: Reformat AER register definitions
  iommu/vt-d: Prevent VMD child devices from being remapping targets
  x86/PCI: Use is_vmd() rather than relying on the domain number
  ...

16 files changed:
1  2 
Documentation/devicetree/bindings/pci/hisilicon-pcie.txt
Documentation/devicetree/bindings/pci/mvebu-pci.txt
Documentation/devicetree/bindings/pci/pci-armada8k.txt
Documentation/devicetree/bindings/pci/rcar-pci.txt
Documentation/devicetree/bindings/pci/xgene-pci-msi.txt
MAINTAINERS
arch/alpha/kernel/pci.c
arch/microblaze/pci/pci-common.c
arch/sparc/kernel/pcic.c
drivers/iommu/intel-iommu.c
drivers/pci/host/pci-hyperv.c
drivers/pci/msi.c
drivers/pci/pci.c
drivers/pci/probe.c
drivers/pci/quirks.c
include/linux/pci.h

index 7a579c816951501137b2005272714a973fd439c8,b0fd3ba66ec9281273bfe7e4a3a843055fb842e7..bdb7ab39d2d7effafede0803adef4eeef1d9bf9a
@@@ -1,7 -1,7 +1,7 @@@
  HiSilicon Hip05 and Hip06 PCIe host bridge DT description
  
- HiSilicon PCIe host controller is based on Designware PCI core.
- It shares common functions with PCIe Designware core driver and inherits
+ HiSilicon PCIe host controller is based on the Synopsys DesignWare PCI core.
+ It shares common functions with the PCIe DesignWare core driver and inherits
  common properties defined in
  Documentation/devicetree/bindings/pci/designware-pci.txt.
  
@@@ -40,6 -40,7 +40,6 @@@ Hip05 Example (note that Hip06 is the s
                                 0x0 0 0 2 &mbigen_pcie 2 11
                                 0x0 0 0 3 &mbigen_pcie 3 12
                                 0x0 0 0 4 &mbigen_pcie 4 13>;
 -              status = "ok";
        };
  
  HiSilicon Hip06/Hip07 PCIe host bridge DT (almost-ECAM) description.
@@@ -82,4 -83,5 +82,4 @@@ Example
                                 0x0 0 0 2 &mbigen_pcie0 650 4
                                 0x0 0 0 3 &mbigen_pcie0 650 4
                                 0x0 0 0 4 &mbigen_pcie0 650 4>;
 -              status = "ok";
        };
index 9c7fce69570b66c824a032c3655785dc11843810,196e034f687906916330c014ed9928fb092c2251..127ae1f53e5a2d5b4da6893efc7fba898a14fd27
@@@ -77,7 -77,7 +77,7 @@@ and the following optional properties
  - marvell,pcie-lane: the physical PCIe lane number, for ports having
    multiple lanes. If this property is not found, we assume that the
    value is 0.
- - reset-gpios: optional gpio to PERST#
+ - reset-gpios: optional GPIO to PERST#
  - reset-delay-us: delay in us to wait after reset de-assertion, if not
    specified will default to 100ms, as required by the PCIe specification.
  
@@@ -85,6 -85,7 +85,6 @@@ Example
  
  pcie-controller {
        compatible = "marvell,armada-xp-pcie";
 -      status = "disabled";
        device_type = "pci";
  
        #address-cells = <3>;
                /* wait 20ms for device settle after reset deassertion */
                reset-delay-us = <20000>;
                clocks = <&gateclk 5>;
 -              status = "disabled";
        };
  
        pcie@2,0 {
                marvell,pcie-port = <0>;
                marvell,pcie-lane = <1>;
                clocks = <&gateclk 6>;
 -              status = "disabled";
        };
  
        pcie@3,0 {
                marvell,pcie-port = <0>;
                marvell,pcie-lane = <2>;
                clocks = <&gateclk 7>;
 -              status = "disabled";
        };
  
        pcie@4,0 {
                marvell,pcie-port = <0>;
                marvell,pcie-lane = <3>;
                clocks = <&gateclk 8>;
 -              status = "disabled";
        };
  
        pcie@5,0 {
                marvell,pcie-port = <1>;
                marvell,pcie-lane = <0>;
                clocks = <&gateclk 9>;
 -              status = "disabled";
        };
  
        pcie@6,0 {
                marvell,pcie-port = <1>;
                marvell,pcie-lane = <1>;
                clocks = <&gateclk 10>;
 -              status = "disabled";
        };
  
        pcie@7,0 {
                marvell,pcie-port = <1>;
                marvell,pcie-lane = <2>;
                clocks = <&gateclk 11>;
 -              status = "disabled";
        };
  
        pcie@8,0 {
                marvell,pcie-port = <1>;
                marvell,pcie-lane = <3>;
                clocks = <&gateclk 12>;
 -              status = "disabled";
        };
  
        pcie@9,0 {
                marvell,pcie-port = <2>;
                marvell,pcie-lane = <0>;
                clocks = <&gateclk 26>;
 -              status = "disabled";
        };
  
        pcie@10,0 {
                marvell,pcie-port = <3>;
                marvell,pcie-lane = <0>;
                clocks = <&gateclk 27>;
 -              status = "disabled";
        };
  };
index 6b115fd10fec81720800b2b7d424097a18dae6b0,c54a84350ec859ea9b4277f4207f5ac343ad29e1..c1e4c3d10a747c008c2b914c89194228caed395e
@@@ -1,6 -1,6 +1,6 @@@
  * Marvell Armada 7K/8K PCIe interface
  
- This PCIe host controller is based on the Synopsis Designware PCIe IP
+ This PCIe host controller is based on the Synopsys DesignWare PCIe IP
  and thus inherits all the common properties defined in designware-pcie.txt.
  
  Required properties:
@@@ -34,4 -34,5 +34,4 @@@ Example
                interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
                num-lanes = <1>;
                clocks = <&cpm_syscon0 1 13>;
 -              status = "disabled";
        };
index a7e3dd43b2a8a5ff58f61d16ce3138d1a7f9022a,6b5b388fbc99a757e6e3b0a623c13f1154a9fc3c..76ba3a61d1a31c1fea2e492a438e6d4a01a316cd
@@@ -14,7 -14,7 +14,7 @@@ compatible: "renesas,pcie-r8a7779" for 
            SoC-specific version corresponding to the platform first
            followed by the generic version.
  
- - reg: base address and length of the pcie controller registers.
+ - reg: base address and length of the PCIe controller registers.
  - #address-cells: set to <3>
  - #size-cells: set to <2>
  - bus-range: PCI bus numbers covered
        source for hardware related interrupts (e.g. link speed change).
  - #interrupt-cells: set to <1>
  - interrupt-map-mask and interrupt-map: standard PCI properties
-       to define the mapping of the PCIe interface to interrupt
-       numbers.
+       to define the mapping of the PCIe interface to interrupt numbers.
  - clocks: from common clock binding: clock specifiers for the PCIe controller
        and PCIe bus clocks.
  - clock-names: from common clock binding: should be "pcie" and "pcie_bus".
  
  Example:
  
- SoC specific DT Entry:
+ SoC-specific DT Entry:
  
        pcie: pcie@fe000000 {
                compatible = "renesas,pcie-r8a7791", "renesas,pcie-rcar-gen2";
@@@ -54,4 -53,5 +53,4 @@@
                interrupt-map = <0 0 0 0 &gic 0 116 4>;
                clocks = <&mstp3_clks R8A7791_CLK_PCIE>, <&pcie_bus_clk>;
                clock-names = "pcie", "pcie_bus";
 -              status = "disabled";
        };
index 54bac7f8860c02fa10cde3f241863a0db00d347a,09ac2dc3afc1e5099b0ed5b5a42c13e8f41a1a9c..85d9b95234f7d914af80ae1c81b98cd2ff31cdae
@@@ -4,7 -4,7 +4,7 @@@ Required properties
  
  - compatible: should be "apm,xgene1-msi" to identify
              X-Gene v1 PCIe MSI controller block.
- - msi-controller: indicates that this is X-Gene v1 PCIe MSI controller node
+ - msi-controller: indicates that this is an X-Gene v1 PCIe MSI controller node
  - reg: physical base address (0x79000000) and length (0x900000) for controller
         registers. These registers include the MSI termination address and data
         registers as well as the MSI interrupt status registers.
@@@ -13,7 -13,8 +13,8 @@@
              interrupt number 0x10 to 0x1f.
  - interrupt-names: not required
  
- Each PCIe node needs to have property msi-parent that points to msi controller node
+ Each PCIe node needs to have property msi-parent that points to an MSI
+ controller node
  
  Examples:
  
@@@ -44,6 -45,7 +45,6 @@@ SoC DTSI
  
        + PCIe controller node with msi-parent property pointing to MSI node:
        pcie0: pcie@1f2b0000 {
 -              status = "disabled";
                device_type = "pci";
                compatible = "apm,xgene-storm-pcie", "apm,xgene-pcie";
                #interrupt-cells = <1>;
diff --combined MAINTAINERS
index 722c7aec88c26c5ca03f14d13405fb63c8f4ad97,e972e362444c38c290d724e6e1083aac19cb3543..fe7a27ed0bdb03c3969cc55ae0a85fb18a43fdb0
@@@ -301,7 -301,6 +301,7 @@@ S: Supporte
  F:    drivers/acpi/
  F:    drivers/pnp/pnpacpi/
  F:    include/linux/acpi.h
 +F:    include/linux/fwnode.h
  F:    include/acpi/
  F:    Documentation/acpi/
  F:    Documentation/ABI/testing/sysfs-bus-acpi
@@@ -311,14 -310,6 +311,14 @@@ F:       drivers/pci/*/*acpi
  F:    drivers/pci/*/*/*acpi*
  F:    tools/power/acpi/
  
 +ACPI APEI
 +M:    "Rafael J. Wysocki" <[email protected]>
 +M:    Len Brown <[email protected]>
 +L:    [email protected]
 +R:    Tony Luck <[email protected]>
 +R:    Borislav Petkov <[email protected]>
 +F:    drivers/acpi/apei/
 +
  ACPI COMPONENT ARCHITECTURE (ACPICA)
  M:    Robert Moore <[email protected]>
  M:    Lv Zheng <[email protected]>
@@@ -778,12 -769,6 +778,12 @@@ W:       http://ez.analog.com/community/linux
  S:    Supported
  F:    drivers/media/i2c/adv7180.c
  
 +ANALOG DEVICES INC ADV748X DRIVER
 +M:    Kieran Bingham <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/media/i2c/adv748x/*
 +
  ANALOG DEVICES INC ADV7511 DRIVER
  M:    Hans Verkuil <[email protected]>
  L:    [email protected]
@@@ -1168,7 -1153,6 +1168,7 @@@ L:      [email protected]
  F:    arch/arm/mach-artpec
  F:    arch/arm/boot/dts/artpec6*
  F:    drivers/clk/axis
 +F:    drivers/crypto/axis
  F:    drivers/pinctrl/pinctrl-artpec*
  F:    Documentation/devicetree/bindings/pinctrl/axis,artpec6-pinctrl.txt
  
@@@ -1177,7 -1161,7 +1177,7 @@@ M:      Brendan Higgins <brendanhiggins@goog
  R:    Benjamin Herrenschmidt <[email protected]>
  R:    Joel Stanley <[email protected]>
  L:    [email protected]
 -L:    [email protected]
 +L:    [email protected] (moderated for non-subscribers)
  S:    Maintained
  F:    drivers/irqchip/irq-aspeed-i2c-ic.c
  F:    drivers/i2c/busses/i2c-aspeed.c
@@@ -1298,15 -1282,10 +1298,15 @@@ S:   Maintaine
  
  ARM/CORTINA SYSTEMS GEMINI ARM ARCHITECTURE
  M:    Hans Ulli Kroll <[email protected]>
 +M:    Linus Walleij <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
  T:    git git://github.com/ulli-kroll/linux.git
  S:    Maintained
 +F:    Documentation/devicetree/bindings/arm/gemini.txt
 +F:    Documentation/devicetree/bindings/pinctrl/cortina,gemini-pinctrl.txt
 +F:    Documentation/devicetree/bindings/rtc/faraday,ftrtc010.txt
  F:    arch/arm/mach-gemini/
 +F:    drivers/pinctrl/pinctrl-gemini.c
  F:    drivers/rtc/rtc-ftrtc010.c
  
  ARM/CSR SIRFPRIMA2 MACHINE SUPPORT
@@@ -1591,7 -1570,7 +1591,7 @@@ M:      Chunfeng Yun <chunfeng.yun@mediatek.
  L:    [email protected] (moderated for non-subscribers)
  L:    [email protected] (moderated for non-subscribers)
  S:    Maintained
 -F:    drivers/phy/phy-mt65xx-usb3.c
 +F:    drivers/phy/mediatek/phy-mtk-tphy.c
  
  ARM/MICREL KS8695 ARCHITECTURE
  M:    Greg Ungerer <[email protected]>
@@@ -2014,7 -1993,6 +2014,7 @@@ F:      arch/arm64/boot/dts/socionext
  F:    drivers/bus/uniphier-system-bus.c
  F:    drivers/clk/uniphier/
  F:    drivers/i2c/busses/i2c-uniphier*
 +F:    drivers/irqchip/irq-uniphier-aidet.c
  F:    drivers/pinctrl/uniphier/
  F:    drivers/reset/reset-uniphier.c
  F:    drivers/tty/serial/8250/8250_uniphier.c
@@@ -2139,12 -2117,6 +2139,12 @@@ S:    Maintaine
  F:    arch/arm64/
  F:    Documentation/arm64/
  
 +AS3645A LED FLASH CONTROLLER DRIVER
 +M:    Sakari Ailus <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/leds/leds-as3645a.c
 +
  AS3645A LED FLASH CONTROLLER DRIVER
  M:    Laurent Pinchart <[email protected]>
  L:    [email protected]
@@@ -2413,10 -2385,9 +2413,10 @@@ AUDIT SUBSYSTE
  M:    Paul Moore <[email protected]>
  M:    Eric Paris <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
 -W:    http://people.redhat.com/sgrubb/audit/
 -T:    git git://git.infradead.org/users/pcmoore/audit
 -S:    Maintained
 +W:    https://github.com/linux-audit
 +W:    https://people.redhat.com/sgrubb/audit
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/audit.git
 +S:    Supported
  F:    include/linux/audit.h
  F:    include/uapi/linux/audit.h
  F:    kernel/audit*
@@@ -2506,7 -2477,7 +2506,7 @@@ Q:      https://patchwork.open-mesh.org/proj
  S:    Maintained
  F:    Documentation/ABI/testing/sysfs-class-net-batman-adv
  F:    Documentation/ABI/testing/sysfs-class-net-mesh
 -F:    Documentation/networking/batman-adv.txt
 +F:    Documentation/networking/batman-adv.rst
  F:    include/uapi/linux/batman_adv.h
  F:    net/batman-adv/
  
@@@ -4137,9 -4108,7 +4137,9 @@@ F:      include/linux/dax.
  F:    include/trace/events/fs_dax.h
  
  DIRECTORY NOTIFICATION (DNOTIFY)
 -M:    Eric Paris <[email protected]>
 +M:    Jan Kara <[email protected]>
 +R:    Amir Goldstein <[email protected]>
 +L:    [email protected]
  S:    Maintained
  F:    Documentation/filesystems/dnotify.txt
  F:    fs/notify/dnotify/
@@@ -4390,12 -4359,6 +4390,12 @@@ S:    Maintaine
  F:    drivers/gpu/drm/qxl/
  F:    include/uapi/drm/qxl_drm.h
  
 +DRM DRIVER FOR PERVASIVE DISPLAYS REPAPER PANELS
 +M:    Noralf Trønnes <[email protected]>
 +S:    Maintained
 +F:    drivers/gpu/drm/tinydrm/repaper.c
 +F:    Documentation/devicetree/bindings/display/repaper.txt
 +
  DRM DRIVER FOR RAGE 128 VIDEO CARDS
  S:    Orphan / Obsolete
  F:    drivers/gpu/drm/r128/
@@@ -4411,12 -4374,6 +4411,12 @@@ S:    Orphan / Obsolet
  F:    drivers/gpu/drm/sis/
  F:    include/uapi/drm/sis_drm.h
  
 +DRM DRIVER FOR SITRONIX ST7586 PANELS
 +M:    David Lechner <[email protected]>
 +S:    Maintained
 +F:    drivers/gpu/drm/tinydrm/st7586.c
 +F:    Documentation/devicetree/bindings/display/st7586.txt
 +
  DRM DRIVER FOR TDFX VIDEO CARDS
  S:    Orphan / Obsolete
  F:    drivers/gpu/drm/tdfx/
@@@ -4665,14 -4622,6 +4665,14 @@@ F:    drivers/gpu/drm/panel
  F:    include/drm/drm_panel.h
  F:    Documentation/devicetree/bindings/display/panel/
  
 +DRM TINYDRM DRIVERS
 +M:    Noralf Trønnes <[email protected]>
 +W:    https://github.com/notro/tinydrm/wiki/Development
 +T:    git git://anongit.freedesktop.org/drm/drm-misc
 +S:    Maintained
 +F:    drivers/gpu/drm/tinydrm/
 +F:    include/drm/tinydrm/
 +
  DSBR100 USB FM RADIO DRIVER
  M:    Alexey Klimov <[email protected]>
  L:    [email protected]
@@@ -5141,21 -5090,12 +5141,21 @@@ M:   Andrew Lunn <[email protected]
  M:    Florian Fainelli <[email protected]>
  L:    [email protected]
  S:    Maintained
 -F:    include/linux/phy.h
 -F:    include/linux/phy_fixed.h
 -F:    drivers/net/phy/
 +F:    Documentation/ABI/testing/sysfs-bus-mdio
 +F:    Documentation/devicetree/bindings/net/mdio*
  F:    Documentation/networking/phy.txt
 +F:    drivers/net/phy/
  F:    drivers/of/of_mdio.c
  F:    drivers/of/of_net.c
 +F:    include/linux/*mdio*.h
 +F:    include/linux/of_net.h
 +F:    include/linux/phy.h
 +F:    include/linux/phy_fixed.h
 +F:    include/linux/platform_data/mdio-gpio.h
 +F:    include/linux/platform_data/mdio-bcm-unimac.h
 +F:    include/trace/events/mdio.h
 +F:    include/uapi/linux/mdio.h
 +F:    include/uapi/linux/mii.h
  
  EXT2 FILE SYSTEM
  M:    Jan Kara <[email protected]>
@@@ -5250,9 -5190,7 +5250,9 @@@ F:      Documentation/hwmon/f71805
  F:    drivers/hwmon/f71805f.c
  
  FANOTIFY
 -M:    Eric Paris <[email protected]>
 +M:    Jan Kara <[email protected]>
 +R:    Amir Goldstein <[email protected]>
 +L:    [email protected]
  S:    Maintained
  F:    fs/notify/fanotify/
  F:    include/linux/fanotify.h
@@@ -5395,11 -5333,10 +5395,11 @@@ K:   fmc_d.*registe
  
  FPGA MANAGER FRAMEWORK
  M:    Alan Tull <[email protected]>
 -R:    Moritz Fischer <m[email protected]>
 +R:    Moritz Fischer <m[email protected]>
  L:    [email protected]
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/atull/linux-fpga.git
 +Q:    http://patchwork.kernel.org/project/linux-fpga/list/
  F:    Documentation/fpga/
  F:    Documentation/devicetree/bindings/fpga/
  F:    drivers/fpga/
@@@ -5818,12 -5755,6 +5818,12 @@@ S:    Maintaine
  F:    Documentation/acpi/gpio-properties.txt
  F:    drivers/gpio/gpiolib-acpi.c
  
 +GPIO IR Transmitter
 +M:    Sean Young <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/media/rc/gpio-ir-tx.c
 +
  GPIO MOCKUP DRIVER
  M:    Bamvor Jian Zhang <[email protected]>
  L:    [email protected]
@@@ -5895,7 -5826,7 +5895,7 @@@ F:      drivers/staging/greybus/spi.
  F:    drivers/staging/greybus/spilib.c
  F:    drivers/staging/greybus/spilib.h
  
 -GREYBUS LOOBACK/TIME PROTOCOLS DRIVERS
 +GREYBUS LOOPBACK/TIME PROTOCOLS DRIVERS
  M:    Bryan O'Donoghue <[email protected]>
  S:    Maintained
  F:    drivers/staging/greybus/loopback.c
@@@ -6093,6 -6024,16 +6093,6 @@@ F:     drivers/scsi/hpsa*.[ch
  F:    include/linux/cciss*.h
  F:    include/uapi/linux/cciss*.h
  
 -HEWLETT-PACKARD SMART CISS RAID DRIVER (cciss)
 -M:    Don Brace <[email protected]>
 -L:    [email protected]
 -L:    [email protected]
 -S:    Supported
 -F:    Documentation/blockdev/cciss.txt
 -F:    drivers/block/cciss*
 -F:    include/linux/cciss_ioctl.h
 -F:    include/uapi/linux/cciss_ioctl.h
 -
  HFI1 DRIVER
  M:    Mike Marciniszyn <[email protected]>
  M:    Dennis Dalessandro <[email protected]>
@@@ -6198,14 -6139,6 +6198,14 @@@ S:    Maintaine
  F:    drivers/net/ethernet/hisilicon/
  F:    Documentation/devicetree/bindings/net/hisilicon*.txt
  
 +HISILICON NETWORK SUBSYSTEM 3 DRIVER (HNS3)
 +M:    Yisen Zhuang <[email protected]>
 +M:    Salil Mehta <[email protected]>
 +L:    [email protected]
 +W:    http://www.hisilicon.com
 +S:    Maintained
 +F:    drivers/net/ethernet/hisilicon/hns3/
 +
  HISILICON ROCE DRIVER
  M:    Lijun Ou <[email protected]>
  M:    Wei Hu(Xavier) <[email protected]>
  S:    Maintained
  F:    drivers/input/touchscreen/htcpen.c
  
 +HUAWEI ETHERNET DRIVER
 +M:    Aviad Krawczyk <[email protected]>
 +L:    [email protected]
 +S:    Supported
 +F:    Documentation/networking/hinic.txt
 +F:    drivers/net/ethernet/huawei/hinic/
 +
  HUGETLB FILESYSTEM
  M:    Nadia Yvette Chambers <[email protected]>
  S:    Maintained
@@@ -6323,9 -6249,7 +6323,9 @@@ M:      Haiyang Zhang <[email protected]
  M:    Stephen Hemminger <[email protected]>
  L:    [email protected]
  S:    Maintained
 +F:    Documentation/networking/netvsc.txt
  F:    arch/x86/include/asm/mshyperv.h
 +F:    arch/x86/include/asm/trace/hyperv.h
  F:    arch/x86/include/uapi/asm/hyperv.h
  F:    arch/x86/kernel/cpu/mshyperv.c
  F:    arch/x86/hyperv
@@@ -6337,9 -6261,7 +6337,9 @@@ F:      drivers/net/hyperv
  F:    drivers/scsi/storvsc_drv.c
  F:    drivers/uio/uio_hv_generic.c
  F:    drivers/video/fbdev/hyperv_fb.c
 +F:    net/vmw_vsock/hyperv_transport.c
  F:    include/linux/hyperv.h
 +F:    include/uapi/linux/hyperv.h
  F:    tools/hv/
  F:    Documentation/ABI/stable/sysfs-bus-vmbus
  
  S:    Supported
  F:    drivers/net/ethernet/ibm/ibmvnic.*
  
 +IBM Power Virtual Accelerator Switchboard
 +M:    Sukadev Bhattiprolu
 +L:    [email protected]
 +S:    Supported
 +F:    arch/powerpc/platforms/powernv/vas*
 +F:    arch/powerpc/platforms/powernv/copy-paste.h
 +F:    arch/powerpc/include/asm/vas.h
 +F:    arch/powerpc/include/uapi/asm/vas.h
 +
  IBM Power Virtual Ethernet Device Driver
  M:    Thomas Falcon <[email protected]>
  L:    [email protected]
@@@ -6752,9 -6665,9 +6752,9 @@@ S:      Maintaine
  F:    drivers/mtd/nand/jz4780_*
  
  INOTIFY
 -M:    John McCutchan <[email protected]>
 -M:    Robert Love <[email protected]>
 -M:    Eric Paris <[email protected]>
 +M:    Jan Kara <[email protected]>
 +R:    Amir Goldstein <[email protected]>
 +L:    [email protected]
  S:    Maintained
  F:    Documentation/filesystems/inotify.txt
  F:    fs/notify/inotify/
@@@ -6823,9 -6736,8 +6823,9 @@@ S:      Supporte
  F:    drivers/scsi/isci/
  
  INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets)
 -M:    Daniel Vetter <[email protected]>
  M:    Jani Nikula <[email protected]>
 +M:    Joonas Lahtinen <[email protected]>
 +M:    Rodrigo Vivi <[email protected]>
  L:    [email protected]
  W:    https://01.org/linuxgraphics/
  B:    https://01.org/linuxgraphics/documentation/how-report-bugs
@@@ -7163,7 -7075,9 +7163,7 @@@ W:      http://irda.sourceforge.net
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/sameo/irda-2.6.git
  F:    Documentation/networking/irda.txt
 -F:    drivers/net/irda/
 -F:    include/net/irda/
 -F:    net/irda/
 +F:    drivers/staging/irda/
  
  IRQ DOMAINS (IRQ NUMBER MAPPING LIBRARY)
  M:    Marc Zyngier <[email protected]>
@@@ -7188,6 -7102,7 +7188,6 @@@ M:      Marc Zyngier <[email protected]
  L:    [email protected]
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq/core
 -T:    git git://git.infradead.org/users/jcooper/linux.git irqchip/core
  F:    Documentation/devicetree/bindings/interrupt-controller/
  F:    drivers/irqchip/
  
  W:    http://www.linux-kvm.org
  T:    git git://git.kernel.org/pub/scm/virt/kvm/kvm.git
  S:    Supported
 -F:    Documentation/*/kvm*.txt
  F:    Documentation/virtual/kvm/
 -F:    arch/*/kvm/
 -F:    arch/x86/kernel/kvm.c
 -F:    arch/x86/kernel/kvmclock.c
 -F:    arch/*/include/asm/kvm*
 -F:    include/linux/kvm*
 +F:    include/trace/events/kvm.h
 +F:    include/uapi/asm-generic/kvm*
  F:    include/uapi/linux/kvm*
 -F:    virt/kvm/
 +F:    include/asm-generic/kvm*
 +F:    include/linux/kvm*
 +F:    include/kvm/iodev.h
 +F:    virt/kvm/*
  F:    tools/kvm/
  
 -KERNEL VIRTUAL MACHINE (KVM) FOR AMD-V
 +KERNEL VIRTUAL MACHINE FOR X86 (KVM/x86)
 +M:    Paolo Bonzini <[email protected]>
 +M:    Radim KrÄmář <[email protected]>
 +L:    [email protected]
 +W:    http://www.linux-kvm.org
 +T:    git git://git.kernel.org/pub/scm/virt/kvm/kvm.git
 +S:    Supported
 +F:    arch/x86/kvm/
 +F:    arch/x86/include/uapi/asm/kvm*
 +F:    arch/x86/include/asm/kvm*
 +F:    arch/x86/kernel/kvm.c
 +F:    arch/x86/kernel/kvmclock.c
 +
 +KERNEL VIRTUAL MACHINE FOR AMD-V (KVM/amd)
  M:    Joerg Roedel <[email protected]>
  L:    [email protected]
  W:    http://www.linux-kvm.org/
@@@ -7495,7 -7398,7 +7495,7 @@@ S:      Maintaine
  F:    arch/x86/include/asm/svm.h
  F:    arch/x86/kvm/svm.c
  
 -KERNEL VIRTUAL MACHINE (KVM) FOR ARM
 +KERNEL VIRTUAL MACHINE FOR ARM (KVM/arm)
  M:    Christoffer Dall <[email protected]>
  M:    Marc Zyngier <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
@@@ -7509,16 -7412,14 +7509,16 @@@ F:   arch/arm/kvm
  F:    virt/kvm/arm/
  F:    include/kvm/arm_*
  
 -KERNEL VIRTUAL MACHINE (KVM) FOR POWERPC
 +KERNEL VIRTUAL MACHINE FOR POWERPC (KVM/powerpc)
  M:    Alexander Graf <[email protected]>
  L:    [email protected]
  W:    http://www.linux-kvm.org/
  T:    git git://github.com/agraf/linux-2.6.git
  S:    Supported
 +F:    arch/powerpc/include/uapi/asm/kvm*
  F:    arch/powerpc/include/asm/kvm*
  F:    arch/powerpc/kvm/
 +F:    arch/powerpc/kernel/kvm*
  
  KERNEL VIRTUAL MACHINE FOR ARM64 (KVM/arm64)
  M:    Christoffer Dall <[email protected]>
@@@ -7545,8 -7446,7 +7545,8 @@@ L:      [email protected]
  W:    http://www.ibm.com/developerworks/linux/linux390/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kvms390/linux.git
  S:    Supported
 -F:    Documentation/s390/kvm.txt
 +F:    arch/s390/include/uapi/asm/kvm*
 +F:    arch/s390/include/asm/gmap.h
  F:    arch/s390/include/asm/kvm*
  F:    arch/s390/kvm/
  F:    arch/s390/mm/gmap.c
@@@ -7732,6 -7632,17 +7732,6 @@@ T:     git git://linuxtv.org/mkrufky/tuners
  S:    Maintained
  F:    drivers/media/dvb-frontends/lgdt3305.*
  
 -LGUEST
 -M:    Rusty Russell <[email protected]>
 -L:    [email protected]
 -W:    http://lguest.ozlabs.org/
 -S:    Odd Fixes
 -F:    arch/x86/include/asm/lguest*.h
 -F:    arch/x86/lguest/
 -F:    drivers/lguest/
 -F:    include/linux/lguest*.h
 -F:    tools/lguest/
 -
  LIBATA PATA ARASAN COMPACT FLASH CONTROLLER
  M:    Viresh Kumar <[email protected]>
  L:    [email protected]
@@@ -7867,7 -7778,6 +7867,7 @@@ F:      drivers/pci/hotplug/rpa
  F:    drivers/rtc/rtc-opal.c
  F:    drivers/scsi/ibmvscsi/
  F:    drivers/tty/hvc/hvc_opal.c
 +F:    drivers/watchdog/wdrtas.c
  F:    tools/testing/selftests/powerpc
  N:    /pmac
  N:    powermac
@@@ -8425,14 -8335,6 +8425,14 @@@ T:    git git://linuxtv.org/media_tree.gi
  S:    Supported
  F:    drivers/media/dvb-frontends/lnbh25*
  
 +MEDIA DRIVERS FOR MXL5XX TUNER DEMODULATORS
 +M:    Daniel Scheller <[email protected]>
 +L:    [email protected]
 +W:    https://linuxtv.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Maintained
 +F:    drivers/media/dvb-frontends/mxl5xx*
 +
  MEDIA DRIVERS FOR NETUP PCI UNIVERSAL DVB devices
  M:    Sergey Kozlov <[email protected]>
  M:    Abylay Ospan <[email protected]>
@@@ -8489,30 -8391,6 +8489,30 @@@ S:    Supporte
  F:    Documentation/devicetree/bindings/media/renesas,vsp1.txt
  F:    drivers/media/platform/vsp1/
  
 +MEDIA DRIVERS FOR ST STV0910 DEMODULATOR ICs
 +M:    Daniel Scheller <[email protected]>
 +L:    [email protected]
 +W:    https://linuxtv.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Maintained
 +F:    drivers/media/dvb-frontends/stv0910*
 +
 +MEDIA DRIVERS FOR ST STV6111 TUNER ICs
 +M:    Daniel Scheller <[email protected]>
 +L:    [email protected]
 +W:    https://linuxtv.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Maintained
 +F:    drivers/media/dvb-frontends/stv6111*
 +
 +MEDIA DRIVERS FOR DIGITAL DEVICES PCIE DEVICES
 +M:    Daniel Scheller <[email protected]>
 +L:    [email protected]
 +W:    https://linuxtv.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Maintained
 +F:    drivers/media/pci/ddbridge/*
 +
  MEDIA INPUT INFRASTRUCTURE (V4L/DVB)
  M:    Mauro Carvalho Chehab <[email protected]>
  M:    Mauro Carvalho Chehab <[email protected]>
@@@ -8538,9 -8416,7 +8538,9 @@@ F:      include/uapi/linux/uvcvideo.
  
  MEDIATEK ETHERNET DRIVER
  M:    Felix Fietkau <[email protected]>
 -M:    John Crispin <[email protected]>
 +M:    John Crispin <[email protected]>
 +M:    Sean Wang <[email protected]>
 +M:    Nelson Chang <[email protected]>
  L:    [email protected]
  S:    Maintained
  F:    drivers/net/ethernet/mediatek/
  S:    Maintained
  F:    drivers/net/wireless/mediatek/mt7601u/
  
 +MEDIATEK CIR DRIVER
 +M:    Sean Wang <[email protected]>
 +S:    Maintained
 +F:    drivers/media/rc/mtk-cir.c
 +
  MEDIATEK RANDOM NUMBER GENERATOR SUPPORT
  M:    Sean Wang <[email protected]>
  S:    Maintained
  F:    drivers/char/hw_random/mtk-rng.c
  
 +MEDIATEK USB3 DRD IP DRIVER
 +M:    Chunfeng Yun <[email protected]>
 +L:    [email protected] (moderated for non-subscribers)
 +L:    [email protected] (moderated for non-subscribers)
 +L:    [email protected] (moderated for non-subscribers)
 +S:    Maintained
 +F:    drivers/usb/mtu3/
 +
  MEGACHIPS STDPXXXX-GE-B850V3-FW LVDS/DP++ BRIDGES
  M:    Peter Senna Tschudin <[email protected]>
  M:    Martin Donnelly <[email protected]>
@@@ -8758,7 -8621,7 +8758,7 @@@ M:      Mathieu Desnoyers <mathieu.desnoyers
  M:    "Paul E. McKenney" <[email protected]>
  L:    [email protected]
  S:    Supported
 -F:    kernel/membarrier.c
 +F:    kernel/sched/membarrier.c
  F:    include/uapi/linux/membarrier.h
  
  MEMORY MANAGEMENT
@@@ -8812,16 -8675,6 +8812,16 @@@ F:    drivers/leds/leds-menf21bmc.
  F:    drivers/hwmon/menf21bmc_hwmon.c
  F:    Documentation/hwmon/menf21bmc
  
 +MESON AO CEC DRIVER FOR AMLOGIC SOCS
 +M:    Neil Armstrong <[email protected]>
 +L:    [email protected]
 +L:    [email protected]
 +W:    http://linux-meson.com/
 +S:    Supported
 +F:    drivers/media/platform/meson/ao-cec.c
 +F:    Documentation/devicetree/bindings/media/meson-ao-cec.txt
 +T:    git git://linuxtv.org/media_tree.git
 +
  METAG ARCHITECTURE
  M:    James Hogan <[email protected]>
  L:    [email protected]
@@@ -8858,12 -8711,6 +8858,12 @@@ F:    drivers/dma/at_hdmac.
  F:    drivers/dma/at_hdmac_regs.h
  F:    include/linux/platform_data/dma-atmel.h
  
 +MICROCHIP / ATMEL ECC DRIVER
 +M:    Tudor Ambarus <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/crypto/atmel-ecc.*
 +
  MICROCHIP / ATMEL ISC DRIVER
  M:    Songjun Wu <[email protected]>
  L:    [email protected]
@@@ -9611,7 -9458,6 +9611,7 @@@ M:      Srinivas Kandagatla <srinivas.kandag
  S:    Maintained
  F:    drivers/nvmem/
  F:    Documentation/devicetree/bindings/nvmem/
 +F:    Documentation/ABI/stable/sysfs-bus-nvmem
  F:    include/linux/nvmem-consumer.h
  F:    include/linux/nvmem-provider.h
  
@@@ -9855,7 -9701,7 +9855,7 @@@ S:      Maintaine
  F:    drivers/media/i2c/ov5640.c
  
  OMNIVISION OV5647 SENSOR DRIVER
 -M:    Ramiro Oliveira <roliveir@synopsys.com>
 +M:    Luis Oliveira <lolivei@synopsys.com>
  L:    [email protected]
  T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
@@@ -10244,6 -10090,7 +10244,7 @@@ F:   drivers/pci/dwc/*imx6
  
  PCI DRIVER FOR INTEL VOLUME MANAGEMENT DEVICE (VMD)
  M:    Keith Busch <[email protected]>
+ M:    Jonathan Derrick <[email protected]>
  L:    [email protected]
  S:    Supported
  F:    drivers/pci/host/vmd.c
  S:    Maintained
  F:    drivers/pci/dwc/pci-exynos.c
  
- PCI DRIVER FOR SYNOPSIS DESIGNWARE
+ PCI DRIVER FOR SYNOPSYS DESIGNWARE
  M:    Jingoo Han <[email protected]>
  M:    Joao Pinto <[email protected]>
  L:    [email protected]
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl.git
  S:    Maintained
  F:    Documentation/devicetree/bindings/pinctrl/
 -F:    Documentation/pinctrl.txt
 +F:    Documentation/driver-api/pinctl.rst
  F:    drivers/pinctrl/
  F:    include/linux/pinctrl/
  
  T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    drivers/media/usb/pulse8-cec/*
 +F:    Documentation/media/cec-drivers/pulse8-cec.rst
  
  PVRUSB2 VIDEO4LINUX DRIVER
  M:    Mike Isely <[email protected]>
@@@ -10881,12 -10727,6 +10882,12 @@@ F: Documentation/devicetree/bindings/hw
  F:    Documentation/hwmon/pwm-fan
  F:    drivers/hwmon/pwm-fan.c
  
 +PWM IR Transmitter
 +M:    Sean Young <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/media/rc/pwm-ir-tx.c
 +
  PWM SUBSYSTEM
  M:    Thierry Reding <[email protected]>
  L:    [email protected]
@@@ -11081,14 -10921,6 +11082,14 @@@ W: http://wireless.kernel.org/en/users/
  S:    Supported
  F:    drivers/net/wireless/ath/ath9k/
  
 +QUALCOMM CAMERA SUBSYSTEM DRIVER
 +M:    Todor Tomov <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/media/qcom,camss.txt
 +F:    Documentation/media/v4l-drivers/qcom_camss.rst
 +F:    drivers/media/platform/qcom/camss-8x16/
 +
  QUALCOMM EMAC GIGABIT ETHERNET DRIVER
  M:    Timur Tabi <[email protected]>
  L:    [email protected]
@@@ -11272,7 -11104,7 +11273,7 @@@ M:   Fenghua Yu <[email protected]
  L:    [email protected]
  S:    Supported
  F:    arch/x86/kernel/cpu/intel_rdt*
 -F:    arch/x86/include/asm/intel_rdt*
 +F:    arch/x86/include/asm/intel_rdt_sched.h
  F:    Documentation/x86/intel_rdt*
  
  READ-COPY UPDATE (RCU)
  S:    Odd Fixes
  F:    drivers/tty/serial/rp2.*
  
 +ROHM MULTIFUNCTION BD9571MWV-M PMIC DEVICE DRIVERS
 +M:    Marek Vasut <[email protected]>
 +L:    [email protected]
 +L:    [email protected]
 +S:    Supported
 +F:    drivers/mfd/bd9571mwv.c
 +F:    drivers/regulator/bd9571mwv-regulator.c
 +F:    drivers/gpio/gpio-bd9571mwv.c
 +F:    include/linux/mfd/bd9571mwv.h
 +F:    Documentation/devicetree/bindings/mfd/bd9571mwv.txt
 +
  ROSE NETWORK LAYER
  M:    Ralf Baechle <[email protected]>
  L:    [email protected]
@@@ -11614,7 -11435,6 +11615,7 @@@ F:   drivers/s390/crypto
  
  S390 ZFCP DRIVER
  M:    Steffen Maier <[email protected]>
 +M:    Benjamin Block <[email protected]>
  L:    [email protected]
  W:    http://www.ibm.com/developerworks/linux/linux390/
  S:    Supported
@@@ -12663,12 -12483,6 +12664,12 @@@ M: Ion Badulescu <[email protected]
  S:    Odd Fixes
  F:    drivers/net/ethernet/adaptec/starfire*
  
 +STEC S1220 SKD DRIVER
 +M:    Bart Van Assche <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/block/skd*[ch]
 +
  STI CEC DRIVER
  M:    Benjamin Gaignard <[email protected]>
  S:    Maintained
@@@ -13172,11 -12986,6 +13173,11 @@@ M: Yehezkel Bernat <yehezkel.bernat@int
  S:    Maintained
  F:    drivers/thunderbolt/
  
 +THUNDERX GPIO DRIVER
 +M:    David Daney <[email protected]>
 +S:    Maintained
 +F:    drivers/gpio/gpio-thunderx.c
 +
  TI AM437X VPFE DRIVER
  M:    "Lad, Prabhakar" <[email protected]>
  L:    [email protected]
@@@ -13701,7 -13510,8 +13702,7 @@@ F:   Documentation/scsi/ufs.tx
  F:    drivers/scsi/ufs/
  
  UNIVERSAL FLASH STORAGE HOST CONTROLLER DRIVER DWC HOOKS
 -M:    Manjunath M Bettegowda <[email protected]>
 -M:    Prabu Thangamuthu <[email protected]>
 +M:    Joao Pinto <[email protected]>
  L:    [email protected]
  S:    Supported
  F:    drivers/scsi/ufs/*dwc*
@@@ -14187,7 -13997,6 +14188,7 @@@ F:   drivers/block/virtio_blk.
  F:    include/linux/virtio*.h
  F:    include/uapi/linux/virtio_*.h
  F:    drivers/crypto/virtio/
 +F:    mm/balloon_compaction.c
  
  VIRTIO CRYPTO DRIVER
  M:    Gonglei <[email protected]>
@@@ -14402,12 -14211,6 +14403,12 @@@ F: drivers/watchdog
  F:    include/linux/watchdog.h
  F:    include/uapi/linux/watchdog.h
  
 +WHISKEYCOVE PMIC GPIO DRIVER
 +M:    Kuppuswamy Sathyanarayanan <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/gpio/gpio-wcove.c
 +
  WIIMOTE HID DRIVER
  M:    David Herrmann <[email protected]>
  L:    [email protected]
diff --combined arch/alpha/kernel/pci.c
index 8322df174bbfb84a4619123b6774d0cce8935dbf,d558287c6133232e6830b5218337a1c5b30ac5ac..564114eb85e143f384d1b814cc29df48150ed933
@@@ -312,8 -312,9 +312,9 @@@ common_init_pci(void
  {
        struct pci_controller *hose;
        struct list_head resources;
+       struct pci_host_bridge *bridge;
        struct pci_bus *bus;
-       int next_busno;
+       int ret, next_busno;
        int need_domain_info = 0;
        u32 pci_mem_end;
        u32 sg_base;
                pci_add_resource_offset(&resources, hose->mem_space,
                                        hose->mem_space->start);
  
-               bus = pci_scan_root_bus(NULL, next_busno, alpha_mv.pci_ops,
-                                       hose, &resources);
-               if (!bus)
+               bridge = pci_alloc_host_bridge(0);
+               if (!bridge)
                        continue;
-               hose->bus = bus;
+               list_splice_init(&resources, &bridge->windows);
+               bridge->dev.parent = NULL;
+               bridge->sysdata = hose;
+               bridge->busnr = next_busno;
+               bridge->ops = alpha_mv.pci_ops;
+               bridge->swizzle_irq = alpha_mv.pci_swizzle;
+               bridge->map_irq = alpha_mv.pci_map_irq;
+               ret = pci_scan_root_bus_bridge(bridge);
+               if (ret) {
+                       pci_free_host_bridge(bridge);
+                       continue;
+               }
+               bus = hose->bus = bridge->bus;
                hose->need_domain_info = need_domain_info;
                next_busno = bus->busn_res.end + 1;
                /* Don't allow 8-bit bus number overflow inside the hose -
        pcibios_claim_console_setup();
  
        pci_assign_unassigned_resources();
-       pci_fixup_irqs(alpha_mv.pci_swizzle, alpha_mv.pci_map_irq);
        for (hose = hose_head; hose; hose = hose->next) {
                bus = hose->bus;
                if (bus)
        }
  }
  
  struct pci_controller * __init
  alloc_pci_controller(void)
  {
  struct resource * __init
  alloc_resource(void)
  {
 -      struct resource *res;
 -
 -      res = alloc_bootmem(sizeof(*res));
 -
 -      return res;
 +      return alloc_bootmem(sizeof(struct resource));
  }
  
  
index 180f4755ca66a64a703cd8a3f7f1457f812faa5b,2b32c454a22e4989fa65ee623bb3223a25f97be0..ae79e8638d50ba18410bfeb0cdcc227b5b481dc4
@@@ -508,8 -508,8 +508,8 @@@ void pci_process_bridge_OF_ranges(struc
        struct of_pci_range range;
        struct of_pci_range_parser parser;
  
 -      pr_info("PCI host bridge %s %s ranges:\n",
 -             dev->full_name, primary ? "(primary)" : "");
 +      pr_info("PCI host bridge %pOF %s ranges:\n",
 +             dev, primary ? "(primary)" : "");
  
        /* Check for ranges property */
        if (of_pci_range_parser_init(&parser, dev))
@@@ -678,144 -678,6 +678,6 @@@ static void pcibios_fixup_resources(str
  }
  DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pcibios_fixup_resources);
  
- /* This function tries to figure out if a bridge resource has been initialized
-  * by the firmware or not. It doesn't have to be absolutely bullet proof, but
-  * things go more smoothly when it gets it right. It should covers cases such
-  * as Apple "closed" bridge resources and bare-metal pSeries unassigned bridges
-  */
- static int pcibios_uninitialized_bridge_resource(struct pci_bus *bus,
-                                                struct resource *res)
- {
-       struct pci_controller *hose = pci_bus_to_host(bus);
-       struct pci_dev *dev = bus->self;
-       resource_size_t offset;
-       u16 command;
-       int i;
-       /* Job is a bit different between memory and IO */
-       if (res->flags & IORESOURCE_MEM) {
-               /* If the BAR is non-0 (res != pci_mem_offset) then it's
-                * probably been initialized by somebody
-                */
-               if (res->start != hose->pci_mem_offset)
-                       return 0;
-               /* The BAR is 0, let's check if memory decoding is enabled on
-                * the bridge. If not, we consider it unassigned
-                */
-               pci_read_config_word(dev, PCI_COMMAND, &command);
-               if ((command & PCI_COMMAND_MEMORY) == 0)
-                       return 1;
-               /* Memory decoding is enabled and the BAR is 0. If any of
-                * the bridge resources covers that starting address (0 then
-                * it's good enough for us for memory
-                */
-               for (i = 0; i < 3; i++) {
-                       if ((hose->mem_resources[i].flags & IORESOURCE_MEM) &&
-                          hose->mem_resources[i].start == hose->pci_mem_offset)
-                               return 0;
-               }
-               /* Well, it starts at 0 and we know it will collide so we may as
-                * well consider it as unassigned. That covers the Apple case.
-                */
-               return 1;
-       } else {
-               /* If the BAR is non-0, then we consider it assigned */
-               offset = (unsigned long)hose->io_base_virt - _IO_BASE;
-               if (((res->start - offset) & 0xfffffffful) != 0)
-                       return 0;
-               /* Here, we are a bit different than memory as typically IO
-                * space starting at low addresses -is- valid. What we do
-                * instead if that we consider as unassigned anything that
-                * doesn't have IO enabled in the PCI command register,
-                * and that's it.
-                */
-               pci_read_config_word(dev, PCI_COMMAND, &command);
-               if (command & PCI_COMMAND_IO)
-                       return 0;
-               /* It's starting at 0 and IO is disabled in the bridge, consider
-                * it unassigned
-                */
-               return 1;
-       }
- }
- /* Fixup resources of a PCI<->PCI bridge */
- static void pcibios_fixup_bridge(struct pci_bus *bus)
- {
-       struct resource *res;
-       int i;
-       struct pci_dev *dev = bus->self;
-       pci_bus_for_each_resource(bus, res, i) {
-               if (!res)
-                       continue;
-               if (!res->flags)
-                       continue;
-               if (i >= 3 && bus->self->transparent)
-                       continue;
-               pr_debug("PCI:%s Bus rsrc %d %016llx-%016llx [%x] fixup...\n",
-                        pci_name(dev), i,
-                        (unsigned long long)res->start,
-                        (unsigned long long)res->end,
-                        (unsigned int)res->flags);
-               /* Try to detect uninitialized P2P bridge resources,
-                * and clear them out so they get re-assigned later
-                */
-               if (pcibios_uninitialized_bridge_resource(bus, res)) {
-                       res->flags = 0;
-                       pr_debug("PCI:%s            (unassigned)\n",
-                                                               pci_name(dev));
-               } else {
-                       pr_debug("PCI:%s            %016llx-%016llx\n",
-                                pci_name(dev),
-                                (unsigned long long)res->start,
-                                (unsigned long long)res->end);
-               }
-       }
- }
- void pcibios_setup_bus_self(struct pci_bus *bus)
- {
-       /* Fix up the bus resources for P2P bridges */
-       if (bus->self != NULL)
-               pcibios_fixup_bridge(bus);
- }
- void pcibios_setup_bus_devices(struct pci_bus *bus)
- {
-       struct pci_dev *dev;
-       pr_debug("PCI: Fixup bus devices %d (%s)\n",
-                bus->number, bus->self ? pci_name(bus->self) : "PHB");
-       list_for_each_entry(dev, &bus->devices, bus_list) {
-               /* Setup OF node pointer in archdata */
-               dev->dev.of_node = pci_device_to_OF_node(dev);
-               /* Fixup NUMA node as it may not be setup yet by the generic
-                * code and is needed by the DMA init
-                */
-               set_dev_node(&dev->dev, pcibus_to_node(dev->bus));
-               /* Read default IRQs and fixup if necessary */
-               dev->irq = of_irq_parse_and_map_pci(dev, 0, 0);
-       }
- }
- void pcibios_fixup_bus(struct pci_bus *bus)
- {
-       /* nothing to do */
- }
- EXPORT_SYMBOL(pcibios_fixup_bus);
  /*
   * We need to avoid collisions with `mirrored' VGA ports
   * and other strange ISA hardware, so we always want the
   * but we want to try to avoid allocating at 0x2900-0x2bff
   * which might have be mirrored at 0x0100-0x03ff..
   */
- resource_size_t pcibios_align_resource(void *data, const struct resource *res,
-                               resource_size_t size, resource_size_t align)
- {
-       return res->start;
- }
- EXPORT_SYMBOL(pcibios_align_resource);
  int pcibios_add_device(struct pci_dev *dev)
  {
        dev->irq = of_irq_parse_and_map_pci(dev, 0, 0);
@@@ -1219,8 -1074,8 +1074,8 @@@ static void pcibios_setup_phb_resources
  
        if (!res->flags) {
                pr_warn("PCI: I/O resource not set for host ");
 -              pr_cont("bridge %s (domain %d)\n",
 -                      hose->dn->full_name, hose->global_number);
 +              pr_cont("bridge %pOF (domain %d)\n",
 +                      hose->dn, hose->global_number);
                /* Workaround for lack of IO resource only on 32-bit */
                res->start = (unsigned long)hose->io_base_virt - isa_io_base;
                res->end = res->start + IO_SPACE_LIMIT;
                        if (i > 0)
                                continue;
                        pr_err("PCI: Memory resource 0 not set for ");
 -                      pr_cont("host bridge %s (domain %d)\n",
 -                              hose->dn->full_name, hose->global_number);
 +                      pr_cont("host bridge %pOF (domain %d)\n",
 +                              hose->dn, hose->global_number);
  
                        /* Workaround for lack of MEM resource only on 32-bit */
                        res->start = hose->pci_mem_offset;
@@@ -1270,7 -1125,7 +1125,7 @@@ static void pcibios_scan_phb(struct pci
        struct pci_bus *bus;
        struct device_node *node = hose->dn;
  
 -      pr_debug("PCI: Scanning PHB %s\n", of_node_full_name(node));
 +      pr_debug("PCI: Scanning PHB %pOF\n", node);
  
        pcibios_setup_phb_resources(hose, &resources);
  
diff --combined arch/sparc/kernel/pcic.c
index 732af9a9f6ddef510e39da7d6eca5547e210296e,e038e343f2c1e5df71f2e5cba47f822a48b6ce84..4a133c052af89cc7cbb2118bf16e60a40d428ec4
@@@ -602,7 -602,7 +602,7 @@@ void pcibios_fixup_bus(struct pci_bus *
  {
        struct pci_dev *dev;
        int i, has_io, has_mem;
 -      unsigned int cmd;
 +      unsigned int cmd = 0;
        struct linux_pcic *pcic;
        /* struct linux_pbm_info* pbm = &pcic->pbm; */
        int node;
@@@ -746,12 -746,6 +746,6 @@@ static void watchdog_reset() 
  }
  #endif
  
- resource_size_t pcibios_align_resource(void *data, const struct resource *res,
-                               resource_size_t size, resource_size_t align)
- {
-       return res->start;
- }
  int pcibios_enable_device(struct pci_dev *pdev, int mask)
  {
        return 0;
index 3e8636f1220ea9bdbcf668bac193e21cee408063,2800a6ee8cc96a407ce0c80d57d7d32ca73eefff..bb05fc50ee2e8586f5667d846de03b188f951c55
@@@ -901,6 -901,13 +901,13 @@@ static struct intel_iommu *device_to_io
                struct pci_dev *pf_pdev;
  
                pdev = to_pci_dev(dev);
+ #ifdef CONFIG_X86
+               /* VMD child devices currently cannot be handled individually */
+               if (is_vmd(pdev->bus))
+                       return NULL;
+ #endif
                /* VFs aren't listed in scope tables; we need to look up
                 * the PF instead to find the IOMMU. */
                pf_pdev = pci_physfn(pdev);
@@@ -4736,9 -4743,7 +4743,9 @@@ static void intel_disable_iommus(void
  
  static inline struct intel_iommu *dev_to_intel_iommu(struct device *dev)
  {
 -      return container_of(dev, struct intel_iommu, iommu.dev);
 +      struct iommu_device *iommu_dev = dev_to_iommu_device(dev);
 +
 +      return container_of(iommu_dev, struct intel_iommu, iommu);
  }
  
  static ssize_t intel_iommu_show_version(struct device *dev,
index aba041438566944c7be46dcd21fdc2b0476a87f4,334c9a7b899199434eb4e423ee18ac763e3913d7..0fe3ea164ee53321b2a23aded63eeac6c68684fa
@@@ -50,6 -50,7 +50,7 @@@
  #include <linux/kernel.h>
  #include <linux/module.h>
  #include <linux/pci.h>
+ #include <linux/delay.h>
  #include <linux/semaphore.h>
  #include <linux/irqdomain.h>
  #include <asm/irqdomain.h>
@@@ -562,6 -563,52 +563,6 @@@ static void put_pcichild(struct hv_pci_
  static void get_hvpcibus(struct hv_pcibus_device *hv_pcibus);
  static void put_hvpcibus(struct hv_pcibus_device *hv_pcibus);
  
 -
 -/*
 - * Temporary CPU to vCPU mapping to address transitioning
 - * vmbus_cpu_number_to_vp_number() being migrated to
 - * hv_cpu_number_to_vp_number() in a separate patch. Once that patch
 - * has been picked up in the main line, remove this code here and use
 - * the official code.
 - */
 -static struct hv_tmpcpumap
 -{
 -      bool initialized;
 -      u32 vp_index[NR_CPUS];
 -} hv_tmpcpumap;
 -
 -static void hv_tmpcpumap_init_cpu(void *_unused)
 -{
 -      int cpu = smp_processor_id();
 -      u64 vp_index;
 -
 -      hv_get_vp_index(vp_index);
 -
 -      hv_tmpcpumap.vp_index[cpu] = vp_index;
 -}
 -
 -static void hv_tmpcpumap_init(void)
 -{
 -      if (hv_tmpcpumap.initialized)
 -              return;
 -
 -      memset(hv_tmpcpumap.vp_index, -1, sizeof(hv_tmpcpumap.vp_index));
 -      on_each_cpu(hv_tmpcpumap_init_cpu, NULL, true);
 -      hv_tmpcpumap.initialized = true;
 -}
 -
 -/**
 - * hv_tmp_cpu_nr_to_vp_nr() - Convert Linux CPU nr to Hyper-V vCPU nr
 - *
 - * Remove once vmbus_cpu_number_to_vp_number() has been converted to
 - * hv_cpu_number_to_vp_number() and replace callers appropriately.
 - */
 -static u32 hv_tmp_cpu_nr_to_vp_nr(int cpu)
 -{
 -      return hv_tmpcpumap.vp_index[cpu];
 -}
 -
 -
  /**
   * devfn_to_wslot() - Convert from Linux PCI slot to Windows
   * @devfn:    The Linux representation of PCI slot
@@@ -925,7 -972,7 +926,7 @@@ static void hv_irq_unmask(struct irq_da
                var_size = 1 + HV_VP_SET_BANK_COUNT_MAX;
  
                for_each_cpu_and(cpu, dest, cpu_online_mask) {
 -                      cpu_vmbus = hv_tmp_cpu_nr_to_vp_nr(cpu);
 +                      cpu_vmbus = hv_cpu_number_to_vp_number(cpu);
  
                        if (cpu_vmbus >= HV_VP_SET_BANK_COUNT_MAX * 64) {
                                dev_err(&hbus->hdev->device,
        } else {
                for_each_cpu_and(cpu, dest, cpu_online_mask) {
                        params->int_target.vp_mask |=
 -                              (1ULL << hv_tmp_cpu_nr_to_vp_nr(cpu));
 +                              (1ULL << hv_cpu_number_to_vp_number(cpu));
                }
        }
  
@@@ -1017,7 -1064,7 +1018,7 @@@ static u32 hv_compose_msi_req_v2
         */
        cpu = cpumask_first_and(affinity, cpu_online_mask);
        int_pkt->int_desc.processor_array[0] =
 -              hv_tmp_cpu_nr_to_vp_nr(cpu);
 +              hv_cpu_number_to_vp_number(cpu);
        int_pkt->int_desc.processor_count = 1;
  
        return sizeof(*int_pkt);
@@@ -1113,7 -1160,12 +1114,12 @@@ static void hv_compose_msi_msg(struct i
                goto free_int_desc;
        }
  
-       wait_for_completion(&comp.comp_pkt.host_event);
+       /*
+        * Since this function is called with IRQ locks held, can't
+        * do normal wait for completion; instead poll.
+        */
+       while (!try_wait_for_completion(&comp.comp_pkt.host_event))
+               udelay(100);
  
        if (comp.comp_pkt.completion_status < 0) {
                dev_err(&hbus->hdev->device,
@@@ -2444,6 -2496,8 +2450,6 @@@ static int hv_pci_probe(struct hv_devic
                return -ENOMEM;
        hbus->state = hv_pcibus_init;
  
 -      hv_tmpcpumap_init();
 -
        /*
         * The PCI bus "domain" is what is called "segment" in ACPI and
         * other specs.  Pull it from the instance ID, to get something
diff --combined drivers/pci/msi.c
index 2225afc1cbbb76a39c516230a58c8e8752b568f9,2f0dd02d78b7ef29fc2e115790785a0bfee59c13..496ed9130600e90c2a78bf1dd815615db7594059
@@@ -538,9 -538,12 +538,9 @@@ msi_setup_entry(struct pci_dev *dev, in
        struct msi_desc *entry;
        u16 control;
  
 -      if (affd) {
 +      if (affd)
                masks = irq_create_affinity_masks(nvec, affd);
 -              if (!masks)
 -                      dev_err(&dev->dev, "can't allocate MSI affinity masks for %d vectors\n",
 -                              nvec);
 -      }
 +
  
        /* MSI Entry Initialization */
        entry = alloc_msi_entry(&dev->dev, nvec, masks);
@@@ -676,8 -679,12 +676,8 @@@ static int msix_setup_entries(struct pc
        struct msi_desc *entry;
        int ret, i;
  
 -      if (affd) {
 +      if (affd)
                masks = irq_create_affinity_masks(nvec, affd);
 -              if (!masks)
 -                      dev_err(&dev->dev, "can't allocate MSI-X affinity masks for %d vectors\n",
 -                              nvec);
 -      }
  
        for (i = 0, curmsk = masks; i < nvec; i++) {
                entry = alloc_msi_entry(&dev->dev, 1, curmsk);
@@@ -1451,13 -1458,30 +1451,30 @@@ struct irq_domain *pci_msi_create_irq_d
  }
  EXPORT_SYMBOL_GPL(pci_msi_create_irq_domain);
  
+ /*
+  * Users of the generic MSI infrastructure expect a device to have a single ID,
+  * so with DMA aliases we have to pick the least-worst compromise. Devices with
+  * DMA phantom functions tend to still emit MSIs from the real function number,
+  * so we ignore those and only consider topological aliases where either the
+  * alias device or RID appears on a different bus number. We also make the
+  * reasonable assumption that bridges are walked in an upstream direction (so
+  * the last one seen wins), and the much braver assumption that the most likely
+  * case is that of PCI->PCIe so we should always use the alias RID. This echoes
+  * the logic from intel_irq_remapping's set_msi_sid(), which presumably works
+  * well enough in practice; in the face of the horrible PCIe<->PCI-X conditions
+  * for taking ownership all we can really do is close our eyes and hope...
+  */
  static int get_msi_id_cb(struct pci_dev *pdev, u16 alias, void *data)
  {
        u32 *pa = data;
+       u8 bus = PCI_BUS_NUM(*pa);
+       if (pdev->bus->number != bus || PCI_BUS_NUM(alias) != bus)
+               *pa = alias;
  
-       *pa = alias;
        return 0;
  }
  /**
   * pci_msi_domain_get_msi_rid - Get the MSI requester id (RID)
   * @domain:   The interrupt domain
  u32 pci_msi_domain_get_msi_rid(struct irq_domain *domain, struct pci_dev *pdev)
  {
        struct device_node *of_node;
-       u32 rid = 0;
+       u32 rid = PCI_DEVID(pdev->bus->number, pdev->devfn);
  
        pci_for_each_dma_alias(pdev, get_msi_id_cb, &rid);
  
   * @pdev:     The PCI device
   *
   * Use the firmware data to find a device-specific MSI domain
-  * (i.e. not one that is ste as a default).
+  * (i.e. not one that is set as a default).
   *
-  * Returns: The coresponding MSI domain or NULL if none has been found.
+  * Returns: The corresponding MSI domain or NULL if none has been found.
   */
  struct irq_domain *pci_msi_get_device_domain(struct pci_dev *pdev)
  {
        struct irq_domain *dom;
-       u32 rid = 0;
+       u32 rid = PCI_DEVID(pdev->bus->number, pdev->devfn);
  
        pci_for_each_dma_alias(pdev, get_msi_id_cb, &rid);
        dom = of_msi_map_get_device_domain(&pdev->dev, rid);
diff --combined drivers/pci/pci.c
index 68e3b2b0da93e0e9ac0b9cddc08dbd11b3096829,2870cd36e3e0a91a7434751dcccdae7cbb43fba3..b0002daa50f3bb98dd0c0e40488e033f00a2ee0a
@@@ -52,6 -52,7 +52,7 @@@ static void pci_pme_list_scan(struct wo
  static LIST_HEAD(pci_pme_list);
  static DEFINE_MUTEX(pci_pme_list_mutex);
  static DECLARE_DELAYED_WORK(pci_pme_work, pci_pme_list_scan);
+ static DEFINE_MUTEX(pci_bridge_mutex);
  
  struct pci_pme_device {
        struct list_head list;
@@@ -514,7 -515,7 +515,7 @@@ EXPORT_SYMBOL(pci_find_resource)
   */
  struct pci_dev *pci_find_pcie_root_port(struct pci_dev *dev)
  {
 -      struct pci_dev *bridge, *highest_pcie_bridge = NULL;
 +      struct pci_dev *bridge, *highest_pcie_bridge = dev;
  
        bridge = pci_upstream_bridge(dev);
        while (bridge && pci_is_pcie(bridge)) {
@@@ -892,7 -893,9 +893,9 @@@ EXPORT_SYMBOL_GPL(__pci_complete_power_
   * -EINVAL if the requested state is invalid.
   * -EIO if device does not support PCI PM or its PM capabilities register has a
   * wrong version, or device doesn't support the requested state.
+  * 0 if the transition is to D1 or D2 but D1 and D2 are not supported.
   * 0 if device already is in the requested state.
+  * 0 if the transition is to D3 but D3 is not supported.
   * 0 if device's power state has been successfully changed.
   */
  int pci_set_power_state(struct pci_dev *dev, pci_power_t state)
@@@ -1348,10 -1351,16 +1351,16 @@@ static void pci_enable_bridge(struct pc
        if (bridge)
                pci_enable_bridge(bridge);
  
+       /*
+        * Hold pci_bridge_mutex to prevent a race when enabling two
+        * devices below the bridge simultaneously.  The race may cause a
+        * PCI_COMMAND_MEMORY update to be lost (see changelog).
+        */
+       mutex_lock(&pci_bridge_mutex);
        if (pci_is_enabled(dev)) {
                if (!dev->is_busmaster)
                        pci_set_master(dev);
-               return;
+               goto end;
        }
  
        retval = pci_enable_device(dev);
                dev_err(&dev->dev, "Error enabling bridge (%d), continuing\n",
                        retval);
        pci_set_master(dev);
+ end:
+       mutex_unlock(&pci_bridge_mutex);
  }
  
  static int pci_enable_device_flags(struct pci_dev *dev, unsigned long flags)
                return 0;               /* already enabled */
  
        bridge = pci_upstream_bridge(dev);
-       if (bridge)
+       if (bridge && !pci_is_enabled(bridge))
                pci_enable_bridge(bridge);
  
        /* only skip sriov related */
@@@ -1912,13 -1923,6 +1923,13 @@@ int pci_enable_wake(struct pci_dev *dev
  {
        int ret = 0;
  
 +      /*
 +       * Bridges can only signal wakeup on behalf of subordinate devices,
 +       * but that is set up elsewhere, so skip them.
 +       */
 +      if (pci_has_subordinate(dev))
 +              return 0;
 +
        /* Don't do the same thing twice in a row for one device. */
        if (!!enable == !!dev->wakeup_prepared)
                return 0;
@@@ -3818,27 -3822,49 +3829,49 @@@ int pci_wait_for_pending_transaction(st
  }
  EXPORT_SYMBOL(pci_wait_for_pending_transaction);
  
- /*
-  * We should only need to wait 100ms after FLR, but some devices take longer.
-  * Wait for up to 1000ms for config space to return something other than -1.
-  * Intel IGD requires this when an LCD panel is attached.  We read the 2nd
-  * dword because VFs don't implement the 1st dword.
-  */
  static void pci_flr_wait(struct pci_dev *dev)
  {
-       int i = 0;
+       int delay = 1, timeout = 60000;
        u32 id;
  
-       do {
-               msleep(100);
+       /*
+        * Per PCIe r3.1, sec 6.6.2, a device must complete an FLR within
+        * 100ms, but may silently discard requests while the FLR is in
+        * progress.  Wait 100ms before trying to access the device.
+        */
+       msleep(100);
+       /*
+        * After 100ms, the device should not silently discard config
+        * requests, but it may still indicate that it needs more time by
+        * responding to them with CRS completions.  The Root Port will
+        * generally synthesize ~0 data to complete the read (except when
+        * CRS SV is enabled and the read was for the Vendor ID; in that
+        * case it synthesizes 0x0001 data).
+        *
+        * Wait for the device to return a non-CRS completion.  Read the
+        * Command register instead of Vendor ID so we don't have to
+        * contend with the CRS SV value.
+        */
+       pci_read_config_dword(dev, PCI_COMMAND, &id);
+       while (id == ~0) {
+               if (delay > timeout) {
+                       dev_warn(&dev->dev, "not ready %dms after FLR; giving up\n",
+                                100 + delay - 1);
+                       return;
+               }
+               if (delay > 1000)
+                       dev_info(&dev->dev, "not ready %dms after FLR; waiting\n",
+                                100 + delay - 1);
+               msleep(delay);
+               delay *= 2;
                pci_read_config_dword(dev, PCI_COMMAND, &id);
-       } while (i++ < 10 && id == ~0);
+       }
  
-       if (id == ~0)
-               dev_warn(&dev->dev, "Failed to return from FLR\n");
-       else if (i > 1)
-               dev_info(&dev->dev, "Required additional %dms to return from FLR\n",
-                        (i - 1) * 100);
+       if (delay > 1000)
+               dev_info(&dev->dev, "ready %dms after FLR\n", 100 + delay - 1);
  }
  
  /**
@@@ -4266,41 -4292,6 +4299,41 @@@ int pci_reset_function(struct pci_dev *
  }
  EXPORT_SYMBOL_GPL(pci_reset_function);
  
 +/**
 + * pci_reset_function_locked - quiesce and reset a PCI device function
 + * @dev: PCI device to reset
 + *
 + * Some devices allow an individual function to be reset without affecting
 + * other functions in the same device.  The PCI device must be responsive
 + * to PCI config space in order to use this function.
 + *
 + * This function does not just reset the PCI portion of a device, but
 + * clears all the state associated with the device.  This function differs
 + * from __pci_reset_function() in that it saves and restores device state
 + * over the reset.  It also differs from pci_reset_function() in that it
 + * requires the PCI device lock to be held.
 + *
 + * Returns 0 if the device function was successfully reset or negative if the
 + * device doesn't support resetting a single function.
 + */
 +int pci_reset_function_locked(struct pci_dev *dev)
 +{
 +      int rc;
 +
 +      rc = pci_probe_reset_function(dev);
 +      if (rc)
 +              return rc;
 +
 +      pci_dev_save_and_disable(dev);
 +
 +      rc = __pci_reset_function_locked(dev);
 +
 +      pci_dev_restore(dev);
 +
 +      return rc;
 +}
 +EXPORT_SYMBOL_GPL(pci_reset_function_locked);
 +
  /**
   * pci_try_reset_function - quiesce and reset a PCI device function
   * @dev: PCI device to reset
@@@ -5405,8 -5396,8 +5438,8 @@@ static int of_pci_bus_find_domain_nr(st
                use_dt_domains = 0;
                domain = pci_get_new_domain_nr();
        } else {
-               dev_err(parent, "Node %s has inconsistent \"linux,pci-domain\" property in DT\n",
-                       parent->of_node->full_name);
+               dev_err(parent, "Node %pOF has inconsistent \"linux,pci-domain\" property in DT\n",
+                       parent->of_node);
                domain = -1;
        }
  
diff --combined drivers/pci/probe.c
index e6a917b4acd3f3c63dff5d57b905ab093d7d0487,e03f95bd1b599391a5c748df35953dc4fdec12dc..ff94b69738a87a8ec5b77e57624e1412c7ab4916
@@@ -1745,73 -1745,59 +1745,102 @@@ static void program_hpp_type2(struct pc
         */
  }
  
static void pci_configure_extended_tags(struct pci_dev *dev)
int pci_configure_extended_tags(struct pci_dev *dev, void *ign)
  {
-       u32 dev_cap;
+       struct pci_host_bridge *host;
+       u32 cap;
+       u16 ctl;
        int ret;
  
        if (!pci_is_pcie(dev))
-               return;
+               return 0;
  
-       ret = pcie_capability_read_dword(dev, PCI_EXP_DEVCAP, &dev_cap);
+       ret = pcie_capability_read_dword(dev, PCI_EXP_DEVCAP, &cap);
        if (ret)
-               return;
+               return 0;
+       if (!(cap & PCI_EXP_DEVCAP_EXT_TAG))
+               return 0;
+       ret = pcie_capability_read_word(dev, PCI_EXP_DEVCTL, &ctl);
+       if (ret)
+               return 0;
+       host = pci_find_host_bridge(dev->bus);
+       if (!host)
+               return 0;
  
-       if (dev_cap & PCI_EXP_DEVCAP_EXT_TAG)
+       /*
+        * If some device in the hierarchy doesn't handle Extended Tags
+        * correctly, make sure they're disabled.
+        */
+       if (host->no_ext_tags) {
+               if (ctl & PCI_EXP_DEVCTL_EXT_TAG) {
+                       dev_info(&dev->dev, "disabling Extended Tags\n");
+                       pcie_capability_clear_word(dev, PCI_EXP_DEVCTL,
+                                                  PCI_EXP_DEVCTL_EXT_TAG);
+               }
+               return 0;
+       }
+       if (!(ctl & PCI_EXP_DEVCTL_EXT_TAG)) {
+               dev_info(&dev->dev, "enabling Extended Tags\n");
                pcie_capability_set_word(dev, PCI_EXP_DEVCTL,
                                         PCI_EXP_DEVCTL_EXT_TAG);
+       }
+       return 0;
  }
  
 +/**
 + * pcie_relaxed_ordering_enabled - Probe for PCIe relaxed ordering enable
 + * @dev: PCI device to query
 + *
 + * Returns true if the device has enabled relaxed ordering attribute.
 + */
 +bool pcie_relaxed_ordering_enabled(struct pci_dev *dev)
 +{
 +      u16 v;
 +
 +      pcie_capability_read_word(dev, PCI_EXP_DEVCTL, &v);
 +
 +      return !!(v & PCI_EXP_DEVCTL_RELAX_EN);
 +}
 +EXPORT_SYMBOL(pcie_relaxed_ordering_enabled);
 +
 +static void pci_configure_relaxed_ordering(struct pci_dev *dev)
 +{
 +      struct pci_dev *root;
 +
 +      /* PCI_EXP_DEVICE_RELAX_EN is RsvdP in VFs */
 +      if (dev->is_virtfn)
 +              return;
 +
 +      if (!pcie_relaxed_ordering_enabled(dev))
 +              return;
 +
 +      /*
 +       * For now, we only deal with Relaxed Ordering issues with Root
 +       * Ports. Peer-to-Peer DMA is another can of worms.
 +       */
 +      root = pci_find_pcie_root_port(dev);
 +      if (!root)
 +              return;
 +
 +      if (root->dev_flags & PCI_DEV_FLAGS_NO_RELAXED_ORDERING) {
 +              pcie_capability_clear_word(dev, PCI_EXP_DEVCTL,
 +                                         PCI_EXP_DEVCTL_RELAX_EN);
 +              dev_info(&dev->dev, "Disable Relaxed Ordering because the Root Port didn't support it\n");
 +      }
 +}
 +
  static void pci_configure_device(struct pci_dev *dev)
  {
        struct hotplug_params hpp;
        int ret;
  
        pci_configure_mps(dev);
-       pci_configure_extended_tags(dev);
+       pci_configure_extended_tags(dev, NULL);
 +      pci_configure_relaxed_ordering(dev);
  
        memset(&hpp, 0, sizeof(hpp));
        ret = pci_get_hp_params(dev, &hpp);
@@@ -1867,42 -1853,69 +1896,69 @@@ struct pci_dev *pci_alloc_dev(struct pc
  }
  EXPORT_SYMBOL(pci_alloc_dev);
  
- bool pci_bus_read_dev_vendor_id(struct pci_bus *bus, int devfn, u32 *l,
-                               int crs_timeout)
+ static bool pci_bus_crs_vendor_id(u32 l)
+ {
+       return (l & 0xffff) == 0x0001;
+ }
+ static bool pci_bus_wait_crs(struct pci_bus *bus, int devfn, u32 *l,
+                            int timeout)
  {
        int delay = 1;
  
-       if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
-               return false;
+       if (!pci_bus_crs_vendor_id(*l))
+               return true;    /* not a CRS completion */
  
-       /* some broken boards return 0 or ~0 if a slot is empty: */
-       if (*l == 0xffffffff || *l == 0x00000000 ||
-           *l == 0x0000ffff || *l == 0xffff0000)
-               return false;
+       if (!timeout)
+               return false;   /* CRS, but caller doesn't want to wait */
  
        /*
-        * Configuration Request Retry Status.  Some root ports return the
-        * actual device ID instead of the synthetic ID (0xFFFF) required
-        * by the PCIe spec.  Ignore the device ID and only check for
-        * (vendor id == 1).
+        * We got the reserved Vendor ID that indicates a completion with
+        * Configuration Request Retry Status (CRS).  Retry until we get a
+        * valid Vendor ID or we time out.
         */
-       while ((*l & 0xffff) == 0x0001) {
-               if (!crs_timeout)
+       while (pci_bus_crs_vendor_id(*l)) {
+               if (delay > timeout) {
+                       pr_warn("pci %04x:%02x:%02x.%d: not ready after %dms; giving up\n",
+                               pci_domain_nr(bus), bus->number,
+                               PCI_SLOT(devfn), PCI_FUNC(devfn), delay - 1);
                        return false;
+               }
+               if (delay >= 1000)
+                       pr_info("pci %04x:%02x:%02x.%d: not ready after %dms; waiting\n",
+                               pci_domain_nr(bus), bus->number,
+                               PCI_SLOT(devfn), PCI_FUNC(devfn), delay - 1);
  
                msleep(delay);
                delay *= 2;
                if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
                        return false;
-               /* Card hasn't responded in 60 seconds?  Must be stuck. */
-               if (delay > crs_timeout) {
-                       printk(KERN_WARNING "pci %04x:%02x:%02x.%d: not responding\n",
-                              pci_domain_nr(bus), bus->number, PCI_SLOT(devfn),
-                              PCI_FUNC(devfn));
-                       return false;
-               }
        }
  
+       if (delay >= 1000)
+               pr_info("pci %04x:%02x:%02x.%d: ready after %dms\n",
+                       pci_domain_nr(bus), bus->number,
+                       PCI_SLOT(devfn), PCI_FUNC(devfn), delay - 1);
+       return true;
+ }
+ bool pci_bus_read_dev_vendor_id(struct pci_bus *bus, int devfn, u32 *l,
+                               int timeout)
+ {
+       if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
+               return false;
+       /* some broken boards return 0 or ~0 if a slot is empty: */
+       if (*l == 0xffffffff || *l == 0x00000000 ||
+           *l == 0x0000ffff || *l == 0xffff0000)
+               return false;
+       if (pci_bus_crs_vendor_id(*l))
+               return pci_bus_wait_crs(bus, devfn, l, timeout);
        return true;
  }
  EXPORT_SYMBOL(pci_bus_read_dev_vendor_id);
@@@ -2331,6 -2344,15 +2387,15 @@@ void pcie_bus_configure_settings(struc
  }
  EXPORT_SYMBOL_GPL(pcie_bus_configure_settings);
  
+ /*
+  * Called after each bus is probed, but before its children are examined.  This
+  * is marked as __weak because multiple architectures define it.
+  */
+ void __weak pcibios_fixup_bus(struct pci_bus *bus)
+ {
+        /* nothing to do, expected to be removed in the future */
+ }
  unsigned int pci_scan_child_bus(struct pci_bus *bus)
  {
        unsigned int devfn, pass, max = bus->busn_res.start;
diff --combined drivers/pci/quirks.c
index a346487a953257b8f20a0e80315ecad01e6317b3,3821c11c9adda4bc8aa4fe91fe940b4aad45a799..a2afb44fad100ac77dfd9560a08243fe0f70561a
@@@ -25,7 -25,6 +25,7 @@@
  #include <linux/sched.h>
  #include <linux/ktime.h>
  #include <linux/mm.h>
 +#include <linux/platform_data/x86/apple.h>
  #include <asm/dma.h>  /* isa_dma_bridge_buggy */
  #include "pci.h"
  
@@@ -2062,7 -2061,7 +2062,7 @@@ DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_VENDO
  
  /*
   * The 82575 and 82598 may experience data corruption issues when transitioning
-  * out of L0S.  To prevent this we need to disable L0S on the pci-e link
+  * out of L0S.  To prevent this we need to disable L0S on the PCIe link.
   */
  static void quirk_disable_aspm_l0s(struct pci_dev *dev)
  {
@@@ -3448,7 -3447,7 +3448,7 @@@ static void quirk_apple_poweroff_thunde
  {
        acpi_handle bridge, SXIO, SXFP, SXLV;
  
 -      if (!dmi_match(DMI_BOARD_VENDOR, "Apple Inc."))
 +      if (!x86_apple_machine)
                return;
        if (pci_pcie_type(dev) != PCI_EXP_TYPE_UPSTREAM)
                return;
@@@ -3493,7 -3492,7 +3493,7 @@@ static void quirk_apple_wait_for_thunde
        struct pci_dev *sibling = NULL;
        struct pci_dev *nhi = NULL;
  
 -      if (!dmi_match(DMI_BOARD_VENDOR, "Apple Inc."))
 +      if (!x86_apple_machine)
                return;
        if (pci_pcie_type(dev) != PCI_EXP_TYPE_DOWNSTREAM)
                return;
@@@ -4016,95 -4015,6 +4016,95 @@@ DECLARE_PCI_FIXUP_CLASS_EARLY(0x1797, 0
  DECLARE_PCI_FIXUP_CLASS_EARLY(0x1797, 0x6869, PCI_CLASS_NOT_DEFINED, 8,
                              quirk_tw686x_class);
  
 +/*
 + * Some devices have problems with Transaction Layer Packets with the Relaxed
 + * Ordering Attribute set.  Such devices should mark themselves and other
 + * Device Drivers should check before sending TLPs with RO set.
 + */
 +static void quirk_relaxedordering_disable(struct pci_dev *dev)
 +{
 +      dev->dev_flags |= PCI_DEV_FLAGS_NO_RELAXED_ORDERING;
 +      dev_info(&dev->dev, "Disable Relaxed Ordering Attributes to avoid PCIe Completion erratum\n");
 +}
 +
 +/*
 + * Intel Xeon processors based on Broadwell/Haswell microarchitecture Root
 + * Complex has a Flow Control Credit issue which can cause performance
 + * problems with Upstream Transaction Layer Packets with Relaxed Ordering set.
 + */
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x6f01, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x6f02, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x6f03, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x6f04, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x6f05, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x6f06, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x6f07, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x6f08, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x6f09, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x6f0a, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x6f0b, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x6f0c, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x6f0d, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x6f0e, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x2f01, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x2f02, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x2f03, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x2f04, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x2f05, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x2f06, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x2f07, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x2f08, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x2f09, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x2f0a, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x2f0b, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x2f0c, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x2f0d, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, 0x2f0e, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +
 +/*
 + * The AMD ARM A1100 (AKA "SEATTLE") SoC has a bug in its PCIe Root Complex
 + * where Upstream Transaction Layer Packets with the Relaxed Ordering
 + * Attribute clear are allowed to bypass earlier TLPs with Relaxed Ordering
 + * set.  This is a violation of the PCIe 3.0 Transaction Ordering Rules
 + * outlined in Section 2.4.1 (PCI Express(r) Base Specification Revision 3.0
 + * November 10, 2010).  As a result, on this platform we can't use Relaxed
 + * Ordering for Upstream TLPs.
 + */
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_AMD, 0x1a00, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_AMD, 0x1a01, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_AMD, 0x1a02, PCI_CLASS_NOT_DEFINED, 8,
 +                            quirk_relaxedordering_disable);
 +
  /*
   * Per PCIe r3.0, sec 2.2.9, "Completion headers must supply the same
   * values for the Attribute as were supplied in the header of the
@@@ -4227,6 -4137,18 +4227,18 @@@ static int pci_quirk_cavium_acs(struct 
        return acs_flags ? 0 : 1;
  }
  
+ static int pci_quirk_xgene_acs(struct pci_dev *dev, u16 acs_flags)
+ {
+       /*
+        * X-Gene root matching this quirk do not allow peer-to-peer
+        * transactions with others, allowing masking out these bits as if they
+        * were unimplemented in the ACS capability.
+        */
+       acs_flags &= ~(PCI_ACS_SV | PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_UF);
+       return acs_flags ? 0 : 1;
+ }
  /*
   * Many Intel PCH root ports do provide ACS-like features to disable peer
   * transactions and validate bus numbers in requests, but do not provide an
@@@ -4475,6 -4397,8 +4487,8 @@@ static const struct pci_dev_acs_enable
        { 0x10df, 0x720, pci_quirk_mf_endpoint_acs }, /* Emulex Skyhawk-R */
        /* Cavium ThunderX */
        { PCI_VENDOR_ID_CAVIUM, PCI_ANY_ID, pci_quirk_cavium_acs },
+       /* APM X-Gene */
+       { PCI_VENDOR_ID_AMCC, 0xE004, pci_quirk_xgene_acs },
        { 0 }
  };
  
@@@ -4747,23 -4671,6 +4761,6 @@@ static void quirk_intel_qat_vf_cap(stru
  }
  DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x443, quirk_intel_qat_vf_cap);
  
- /*
-  * VMD-enabled root ports will change the source ID for all messages
-  * to the VMD device. Rather than doing device matching with the source
-  * ID, the AER driver should traverse the child device tree, reading
-  * AER registers to find the faulting device.
-  */
- static void quirk_no_aersid(struct pci_dev *pdev)
- {
-       /* VMD Domain */
-       if (pdev->bus->sysdata && pci_domain_nr(pdev->bus) >= 0x10000)
-               pdev->bus->bus_flags |= PCI_BUS_FLAGS_NO_AERSID;
- }
- DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x2030, quirk_no_aersid);
- DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x2031, quirk_no_aersid);
- DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x2032, quirk_no_aersid);
- DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x2033, quirk_no_aersid);
  /* FLR may cause some 82579 devices to hang. */
  static void quirk_intel_no_flr(struct pci_dev *dev)
  {
  }
  DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x1502, quirk_intel_no_flr);
  DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x1503, quirk_intel_no_flr);
+ static void quirk_no_ext_tags(struct pci_dev *pdev)
+ {
+       struct pci_host_bridge *bridge = pci_find_host_bridge(pdev->bus);
+       if (!bridge)
+               return;
+       bridge->no_ext_tags = 1;
+       dev_info(&pdev->dev, "disabling Extended Tags (this device can't handle them)\n");
+       pci_walk_bus(bridge->bus, pci_configure_extended_tags, NULL);
+ }
+ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0140, quirk_no_ext_tags);
+ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0142, quirk_no_ext_tags);
+ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0144, quirk_no_ext_tags);
+ #ifdef CONFIG_PCI_ATS
+ /*
+  * Some devices have a broken ATS implementation causing IOMMU stalls.
+  * Don't use ATS for those devices.
+  */
+ static void quirk_no_ats(struct pci_dev *pdev)
+ {
+       dev_info(&pdev->dev, "disabling ATS (broken on this device)\n");
+       pdev->ats_cap = 0;
+ }
+ /* AMD Stoney platform GPU */
+ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x98e4, quirk_no_ats);
+ #endif /* CONFIG_PCI_ATS */
diff --combined include/linux/pci.h
index da05e5db06acbab4e8a6234c6a8b9a2c7f15cce3,0c72b63dcaaf35bb5c628930f5c7e6168ad1229e..f68c58a93dd045b9b58de9882088621253ec7758
@@@ -102,6 -102,28 +102,28 @@@ enum 
        DEVICE_COUNT_RESOURCE = PCI_NUM_RESOURCES,
  };
  
+ /**
+  * enum pci_interrupt_pin - PCI INTx interrupt values
+  * @PCI_INTERRUPT_UNKNOWN: Unknown or unassigned interrupt
+  * @PCI_INTERRUPT_INTA: PCI INTA pin
+  * @PCI_INTERRUPT_INTB: PCI INTB pin
+  * @PCI_INTERRUPT_INTC: PCI INTC pin
+  * @PCI_INTERRUPT_INTD: PCI INTD pin
+  *
+  * Corresponds to values for legacy PCI INTx interrupts, as can be found in the
+  * PCI_INTERRUPT_PIN register.
+  */
+ enum pci_interrupt_pin {
+       PCI_INTERRUPT_UNKNOWN,
+       PCI_INTERRUPT_INTA,
+       PCI_INTERRUPT_INTB,
+       PCI_INTERRUPT_INTC,
+       PCI_INTERRUPT_INTD,
+ };
+ /* The number of legacy PCI INTx interrupts */
+ #define PCI_NUM_INTX  4
  /*
   * pci_power_t values must match the bits in the Capabilities PME_Support
   * and Control/Status PowerState fields in the Power Management capability.
@@@ -188,8 -210,6 +210,8 @@@ enum pci_dev_flags 
         * the direct_complete optimization.
         */
        PCI_DEV_FLAGS_NEEDS_RESUME = (__force pci_dev_flags_t) (1 << 11),
 +      /* Don't use Relaxed Ordering for TLPs directed at this device */
 +      PCI_DEV_FLAGS_NO_RELAXED_ORDERING = (__force pci_dev_flags_t) (1 << 12),
  };
  
  enum pci_irq_reroute_variant {
@@@ -453,6 -473,7 +475,7 @@@ struct pci_host_bridge 
        void *release_data;
        struct msi_controller *msi;
        unsigned int ignore_reset_delay:1;      /* for entire hierarchy */
+       unsigned int no_ext_tags:1;             /* no Extended Tags */
        /* Resource alignment requirements */
        resource_size_t (*align_resource)(struct pci_dev *dev,
                        const struct resource *res,
@@@ -731,7 -752,6 +754,7 @@@ struct pci_driver 
        void (*shutdown) (struct pci_dev *dev);
        int (*sriov_configure) (struct pci_dev *dev, int num_vfs); /* PF pdev */
        const struct pci_error_handlers *err_handler;
 +      const struct attribute_group **groups;
        struct device_driver    driver;
        struct pci_dynids dynids;
  };
@@@ -847,7 -867,6 +870,6 @@@ char *pcibios_setup(char *str)
  resource_size_t pcibios_align_resource(void *, const struct resource *,
                                resource_size_t,
                                resource_size_t);
- void pcibios_update_irq(struct pci_dev *, int irq);
  
  /* Weak but can be overriden by arch */
  void pci_fixup_cardbus(struct pci_bus *);
@@@ -1070,7 -1089,6 +1092,7 @@@ void pcie_flr(struct pci_dev *dev)
  int __pci_reset_function(struct pci_dev *dev);
  int __pci_reset_function_locked(struct pci_dev *dev);
  int pci_reset_function(struct pci_dev *dev);
 +int pci_reset_function_locked(struct pci_dev *dev);
  int pci_try_reset_function(struct pci_dev *dev);
  int pci_probe_reset_slot(struct pci_slot *slot);
  int pci_reset_slot(struct pci_slot *slot);
@@@ -1129,7 -1147,6 +1151,7 @@@ bool pci_check_pme_status(struct pci_de
  void pci_pme_wakeup_bus(struct pci_bus *bus);
  void pci_d3cold_enable(struct pci_dev *dev);
  void pci_d3cold_disable(struct pci_dev *dev);
 +bool pcie_relaxed_ordering_enabled(struct pci_dev *dev);
  
  /* PCI Virtual Channel */
  int pci_save_vc_state(struct pci_dev *dev);
@@@ -1165,8 -1182,6 +1187,6 @@@ void pci_assign_unassigned_bus_resource
  void pci_assign_unassigned_root_bus_resources(struct pci_bus *bus);
  void pdev_enable_device(struct pci_dev *);
  int pci_enable_resources(struct pci_dev *, int mask);
- void pci_fixup_irqs(u8 (*)(struct pci_dev *, u8 *),
-                   int (*)(const struct pci_dev *, u8, u8));
  void pci_assign_irq(struct pci_dev *dev);
  struct resource *pci_find_resource(struct pci_dev *dev, struct resource *res);
  #define HAVE_PCI_REQ_REGIONS  2
@@@ -1399,6 -1414,38 +1419,38 @@@ pci_alloc_irq_vectors(struct pci_dev *d
                                              NULL);
  }
  
+ /**
+  * pci_irqd_intx_xlate() - Translate PCI INTx value to an IRQ domain hwirq
+  * @d: the INTx IRQ domain
+  * @node: the DT node for the device whose interrupt we're translating
+  * @intspec: the interrupt specifier data from the DT
+  * @intsize: the number of entries in @intspec
+  * @out_hwirq: pointer at which to write the hwirq number
+  * @out_type: pointer at which to write the interrupt type
+  *
+  * Translate a PCI INTx interrupt number from device tree in the range 1-4, as
+  * stored in the standard PCI_INTERRUPT_PIN register, to a value in the range
+  * 0-3 suitable for use in a 4 entry IRQ domain. That is, subtract one from the
+  * INTx value to obtain the hwirq number.
+  *
+  * Returns 0 on success, or -EINVAL if the interrupt specifier is out of range.
+  */
+ static inline int pci_irqd_intx_xlate(struct irq_domain *d,
+                                     struct device_node *node,
+                                     const u32 *intspec,
+                                     unsigned int intsize,
+                                     unsigned long *out_hwirq,
+                                     unsigned int *out_type)
+ {
+       const u32 intx = intspec[0];
+       if (intx < PCI_INTERRUPT_INTA || intx > PCI_INTERRUPT_INTD)
+               return -EINVAL;
+       *out_hwirq = intx - PCI_INTERRUPT_INTA;
+       return 0;
+ }
  #ifdef CONFIG_PCIEPORTBUS
  extern bool pcie_ports_disabled;
  extern bool pcie_ports_auto;
@@@ -2064,7 -2111,7 +2116,7 @@@ static inline u16 pci_vpd_lrdt_tag(cons
  
  /**
   * pci_vpd_srdt_size - Extracts the Small Resource Data Type length
-  * @lrdt: Pointer to the beginning of the Small Resource Data Type tag
+  * @srdt: Pointer to the beginning of the Small Resource Data Type tag
   *
   * Returns the extracted Small Resource Data Type length.
   */
@@@ -2075,7 -2122,7 +2127,7 @@@ static inline u8 pci_vpd_srdt_size(cons
  
  /**
   * pci_vpd_srdt_tag - Extracts the Small Resource Data Type Tag Item
-  * @lrdt: Pointer to the beginning of the Small Resource Data Type tag
+  * @srdt: Pointer to the beginning of the Small Resource Data Type tag
   *
   * Returns the extracted Small Resource Data Type Tag Item.
   */
This page took 0.217573 seconds and 4 git commands to generate.