Merge remote-tracking branch 'pci/next'
authorStephen Rothwell <sfr@canb.auug.org.au>
Thu, 5 Nov 2015 00:29:22 +0000 (11:29 +1100)
committerStephen Rothwell <sfr@canb.auug.org.au>
Thu, 5 Nov 2015 00:29:22 +0000 (11:29 +1100)
1  2 
Documentation/devicetree/bindings/arm/hisilicon/hisilicon.txt
MAINTAINERS
arch/powerpc/platforms/pseries/setup.c
arch/x86/pci/common.c
drivers/pci/msi.c
drivers/pci/pci-driver.c
drivers/pci/probe.c
drivers/pci/quirks.c
include/linux/msi.h

@@@ -20,10 -20,6 +20,10 @@@ HiKey Boar
  Required root node properties:
        - compatible = "hisilicon,hi6220-hikey", "hisilicon,hi6220";
  
 +HiP05 D02 Board
 +Required root node properties:
 +      - compatible = "hisilicon,hip05-d02";
 +
  Hisilicon system controller
  
  Required properties:
@@@ -170,6 -166,23 +170,23 @@@ Example
                reboot-offset = <0x4>;
        };
  
+ -----------------------------------------------------------------------
+ Hisilicon HiP05 PCIe-SAS system controller
+ Required properties:
+ - compatible : "hisilicon,pcie-sas-subctrl", "syscon";
+ - reg : Register address and size
+ The HiP05 PCIe-SAS system controller is shared by PCIe and SAS controllers in
+ HiP05 Soc to implement some basic configurations.
+ Example:
+       /* for HiP05 PCIe-SAS system */
+       pcie_sas: system_controller@0xb0000000 {
+               compatible = "hisilicon,pcie-sas-subctrl", "syscon";
+               reg = <0xb0000000 0x10000>;
+       };
  -----------------------------------------------------------------------
  Hisilicon CPU controller
  
diff --combined MAINTAINERS
@@@ -240,12 -240,6 +240,12 @@@ L:       lm-sensors@lm-sensors.or
  S:    Maintained
  F:    drivers/hwmon/abituguru3.c
  
 +ACCES 104-IDIO-16 GPIO DRIVER
 +M:    "William Breathitt Gray" <vilhelm.gray@gmail.com>
 +L:    linux-gpio@vger.kernel.org
 +S:    Maintained
 +F:    drivers/gpio/gpio-104-idio-16.c
 +
  ACENIC DRIVER
  M:    Jes Sorensen <jes@trained-monkey.org>
  L:    linux-acenic@sunsite.dk
@@@ -621,8 -615,9 +621,8 @@@ F: Documentation/hwmon/fam15h_powe
  F:    drivers/hwmon/fam15h_power.c
  
  AMD GEODE CS5536 USB DEVICE CONTROLLER DRIVER
 -M:    Thomas Dahlmann <dahlmann.thomas@arcor.de>
  L:    linux-geode@lists.infradead.org (moderated for non-subscribers)
 -S:    Supported
 +S:    Orphan
  F:    drivers/usb/gadget/udc/amd5536udc.*
  
  AMD GEODE PROCESSOR/CHIPSET SUPPORT
@@@ -660,6 -655,11 +660,6 @@@ F:        drivers/gpu/drm/radeon/radeon_kfd.
  F:    drivers/gpu/drm/radeon/radeon_kfd.h
  F:    include/uapi/linux/kfd_ioctl.h
  
 -AMD MICROCODE UPDATE SUPPORT
 -M:    Borislav Petkov <bp@alien8.de>
 -S:    Maintained
 -F:    arch/x86/kernel/cpu/microcode/amd*
 -
  AMD XGBE DRIVER
  M:    Tom Lendacky <thomas.lendacky@amd.com>
  L:    netdev@vger.kernel.org
@@@ -789,11 -789,6 +789,11 @@@ S:       Maintaine
  F:    drivers/net/appletalk/
  F:    net/appletalk/
  
 +APPLIED MICRO (APM) X-GENE DEVICE TREE SUPPORT
 +M:    Duc Dang <dhdang@apm.com>
 +S:    Supported
 +F:    arch/arm64/boot/dts/apm/
 +
  APPLIED MICRO (APM) X-GENE SOC ETHERNET DRIVER
  M:    Iyappan Subramanian <isubramanian@apm.com>
  M:    Keyur Chudgar <kchudgar@apm.com>
@@@ -813,13 -808,6 +813,13 @@@ S:       Maintaine
  F:    drivers/video/fbdev/arcfb.c
  F:    drivers/video/fbdev/core/fb_defio.c
  
 +ARCNET NETWORK LAYER
 +M:    Michael Grzeschik <m.grzeschik@pengutronix.de>
 +L:    netdev@vger.kernel.org
 +S:    Maintained
 +F:    drivers/net/arcnet/
 +F:    include/uapi/linux/if_arcnet.h
 +
  ARM MFM AND FLOPPY DRIVERS
  M:    Ian Molton <spyro@f2s.com>
  S:    Maintained
@@@ -828,13 -816,12 +828,13 @@@ F:      arch/arm/include/asm/floppy.
  
  ARM PMU PROFILING AND DEBUGGING
  M:    Will Deacon <will.deacon@arm.com>
 +R:    Mark Rutland <mark.rutland@arm.com>
  S:    Maintained
 -F:    arch/arm/kernel/perf_*
 +F:    arch/arm*/kernel/perf_*
  F:    arch/arm/oprofile/common.c
 -F:    arch/arm/kernel/hw_breakpoint.c
 -F:    arch/arm/include/asm/hw_breakpoint.h
 -F:    arch/arm/include/asm/perf_event.h
 +F:    arch/arm*/kernel/hw_breakpoint.c
 +F:    arch/arm*/include/asm/hw_breakpoint.h
 +F:    arch/arm*/include/asm/perf_event.h
  F:    drivers/perf/arm_pmu.c
  F:    include/linux/perf/arm_pmu.h
  
@@@ -901,12 -888,11 +901,12 @@@ M:      Lennert Buytenhek <kernel@wantstofly
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  
 -ARM/Allwinner A1X SoC support
 +ARM/Allwinner sunXi SoC support
  M:    Maxime Ripard <maxime.ripard@free-electrons.com>
 +M:    Chen-Yu Tsai <wens@csie.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
 -N:    sun[x4567]i
 +N:    sun[x456789]i
  
  ARM/Allwinner SoC Clock Support
  M:    Emilio López <emilio@elopez.com.ar>
@@@ -925,7 -911,7 +925,7 @@@ M: Tsahee Zidenberg <tsahee@annapurnala
  S:    Maintained
  F:    arch/arm/mach-alpine/
  
 -ARM/ATMEL AT91RM9200 AND AT91SAM ARM ARCHITECTURES
 +ARM/ATMEL AT91RM9200, AT91SAM9 AND SAMA5 SOC SUPPORT
  M:    Nicolas Ferre <nicolas.ferre@atmel.com>
  M:    Alexandre Belloni <alexandre.belloni@free-electrons.com>
  M:    Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>
@@@ -1238,13 -1224,6 +1238,13 @@@ ARM/LPC18XX ARCHITECTUR
  M:    Joachim Eastwood <manabian@gmail.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
 +F:    arch/arm/boot/dts/lpc43*
 +F:    drivers/clk/nxp/clk-lpc18xx*
 +F:    drivers/clocksource/time-lpc32xx.c
 +F:    drivers/i2c/busses/i2c-lpc2k.c
 +F:    drivers/memory/pl172.c
 +F:    drivers/mtd/spi-nor/nxp-spifi.c
 +F:    drivers/rtc/rtc-lpc24xx.c
  N:    lpc18xx
  
  ARM/MAGICIAN MACHINE SUPPORT
@@@ -1459,12 -1438,7 +1459,12 @@@ F:    arch/arm/mach-exynos*
  F:    drivers/*/*s3c2410*
  F:    drivers/*/*/*s3c2410*
  F:    drivers/spi/spi-s3c*
 +F:    drivers/soc/samsung/*
  F:    sound/soc/samsung/*
 +F:    Documentation/arm/Samsung/
 +F:    Documentation/devicetree/bindings/arm/samsung/
 +F:    Documentation/devicetree/bindings/sram/samsung-sram.txt
 +F:    Documentation/devicetree/bindings/power/pd-samsung.txt
  N:    exynos
  
  ARM/SAMSUNG MOBILE MACHINE SUPPORT
@@@ -1511,6 -1485,8 +1511,6 @@@ F:      arch/arm/boot/dts/emev2
  F:    arch/arm/boot/dts/r7s*
  F:    arch/arm/boot/dts/r8a*
  F:    arch/arm/boot/dts/sh*
 -F:    arch/arm/configs/bockw_defconfig
 -F:    arch/arm/configs/marzen_defconfig
  F:    arch/arm/configs/shmobile_defconfig
  F:    arch/arm/include/debug/renesas-scif.S
  F:    arch/arm/mach-shmobile/
@@@ -1545,7 -1521,6 +1545,7 @@@ W:      http://www.stlinux.co
  S:    Maintained
  F:    arch/arm/mach-sti/
  F:    arch/arm/boot/dts/sti*
 +F:    drivers/char/hw_random/st-rng.c
  F:    drivers/clocksource/arm_global_timer.c
  F:    drivers/clocksource/clksrc_st_lpc.c
  F:    drivers/i2c/busses/i2c-st.c
@@@ -1625,9 -1600,7 +1625,9 @@@ M:      Masahiro Yamada <yamada.masahiro@soc
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  F:    arch/arm/boot/dts/uniphier*
 +F:    arch/arm/include/asm/hardware/cache-uniphier.h
  F:    arch/arm/mach-uniphier/
 +F:    arch/arm/mm/cache-uniphier.c
  F:    drivers/pinctrl/uniphier/
  F:    drivers/tty/serial/8250/8250_uniphier.c
  N:    uniphier
@@@ -1800,14 -1773,6 +1800,14 @@@ S:    Supporte
  F:    Documentation/aoe/
  F:    drivers/block/aoe/
  
 +ATHEROS 71XX/9XXX GPIO DRIVER
 +M:    Alban Bedel <albeu@free.fr>
 +W:    https://github.com/AlbanBedel/linux
 +T:    git git://github.com/AlbanBedel/linux
 +S:    Maintained
 +F:    drivers/gpio/gpio-ath79.c
 +F:    Documentation/devicetree/bindings/gpio/gpio-ath79.txt
 +
  ATHEROS ATH GENERIC UTILITIES
  M:    "Luis R. Rodriguez" <mcgrof@do-not-panic.com>
  L:    linux-wireless@vger.kernel.org
@@@ -2389,27 -2354,19 +2389,27 @@@ L:   linux-scsi@vger.kernel.or
  S:    Supported
  F:    drivers/scsi/bnx2i/
  
 -BROADCOM CYGNUS/IPROC ARM ARCHITECTURE
 +BROADCOM IPROC ARM ARCHITECTURE
  M:    Ray Jui <rjui@broadcom.com>
  M:    Scott Branden <sbranden@broadcom.com>
 +M:    Jon Mason <jonmason@broadcom.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    bcm-kernel-feedback-list@broadcom.com
  T:    git git://github.com/broadcom/cygnus-linux.git
  S:    Maintained
  N:    iproc
  N:    cygnus
 +N:    nsp
  N:    bcm9113*
  N:    bcm9583*
 -N:    bcm583*
 +N:    bcm9585*
 +N:    bcm9586*
 +N:    bcm988312
  N:    bcm113*
 +N:    bcm583*
 +N:    bcm585*
 +N:    bcm586*
 +N:    bcm88312
  
  BROADCOM BRCMSTB GPIO DRIVER
  M:    Gregory Fong <gregory.0xf0@gmail.com>
@@@ -3404,7 -3361,6 +3404,7 @@@ M:      Support Opensource <support.opensour
  W:    http://www.dialog-semiconductor.com/products
  S:    Supported
  F:    Documentation/hwmon/da90??
 +F:    Documentation/devicetree/bindings/sound/da[79]*.txt
  F:    drivers/gpio/gpio-da90??.c
  F:    drivers/hwmon/da90??-hwmon.c
  F:    drivers/iio/adc/da91??-*.c
@@@ -3438,6 -3394,7 +3438,6 @@@ F:      drivers/staging/dgnc
  
  DIGI EPCA PCI PRODUCTS
  M:    Lidza Louina <lidza.louina@gmail.com>
 -M:    Mark Hounschell <markh@compro.net>
  M:    Daeseok Youn <daeseok.youn@gmail.com>
  L:    driverdev-devel@linuxdriverproject.org
  S:    Maintained
@@@ -3629,13 -3586,6 +3629,13 @@@ F:    drivers/gpu/drm/i915
  F:    include/drm/i915*
  F:    include/uapi/drm/i915*
  
 +DRM DRIVERS FOR ATMEL HLCDC
 +M:    Boris Brezillon <boris.brezillon@free-electrons.com>
 +L:    dri-devel@lists.freedesktop.org
 +S:    Supported
 +F:    drivers/gpu/drm/atmel-hlcdc/
 +F:    Documentation/devicetree/bindings/drm/atmel/
 +
  DRM DRIVERS FOR EXYNOS
  M:    Inki Dae <inki.dae@samsung.com>
  M:    Joonyoung Shim <jy0922.shim@samsung.com>
@@@ -3664,14 -3614,6 +3664,14 @@@ S:    Maintaine
  F:    drivers/gpu/drm/imx/
  F:    Documentation/devicetree/bindings/drm/imx/
  
 +DRM DRIVERS FOR GMA500 (Poulsbo, Moorestown and derivative chipsets)
 +M:    Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
 +L:    dri-devel@lists.freedesktop.org
 +T:    git git://github.com/patjak/drm-gma500
 +S:    Maintained
 +F:    drivers/gpu/drm/gma500
 +F:    include/drm/gma500*
 +
  DRM DRIVERS FOR NVIDIA TEGRA
  M:    Thierry Reding <thierry.reding@gmail.com>
  M:    Terje Bergström <tbergstrom@nvidia.com>
@@@ -4056,7 -3998,7 +4056,7 @@@ S:      Maintaine
  F:    sound/usb/misc/ua101.c
  
  EXTENSIBLE FIRMWARE INTERFACE (EFI)
 -M:    Matt Fleming <matt.fleming@intel.com>
 +M:    Matt Fleming <matt@codeblueprint.co.uk>
  L:    linux-efi@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mfleming/efi.git
  S:    Maintained
@@@ -4071,7 -4013,7 +4071,7 @@@ F:      include/linux/efi*.
  EFI VARIABLE FILESYSTEM
  M:    Matthew Garrett <matthew.garrett@nebula.com>
  M:    Jeremy Kerr <jk@ozlabs.org>
 -M:    Matt Fleming <matt.fleming@intel.com>
 +M:    Matt Fleming <matt@codeblueprint.co.uk>
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mfleming/efi.git
  L:    linux-efi@vger.kernel.org
  S:    Maintained
@@@ -4465,14 -4407,6 +4465,14 @@@ L:    linuxppc-dev@lists.ozlabs.or
  S:    Maintained
  F:    drivers/net/ethernet/freescale/ucc_geth*
  
 +FREESCALE eTSEC ETHERNET DRIVER (GIANFAR)
 +M:    Claudiu Manoil <claudiu.manoil@freescale.com>
 +L:    netdev@vger.kernel.org
 +S:    Maintained
 +F:    drivers/net/ethernet/freescale/gianfar*
 +X:    drivers/net/ethernet/freescale/gianfar_ptp.c
 +F:    Documentation/devicetree/bindings/net/fsl-tsec-phy.txt
 +
  FREESCALE QUICC ENGINE UCC UART DRIVER
  M:    Timur Tabi <timur@tabi.org>
  L:    linuxppc-dev@lists.ozlabs.org
@@@ -5491,6 -5425,12 +5491,6 @@@ W:     https://01.org/linux-acp
  S:    Supported
  F:    drivers/platform/x86/intel_menlow.c
  
 -INTEL IA32 MICROCODE UPDATE SUPPORT
 -M:    Borislav Petkov <bp@alien8.de>
 -S:    Maintained
 -F:    arch/x86/kernel/cpu/microcode/core*
 -F:    arch/x86/kernel/cpu/microcode/intel*
 -
  INTEL I/OAT DMA DRIVER
  M:    Dave Jiang <dave.jiang@intel.com>
  R:    Dan Williams <dan.j.williams@intel.com>
@@@ -5601,7 -5541,7 +5601,7 @@@ F:      drivers/net/wireless/iwlegacy
  INTEL WIRELESS WIFI LINK (iwlwifi)
  M:    Johannes Berg <johannes.berg@intel.com>
  M:    Emmanuel Grumbach <emmanuel.grumbach@intel.com>
 -M:    Intel Linux Wireless <ilw@linux.intel.com>
 +M:    Intel Linux Wireless <linuxwifi@intel.com>
  L:    linux-wireless@vger.kernel.org
  W:    http://intellinuxwireless.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi.git
@@@ -6012,7 -5952,7 +6012,7 @@@ F:      virt/kvm
  KERNEL VIRTUAL MACHINE (KVM) FOR AMD-V
  M:    Joerg Roedel <joro@8bytes.org>
  L:    kvm@vger.kernel.org
 -W:    http://kvm.qumranet.com
 +W:    http://www.linux-kvm.org/
  S:    Maintained
  F:    arch/x86/include/asm/svm.h
  F:    arch/x86/kvm/svm.c
  KERNEL VIRTUAL MACHINE (KVM) FOR POWERPC
  M:    Alexander Graf <agraf@suse.com>
  L:    kvm-ppc@vger.kernel.org
 -W:    http://kvm.qumranet.com
 +W:    http://www.linux-kvm.org/
  T:    git git://github.com/agraf/linux-2.6.git
  S:    Supported
  F:    arch/powerpc/include/asm/kvm*
@@@ -6148,13 -6088,6 +6148,13 @@@ F:    Documentation/auxdisplay/ks010
  F:    drivers/auxdisplay/ks0108.c
  F:    include/linux/ks0108.h
  
 +L3MDEV
 +M:    David Ahern <dsa@cumulusnetworks.com>
 +L:    netdev@vger.kernel.org
 +S:    Maintained
 +F:    net/l3mdev
 +F:    include/net/l3mdev.h
 +
  LAPB module
  L:    linux-x25@vger.kernel.org
  S:    Orphan
@@@ -6519,11 -6452,11 +6519,11 @@@ F:   drivers/hwmon/ltc4261.
  LTP (Linux Test Project)
  M:    Mike Frysinger <vapier@gentoo.org>
  M:    Cyril Hrubis <chrubis@suse.cz>
 -M:    Wanlong Gao <gaowanlong@cn.fujitsu.com>
 +M:    Wanlong Gao <wanlong.gao@gmail.com>
  M:    Jan Stancek <jstancek@redhat.com>
  M:    Stanislav Kholmanskikh <stanislav.kholmanskikh@oracle.com>
  M:    Alexey Kodanev <alexey.kodanev@oracle.com>
 -L:    ltp-list@lists.sourceforge.net (subscribers-only)
 +L:    ltp@lists.linux.it (subscribers-only)
  W:    http://linux-test-project.github.io/
  T:    git git://github.com/linux-test-project/ltp.git
  S:    Maintained
@@@ -6622,13 -6555,6 +6622,13 @@@ M:    Guenter Roeck <linux@roeck-us.net
  S:    Maintained
  F:    drivers/net/dsa/mv88e6352.c
  
 +MARVELL CRYPTO DRIVER
 +M:    Boris Brezillon <boris.brezillon@free-electrons.com>
 +M:    Arnaud Ebalard <arno@natisbad.org>
 +F:    drivers/crypto/marvell/
 +S:    Maintained
 +L:    linux-crypto@vger.kernel.org
 +
  MARVELL GIGABIT ETHERNET DRIVERS (skge/sky2)
  M:    Mirko Lindner <mlindner@marvell.com>
  M:    Stephen Hemminger <stephen@networkplumber.org>
@@@ -6847,6 -6773,7 +6847,6 @@@ F:      drivers/scsi/megaraid
  
  MELLANOX ETHERNET DRIVER (mlx4_en)
  M:    Amir Vadai <amirv@mellanox.com>
 -M:    Ido Shamay <idos@mellanox.com>
  L:    netdev@vger.kernel.org
  S:    Supported
  W:    http://www.mellanox.com
@@@ -7039,7 -6966,6 +7039,7 @@@ M:      Alan Ott <alan@signal11.us
  L:    linux-wpan@vger.kernel.org
  S:    Maintained
  F:    drivers/net/ieee802154/mrf24j40.c
 +F:    Documentation/devicetree/bindings/net/ieee802154/mrf24j40.txt
  
  MSI LAPTOP SUPPORT
  M:    "Lee, Chun-Yi" <jlee@suse.com>
@@@ -7374,6 -7300,7 +7374,6 @@@ S:      Odd Fixe
  F:    drivers/net/
  F:    include/linux/if_*
  F:    include/linux/netdevice.h
 -F:    include/linux/arcdevice.h
  F:    include/linux/etherdevice.h
  F:    include/linux/fcdevice.h
  F:    include/linux/fddidevice.h
@@@ -8011,6 -7938,14 +8011,14 @@@ F:    include/linux/pci
  F:    arch/x86/pci/
  F:    arch/x86/kernel/quirks.c
  
+ PCI DRIVER FOR ALTERA PCIE IP
+ M:    Ley Foon Tan <lftan@altera.com>
+ L:    rfi@lists.rocketboards.org (moderated for non-subscribers)
+ L:    linux-pci@vger.kernel.org
+ S:    Supported
+ F:    Documentation/devicetree/bindings/pci/altera-pcie.txt
+ F:    drivers/pci/host/pcie-altera.c
  PCI DRIVER FOR ARM VERSATILE PLATFORM
  M:    Rob Herring <robh@kernel.org>
  L:    linux-pci@vger.kernel.org
@@@ -8112,6 -8047,14 +8120,14 @@@ L:    linux-pci@vger.kernel.or
  S:    Maintained
  F:    drivers/pci/host/*spear*
  
+ PCI MSI DRIVER FOR ALTERA MSI IP
+ M:    Ley Foon Tan <lftan@altera.com>
+ L:    rfi@lists.rocketboards.org (moderated for non-subscribers)
+ L:    linux-pci@vger.kernel.org
+ S:    Supported
+ F:    Documentation/devicetree/bindings/pci/altera-pcie-msi.txt
+ F:    drivers/pci/host/pcie-altera-msi.c
  PCI MSI DRIVER FOR APPLIEDMICRO XGENE
  M:    Duc Dang <dhdang@apm.com>
  L:    linux-pci@vger.kernel.org
@@@ -8120,6 -8063,13 +8136,13 @@@ S:    Maintaine
  F:    Documentation/devicetree/bindings/pci/xgene-pci-msi.txt
  F:    drivers/pci/host/pci-xgene-msi.c
  
+ PCIE DRIVER FOR HISILICON
+ M:    Zhou Wang <wangzhou1@hisilicon.com>
+ L:    linux-pci@vger.kernel.org
+ S:    Maintained
+ F:    Documentation/devicetree/bindings/pci/hisilicon-pcie.txt
+ F:    drivers/pci/host/pcie-hisi.c
  PCMCIA SUBSYSTEM
  P:    Linux PCMCIA Team
  L:    linux-pcmcia@lists.infradead.org
@@@ -8226,13 -8176,6 +8249,13 @@@ L:    linux-arm-kernel@lists.infradead.or
  S:    Maintained
  F:    drivers/pinctrl/pinctrl-at91.*
  
 +PIN CONTROLLER - ATMEL AT91 PIO4
 +M:    Ludovic Desroches <ludovic.desroches@atmel.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +L:    linux-gpio@vger.kernel.org
 +S:    Supported
 +F:    drivers/pinctrl/pinctrl-at91-pio4.*
 +
  PIN CONTROLLER - INTEL
  M:    Mika Westerberg <mika.westerberg@linux.intel.com>
  M:    Heikki Krogerus <heikki.krogerus@linux.intel.com>
@@@ -8580,6 -8523,7 +8603,6 @@@ F:      Documentation/networking/LICENSE.qla
  F:    drivers/net/ethernet/qlogic/qla3xxx.*
  
  QLOGIC QLCNIC (1/10)Gb ETHERNET DRIVER
 -M:    Shahed Shaikh <shahed.shaikh@qlogic.com>
  M:    Dept-GELinuxNICDev@qlogic.com
  L:    netdev@vger.kernel.org
  S:    Supported
@@@ -8594,16 -8538,6 +8617,16 @@@ L:    netdev@vger.kernel.or
  S:    Supported
  F:    drivers/net/ethernet/qlogic/qlge/
  
 +QLOGIC QL4xxx ETHERNET DRIVER
 +M:    Yuval Mintz <Yuval.Mintz@qlogic.com>
 +M:    Ariel Elior <Ariel.Elior@qlogic.com>
 +M:    everest-linux-l2@qlogic.com
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +F:    drivers/net/ethernet/qlogic/qed/
 +F:    include/linux/qed/
 +F:    drivers/net/ethernet/qlogic/qede/
 +
  QNX4 FILESYSTEM
  M:    Anders Larsen <al@alarsen.net>
  W:    http://www.alarsen.net/linux/qnx4fs/
@@@ -8955,13 -8889,6 +8978,13 @@@ S:    Maintaine
  F:    drivers/net/wireless/rtlwifi/
  F:    drivers/net/wireless/rtlwifi/rtl8192ce/
  
 +RTL8XXXU WIRELESS DRIVER (rtl8xxxu)
 +M:    Jes Sorensen <Jes.Sorensen@redhat.com>
 +L:    linux-wireless@vger.kernel.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jes/linux.git rtl8723au-mac80211
 +S:    Maintained
 +F:    drivers/net/wireless/realtek/rtl8xxxu/
 +
  S3 SAVAGE FRAMEBUFFER DRIVER
  M:    Antonino Daplas <adaplas@gmail.com>
  L:    linux-fbdev@vger.kernel.org
@@@ -9193,15 -9120,6 +9216,15 @@@ S: Supporte
  F: Documentation/devicetree/bindings/net/snps,dwc-qos-ethernet.txt
  F: drivers/net/ethernet/synopsys/dwc_eth_qos.c
  
 +SYNOPSYS DESIGNWARE I2C DRIVER
 +M:    Andy Shevchenko <andriy.shevchenko@linux.intel.com>
 +M:    Jarkko Nikula <jarkko.nikula@linux.intel.com>
 +M:    Mika Westerberg <mika.westerberg@linux.intel.com>
 +L:    linux-i2c@vger.kernel.org
 +S:    Maintained
 +F:    drivers/i2c/busses/i2c-designware-*
 +F:    include/linux/platform_data/i2c-designware.h
 +
  SYNOPSYS DESIGNWARE MMC/SD/SDIO DRIVER
  M:    Seungwon Jeon <tgih.jun@samsung.com>
  M:    Jaehoon Chung <jh80.chung@samsung.com>
@@@ -9254,16 -9172,6 +9277,16 @@@ W:    http://www.sunplus.co
  S:    Supported
  F:    arch/score/
  
 +SYSTEM CONTROL & POWER INTERFACE (SCPI) Message Protocol drivers
 +M:    Sudeep Holla <sudeep.holla@arm.com>
 +L:    linux-arm-kernel@lists.infradead.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/arm/arm,scpi.txt
 +F:    drivers/clk/clk-scpi.c
 +F:    drivers/cpufreq/scpi-cpufreq.c
 +F:    drivers/firmware/arm_scpi.c
 +F:    include/linux/scpi_protocol.h
 +
  SCSI CDROM DRIVER
  M:    Jens Axboe <axboe@kernel.dk>
  L:    linux-scsi@vger.kernel.org
@@@ -10019,12 -9927,13 +10042,12 @@@ F: drivers/staging/media/lirc
  STAGING - LUSTRE PARALLEL FILESYSTEM
  M:    Oleg Drokin <oleg.drokin@intel.com>
  M:    Andreas Dilger <andreas.dilger@intel.com>
 -L:    HPDD-discuss@lists.01.org (moderated for non-subscribers)
 -W:    http://lustre.opensfs.org/
 +L:    lustre-devel@lists.lustre.org (moderated for non-subscribers)
 +W:    http://wiki.lustre.org/
  S:    Maintained
  F:    drivers/staging/lustre
  
  STAGING - NVIDIA COMPLIANT EMBEDDED CONTROLLER INTERFACE (nvec)
 -M:    Julian Andres Klode <jak@jak-linux.org>
  M:    Marc Dietrich <marvin24@gmx.de>
  L:    ac100@lists.launchpad.net (moderated for non-subscribers)
  L:    linux-tegra@vger.kernel.org
@@@ -10179,7 -10088,6 +10202,7 @@@ F:   include/net/switchdev.
  
  SYNOPSYS ARC ARCHITECTURE
  M:    Vineet Gupta <vgupta@synopsys.com>
 +L:    linux-snps-arc@lists.infraded.org
  S:    Supported
  F:    arch/arc/
  F:    Documentation/devicetree/bindings/arc/*
@@@ -10453,16 -10361,6 +10476,16 @@@ F: include/uapi/linux/thermal.
  F:    include/linux/cpu_cooling.h
  F:    Documentation/devicetree/bindings/thermal/
  
 +THERMAL/CPU_COOLING
 +M:    Amit Daniel Kachhap <amit.kachhap@gmail.com>
 +M:    Viresh Kumar <viresh.kumar@linaro.org>
 +M:    Javi Merino <javi.merino@arm.com>
 +L:    linux-pm@vger.kernel.org
 +S:    Supported
 +F:    Documentation/thermal/cpu-cooling-api.txt
 +F:    drivers/thermal/cpu_cooling.c
 +F:    include/linux/cpu_cooling.h
 +
  THINGM BLINK(1) USB RGB LED DRIVER
  M:    Vivien Didelot <vivien.didelot@savoirfairelinux.com>
  S:    Maintained
@@@ -11211,12 -11109,6 +11234,12 @@@ S: Maintaine
  F:    drivers/media/v4l2-core/videobuf2-*
  F:    include/media/videobuf2-*
  
 +VIRTUAL SERIO DEVICE DRIVER
 +M:    Stephen Chandler Paul <thatslyude@gmail.com>
 +S:    Maintained
 +F:    drivers/input/serio/userio.c
 +F:    include/uapi/linux/userio.h
 +
  VIRTIO CONSOLE DRIVER
  M:    Amit Shah <amit.shah@redhat.com>
  L:    virtualization@lists.linux-foundation.org
@@@ -11318,7 -11210,7 +11341,7 @@@ F:   drivers/vlynq/vlynq.
  F:    include/linux/vlynq.h
  
  VME SUBSYSTEM
 -M:    Martyn Welch <martyn.welch@ge.com>
 +M:    Martyn Welch <martyn@welchs.me.uk>
  M:    Manohar Vanga <manohar.vanga@gmail.com>
  M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  L:    devel@driverdev.osuosl.org
@@@ -11370,6 -11262,7 +11393,6 @@@ VOLTAGE AND CURRENT REGULATOR FRAMEWOR
  M:    Liam Girdwood <lgirdwood@gmail.com>
  M:    Mark Brown <broonie@kernel.org>
  L:    linux-kernel@vger.kernel.org
 -W:    http://opensource.wolfsonmicro.com/node/15
  W:    http://www.slimlogic.co.uk/?p=48
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git
  S:    Supported
@@@ -11382,7 -11275,7 +11405,7 @@@ M:   Shrijeet Mukherjee <shm@cumulusnetwo
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    drivers/net/vrf.c
 -F:    include/net/vrf.h
 +F:    Documentation/networking/vrf.txt
  
  VT1211 HARDWARE MONITOR DRIVER
  M:    Juerg Haefliger <juergh@gmail.com>
@@@ -11494,10 -11387,21 +11517,10 @@@ W:        http://oops.ghostprotocols.net:81/bl
  S:    Maintained
  F:    drivers/net/wireless/wl3501*
  
 -WM97XX TOUCHSCREEN DRIVERS
 -M:    Mark Brown <broonie@kernel.org>
 -M:    Liam Girdwood <lrg@slimlogic.co.uk>
 -L:    linux-input@vger.kernel.org
 -T:    git git://opensource.wolfsonmicro.com/linux-2.6-touch
 -W:    http://opensource.wolfsonmicro.com/node/7
 -S:    Supported
 -F:    drivers/input/touchscreen/*wm97*
 -F:    include/linux/wm97xx.h
 -
  WOLFSON MICROELECTRONICS DRIVERS
  L:    patches@opensource.wolfsonmicro.com
 -T:    git git://opensource.wolfsonmicro.com/linux-2.6-asoc
 -T:    git git://opensource.wolfsonmicro.com/linux-2.6-audioplus
 -W:    http://opensource.wolfsonmicro.com/content/linux-drivers-wolfson-devices
 +T:    git https://github.com/CirrusLogic/linux-drivers.git
 +W:    https://github.com/CirrusLogic/linux-drivers/wiki
  S:    Supported
  F:    Documentation/hwmon/wm83??
  F:    arch/arm/mach-s3c64xx/mach-crag6410*
@@@ -11568,11 -11472,6 +11591,11 @@@ L: linux-edac@vger.kernel.or
  S:    Maintained
  F:    arch/x86/kernel/cpu/mcheck/*
  
 +X86 MICROCODE UPDATE SUPPORT
 +M:    Borislav Petkov <bp@alien8.de>
 +S:    Maintained
 +F:    arch/x86/kernel/cpu/microcode/*
 +
  X86 VDSO
  M:    Andy Lutomirski <luto@amacapital.net>
  L:    linux-kernel@vger.kernel.org
@@@ -11773,7 -11672,6 +11796,7 @@@ F:   drivers/tty/serial/zs.
  ZSMALLOC COMPRESSED SLAB MEMORY ALLOCATOR
  M:    Minchan Kim <minchan@kernel.org>
  M:    Nitin Gupta <ngupta@vflare.org>
 +R:    Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
  L:    linux-mm@kvack.org
  S:    Maintained
  F:    mm/zsmalloc.c
@@@ -40,6 -40,7 +40,7 @@@
  #include <linux/seq_file.h>
  #include <linux/root_dev.h>
  #include <linux/of.h>
+ #include <linux/of_pci.h>
  #include <linux/kexec.h>
  
  #include <asm/mmu.h>
@@@ -111,7 -112,7 +112,7 @@@ static void __init fwnmi_init(void
                fwnmi_active = 1;
  }
  
 -static void pseries_8259_cascade(unsigned int irq, struct irq_desc *desc)
 +static void pseries_8259_cascade(struct irq_desc *desc)
  {
        struct irq_chip *chip = irq_desc_get_chip(desc);
        unsigned int cascade_irq = i8259_irq();
@@@ -495,18 -496,7 +496,7 @@@ static void __init find_and_init_phbs(v
         * PCI_PROBE_ONLY and PCI_REASSIGN_ALL_BUS can be set via properties
         * in chosen.
         */
-       if (of_chosen) {
-               const int *prop;
-               prop = of_get_property(of_chosen,
-                               "linux,pci-probe-only", NULL);
-               if (prop) {
-                       if (*prop)
-                               pci_add_flags(PCI_PROBE_ONLY);
-                       else
-                               pci_clear_flags(PCI_PROBE_ONLY);
-               }
-       }
+       of_pci_check_probe_only();
  }
  
  static void __init pSeries_setup_arch(void)
@@@ -837,6 -827,10 +827,6 @@@ static int pSeries_pci_probe_mode(struc
        return PCI_PROBE_NORMAL;
  }
  
 -#ifndef CONFIG_PCI
 -void pSeries_final_fixup(void) { }
 -#endif
 -
  struct pci_controller_ops pseries_pci_controller_ops = {
        .probe_mode             = pSeries_pci_probe_mode,
  };
diff --combined arch/x86/pci/common.c
@@@ -166,7 -166,6 +166,7 @@@ void pcibios_fixup_bus(struct pci_bus *
  {
        struct pci_dev *dev;
  
 +      pci_read_bridge_bases(b);
        list_for_each_entry(dev, &b->devices, bus_list)
                pcibios_fixup_device_resources(dev);
  }
@@@ -675,6 -674,14 +675,14 @@@ int pcibios_add_device(struct pci_dev *
  
  int pcibios_alloc_irq(struct pci_dev *dev)
  {
+       /*
+        * If the PCI device was already claimed by core code and has
+        * MSI enabled, probing of the pcibios IRQ will overwrite
+        * dev->irq.  So bail out if MSI is already enabled.
+        */
+       if (pci_dev_msi_enabled(dev))
+               return -EBUSY;
        return pcibios_enable_irq(dev);
  }
  
diff --combined drivers/pci/msi.c
@@@ -20,7 -20,6 +20,7 @@@
  #include <linux/io.h>
  #include <linux/slab.h>
  #include <linux/irqdomain.h>
 +#include <linux/of_irq.h>
  
  #include "pci.h"
  
@@@ -106,9 -105,12 +106,12 @@@ void __weak arch_teardown_msi_irq(unsig
  
  int __weak arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
  {
+       struct msi_controller *chip = dev->bus->msi;
        struct msi_desc *entry;
        int ret;
  
+       if (chip && chip->setup_irqs)
+               return chip->setup_irqs(chip, dev, nvec, type);
        /*
         * If an architecture wants to support multiple MSI, it needs to
         * override arch_setup_msi_irqs()
@@@ -476,10 -478,11 +479,11 @@@ static int populate_msi_sysfs(struct pc
        int ret = -ENOMEM;
        int num_msi = 0;
        int count = 0;
+       int i;
  
        /* Determine how many msi entries we have */
        for_each_pci_msi_entry(entry, pdev)
-               ++num_msi;
+               num_msi += entry->nvec_used;
        if (!num_msi)
                return 0;
  
        if (!msi_attrs)
                return -ENOMEM;
        for_each_pci_msi_entry(entry, pdev) {
-               msi_dev_attr = kzalloc(sizeof(*msi_dev_attr), GFP_KERNEL);
-               if (!msi_dev_attr)
-                       goto error_attrs;
-               msi_attrs[count] = &msi_dev_attr->attr;
-               sysfs_attr_init(&msi_dev_attr->attr);
-               msi_dev_attr->attr.name = kasprintf(GFP_KERNEL, "%d",
-                                                   entry->irq);
-               if (!msi_dev_attr->attr.name)
-                       goto error_attrs;
-               msi_dev_attr->attr.mode = S_IRUGO;
-               msi_dev_attr->show = msi_mode_show;
-               ++count;
+               for (i = 0; i < entry->nvec_used; i++) {
+                       msi_dev_attr = kzalloc(sizeof(*msi_dev_attr), GFP_KERNEL);
+                       if (!msi_dev_attr)
+                               goto error_attrs;
+                       msi_attrs[count] = &msi_dev_attr->attr;
+                       sysfs_attr_init(&msi_dev_attr->attr);
+                       msi_dev_attr->attr.name = kasprintf(GFP_KERNEL, "%d",
+                                                           entry->irq + i);
+                       if (!msi_dev_attr->attr.name)
+                               goto error_attrs;
+                       msi_dev_attr->attr.mode = S_IRUGO;
+                       msi_dev_attr->show = msi_mode_show;
+                       ++count;
+               }
        }
  
        msi_irq_group = kzalloc(sizeof(*msi_irq_group), GFP_KERNEL);
@@@ -1244,15 -1249,11 +1250,15 @@@ static void pci_msi_domain_update_chip_
        BUG_ON(!chip);
        if (!chip->irq_write_msi_msg)
                chip->irq_write_msi_msg = pci_msi_domain_write_msg;
 +      if (!chip->irq_mask)
 +              chip->irq_mask = pci_msi_mask_irq;
 +      if (!chip->irq_unmask)
 +              chip->irq_unmask = pci_msi_unmask_irq;
  }
  
  /**
 - * pci_msi_create_irq_domain - Creat a MSI interrupt domain
 - * @node:     Optional device-tree node of the interrupt controller
 + * pci_msi_create_irq_domain - Create a MSI interrupt domain
 + * @fwnode:   Optional fwnode of the interrupt controller
   * @info:     MSI domain info
   * @parent:   Parent irq domain
   *
   * Returns:
   * A domain pointer or NULL in case of failure.
   */
 -struct irq_domain *pci_msi_create_irq_domain(struct device_node *node,
 +struct irq_domain *pci_msi_create_irq_domain(struct fwnode_handle *fwnode,
                                             struct msi_domain_info *info,
                                             struct irq_domain *parent)
  {
        if (info->flags & MSI_FLAG_USE_DEF_CHIP_OPS)
                pci_msi_domain_update_chip_ops(info);
  
 -      domain = msi_create_irq_domain(node, info, parent);
 +      domain = msi_create_irq_domain(fwnode, info, parent);
        if (!domain)
                return NULL;
  
@@@ -1308,14 -1309,14 +1314,14 @@@ void pci_msi_domain_free_irqs(struct ir
  
  /**
   * pci_msi_create_default_irq_domain - Create a default MSI interrupt domain
 - * @node:     Optional device-tree node of the interrupt controller
 + * @fwnode:   Optional fwnode of the interrupt controller
   * @info:     MSI domain info
   * @parent:   Parent irq domain
   *
   * Returns: A domain pointer or NULL in case of failure. If successful
   * the default PCI/MSI irqdomain pointer is updated.
   */
 -struct irq_domain *pci_msi_create_default_irq_domain(struct device_node *node,
 +struct irq_domain *pci_msi_create_default_irq_domain(struct fwnode_handle *fwnode,
                struct msi_domain_info *info, struct irq_domain *parent)
  {
        struct irq_domain *domain;
                pr_err("PCI: default irq domain for PCI MSI has already been created.\n");
                domain = NULL;
        } else {
 -              domain = pci_msi_create_irq_domain(node, info, parent);
 +              domain = pci_msi_create_irq_domain(fwnode, info, parent);
                pci_msi_default_domain = domain;
        }
        mutex_unlock(&pci_msi_domain_lock);
  
        return domain;
  }
 +
 +static int get_msi_id_cb(struct pci_dev *pdev, u16 alias, void *data)
 +{
 +      u32 *pa = data;
 +
 +      *pa = alias;
 +      return 0;
 +}
 +/**
 + * pci_msi_domain_get_msi_rid - Get the MSI requester id (RID)
 + * @domain:   The interrupt domain
 + * @pdev:     The PCI device.
 + *
 + * The RID for a device is formed from the alias, with a firmware
 + * supplied mapping applied
 + *
 + * Returns: The RID.
 + */
 +u32 pci_msi_domain_get_msi_rid(struct irq_domain *domain, struct pci_dev *pdev)
 +{
 +      struct device_node *of_node;
 +      u32 rid = 0;
 +
 +      pci_for_each_dma_alias(pdev, get_msi_id_cb, &rid);
 +
 +      of_node = irq_domain_get_of_node(domain);
 +      if (of_node)
 +              rid = of_msi_map_rid(&pdev->dev, of_node, rid);
 +
 +      return rid;
 +}
 +
 +/**
 + * pci_msi_get_device_domain - Get the MSI domain for a given PCI device
 + * @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).
 + *
 + * Returns: The coresponding MSI domain or NULL if none has been found.
 + */
 +struct irq_domain *pci_msi_get_device_domain(struct pci_dev *pdev)
 +{
 +      u32 rid = 0;
 +
 +      pci_for_each_dma_alias(pdev, get_msi_id_cb, &rid);
 +      return of_msi_map_get_device_domain(&pdev->dev, rid);
 +}
  #endif /* CONFIG_PCI_MSI_IRQ_DOMAIN */
diff --combined drivers/pci/pci-driver.c
@@@ -172,7 -172,7 +172,7 @@@ static ssize_t store_remove_id(struct d
        __u32 vendor, device, subvendor = PCI_ANY_ID,
                subdevice = PCI_ANY_ID, class = 0, class_mask = 0;
        int fields = 0;
-       int retval = -ENODEV;
+       size_t retval = -ENODEV;
  
        fields = sscanf(buf, "%x %x %x %x %x %x",
                        &vendor, &device, &subvendor, &subdevice,
                    !((id->class ^ class) & class_mask)) {
                        list_del(&dynid->node);
                        kfree(dynid);
-                       retval = 0;
+                       retval = count;
                        break;
                }
        }
        spin_unlock(&pdrv->dynids.lock);
  
-       if (retval)
-               return retval;
-       return count;
+       return retval;
  }
  static DRIVER_ATTR(remove_id, S_IWUSR, NULL, store_remove_id);
  
@@@ -299,10 -297,9 +297,10 @@@ static long local_pci_probe(void *_ddi
         * Unbound PCI devices are always put in D0, regardless of
         * runtime PM status.  During probe, the device is set to
         * active and the usage count is incremented.  If the driver
 -       * supports runtime PM, it should call pm_runtime_put_noidle()
 -       * in its probe routine and pm_runtime_get_noresume() in its
 -       * remove routine.
 +       * supports runtime PM, it should call pm_runtime_put_noidle(),
 +       * or any other runtime PM helper function decrementing the usage
 +       * count, in its probe routine and pm_runtime_get_noresume() in
 +       * its remove routine.
         */
        pm_runtime_get_sync(dev);
        pci_dev->driver = pci_drv;
diff --combined drivers/pci/probe.c
@@@ -12,6 -12,7 +12,7 @@@
  #include <linux/module.h>
  #include <linux/cpumask.h>
  #include <linux/pci-aspm.h>
+ #include <linux/aer.h>
  #include <asm-generic/pci-bridge.h>
  #include "pci.h"
  
@@@ -676,20 -677,15 +677,20 @@@ static struct irq_domain *pci_host_brid
  static void pci_set_bus_msi_domain(struct pci_bus *bus)
  {
        struct irq_domain *d;
 +      struct pci_bus *b;
  
        /*
 -       * Either bus is the root, and we must obtain it from the
 -       * firmware, or we inherit it from the bridge device.
 +       * The bus can be a root bus, a subordinate bus, or a virtual bus
 +       * created by an SR-IOV device.  Walk up to the first bridge device
 +       * found or derive the domain from the host bridge.
         */
 -      if (pci_is_root_bus(bus))
 -              d = pci_host_bridge_msi_domain(bus);
 -      else
 -              d = dev_get_msi_domain(&bus->self->dev);
 +      for (b = bus, d = NULL; !d && !pci_is_root_bus(b); b = b->parent) {
 +              if (b->self)
 +                      d = dev_get_msi_domain(&b->self->dev);
 +      }
 +
 +      if (!d)
 +              d = pci_host_bridge_msi_domain(b);
  
        dev_set_msi_domain(&bus->dev, d);
  }
@@@ -860,6 -856,9 +861,6 @@@ int pci_scan_bridge(struct pci_bus *bus
                        child->bridge_ctl = bctl;
                }
  
 -              /* Read and initialize bridge resources */
 -              pci_read_bridge_bases(child);
 -
                cmax = pci_scan_child_bus(child);
                if (cmax > subordinate)
                        dev_warn(&dev->dev, "bridge has subordinate %02x but max busn %02x\n",
  
                if (!is_cardbus) {
                        child->bridge_ctl = bctl;
 -
 -                      /* Read and initialize bridge resources */
 -                      pci_read_bridge_bases(child);
                        max = pci_scan_child_bus(child);
                } else {
                        /*
@@@ -1597,6 -1599,9 +1598,9 @@@ static struct pci_dev *pci_scan_device(
  
  static void pci_init_capabilities(struct pci_dev *dev)
  {
+       /* Enhanced Allocation */
+       pci_ea_init(dev);
        /* MSI/MSI-X list */
        pci_msi_init_pci_dev(dev);
  
  
        /* Enable ACS P2P upstream forwarding */
        pci_enable_acs(dev);
+       pci_cleanup_aer_error_status_regs(dev);
  }
  
 +/*
 + * This is the equivalent of pci_host_bridge_msi_domain that acts on
 + * devices. Firmware interfaces that can select the MSI domain on a
 + * per-device basis should be called from here.
 + */
 +static struct irq_domain *pci_dev_msi_domain(struct pci_dev *dev)
 +{
 +      struct irq_domain *d;
 +
 +      /*
 +       * If a domain has been set through the pcibios_add_device
 +       * callback, then this is the one (platform code knows best).
 +       */
 +      d = dev_get_msi_domain(&dev->dev);
 +      if (d)
 +              return d;
 +
 +      /*
 +       * Let's see if we have a firmware interface able to provide
 +       * the domain.
 +       */
 +      d = pci_msi_get_device_domain(dev);
 +      if (d)
 +              return d;
 +
 +      return NULL;
 +}
 +
  static void pci_set_msi_domain(struct pci_dev *dev)
  {
 +      struct irq_domain *d;
 +
        /*
 -       * If no domain has been set through the pcibios_add_device
 -       * callback, inherit the default from the bus device.
 +       * If the platform or firmware interfaces cannot supply a
 +       * device-specific MSI domain, then inherit the default domain
 +       * from the host bridge itself.
         */
 -      if (!dev_get_msi_domain(&dev->dev))
 -              dev_set_msi_domain(&dev->dev,
 -                                 dev_get_msi_domain(&dev->bus->dev));
 +      d = pci_dev_msi_domain(dev);
 +      if (!d)
 +              d = dev_get_msi_domain(&dev->bus->dev);
 +
 +      dev_set_msi_domain(&dev->dev, d);
  }
  
  void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
diff --combined drivers/pci/quirks.c
@@@ -1907,27 -1907,11 +1907,27 @@@ static void quirk_netmos(struct pci_de
  DECLARE_PCI_FIXUP_CLASS_HEADER(PCI_VENDOR_ID_NETMOS, PCI_ANY_ID,
                         PCI_CLASS_COMMUNICATION_SERIAL, 8, quirk_netmos);
  
 +/*
 + * Quirk non-zero PCI functions to route VPD access through function 0 for
 + * devices that share VPD resources between functions.  The functions are
 + * expected to be identical devices.
 + */
  static void quirk_f0_vpd_link(struct pci_dev *dev)
  {
 -      if (!dev->multifunction || !PCI_FUNC(dev->devfn))
 +      struct pci_dev *f0;
 +
 +      if (!PCI_FUNC(dev->devfn))
                return;
 -      dev->dev_flags |= PCI_DEV_FLAGS_VPD_REF_F0;
 +
 +      f0 = pci_get_slot(dev->bus, PCI_DEVFN(PCI_SLOT(dev->devfn), 0));
 +      if (!f0)
 +              return;
 +
 +      if (f0->vpd && dev->class == f0->class &&
 +          dev->vendor == f0->vendor && dev->device == f0->device)
 +              dev->dev_flags |= PCI_DEV_FLAGS_VPD_REF_F0;
 +
 +      pci_dev_put(f0);
  }
  DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, PCI_ANY_ID,
                              PCI_CLASS_NETWORK_ETHERNET, 8, quirk_f0_vpd_link);
@@@ -2246,6 -2230,7 +2246,7 @@@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_V
  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3351, quirk_disable_all_msi);
  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3364, quirk_disable_all_msi);
  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8380_0, quirk_disable_all_msi);
+ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SI, 0x0761, quirk_disable_all_msi);
  
  /* Disable MSI on chipsets that are known to not support it */
  static void quirk_disable_msi(struct pci_dev *dev)
@@@ -3707,6 -3692,63 +3708,63 @@@ DECLARE_PCI_FIXUP_CLASS_EARLY(0x1797, 0
  DECLARE_PCI_FIXUP_CLASS_EARLY(0x1797, 0x6869, PCI_CLASS_NOT_DEFINED, 8,
                              quirk_tw686x_class);
  
+ /*
+  * 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
+  * corresponding Request, except as explicitly allowed when IDO is used."
+  *
+  * If a non-compliant device generates a completion with a different
+  * attribute than the request, the receiver may accept it (which itself
+  * seems non-compliant based on sec 2.3.2), or it may handle it as a
+  * Malformed TLP or an Unexpected Completion, which will probably lead to a
+  * device access timeout.
+  *
+  * If the non-compliant device generates completions with zero attributes
+  * (instead of copying the attributes from the request), we can work around
+  * this by disabling the "Relaxed Ordering" and "No Snoop" attributes in
+  * upstream devices so they always generate requests with zero attributes.
+  *
+  * This affects other devices under the same Root Port, but since these
+  * attributes are performance hints, there should be no functional problem.
+  *
+  * Note that Configuration Space accesses are never supposed to have TLP
+  * Attributes, so we're safe waiting till after any Configuration Space
+  * accesses to do the Root Port fixup.
+  */
+ static void quirk_disable_root_port_attributes(struct pci_dev *pdev)
+ {
+       struct pci_dev *root_port = pci_find_pcie_root_port(pdev);
+       if (!root_port) {
+               dev_warn(&pdev->dev, "PCIe Completion erratum may cause device errors\n");
+               return;
+       }
+       dev_info(&root_port->dev, "Disabling No Snoop/Relaxed Ordering Attributes to avoid PCIe Completion erratum in %s\n",
+                dev_name(&pdev->dev));
+       pcie_capability_clear_and_set_word(root_port, PCI_EXP_DEVCTL,
+                                          PCI_EXP_DEVCTL_RELAX_EN |
+                                          PCI_EXP_DEVCTL_NOSNOOP_EN, 0);
+ }
+ /*
+  * The Chelsio T5 chip fails to copy TLP Attributes from a Request to the
+  * Completion it generates.
+  */
+ static void quirk_chelsio_T5_disable_root_port_attributes(struct pci_dev *pdev)
+ {
+       /*
+        * This mask/compare operation selects for Physical Function 4 on a
+        * T5.  We only need to fix up the Root Port once for any of the
+        * PFs.  PF[0..3] have PCI Device IDs of 0x50xx, but PF4 is uniquely
+        * 0x54xx so we use that one,
+        */
+       if ((pdev->device & 0xff00) == 0x5400)
+               quirk_disable_root_port_attributes(pdev);
+ }
+ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_CHELSIO, PCI_ANY_ID,
+                        quirk_chelsio_T5_disable_root_port_attributes);
  /*
   * AMD has indicated that the devices below do not support peer-to-peer
   * in any system where they are found in the southbridge with an AMD
diff --combined include/linux/msi.h
@@@ -163,6 -163,8 +163,8 @@@ struct msi_controller 
  
        int (*setup_irq)(struct msi_controller *chip, struct pci_dev *dev,
                         struct msi_desc *desc);
+       int (*setup_irqs)(struct msi_controller *chip, struct pci_dev *dev,
+                         int nvec, int type);
        void (*teardown_irq)(struct msi_controller *chip, unsigned int irq);
  };
  
  struct irq_domain;
  struct irq_chip;
  struct device_node;
 +struct fwnode_handle;
  struct msi_domain_info;
  
  /**
@@@ -263,7 -264,7 +265,7 @@@ enum 
  int msi_domain_set_affinity(struct irq_data *data, const struct cpumask *mask,
                            bool force);
  
 -struct irq_domain *msi_create_irq_domain(struct device_node *of_node,
 +struct irq_domain *msi_create_irq_domain(struct fwnode_handle *fwnode,
                                         struct msi_domain_info *info,
                                         struct irq_domain *parent);
  int msi_domain_alloc_irqs(struct irq_domain *domain, struct device *dev,
  void msi_domain_free_irqs(struct irq_domain *domain, struct device *dev);
  struct msi_domain_info *msi_get_domain_info(struct irq_domain *domain);
  
 -struct irq_domain *platform_msi_create_irq_domain(struct device_node *np,
 +struct irq_domain *platform_msi_create_irq_domain(struct fwnode_handle *fwnode,
                                                  struct msi_domain_info *info,
                                                  struct irq_domain *parent);
  int platform_msi_domain_alloc_irqs(struct device *dev, unsigned int nvec,
@@@ -281,26 -282,19 +283,26 @@@ void platform_msi_domain_free_irqs(stru
  
  #ifdef CONFIG_PCI_MSI_IRQ_DOMAIN
  void pci_msi_domain_write_msg(struct irq_data *irq_data, struct msi_msg *msg);
 -struct irq_domain *pci_msi_create_irq_domain(struct device_node *node,
 +struct irq_domain *pci_msi_create_irq_domain(struct fwnode_handle *fwnode,
                                             struct msi_domain_info *info,
                                             struct irq_domain *parent);
  int pci_msi_domain_alloc_irqs(struct irq_domain *domain, struct pci_dev *dev,
                              int nvec, int type);
  void pci_msi_domain_free_irqs(struct irq_domain *domain, struct pci_dev *dev);
 -struct irq_domain *pci_msi_create_default_irq_domain(struct device_node *node,
 +struct irq_domain *pci_msi_create_default_irq_domain(struct fwnode_handle *fwnode,
                 struct msi_domain_info *info, struct irq_domain *parent);
  
  irq_hw_number_t pci_msi_domain_calc_hwirq(struct pci_dev *dev,
                                          struct msi_desc *desc);
  int pci_msi_domain_check_cap(struct irq_domain *domain,
                             struct msi_domain_info *info, struct device *dev);
 +u32 pci_msi_domain_get_msi_rid(struct irq_domain *domain, struct pci_dev *pdev);
 +struct irq_domain *pci_msi_get_device_domain(struct pci_dev *pdev);
 +#else
 +static inline struct irq_domain *pci_msi_get_device_domain(struct pci_dev *pdev)
 +{
 +      return NULL;
 +}
  #endif /* CONFIG_PCI_MSI_IRQ_DOMAIN */
  
  #endif /* LINUX_MSI_H */