Merge branch 'for-linus' of git://git.infradead.org/users/vkoul/slave-dma
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 19 Oct 2014 01:11:04 +0000 (18:11 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 19 Oct 2014 01:11:04 +0000 (18:11 -0700)
Pull slave-dmaengine updates from Vinod Koul:
 "For dmaengine contributions we have:
   - designware cleanup by Andy
   - my series moving device_control users to dmanegine_xxx APIs for
     later removal of device_control API
   - minor fixes spread over drivers mainly mv_xor, pl330, mmp, imx-sdma
     etc"

* 'for-linus' of git://git.infradead.org/users/vkoul/slave-dma: (60 commits)
  serial: atmel: add missing dmaengine header
  dmaengine: remove FSLDMA_EXTERNAL_START
  dmaengine: freescale: remove FSLDMA_EXTERNAL_START control method
  carma-fpga: move to fsl_dma_external_start()
  carma-fpga: use dmaengine_xxx() API
  dmaengine: freescale: add and export fsl_dma_external_start()
  dmaengine: add dmaengine_prep_dma_sg() helper
  video: mx3fb: use dmaengine_terminate_all() API
  serial: sh-sci: use dmaengine_terminate_all() API
  net: ks8842: use dmaengine_terminate_all() API
  mtd: sh_flctl: use dmaengine_terminate_all() API
  mtd: fsmc_nand: use dmaengine_terminate_all() API
  V4L2: mx3_camer: use dmaengine_pause() API
  dmaengine: coh901318: use dmaengine_terminate_all() API
  pata_arasan_cf: use dmaengine_terminate_all() API
  dmaengine: edma: check for echan->edesc => NULL in edma_dma_pause()
  dmaengine: dw: export probe()/remove() and Co to users
  dmaengine: dw: enable and disable controller when needed
  dmaengine: dw: always export dw_dma_{en,dis}able
  dmaengine: dw: introduce dw_dma_on() helper
  ...

12 files changed:
1  2 
MAINTAINERS
drivers/dma/Kconfig
drivers/dma/mv_xor.c
drivers/misc/carma/carma-fpga-program.c
drivers/spi/spi-pxa2xx-pci.c
drivers/spi/spi-pxa2xx.c
drivers/tty/serial/8250/8250.h
drivers/tty/serial/8250/8250_dw.c
drivers/tty/serial/8250/8250_pci.c
drivers/tty/serial/atmel_serial.c
drivers/video/fbdev/mx3fb.c
include/linux/dmaengine.h

diff --combined MAINTAINERS
index 6c59c6697a541cba414e40c2e462d8419986ba1d,a100729638892f84da5a62ac2206462fda893e00..33c0d433d55430acfec715337b05d8f6f5ec2f1b
@@@ -152,9 -152,8 +152,9 @@@ F: drivers/scsi/53c700
  
  6LOWPAN GENERIC (BTLE/IEEE 802.15.4)
  M:    Alexander Aring <alex.aring@gmail.com>
 -L:    linux-zigbee-devel@lists.sourceforge.net (moderated for non-subscribers)
 +M:    Jukka Rissanen <jukka.rissanen@linux.intel.com>
  L:    linux-bluetooth@vger.kernel.org
 +L:    linux-wpan@vger.kernel.org
  S:    Maintained
  F:    net/6lowpan/
  F:    include/net/6lowpan.h
@@@ -564,7 -563,7 +564,7 @@@ L: linux-alpha@vger.kernel.or
  F:    arch/alpha/
  
  ALTERA TRIPLE SPEED ETHERNET DRIVER
 -M:    Vince Bridgers <vbridgers2013@gmail.com>
 +M:    Vince Bridgers <vbridger@opensource.altera.com>
  L:    netdev@vger.kernel.org
  L:    nios2-dev@lists.rocketboards.org (moderated for non-subscribers)
  S:    Maintained
@@@ -686,17 -685,6 +686,17 @@@ L:       alsa-devel@alsa-project.org (moderat
  W:    http://blackfin.uclinux.org/
  S:    Supported
  F:    sound/soc/blackfin/*
 + 
 +ANALOG DEVICES INC IIO DRIVERS
 +M:    Lars-Peter Clausen <lars@metafoo.de>
 +M:    Michael Hennerich <Michael.Hennerich@analog.com>
 +W:    http://wiki.analog.com/
 +W:    http://ez.analog.com/community/linux-device-drivers
 +S:    Supported
 +F:    drivers/iio/*/ad*
 +X:    drivers/iio/*/adjd*
 +F:    drivers/staging/iio/*/ad*
 +F:    staging/iio/trigger/iio-trig-bfin-timer.c
  
  AOA (Apple Onboard Audio) ALSA DRIVER
  M:    Johannes Berg <johannes@sipsolutions.net>
@@@ -734,6 -722,7 +734,6 @@@ F: net/appletalk
  APPLIED MICRO (APM) X-GENE SOC ETHERNET DRIVER
  M:    Iyappan Subramanian <isubramanian@apm.com>
  M:    Keyur Chudgar <kchudgar@apm.com>
 -M:    Ravi Patel <rapatel@apm.com>
  S:    Supported
  F:    drivers/net/ethernet/apm/xgene/
  F:    Documentation/devicetree/bindings/net/apm-xgene-enet.txt
@@@ -846,12 -835,6 +846,12 @@@ M:       Emilio López <emilio@elopez.com.ar
  S:    Maintained
  F:    drivers/clk/sunxi/
  
 +ARM/Amlogic MesonX SoC support
 +M:    Carlo Caione <carlo@caione.org>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +N:    meson[x68]
 +
  ARM/ATMEL AT91RM9200 AND AT91SAM ARM ARCHITECTURES
  M:    Andrew Victor <linux@maxim.org.za>
  M:    Nicolas Ferre <nicolas.ferre@atmel.com>
@@@ -878,9 -861,10 +878,9 @@@ S:        Maintaine
  F:    arch/arm/mach-highbank/
  
  ARM/CAVIUM NETWORKS CNS3XXX MACHINE SUPPORT
 -M:    Anton Vorontsov <anton@enomsg.org>
 +M:    Krzysztof Halasa <khalasa@piap.pl>
  S:    Maintained
  F:    arch/arm/mach-cns3xxx/
 -T:    git git://git.infradead.org/users/cbou/linux-cns3xxx.git
  
  ARM/CIRRUS LOGIC CLPS711X ARM ARCHITECTURE
  M:    Alexander Shiyan <shc_work@mail.ru>
@@@ -980,7 -964,7 +980,7 @@@ F: arch/arm/include/asm/hardware/dec212
  F:    arch/arm/mach-footbridge/
  
  ARM/FREESCALE IMX / MXC ARM ARCHITECTURE
 -M:    Shawn Guo <shawn.guo@freescale.com>
 +M:    Shawn Guo <shawn.guo@linaro.org>
  M:    Sascha Hauer <kernel@pengutronix.de>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
@@@ -1041,20 -1025,24 +1041,20 @@@ F:   arch/arm/mach-pxa/colibri-pxa270-inc
  
  ARM/INTEL IOP32X ARM ARCHITECTURE
  M:    Lennert Buytenhek <kernel@wantstofly.org>
 -M:    Dan Williams <dan.j.williams@intel.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  
  ARM/INTEL IOP33X ARM ARCHITECTURE
 -M:    Dan Williams <dan.j.williams@intel.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Maintained
 +S:    Orphan
  
  ARM/INTEL IOP13XX ARM ARCHITECTURE
  M:    Lennert Buytenhek <kernel@wantstofly.org>
 -M:    Dan Williams <dan.j.williams@intel.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  
  ARM/INTEL IQ81342EX MACHINE SUPPORT
  M:    Lennert Buytenhek <kernel@wantstofly.org>
 -M:    Dan Williams <dan.j.williams@intel.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  
@@@ -1065,7 -1053,7 +1065,7 @@@ S:      Maintaine
  
  ARM/INTEL IXP4XX ARM ARCHITECTURE
  M:    Imre Kaloz <kaloz@openwrt.org>
 -M:    Krzysztof Halasa <khc@pm.waw.pl>
 +M:    Krzysztof Halasa <khalasa@piap.pl>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  F:    arch/arm/mach-ixp4xx/
@@@ -1079,6 -1067,7 +1079,6 @@@ F:      drivers/pcmcia/pxa2xx_stargate2.
  
  ARM/INTEL XSC3 (MANZANO) ARM CORE
  M:    Lennert Buytenhek <kernel@wantstofly.org>
 -M:    Dan Williams <dan.j.williams@intel.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  
@@@ -1161,16 -1150,6 +1161,16 @@@ W:    http://www.digriz.org.uk/ts78xx/kern
  S:    Maintained
  F:    arch/arm/mach-orion5x/ts78xx-*
  
 +ARM/Mediatek SoC support
 +M:    Matthias Brugger <matthias.bgg@gmail.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    arch/arm/boot/dts/mt6*
 +F:    arch/arm/boot/dts/mt8*
 +F:    arch/arm/mach-mediatek/
 +N:    mtk
 +K:    mediatek
 +
  ARM/MICREL KS8695 ARCHITECTURE
  M:    Greg Ungerer <gerg@uclinux.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -1298,15 -1277,9 +1298,15 @@@ F:    drivers/scsi/arm
  ARM/Rockchip SoC support
  M:    Heiko Stuebner <heiko@sntech.de>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +L:    linux-rockchip@lists.infradead.org
  S:    Maintained
 +F:    arch/arm/boot/dts/rk3*
  F:    arch/arm/mach-rockchip/
 +F:    drivers/clk/rockchip/
 +F:    drivers/i2c/busses/i2c-rk3x.c
  F:    drivers/*/*rockchip*
 +F:    drivers/*/*/*rockchip*
 +F:    sound/soc/rockchip/
  
  ARM/SAMSUNG ARM ARCHITECTURES
  M:    Ben Dooks <ben-linux@fluff.org>
@@@ -1338,7 -1311,8 +1338,7 @@@ ARM/SAMSUNG MOBILE MACHINE SUPPOR
  M:    Kyungmin Park <kyungmin.park@samsung.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
 -F:    arch/arm/mach-s5pv210/mach-aquila.c
 -F:    arch/arm/mach-s5pv210/mach-goni.c
 +F:    arch/arm/mach-s5pv210/
  
  ARM/SAMSUNG S5P SERIES 2D GRAPHICS ACCELERATION (G2D) SUPPORT
  M:    Kyungmin Park <kyungmin.park@samsung.com>
@@@ -1381,6 -1355,7 +1381,6 @@@ F:      arch/arm/boot/dts/sh
  F:    arch/arm/configs/ape6evm_defconfig
  F:    arch/arm/configs/armadillo800eva_defconfig
  F:    arch/arm/configs/bockw_defconfig
 -F:    arch/arm/configs/genmai_defconfig
  F:    arch/arm/configs/koelsch_defconfig
  F:    arch/arm/configs/kzm9g_defconfig
  F:    arch/arm/configs/lager_defconfig
@@@ -1391,23 -1366,15 +1391,23 @@@ F:   arch/arm/mach-shmobile
  F:    drivers/sh/
  
  ARM/SOCFPGA ARCHITECTURE
 -M:    Dinh Nguyen <dinguyen@altera.com>
 +M:    Dinh Nguyen <dinguyen@opensource.altera.com>
  S:    Maintained
  F:    arch/arm/mach-socfpga/
 +W:    http://www.rocketboards.org
 +T:    git://git.rocketboards.org/linux-socfpga.git
 +T:    git://git.rocketboards.org/linux-socfpga-next.git
  
  ARM/SOCFPGA CLOCK FRAMEWORK SUPPORT
 -M:    Dinh Nguyen <dinguyen@altera.com>
 +M:    Dinh Nguyen <dinguyen@opensource.altera.com>
  S:    Maintained
  F:    drivers/clk/socfpga/
  
 +ARM/SOCFPGA EDAC SUPPORT
 +M:    Thor Thayer <tthayer@opensource.altera.com>
 +S:    Maintained
 +F:    drivers/edac/altera_edac.
 +
  ARM/STI ARCHITECTURE
  M:    Srinivas Kandagatla <srinivas.kandagatla@gmail.com>
  M:    Maxime Coquelin <maxime.coquelin@st.com>
@@@ -1419,17 -1386,12 +1419,17 @@@ S:   Maintaine
  F:    arch/arm/mach-sti/
  F:    arch/arm/boot/dts/sti*
  F:    drivers/clocksource/arm_global_timer.c
 -F:    drivers/reset/sti/
 -F:    drivers/pinctrl/pinctrl-st.c
 -F:    drivers/media/rc/st_rc.c
  F:    drivers/i2c/busses/i2c-st.c
 -F:    drivers/tty/serial/st-asc.c
 +F:    drivers/media/rc/st_rc.c
  F:    drivers/mmc/host/sdhci-st.c
 +F:    drivers/phy/phy-stih407-usb.c
 +F:    drivers/phy/phy-stih41x-usb.c
 +F:    drivers/pinctrl/pinctrl-st.c
 +F:    drivers/reset/sti/
 +F:    drivers/tty/serial/st-asc.c
 +F:    drivers/usb/dwc3/dwc3-st.c
 +F:    drivers/usb/host/ehci-st.c
 +F:    drivers/usb/host/ohci-st.c
  
  ARM/TECHNOLOGIC SYSTEMS TS7250 MACHINE SUPPORT
  M:    Lennert Buytenhek <kernel@wantstofly.org>
@@@ -1549,7 -1511,6 +1549,7 @@@ T:      git git://git.xilinx.com/linux-xlnx.
  S:    Supported
  F:    arch/arm/mach-zynq/
  F:    drivers/cpuidle/cpuidle-zynq.c
 +F:    drivers/block/xsysace.c
  N:    zynq
  N:    xilinx
  F:    drivers/clocksource/cadence_ttc_timer.c
@@@ -1595,9 -1556,9 +1595,9 @@@ F:      drivers/platform/x86/asus*.
  F:    drivers/platform/x86/eeepc*.c
  
  ASYNCHRONOUS TRANSFERS/TRANSFORMS (IOAT) API
 -M:    Dan Williams <dan.j.williams@intel.com>
 +R:    Dan Williams <dan.j.williams@intel.com>
  W:    http://sourceforge.net/projects/xscaleiop
 -S:    Maintained
 +S:    Odd fixes
  F:    Documentation/crypto/async-tx-api.txt
  F:    crypto/async_tx/
  F:    drivers/dma/
@@@ -1649,7 -1610,6 +1649,7 @@@ L:      wil6210@qca.qualcomm.co
  S:    Supported
  W:    http://wireless.kernel.org/en/users/Drivers/wil6210
  F:    drivers/net/wireless/ath/wil6210/
 +F:    include/uapi/linux/wil6210_uapi.h
  
  CARL9170 LINUX COMMUNITY WIRELESS DRIVER
  M:    Christian Lamparter <chunkeey@googlemail.com>
@@@ -1699,12 -1659,6 +1699,12 @@@ M:    Nicolas Ferre <nicolas.ferre@atmel.c
  S:    Supported
  F:    drivers/tty/serial/atmel_serial.c
  
 +ATMEL Audio ALSA driver
 +M:    Bo Shen <voice.shen@atmel.com>
 +L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
 +S:    Supported
 +F:    sound/soc/atmel
 +
  ATMEL DMA DRIVER
  M:    Nicolas Ferre <nicolas.ferre@atmel.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -1738,12 -1692,6 +1738,12 @@@ M:    Nicolas Ferre <nicolas.ferre@atmel.c
  S:    Supported
  F:    drivers/net/ethernet/cadence/
  
 +ATMEL NAND DRIVER
 +M:    Josh Wu <josh.wu@atmel.com>
 +L:    linux-mtd@lists.infradead.org
 +S:    Supported
 +F:    drivers/mtd/nand/atmel_nand*
 +
  ATMEL SPI DRIVER
  M:    Nicolas Ferre <nicolas.ferre@atmel.com>
  S:    Supported
@@@ -1895,12 -1843,6 +1895,12 @@@ S:    Orpha
  F:    Documentation/filesystems/befs.txt
  F:    fs/befs/
  
 +BECKHOFF CX5020 ETHERCAT MASTER DRIVER
 +M: Dariusz Marcinkiewicz <reksio@newterm.pl>
 +L: netdev@vger.kernel.org
 +S: Maintained
 +F: drivers/net/ethernet/ec_bhf.c
 +
  BFS FILE SYSTEM
  M:    "Tigran A. Aivazian" <tigran@aivazian.fsnet.co.uk>
  S:    Maintained
@@@ -2050,7 -1992,6 +2050,7 @@@ F:      drivers/net/ethernet/broadcom/bnx2x
  BROADCOM BCM281XX/BCM11XXX/BCM216XX ARM ARCHITECTURE
  M:    Christian Daudt <bcm@fixthebug.org>
  M:    Matt Porter <mporter@linaro.org>
 +M:    Florian Fainelli <f.fainelli@gmail.com>
  L:    bcm-kernel-feedback-list@broadcom.com
  T:    git git://github.com/broadcom/mach-bcm
  S:    Maintained
@@@ -2080,14 -2021,6 +2080,14 @@@ F:    arch/arm/mach-bcm/bcm_5301x.
  F:    arch/arm/boot/dts/bcm5301x.dtsi
  F:    arch/arm/boot/dts/bcm470*
  
 +BROADCOM BCM63XX ARM ARCHITECTURE
 +M:    Florian Fainelli <f.fainelli@gmail.com>
 +L:    linux-arm-kernel@lists.infradead.org
 +T:    git git://git.github.com/brcm/linux.git
 +S:    Maintained
 +F:    arch/arm/mach-bcm/bcm63xx.c
 +F:    arch/arm/include/debug/bcm63xx.S
 +
  BROADCOM BCM7XXX ARM ARCHITECTURE
  M:    Marc Carino <marc.ceeeee@gmail.com>
  M:    Brian Norris <computersforpeace@gmail.com>
@@@ -2126,7 -2059,7 +2126,7 @@@ S:      Supporte
  F:    drivers/scsi/bnx2i/
  
  BROADCOM KONA GPIO DRIVER
 -M:    Markus Mayer <markus.mayer@linaro.org>
 +M:    Ray Jui <rjui@broadcom.com>
  L:    bcm-kernel-feedback-list@broadcom.com
  S:    Supported
  F:    drivers/gpio/gpio-bcm-kona.c
@@@ -2153,7 -2086,7 +2153,7 @@@ S:      Supporte
  F:    drivers/scsi/bfa/
  
  BROCADE BNA 10 GIGABIT ETHERNET DRIVER
 -M:    Rasesh Mody <rmody@brocade.com>
 +M:    Rasesh Mody <rasesh.mody@qlogic.com>
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    drivers/net/ethernet/brocade/bna/
@@@ -2766,18 -2699,6 +2766,18 @@@ W:    http://www.chelsio.co
  S:    Supported
  F:    drivers/net/ethernet/chelsio/cxgb4vf/
  
 +CXL (IBM Coherent Accelerator Processor Interface CAPI) DRIVER
 +M:    Ian Munsie <imunsie@au1.ibm.com>
 +M:    Michael Neuling <mikey@neuling.org>
 +L:    linuxppc-dev@lists.ozlabs.org
 +S:    Supported
 +F:    drivers/misc/cxl/
 +F:    include/misc/cxl.h
 +F:    include/uapi/misc/cxl.h
 +F:    Documentation/powerpc/cxl.txt
 +F:    Documentation/powerpc/cxl.txt
 +F:    Documentation/ABI/testing/sysfs-class-cxl
 +
  STMMAC ETHERNET DRIVER
  M:    Giuseppe Cavallaro <peppe.cavallaro@st.com>
  L:    netdev@vger.kernel.org
@@@ -2915,7 -2836,6 +2915,7 @@@ F:      drivers/platform/x86/dell-wmi.
  DESIGNWARE USB2 DRD IP DRIVER
  M:    Paul Zimmerman <paulz@synopsys.com>
  L:    linux-usb@vger.kernel.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git
  S:    Maintained
  F:    drivers/usb/dwc2/
  
@@@ -2927,13 -2847,6 +2927,13 @@@ T:    git git://git.kernel.org/pub/scm/lin
  S:    Maintained
  F:    drivers/usb/dwc3/
  
 +DEVICE COREDUMP (DEV_COREDUMP)
 +M:    Johannes Berg <johannes@sipsolutions.net>
 +L:    linux-kernel@vger.kernel.org
 +S:    Maintained
 +F:    drivers/base/devcoredump.c
 +F:    include/linux/devcoredump.h
 +
  DEVICE FREQUENCY (DEVFREQ)
  M:    MyungJoo Ham <myungjoo.ham@samsung.com>
  M:    Kyungmin Park <kyungmin.park@samsung.com>
@@@ -3054,7 -2967,7 +3054,7 @@@ M:      Sumit Semwal <sumit.semwal@linaro.or
  S:    Maintained
  L:    linux-media@vger.kernel.org
  L:    dri-devel@lists.freedesktop.org
 -L:    linaro-mm-sig@lists.linaro.org
 +L:    linaro-mm-sig@lists.linaro.org (moderated for non-subscribers)
  F:    drivers/dma-buf/
  F:    include/linux/dma-buf*
  F:    include/linux/reservation.h
@@@ -3064,11 -2977,13 +3064,11 @@@ T:   git git://git.linaro.org/people/sumi
  
  DMA GENERIC OFFLOAD ENGINE SUBSYSTEM
  M:    Vinod Koul <vinod.koul@intel.com>
 -M:    Dan Williams <dan.j.williams@intel.com>
  L:    dmaengine@vger.kernel.org
  Q:    https://patchwork.kernel.org/project/linux-dmaengine/list/
 -S:    Supported
 +S:    Maintained
  F:    drivers/dma/
  F:    include/linux/dma*
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx.git
  T:    git git://git.infradead.org/users/vkoul/slave-dma.git (slave-dma)
  
  DME1737 HARDWARE MONITOR DRIVER
@@@ -3085,8 -3000,9 +3085,8 @@@ S:      Supporte
  F:    drivers/acpi/dock.c
  
  DOCUMENTATION
 -M:    Randy Dunlap <rdunlap@infradead.org>
 +M:    Jonathan Corbet <corbet@lwn.net>
  L:    linux-doc@vger.kernel.org
 -T:    quilt http://www.infradead.org/~rdunlap/Doc/patches/
  S:    Maintained
  F:    Documentation/
  X:    Documentation/ABI/
@@@ -3163,7 -3079,7 +3163,7 @@@ F:      include/drm/drm_panel.
  F:    Documentation/devicetree/bindings/panel/
  
  INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets)
 -M:    Daniel Vetter <daniel.vetter@ffwll.ch>
 +M:    Daniel Vetter <daniel.vetter@intel.com>
  M:    Jani Nikula <jani.nikula@linux.intel.com>
  L:    intel-gfx@lists.freedesktop.org
  L:    dri-devel@lists.freedesktop.org
@@@ -3199,17 -3115,6 +3199,17 @@@ F:    include/linux/host1x.
  F:    include/uapi/drm/tegra_drm.h
  F:    Documentation/devicetree/bindings/gpu/nvidia,tegra20-host1x.txt
  
 +DRM DRIVERS FOR RENESAS
 +M:    Laurent Pinchart <laurent.pinchart@ideasonboard.com>
 +L:    dri-devel@lists.freedesktop.org
 +L:    linux-sh@vger.kernel.org
 +T:    git git://people.freedesktop.org/~airlied/linux
 +S:    Supported
 +F:    drivers/gpu/drm/rcar-du/
 +F:    drivers/gpu/drm/shmobile/
 +F:    include/linux/platform_data/rcar-du.h
 +F:    include/linux/platform_data/shmob_drm.h
 +
  DSBR100 USB FM RADIO DRIVER
  M:    Alexey Klimov <klimov.linux@gmail.com>
  L:    linux-media@vger.kernel.org
@@@ -3623,11 -3528,6 +3623,11 @@@ T:    git git://git.kernel.org/pub/scm/lin
  F:    drivers/video/fbdev/s1d13xxxfb.c
  F:    include/video/s1d13xxxfb.h
  
 +ET131X NETWORK DRIVER
 +M:    Mark Einon <mark.einon@gmail.com>
 +S:    Odd Fixes
 +F:    drivers/net/ethernet/agere/
 +
  ETHERNET BRIDGE
  M:    Stephen Hemminger <stephen@networkplumber.org>
  L:    bridge@lists.linux-foundation.org
@@@ -3943,13 -3843,10 +3943,13 @@@ F:   drivers/tty/serial/ucc_uart.
  
  FREESCALE SOC SOUND DRIVERS
  M:    Timur Tabi <timur@tabi.org>
 +M:    Nicolin Chen <nicoleotsuka@gmail.com>
 +M:    Xiubo Li <Li.Xiubo@freescale.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  L:    linuxppc-dev@lists.ozlabs.org
  S:    Maintained
  F:    sound/soc/fsl/fsl*
 +F:    sound/soc/fsl/imx*
  F:    sound/soc/fsl/mpc8610_hpcd.c
  
  FREEVXFS FILESYSTEM
@@@ -4249,16 -4146,6 +4249,16 @@@ L:    linuxppc-dev@lists.ozlabs.or
  S:    Odd Fixes
  F:    drivers/tty/hvc/
  
 +HACKRF MEDIA DRIVER
 +M:    Antti Palosaari <crope@iki.fi>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org/
 +W:    http://palosaari.fi/linux/
 +Q:    http://patchwork.linuxtv.org/project/linux-media/list/
 +T:    git git://linuxtv.org/anttip/media_tree.git
 +S:    Maintained
 +F:    drivers/media/usb/hackrf/
 +
  HARDWARE MONITORING
  M:    Jean Delvare <jdelvare@suse.de>
  M:    Guenter Roeck <linux@roeck-us.net>
@@@ -4302,8 -4189,9 +4302,8 @@@ S:      Maintaine
  F:    drivers/media/dvb-frontends/hd29l2*
  
  HEWLETT-PACKARD SMART2 RAID DRIVER
 -M:    Chirag Kantharia <chirag.kantharia@hp.com>
  L:    iss_storagedev@hp.com
 -S:    Maintained
 +S:    Orphan
  F:    Documentation/blockdev/cpqarray.txt
  F:    drivers/block/cpqarray.*
  
@@@ -4558,12 -4446,6 +4558,12 @@@ F:    include/linux/i2c-*.
  F:    include/uapi/linux/i2c.h
  F:    include/uapi/linux/i2c-*.h
  
 +I2C ACPI SUPPORT
 +M:    Mika Westerberg <mika.westerberg@linux.intel.com>
 +L:    linux-i2c@vger.kernel.org
 +L:    linux-acpi@vger.kernel.org
 +S:    Maintained
 +
  I2C-TAOS-EVM DRIVER
  M:    Jean Delvare <jdelvare@suse.de>
  L:    linux-i2c@vger.kernel.org
@@@ -4682,14 -4564,13 +4682,14 @@@ F:   drivers/idle/i7300_idle.
  
  IEEE 802.15.4 SUBSYSTEM
  M:    Alexander Aring <alex.aring@gmail.com>
 -L:    linux-zigbee-devel@lists.sourceforge.net (moderated for non-subscribers)
 -W:    http://apps.sourceforge.net/trac/linux-zigbee
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/lowpan/lowpan.git
 +L:    linux-wpan@vger.kernel.org
 +W:    https://github.com/linux-wpan
 +T:    git git://github.com/linux-wpan/linux-wpan-next.git
  S:    Maintained
  F:    net/ieee802154/
  F:    net/mac802154/
  F:    drivers/net/ieee802154/
 +F:    Documentation/networking/ieee802154.txt
  
  IGUANAWORKS USB IR TRANSCEIVER
  M:    Sean Young <sean@mess.org>
@@@ -4699,9 -4580,6 +4699,9 @@@ F:      drivers/media/rc/iguanair.
  
  IIO SUBSYSTEM AND DRIVERS
  M:    Jonathan Cameron <jic23@kernel.org>
 +R:    Hartmut Knaack <knaack.h@gmx.de>
 +R:    Lars-Peter Clausen <lars@metafoo.de>
 +R:    Peter Meerwald <pmeerw@pmeerw.net>
  L:    linux-iio@vger.kernel.org
  S:    Maintained
  F:    drivers/iio/
@@@ -4839,8 -4717,8 +4839,8 @@@ F:      arch/x86/kernel/cpu/microcode/core
  F:    arch/x86/kernel/cpu/microcode/intel*
  
  INTEL I/OAT DMA DRIVER
 -M:    Dan Williams <dan.j.williams@intel.com>
  M:    Dave Jiang <dave.jiang@intel.com>
 +R:    Dan Williams <dan.j.williams@intel.com>
  L:    dmaengine@vger.kernel.org
  Q:    https://patchwork.kernel.org/project/linux-dmaengine/list/
  S:    Supported
@@@ -4855,12 -4733,12 +4855,12 @@@ F:   drivers/iommu/intel-iommu.
  F:    include/linux/intel-iommu.h
  
  INTEL IOP-ADMA DMA DRIVER
 -M:    Dan Williams <dan.j.williams@intel.com>
 +R:    Dan Williams <dan.j.williams@intel.com>
  S:    Odd fixes
  F:    drivers/dma/iop-adma.c
  
  INTEL IXP4XX QMGR, NPE, ETHERNET and HSS SUPPORT
 -M:    Krzysztof Halasa <khc@pm.waw.pl>
 +M:    Krzysztof Halasa <khalasa@piap.pl>
  S:    Maintained
  F:    arch/arm/mach-ixp4xx/include/mach/qmgr.h
  F:    arch/arm/mach-ixp4xx/include/mach/npe.h
@@@ -4874,14 -4752,14 +4874,14 @@@ M:   Deepak Saxena <dsaxena@plexity.net
  S:    Maintained
  F:    drivers/char/hw_random/ixp4xx-rng.c
  
 -INTEL ETHERNET DRIVERS (e100/e1000/e1000e/igb/igbvf/ixgb/ixgbe/ixgbevf/i40e/i40evf)
 +INTEL ETHERNET DRIVERS (e100/e1000/e1000e/fm10k/igb/igbvf/ixgb/ixgbe/ixgbevf/i40e/i40evf)
  M:    Jeff Kirsher <jeffrey.t.kirsher@intel.com>
  M:    Jesse Brandeburg <jesse.brandeburg@intel.com>
  M:    Bruce Allan <bruce.w.allan@intel.com>
  M:    Carolyn Wyborny <carolyn.wyborny@intel.com>
  M:    Don Skidmore <donald.c.skidmore@intel.com>
  M:    Greg Rose <gregory.v.rose@intel.com>
 -M:    Alex Duyck <alexander.h.duyck@intel.com>
 +M:    Matthew Vick <matthew.vick@intel.com>
  M:    John Ronciak <john.ronciak@intel.com>
  M:    Mitch Williams <mitch.a.williams@intel.com>
  M:    Linux NICS <linux.nics@intel.com>
@@@ -5070,7 -4948,6 +5070,7 @@@ L:      linux-kernel@vger.kernel.or
  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/
  
  IRQ DOMAINS (IRQ NUMBER MAPPING LIBRARY)
@@@ -5156,7 -5033,7 +5156,7 @@@ W:      http://palosaari.fi/linux
  Q:    http://patchwork.linuxtv.org/project/linux-media/list/
  T:    git git://linuxtv.org/anttip/media_tree.git
  S:    Maintained
 -F:    drivers/media/tuners/tuner_it913x*
 +F:    drivers/media/tuners/it913x*
  
  IVTV VIDEO4LINUX DRIVER
  M:    Andy Walls <awalls@md.metrocast.net>
@@@ -5304,13 -5181,6 +5304,13 @@@ F:    include/linux/lockd
  F:    include/linux/sunrpc/
  F:    include/uapi/linux/sunrpc/
  
 +KERNEL SELFTEST FRAMEWORK
 +M:    Shuah Khan <shuahkh@osg.samsung.com>
 +L:    linux-api@vger.kernel.org
 +T:    git git://git.kernel.org/pub/scm/shuah/linux-kselftest
 +S:    Maintained
 +F:    tools/testing/selftests
 +
  KERNEL VIRTUAL MACHINE (KVM)
  M:    Gleb Natapov <gleb@kernel.org>
  M:    Paolo Bonzini <pbonzini@redhat.com>
@@@ -5577,7 -5447,7 +5577,7 @@@ F:      drivers/macintosh
  LINUX FOR POWERPC EMBEDDED MPC5XXX
  M:    Anatolij Gustschin <agust@denx.de>
  L:    linuxppc-dev@lists.ozlabs.org
 -T:    git git://git.denx.de/linux-2.6-agust.git
 +T:    git git://git.denx.de/linux-denx-agust.git
  S:    Maintained
  F:    arch/powerpc/platforms/512x/
  F:    arch/powerpc/platforms/52xx/
@@@ -5691,8 -5561,8 +5691,8 @@@ M:      Ingo Molnar <mingo@redhat.com
  L:    linux-kernel@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git core/locking
  S:    Maintained
 -F:    Documentation/lockdep*.txt
 -F:    Documentation/lockstat.txt
 +F:    Documentation/locking/lockdep*.txt
 +F:    Documentation/locking/lockstat.txt
  F:    include/linux/lockdep.h
  F:    kernel/locking/
  
@@@ -5757,8 -5627,11 +5757,8 @@@ T:     git git://github.com/linux-test-proj
  S:    Maintained
  
  M32R ARCHITECTURE
 -M:    Hirokazu Takata <takata@linux-m32r.org>
 -L:    linux-m32r@ml.linux-m32r.org (moderated for non-subscribers)
 -L:    linux-m32r-ja@ml.linux-m32r.org (in Japanese)
  W:    http://www.linux-m32r.org/
 -S:    Maintained
 +S:    Orphan
  F:    arch/m32r/
  
  M68K ARCHITECTURE
@@@ -5992,7 -5865,6 +5992,7 @@@ L:      linux-mtd@lists.infradead.or
  W:    http://www.linux-mtd.infradead.org/
  Q:    http://patchwork.ozlabs.org/project/linux-mtd/list/
  T:    git git://git.infradead.org/linux-mtd.git
 +T:    git git://git.infradead.org/l2-mtd.git
  S:    Maintained
  F:    drivers/mtd/
  F:    include/linux/mtd/
@@@ -6010,15 -5882,6 +6010,15 @@@ S:    Supporte
  F:    drivers/mcb/
  F:    include/linux/mcb.h
  
 +MEN F21BMC (Board Management Controller)
 +M:    Andreas Werner <andreas.werner@men.de>
 +S:    Supported
 +F:    drivers/mfd/menf21bmc.c
 +F:    drivers/watchdog/menf21bmc_wdt.c
 +F:    drivers/leds/leds-menf21bmc.c
 +F:    drivers/hwmon/menf21bmc_hwmon.c
 +F:    Documentation/hwmon/menf21bmc
 +
  METAG ARCHITECTURE
  M:    James Hogan <james.hogan@imgtec.com>
  L:    linux-metag@vger.kernel.org
@@@ -6109,12 -5972,6 +6109,12 @@@ T:    git git://linuxtv.org/media_tree.gi
  S:    Maintained
  F:    drivers/media/radio/radio-mr800.c
  
 +MRF24J40 IEEE 802.15.4 RADIO DRIVER
 +M:    Alan Ott <alan@signal11.us>
 +L:    linux-wpan@vger.kernel.org
 +S:    Maintained
 +F:    drivers/net/ieee802154/mrf24j40.c
 +
  MSI LAPTOP SUPPORT
  M:    "Lee, Chun-Yi" <jlee@suse.com>
  L:    platform-driver-x86@vger.kernel.org
@@@ -6477,7 -6334,7 +6477,7 @@@ M:      Lauro Ramos Venancio <lauro.venancio
  M:    Aloisio Almeida Jr <aloisio.almeida@openbossa.org>
  M:    Samuel Ortiz <sameo@linux.intel.com>
  L:    linux-wireless@vger.kernel.org
 -L:    linux-nfc@lists.01.org (moderated for non-subscribers)
 +L:    linux-nfc@lists.01.org (subscribers-only)
  S:    Supported
  F:    net/nfc/
  F:    include/net/nfc/
@@@ -6528,8 -6385,7 +6528,8 @@@ F:      Documentation/scsi/NinjaSCSI.tx
  F:    drivers/scsi/nsp32*
  
  NTB DRIVER
 -M:    Jon Mason <jon.mason@intel.com>
 +M:    Jon Mason <jdmason@kudzu.us>
 +M:    Dave Jiang <dave.jiang@intel.com>
  S:    Supported
  W:    https://github.com/jonmason/ntb/wiki
  T:    git git://github.com/jonmason/ntb.git
@@@ -6645,9 -6501,10 +6645,9 @@@ S:     Maintaine
  F:    drivers/mmc/host/omap.c
  
  OMAP HS MMC SUPPORT
 -M:    Balaji T K <balajitk@ti.com>
  L:    linux-mmc@vger.kernel.org
  L:    linux-omap@vger.kernel.org
 -S:    Maintained
 +S:    Orphan
  F:    drivers/mmc/host/omap_hsmmc.c
  
  OMAP RANDOM NUMBER GENERATOR SUPPORT
@@@ -6977,29 -6834,14 +6977,29 @@@ F:   include/linux/pci
  F:    arch/x86/pci/
  F:    arch/x86/kernel/quirks.c
  
 +PCI DRIVER FOR APPLIEDMICRO XGENE
 +M:    Tanmay Inamdar <tinamdar@apm.com>
 +L:    linux-pci@vger.kernel.org
 +L:    linux-arm-kernel@lists.infradead.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/pci/xgene-pci.txt
 +F:    drivers/pci/host/pci-xgene.c
 +
  PCI DRIVER FOR IMX6
  M:    Richard Zhu <r65037@freescale.com>
 -M:    Shawn Guo <shawn.guo@freescale.com>
 +M:    Lucas Stach <l.stach@pengutronix.de>
  L:    linux-pci@vger.kernel.org
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  F:    drivers/pci/host/*imx6*
  
 +PCI DRIVER FOR TI KEYSTONE
 +M:    Murali Karicheri <m-karicheri2@ti.com>
 +L:    linux-pci@vger.kernel.org
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    drivers/pci/host/*keystone*
 +
  PCI DRIVER FOR MVEBU (Marvell Armada 370 and Armada XP SOC support)
  M:    Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
  M:    Jason Cooper <jason@lakedaemon.net>
@@@ -7016,14 -6858,6 +7016,14 @@@ S:    Supporte
  F:    Documentation/devicetree/bindings/pci/nvidia,tegra20-pcie.txt
  F:    drivers/pci/host/pci-tegra.c
  
 +PCI DRIVER FOR TI DRA7XX
 +M:    Kishon Vijay Abraham I <kishon@ti.com>
 +L:    linux-omap@vger.kernel.org
 +L:    linux-pci@vger.kernel.org
 +S:    Supported
 +F:    Documentation/devicetree/bindings/pci/ti-pci.txt
 +F:    drivers/pci/host/pci-dra7xx.c
 +
  PCI DRIVER FOR RENESAS R-CAR
  M:    Simon Horman <horms@verge.net.au>
  L:    linux-pci@vger.kernel.org
@@@ -7172,7 -7006,7 +7172,7 @@@ S:      Maintaine
  F:    drivers/pinctrl/sh-pfc/
  
  PIN CONTROLLER - SAMSUNG
 -M:    Tomasz Figa <t.figa@samsung.com>
 +M:    Tomasz Figa <tomasz.figa@gmail.com>
  M:    Thomas Abraham <thomas.abraham@linaro.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
@@@ -7402,14 -7236,6 +7402,14 @@@ T:    git git://linuxtv.org/media_tree.gi
  S:    Maintained
  F:    drivers/media/usb/pwc/*
  
 +PWM FAN DRIVER
 +M:    Kamil Debski <k.debski@samsung.com>
 +L:    lm-sensors@lm-sensors.org
 +S:    Supported
 +F:    Documentation/devicetree/bindings/hwmon/pwm-fan.txt
 +F:    Documentation/hwmon/pwm-fan
 +F:    drivers/hwmon/pwm-fan.c
 +
  PWM SUBSYSTEM
  M:    Thierry Reding <thierry.reding@gmail.com>
  L:    linux-pwm@vger.kernel.org
@@@ -7423,12 -7249,12 +7423,12 @@@ F:   drivers/video/backlight/pwm_bl.
  F:    include/linux/pwm_backlight.h
  
  PXA2xx/PXA3xx SUPPORT
 -M:    Eric Miao <eric.y.miao@gmail.com>
 -M:    Russell King <linux@arm.linux.org.uk>
 +M:    Daniel Mack <daniel@zonque.org>
  M:    Haojian Zhuang <haojian.zhuang@gmail.com>
 +M:    Robert Jarzmik <robert.jarzmik@free.fr>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  T:    git git://github.com/hzhuang1/linux.git
 -T:    git git://git.linaro.org/people/ycmiao/pxa-linux.git
 +T:    git git://github.com/rjarzmik/linux.git
  S:    Maintained
  F:    arch/arm/mach-pxa/
  F:    drivers/pcmcia/pxa2xx*
@@@ -7505,15 -7331,15 +7505,15 @@@ F:   drivers/net/ethernet/qlogic/qla3xxx.
  
  QLOGIC QLCNIC (1/10)Gb ETHERNET DRIVER
  M:    Shahed Shaikh <shahed.shaikh@qlogic.com>
 -M:    Dept-HSGLinuxNICDev@qlogic.com
 +M:    Dept-GELinuxNICDev@qlogic.com
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    drivers/net/ethernet/qlogic/qlcnic/
  
  QLOGIC QLGE 10Gb ETHERNET DRIVER
 -M:    Shahed Shaikh <shahed.shaikh@qlogic.com>
 -M:    Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
 -M:    Ron Mercer <ron.mercer@qlogic.com>
 +M:    Harish Patil <harish.patil@qlogic.com>
 +M:    Sudarsana Kalluru <sudarsana.kalluru@qlogic.com>
 +M:    Dept-GELinuxNICDev@qlogic.com
  M:    linux-driver@qlogic.com
  L:    netdev@vger.kernel.org
  S:    Supported
@@@ -7616,12 -7442,13 +7616,12 @@@ F:   drivers/video/fbdev/aty/aty128fb.
  
  RALINK RT2X00 WIRELESS LAN DRIVER
  P:    rt2x00 project
 -M:    Ivo van Doorn <IvDoorn@gmail.com>
 +M:    Stanislaw Gruszka <sgruszka@redhat.com>
  M:    Helmut Schaa <helmut.schaa@googlemail.com>
  L:    linux-wireless@vger.kernel.org
  L:    users@rt2x00.serialmonkey.com (moderated for non-subscribers)
  W:    http://rt2x00.serialmonkey.com/
  S:    Maintained
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ivd/rt2x00.git
  F:    drivers/net/wireless/rt2x00/
  
  RAMDISK RAM BLOCK DEVICE DRIVER
@@@ -7723,7 -7550,6 +7723,7 @@@ F:      fs/reiserfs
  
  REGISTER MAP ABSTRACTION
  M:    Mark Brown <broonie@kernel.org>
 +L:    linux-kernel@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap.git
  S:    Supported
  F:    drivers/base/regmap/
@@@ -7992,6 -7818,7 +7992,6 @@@ S:      Supporte
  F:    drivers/mfd/sec*.c
  F:    drivers/regulator/s2m*.c
  F:    drivers/regulator/s5m*.c
 -F:    drivers/rtc/rtc-sec.c
  F:    include/linux/mfd/samsung/
  
  SAMSUNG S5P/EXYNOS4 SOC SERIES CAMERA SUBSYSTEM DRIVERS
@@@ -8025,8 -7852,7 +8025,8 @@@ S:      Supporte
  F:    drivers/media/i2c/s5k5baf.c
  
  SAMSUNG SOC CLOCK DRIVERS
 -M:    Tomasz Figa <t.figa@samsung.com>
 +M:    Sylwester Nawrocki <s.nawrocki@samsung.com>
 +M:    Tomasz Figa <tomasz.figa@gmail.com>
  S:    Supported
  L:    linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
  F:    drivers/clk/samsung/
@@@ -8039,19 -7865,6 +8039,19 @@@ S:    Supporte
  L:    netdev@vger.kernel.org
  F:    drivers/net/ethernet/samsung/sxgbe/
  
 +SAMSUNG USB2 PHY DRIVER
 +M:    Kamil Debski <k.debski@samsung.com>
 +L:    linux-kernel@vger.kernel.org
 +S:    Supported
 +F:    Documentation/devicetree/bindings/phy/samsung-phy.txt
 +F:    Documentation/phy/samsung-usb2.txt
 +F:    drivers/phy/phy-exynos4210-usb2.c
 +F:    drivers/phy/phy-exynos4x12-usb2.c
 +F:    drivers/phy/phy-exynos5250-usb2.c
 +F:    drivers/phy/phy-s5pv210-usb2.c
 +F:    drivers/phy/phy-samsung-usb2.c
 +F:    drivers/phy/phy-samsung-usb2.h
 +
  SERIAL DRIVERS
  M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  L:    linux-serial@vger.kernel.org
@@@ -8062,7 -7875,7 +8062,7 @@@ SYNOPSYS DESIGNWARE DMAC DRIVE
  M:    Viresh Kumar <viresh.linux@gmail.com>
  M:    Andy Shevchenko <andriy.shevchenko@linux.intel.com>
  S:    Maintained
- F:    include/linux/dw_dmac.h
+ F:    include/linux/platform_data/dma-dw.h
  F:    drivers/dma/dw/
  
  SYNOPSYS DESIGNWARE MMC/SD/SDIO DRIVER
@@@ -8215,8 -8028,6 +8215,8 @@@ F:      drivers/mmc/host/sdhci-pltfm.[ch
  
  SECURE COMPUTING
  M:    Kees Cook <keescook@chromium.org>
 +R:    Andy Lutomirski <luto@amacapital.net>
 +R:    Will Drewry <wad@chromium.org>
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git seccomp
  S:    Supported
  F:    kernel/seccomp.c
@@@ -8537,11 -8348,11 +8537,11 @@@ S:   Maintaine
  F:    Documentation/security/Smack.txt
  F:    security/smack/
  
 -SMARTREFLEX DRIVERS FOR ADAPTIVE VOLTAGE SCALING (AVS)
 +DRIVERS FOR ADAPTIVE VOLTAGE SCALING (AVS)
  M:    Kevin Hilman <khilman@kernel.org>
  M:    Nishanth Menon <nm@ti.com>
  S:    Maintained
 -F:    drivers/power/avs/smartreflex.c
 +F:    drivers/power/avs/
  F:    include/linux/power/smartreflex.h
  L:    linux-pm@vger.kernel.org
  
@@@ -8711,14 -8522,6 +8711,14 @@@ F:    include/sound/dmaengine_pcm.
  F:    sound/core/pcm_dmaengine.c
  F:    sound/soc/soc-generic-dmaengine-pcm.c
  
 +SP2 MEDIA DRIVER
 +M:    Olli Salonen <olli.salonen@iki.fi>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org/
 +Q:    http://patchwork.linuxtv.org/project/linux-media/list/
 +S:    Maintained
 +F:    drivers/media/dvb-frontends/sp2*
 +
  SPARC + UltraSPARC (sparc/sparc64)
  M:    "David S. Miller" <davem@davemloft.net>
  L:    sparclinux@vger.kernel.org
@@@ -8830,6 -8633,11 +8830,6 @@@ M:     H Hartley Sweeten <hsweeten@visionen
  S:    Odd Fixes
  F:    drivers/staging/comedi/
  
 -STAGING - ET131X NETWORK DRIVER
 -M:    Mark Einon <mark.einon@gmail.com>
 -S:    Odd Fixes
 -F:    drivers/staging/et131x/
 -
  STAGING - FLARION FT1000 DRIVERS
  M:    Marek Belisko <marek.belisko@gmail.com>
  S:    Odd Fixes
@@@ -8847,14 -8655,6 +8847,14 @@@ W:    http://www.lirc.org
  S:    Odd Fixes
  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/
 +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>
@@@ -9148,13 -8948,17 +9148,13 @@@ F:   drivers/media/rc/ttusbir.
  TEGRA ARCHITECTURE SUPPORT
  M:    Stephen Warren <swarren@wwwdotorg.org>
  M:    Thierry Reding <thierry.reding@gmail.com>
 +M:    Alexandre Courbot <gnurou@gmail.com>
  L:    linux-tegra@vger.kernel.org
  Q:    http://patchwork.ozlabs.org/project/linux-tegra/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux.git
  S:    Supported
  N:    [^a-z]tegra
  
 -TEGRA ASOC DRIVER
 -M:    Stephen Warren <swarren@wwwdotorg.org>
 -S:    Supported
 -F:    sound/soc/tegra/
 -
  TEGRA CLOCK DRIVER
  M:    Peter De Schrijver <pdeschrijver@nvidia.com>
  M:    Prashant Gaikwad <pgaikwad@nvidia.com>
@@@ -9166,6 -8970,11 +9166,6 @@@ M:     Laxman Dewangan <ldewangan@nvidia.co
  S:    Supported
  F:    drivers/dma/tegra20-apb-dma.c
  
 -TEGRA GPIO DRIVER
 -M:    Stephen Warren <swarren@wwwdotorg.org>
 -S:    Supported
 -F:    drivers/gpio/gpio-tegra.c
 -
  TEGRA I2C DRIVER
  M:    Laxman Dewangan <ldewangan@nvidia.com>
  S:    Supported
@@@ -9182,6 -8991,11 +9182,6 @@@ M:     Laxman Dewangan <ldewangan@nvidia.co
  S:    Supported
  F:    drivers/input/keyboard/tegra-kbc.c
  
 -TEGRA PINCTRL DRIVER
 -M:    Stephen Warren <swarren@wwwdotorg.org>
 -S:    Supported
 -F:    drivers/pinctrl/pinctrl-tegra*
 -
  TEGRA PWM DRIVER
  M:    Thierry Reding <thierry.reding@gmail.com>
  S:    Supported
@@@ -9272,15 -9086,6 +9272,15 @@@ F:    drivers/misc/tifm
  F:    drivers/mmc/host/tifm_sd.c
  F:    include/linux/tifm.h
  
 +TI KEYSTONE MULTICORE NAVIGATOR DRIVERS
 +M:    Santosh Shilimkar <santosh.shilimkar@ti.com>
 +L:    linux-kernel@vger.kernel.org
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    drivers/soc/ti/*
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ssantosh/linux-keystone.git
 +
 +
  TI LM49xxx FAMILY ASoC CODEC DRIVERS
  M:    M R Swami Reddy <mr.swami.reddy@ti.com>
  M:    Vishwas A Deshpande <vishwas.a.deshpande@ti.com>
@@@ -9422,14 -9227,6 +9422,14 @@@ T:    git git://linuxtv.org/media_tree.gi
  S:    Odd fixes
  F:    drivers/media/usb/tm6000/
  
 +TW68 VIDEO4LINUX DRIVER
 +M:    Hans Verkuil <hverkuil@xs4all.nl>
 +L:    linux-media@vger.kernel.org
 +T:    git git://linuxtv.org/media_tree.git
 +W:    http://linuxtv.org
 +S:    Odd Fixes
 +F:    drivers/media/pci/tw68/
 +
  TPM DEVICE DRIVER
  M:    Peter Huewe <peterhuewe@gmx.de>
  M:    Ashley Lai <ashley@ashleylai.com>
@@@ -9451,7 -9248,6 +9451,7 @@@ F:      include/*/ftrace.
  F:    include/linux/trace*.h
  F:    include/trace/
  F:    kernel/trace/
 +F:    tools/testing/selftests/ftrace/
  
  TRIVIAL PATCHES
  M:    Jiri Kosina <trivial@kernel.org>
@@@ -9719,14 -9515,6 +9719,14 @@@ S:    Maintaine
  F:    Documentation/usb/ohci.txt
  F:    drivers/usb/host/ohci*
  
 +USB OVER IP DRIVER
 +M:    Valentina Manea <valentina.manea.m@gmail.com>
 +M:    Shuah Khan <shuah.kh@samsung.com>
 +L:    linux-usb@vger.kernel.org
 +S:    Maintained
 +F:    drivers/usb/usbip/
 +F:    tools/usb/usbip/
 +
  USB PEGASUS DRIVER
  M:    Petko Manolov <petkan@nucleusys.com>
  L:    linux-usb@vger.kernel.org
@@@ -9825,7 -9613,7 +9825,7 @@@ USB WEBCAM GADGE
  M:    Laurent Pinchart <laurent.pinchart@ideasonboard.com>
  L:    linux-usb@vger.kernel.org
  S:    Maintained
 -F:    drivers/usb/gadget/function/*uvc*.c
 +F:    drivers/usb/gadget/function/*uvc*
  F:    drivers/usb/gadget/legacy/webcam.c
  
  USB WIRELESS RNDIS DRIVER (rndis_wlan)
@@@ -10039,7 -9827,6 +10039,7 @@@ F:    drivers/scsi/vmw_pvscsi.
  VOLTAGE AND CURRENT REGULATOR FRAMEWORK
  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
@@@ -10228,9 -10015,9 +10228,9 @@@ F:   Documentation/x86
  F:    arch/x86/
  
  X86 PLATFORM DRIVERS
 -M:    Matthew Garrett <matthew.garrett@nebula.com>
 +M:    Darren Hart <dvhart@infradead.org>
  L:    platform-driver-x86@vger.kernel.org
 -T:    git git://cavan.codon.org.uk/platform-drivers-x86.git
 +T:    git git://git.infradead.org/users/dvhart/linux-platform-drivers-x86.git
  S:    Maintained
  F:    drivers/platform/x86/
  
@@@ -10299,15 -10086,6 +10299,15 @@@ S: Supporte
  F:    drivers/block/xen-blkback/*
  F:    drivers/block/xen*
  
 +XEN PVSCSI DRIVERS
 +M:    Juergen Gross <jgross@suse.com>
 +L:    xen-devel@lists.xenproject.org (moderated for non-subscribers)
 +L:    linux-scsi@vger.kernel.org
 +S:    Supported
 +F:    drivers/scsi/xen-scsifront.c
 +F:    drivers/xen/xen-scsiback.c
 +F:    include/xen/interface/io/vscsiif.h
 +
  XEN SWIOTLB SUBSYSTEM
  M:    Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
  L:    xen-devel@lists.xenproject.org (moderated for non-subscribers)
@@@ -10332,18 -10110,16 +10332,18 @@@ M:        John Linn <John.Linn@xilinx.com
  S:    Maintained
  F:    drivers/net/ethernet/xilinx/xilinx_axienet*
  
 -XILINX SYSTEMACE DRIVER
 -S:    Orphan
 -F:    drivers/block/xsysace.c
 -
  XILINX UARTLITE SERIAL DRIVER
  M:    Peter Korsgaard <jacmet@sunsite.dk>
  L:    linux-serial@vger.kernel.org
  S:    Maintained
  F:    drivers/tty/serial/uartlite.c
  
 +XILLYBUS DRIVER
 +M:    Eli Billauer <eli.billauer@gmail.com>
 +L:    linux-kernel@vger.kernel.org
 +S:    Supported
 +F:    drivers/char/xillybus/
 +
  XTENSA XTFPGA PLATFORM SUPPORT
  M:    Max Filippov <jcmvbkbc@gmail.com>
  L:    linux-xtensa@linux-xtensa.org
diff --combined drivers/dma/Kconfig
index a016490c95ae9c0a755302503bbe7f4e861631ef,9621671778032da44b0bbe7cf9dc8f19386e404d..de469821bc1b55e7e2afcc58521a31d41075c5b7
@@@ -270,7 -270,7 +270,7 @@@ config IMX_SDM
        select DMA_ENGINE
        help
          Support the i.MX SDMA engine. This engine is integrated into
-         Freescale i.MX25/31/35/51/53 chips.
+         Freescale i.MX25/31/35/51/53/6 chips.
  
  config IMX_DMA
        tristate "i.MX DMA support"
@@@ -427,6 -427,18 +427,6 @@@ config DMA_O
  comment "DMA Clients"
        depends on DMA_ENGINE
  
 -config NET_DMA
 -      bool "Network: TCP receive copy offload"
 -      depends on DMA_ENGINE && NET
 -      default (INTEL_IOATDMA || FSL_DMA)
 -      depends on BROKEN
 -      help
 -        This enables the use of DMA engines in the network stack to
 -        offload receive copy-to-user operations, freeing CPU cycles.
 -
 -        Say Y here if you enabled INTEL_IOATDMA or FSL_DMA, otherwise
 -        say N.
 -
  config ASYNC_TX_DMA
        bool "Async_tx: Offload support for the async_tx api"
        depends on DMA_ENGINE
diff --combined drivers/dma/mv_xor.c
index 7938272f2edf4faf63518874153298a707e03098,769d35c3a82be738cc8e02de218f4bb914ee379f..a63837ca14106a9831824af4e2e11a0c5ae44188
@@@ -45,19 -45,18 +45,18 @@@ static void mv_xor_issue_pending(struc
  #define mv_chan_to_devp(chan)           \
        ((chan)->dmadev.dev)
  
- static void mv_desc_init(struct mv_xor_desc_slot *desc, unsigned long flags)
+ static void mv_desc_init(struct mv_xor_desc_slot *desc,
+                        dma_addr_t addr, u32 byte_count,
+                        enum dma_ctrl_flags flags)
  {
        struct mv_xor_desc *hw_desc = desc->hw_desc;
  
-       hw_desc->status = (1 << 31);
+       hw_desc->status = XOR_DESC_DMA_OWNED;
        hw_desc->phy_next_desc = 0;
-       hw_desc->desc_command = (1 << 31);
- }
- static void mv_desc_set_byte_count(struct mv_xor_desc_slot *desc,
-                                  u32 byte_count)
- {
-       struct mv_xor_desc *hw_desc = desc->hw_desc;
+       /* Enable end-of-descriptor interrupts only for DMA_PREP_INTERRUPT */
+       hw_desc->desc_command = (flags & DMA_PREP_INTERRUPT) ?
+                               XOR_DESC_EOD_INT_EN : 0;
+       hw_desc->phy_dest_addr = addr;
        hw_desc->byte_count = byte_count;
  }
  
@@@ -75,20 -74,6 +74,6 @@@ static void mv_desc_clear_next_desc(str
        hw_desc->phy_next_desc = 0;
  }
  
- static void mv_desc_set_dest_addr(struct mv_xor_desc_slot *desc,
-                                 dma_addr_t addr)
- {
-       struct mv_xor_desc *hw_desc = desc->hw_desc;
-       hw_desc->phy_dest_addr = addr;
- }
- static int mv_chan_memset_slot_count(size_t len)
- {
-       return 1;
- }
- #define mv_chan_memcpy_slot_count(c) mv_chan_memset_slot_count(c)
  static void mv_desc_set_src_addr(struct mv_xor_desc_slot *desc,
                                 int index, dma_addr_t addr)
  {
@@@ -123,17 -108,12 +108,12 @@@ static u32 mv_chan_get_intr_cause(struc
        return intr_cause;
  }
  
- static int mv_is_err_intr(u32 intr_cause)
- {
-       if (intr_cause & ((1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9)))
-               return 1;
-       return 0;
- }
  static void mv_xor_device_clear_eoc_cause(struct mv_xor_chan *chan)
  {
-       u32 val = ~(1 << (chan->idx * 16));
+       u32 val;
+       val = XOR_INT_END_OF_DESC | XOR_INT_END_OF_CHAIN | XOR_INT_STOPPED;
+       val = ~(val << (chan->idx * 16));
        dev_dbg(mv_chan_to_devp(chan), "%s, val 0x%08x\n", __func__, val);
        writel_relaxed(val, XOR_INTR_CAUSE(chan));
  }
@@@ -144,17 -124,6 +124,6 @@@ static void mv_xor_device_clear_err_sta
        writel_relaxed(val, XOR_INTR_CAUSE(chan));
  }
  
- static int mv_can_chain(struct mv_xor_desc_slot *desc)
- {
-       struct mv_xor_desc_slot *chain_old_tail = list_entry(
-               desc->chain_node.prev, struct mv_xor_desc_slot, chain_node);
-       if (chain_old_tail->type != desc->type)
-               return 0;
-       return 1;
- }
  static void mv_set_mode(struct mv_xor_chan *chan,
                               enum dma_transaction_type type)
  {
@@@ -206,11 -175,6 +175,6 @@@ static char mv_chan_is_busy(struct mv_x
        return (state == 1) ? 1 : 0;
  }
  
- static int mv_chan_xor_slot_count(size_t len, int src_cnt)
- {
-       return 1;
- }
  /**
   * mv_xor_free_slots - flags descriptor slots for reuse
   * @slot: Slot to free
@@@ -222,7 -186,7 +186,7 @@@ static void mv_xor_free_slots(struct mv
        dev_dbg(mv_chan_to_devp(mv_chan), "%s %d slot %p\n",
                __func__, __LINE__, slot);
  
-       slot->slots_per_op = 0;
+       slot->slot_used = 0;
  
  }
  
@@@ -236,13 -200,11 +200,11 @@@ static void mv_xor_start_new_chain(stru
  {
        dev_dbg(mv_chan_to_devp(mv_chan), "%s %d: sw_desc %p\n",
                __func__, __LINE__, sw_desc);
-       if (sw_desc->type != mv_chan->current_type)
-               mv_set_mode(mv_chan, sw_desc->type);
  
        /* set the hardware chain */
        mv_chan_set_next_descriptor(mv_chan, sw_desc->async_tx.phys);
  
-       mv_chan->pending += sw_desc->slot_cnt;
+       mv_chan->pending++;
        mv_xor_issue_pending(&mv_chan->dmachan);
  }
  
@@@ -263,8 -225,6 +225,6 @@@ mv_xor_run_tx_complete_actions(struct m
                                desc->async_tx.callback_param);
  
                dma_descriptor_unmap(&desc->async_tx);
-               if (desc->group_head)
-                       desc->group_head = NULL;
        }
  
        /* run dependent operations */
@@@ -310,8 -270,7 +270,8 @@@ mv_xor_clean_slot(struct mv_xor_desc_sl
        return 0;
  }
  
 -static void __mv_xor_slot_cleanup(struct mv_xor_chan *mv_chan)
 +/* This function must be called with the mv_xor_chan spinlock held */
 +static void mv_xor_slot_cleanup(struct mv_xor_chan *mv_chan)
  {
        struct mv_xor_desc_slot *iter, *_iter;
        dma_cookie_t cookie = 0;
                mv_chan->dmachan.completed_cookie = cookie;
  }
  
 -static void
 -mv_xor_slot_cleanup(struct mv_xor_chan *mv_chan)
 -{
 -      spin_lock_bh(&mv_chan->lock);
 -      __mv_xor_slot_cleanup(mv_chan);
 -      spin_unlock_bh(&mv_chan->lock);
 -}
 -
  static void mv_xor_tasklet(unsigned long data)
  {
        struct mv_xor_chan *chan = (struct mv_xor_chan *) data;
 +
 +      spin_lock_bh(&chan->lock);
        mv_xor_slot_cleanup(chan);
 +      spin_unlock_bh(&chan->lock);
  }
  
  static struct mv_xor_desc_slot *
- mv_xor_alloc_slots(struct mv_xor_chan *mv_chan, int num_slots,
-                   int slots_per_op)
+ mv_xor_alloc_slot(struct mv_xor_chan *mv_chan)
  {
-       struct mv_xor_desc_slot *iter, *_iter, *alloc_start = NULL;
-       LIST_HEAD(chain);
-       int slots_found, retry = 0;
+       struct mv_xor_desc_slot *iter, *_iter;
+       int retry = 0;
  
        /* start search from the last allocated descrtiptor
         * if a contiguous allocation can not be found start searching
         * from the beginning of the list
         */
  retry:
-       slots_found = 0;
        if (retry == 0)
                iter = mv_chan->last_used;
        else
  
        list_for_each_entry_safe_continue(
                iter, _iter, &mv_chan->all_slots, slot_node) {
                prefetch(_iter);
                prefetch(&_iter->async_tx);
-               if (iter->slots_per_op) {
+               if (iter->slot_used) {
                        /* give up after finding the first busy slot
                         * on the second pass through the list
                         */
                        if (retry)
                                break;
-                       slots_found = 0;
                        continue;
                }
  
-               /* start the allocation if the slot is correctly aligned */
-               if (!slots_found++)
-                       alloc_start = iter;
-               if (slots_found == num_slots) {
-                       struct mv_xor_desc_slot *alloc_tail = NULL;
-                       struct mv_xor_desc_slot *last_used = NULL;
-                       iter = alloc_start;
-                       while (num_slots) {
-                               int i;
-                               /* pre-ack all but the last descriptor */
-                               async_tx_ack(&iter->async_tx);
-                               list_add_tail(&iter->chain_node, &chain);
-                               alloc_tail = iter;
-                               iter->async_tx.cookie = 0;
-                               iter->slot_cnt = num_slots;
-                               iter->xor_check_result = NULL;
-                               for (i = 0; i < slots_per_op; i++) {
-                                       iter->slots_per_op = slots_per_op - i;
-                                       last_used = iter;
-                                       iter = list_entry(iter->slot_node.next,
-                                               struct mv_xor_desc_slot,
-                                               slot_node);
-                               }
-                               num_slots -= slots_per_op;
-                       }
-                       alloc_tail->group_head = alloc_start;
-                       alloc_tail->async_tx.cookie = -EBUSY;
-                       list_splice(&chain, &alloc_tail->tx_list);
-                       mv_chan->last_used = last_used;
-                       mv_desc_clear_next_desc(alloc_start);
-                       mv_desc_clear_next_desc(alloc_tail);
-                       return alloc_tail;
-               }
+               /* pre-ack descriptor */
+               async_tx_ack(&iter->async_tx);
+               iter->slot_used = 1;
+               INIT_LIST_HEAD(&iter->chain_node);
+               iter->async_tx.cookie = -EBUSY;
+               mv_chan->last_used = iter;
+               mv_desc_clear_next_desc(iter);
+               return iter;
        }
        if (!retry++)
                goto retry;
@@@ -464,7 -399,7 +395,7 @@@ mv_xor_tx_submit(struct dma_async_tx_de
  {
        struct mv_xor_desc_slot *sw_desc = to_mv_xor_slot(tx);
        struct mv_xor_chan *mv_chan = to_mv_xor_chan(tx->chan);
-       struct mv_xor_desc_slot *grp_start, *old_chain_tail;
+       struct mv_xor_desc_slot *old_chain_tail;
        dma_cookie_t cookie;
        int new_hw_chain = 1;
  
                "%s sw_desc %p: async_tx %p\n",
                __func__, sw_desc, &sw_desc->async_tx);
  
-       grp_start = sw_desc->group_head;
        spin_lock_bh(&mv_chan->lock);
        cookie = dma_cookie_assign(tx);
  
        if (list_empty(&mv_chan->chain))
-               list_splice_init(&sw_desc->tx_list, &mv_chan->chain);
+               list_add_tail(&sw_desc->chain_node, &mv_chan->chain);
        else {
                new_hw_chain = 0;
  
                old_chain_tail = list_entry(mv_chan->chain.prev,
                                            struct mv_xor_desc_slot,
                                            chain_node);
-               list_splice_init(&grp_start->tx_list,
-                                &old_chain_tail->chain_node);
-               if (!mv_can_chain(grp_start))
-                       goto submit_done;
+               list_add_tail(&sw_desc->chain_node, &mv_chan->chain);
  
                dev_dbg(mv_chan_to_devp(mv_chan), "Append to last desc %pa\n",
                        &old_chain_tail->async_tx.phys);
  
                /* fix up the hardware chain */
-               mv_desc_set_next_desc(old_chain_tail, grp_start->async_tx.phys);
+               mv_desc_set_next_desc(old_chain_tail, sw_desc->async_tx.phys);
  
                /* if the channel is not busy */
                if (!mv_chan_is_busy(mv_chan)) {
        }
  
        if (new_hw_chain)
-               mv_xor_start_new_chain(mv_chan, grp_start);
+               mv_xor_start_new_chain(mv_chan, sw_desc);
  
- submit_done:
        spin_unlock_bh(&mv_chan->lock);
  
        return cookie;
@@@ -533,8 -461,9 +457,9 @@@ static int mv_xor_alloc_chan_resources(
        while (idx < num_descs_in_pool) {
                slot = kzalloc(sizeof(*slot), GFP_KERNEL);
                if (!slot) {
-                       printk(KERN_INFO "MV XOR Channel only initialized"
-                               " %d descriptor slots", idx);
+                       dev_info(mv_chan_to_devp(mv_chan),
+                                "channel only initialized %d descriptor slots",
+                                idx);
                        break;
                }
                virt_desc = mv_chan->dma_desc_pool_virt;
                slot->async_tx.tx_submit = mv_xor_tx_submit;
                INIT_LIST_HEAD(&slot->chain_node);
                INIT_LIST_HEAD(&slot->slot_node);
-               INIT_LIST_HEAD(&slot->tx_list);
                dma_desc = mv_chan->dma_desc_pool;
                slot->async_tx.phys = dma_desc + idx * MV_XOR_SLOT_SIZE;
                slot->idx = idx++;
        return mv_chan->slots_allocated ? : -ENOMEM;
  }
  
- static struct dma_async_tx_descriptor *
- mv_xor_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dest, dma_addr_t src,
-               size_t len, unsigned long flags)
- {
-       struct mv_xor_chan *mv_chan = to_mv_xor_chan(chan);
-       struct mv_xor_desc_slot *sw_desc, *grp_start;
-       int slot_cnt;
-       dev_dbg(mv_chan_to_devp(mv_chan),
-               "%s dest: %pad src %pad len: %u flags: %ld\n",
-               __func__, &dest, &src, len, flags);
-       if (unlikely(len < MV_XOR_MIN_BYTE_COUNT))
-               return NULL;
-       BUG_ON(len > MV_XOR_MAX_BYTE_COUNT);
-       spin_lock_bh(&mv_chan->lock);
-       slot_cnt = mv_chan_memcpy_slot_count(len);
-       sw_desc = mv_xor_alloc_slots(mv_chan, slot_cnt, 1);
-       if (sw_desc) {
-               sw_desc->type = DMA_MEMCPY;
-               sw_desc->async_tx.flags = flags;
-               grp_start = sw_desc->group_head;
-               mv_desc_init(grp_start, flags);
-               mv_desc_set_byte_count(grp_start, len);
-               mv_desc_set_dest_addr(sw_desc->group_head, dest);
-               mv_desc_set_src_addr(grp_start, 0, src);
-               sw_desc->unmap_src_cnt = 1;
-               sw_desc->unmap_len = len;
-       }
-       spin_unlock_bh(&mv_chan->lock);
-       dev_dbg(mv_chan_to_devp(mv_chan),
-               "%s sw_desc %p async_tx %p\n",
-               __func__, sw_desc, sw_desc ? &sw_desc->async_tx : NULL);
-       return sw_desc ? &sw_desc->async_tx : NULL;
- }
  static struct dma_async_tx_descriptor *
  mv_xor_prep_dma_xor(struct dma_chan *chan, dma_addr_t dest, dma_addr_t *src,
                    unsigned int src_cnt, size_t len, unsigned long flags)
  {
        struct mv_xor_chan *mv_chan = to_mv_xor_chan(chan);
-       struct mv_xor_desc_slot *sw_desc, *grp_start;
-       int slot_cnt;
+       struct mv_xor_desc_slot *sw_desc;
  
        if (unlikely(len < MV_XOR_MIN_BYTE_COUNT))
                return NULL;
                __func__, src_cnt, len, &dest, flags);
  
        spin_lock_bh(&mv_chan->lock);
-       slot_cnt = mv_chan_xor_slot_count(len, src_cnt);
-       sw_desc = mv_xor_alloc_slots(mv_chan, slot_cnt, 1);
+       sw_desc = mv_xor_alloc_slot(mv_chan);
        if (sw_desc) {
                sw_desc->type = DMA_XOR;
                sw_desc->async_tx.flags = flags;
-               grp_start = sw_desc->group_head;
-               mv_desc_init(grp_start, flags);
-               /* the byte count field is the same as in memcpy desc*/
-               mv_desc_set_byte_count(grp_start, len);
-               mv_desc_set_dest_addr(sw_desc->group_head, dest);
-               sw_desc->unmap_src_cnt = src_cnt;
-               sw_desc->unmap_len = len;
+               mv_desc_init(sw_desc, dest, len, flags);
                while (src_cnt--)
-                       mv_desc_set_src_addr(grp_start, src_cnt, src[src_cnt]);
+                       mv_desc_set_src_addr(sw_desc, src_cnt, src[src_cnt]);
        }
        spin_unlock_bh(&mv_chan->lock);
        dev_dbg(mv_chan_to_devp(mv_chan),
        return sw_desc ? &sw_desc->async_tx : NULL;
  }
  
+ static struct dma_async_tx_descriptor *
+ mv_xor_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dest, dma_addr_t src,
+               size_t len, unsigned long flags)
+ {
+       /*
+        * A MEMCPY operation is identical to an XOR operation with only
+        * a single source address.
+        */
+       return mv_xor_prep_dma_xor(chan, dest, &src, 1, len, flags);
+ }
+ static struct dma_async_tx_descriptor *
+ mv_xor_prep_dma_interrupt(struct dma_chan *chan, unsigned long flags)
+ {
+       struct mv_xor_chan *mv_chan = to_mv_xor_chan(chan);
+       dma_addr_t src, dest;
+       size_t len;
+       src = mv_chan->dummy_src_addr;
+       dest = mv_chan->dummy_dst_addr;
+       len = MV_XOR_MIN_BYTE_COUNT;
+       /*
+        * We implement the DMA_INTERRUPT operation as a minimum sized
+        * XOR operation with a single dummy source address.
+        */
+       return mv_xor_prep_dma_xor(chan, dest, &src, 1, len, flags);
+ }
  static void mv_xor_free_chan_resources(struct dma_chan *chan)
  {
        struct mv_xor_chan *mv_chan = to_mv_xor_chan(chan);
        struct mv_xor_desc_slot *iter, *_iter;
        int in_use_descs = 0;
  
 +      spin_lock_bh(&mv_chan->lock);
 +
        mv_xor_slot_cleanup(mv_chan);
  
 -      spin_lock_bh(&mv_chan->lock);
        list_for_each_entry_safe(iter, _iter, &mv_chan->chain,
                                        chain_node) {
                in_use_descs++;
@@@ -697,12 -606,11 +603,12 @@@ static enum dma_status mv_xor_status(st
        enum dma_status ret;
  
        ret = dma_cookie_status(chan, cookie, txstate);
 -      if (ret == DMA_COMPLETE) {
 -              mv_xor_clean_completed_slots(mv_chan);
 +      if (ret == DMA_COMPLETE)
                return ret;
 -      }
 +
 +      spin_lock_bh(&mv_chan->lock);
        mv_xor_slot_cleanup(mv_chan);
 +      spin_unlock_bh(&mv_chan->lock);
  
        return dma_cookie_status(chan, cookie, txstate);
  }
@@@ -733,18 -641,16 +639,16 @@@ static void mv_dump_xor_regs(struct mv_
  static void mv_xor_err_interrupt_handler(struct mv_xor_chan *chan,
                                         u32 intr_cause)
  {
-       if (intr_cause & (1 << 4)) {
-            dev_dbg(mv_chan_to_devp(chan),
-                    "ignore this error\n");
-            return;
+       if (intr_cause & XOR_INT_ERR_DECODE) {
+               dev_dbg(mv_chan_to_devp(chan), "ignoring address decode error\n");
+               return;
        }
  
-       dev_err(mv_chan_to_devp(chan),
-               "error on chan %d. intr cause 0x%08x\n",
+       dev_err(mv_chan_to_devp(chan), "error on chan %d. intr cause 0x%08x\n",
                chan->idx, intr_cause);
  
        mv_dump_xor_regs(chan);
-       BUG();
+       WARN_ON(1);
  }
  
  static irqreturn_t mv_xor_interrupt_handler(int irq, void *data)
  
        dev_dbg(mv_chan_to_devp(chan), "intr cause %x\n", intr_cause);
  
-       if (mv_is_err_intr(intr_cause))
+       if (intr_cause & XOR_INTR_ERRORS)
                mv_xor_err_interrupt_handler(chan, intr_cause);
  
        tasklet_schedule(&chan->irq_tasklet);
@@@ -780,7 -686,7 +684,7 @@@ static void mv_xor_issue_pending(struc
  
  static int mv_xor_memcpy_self_test(struct mv_xor_chan *mv_chan)
  {
 -      int i;
 +      int i, ret;
        void *src, *dest;
        dma_addr_t src_dma, dest_dma;
        struct dma_chan *dma_chan;
  
        src_dma = dma_map_page(dma_chan->device->dev, virt_to_page(src), 0,
                                 PAGE_SIZE, DMA_TO_DEVICE);
 -      unmap->to_cnt = 1;
        unmap->addr[0] = src_dma;
  
 +      ret = dma_mapping_error(dma_chan->device->dev, src_dma);
 +      if (ret) {
 +              err = -ENOMEM;
 +              goto free_resources;
 +      }
 +      unmap->to_cnt = 1;
 +
        dest_dma = dma_map_page(dma_chan->device->dev, virt_to_page(dest), 0,
                                  PAGE_SIZE, DMA_FROM_DEVICE);
 -      unmap->from_cnt = 1;
        unmap->addr[1] = dest_dma;
  
 +      ret = dma_mapping_error(dma_chan->device->dev, dest_dma);
 +      if (ret) {
 +              err = -ENOMEM;
 +              goto free_resources;
 +      }
 +      unmap->from_cnt = 1;
        unmap->len = PAGE_SIZE;
  
        tx = mv_xor_prep_dma_memcpy(dma_chan, dest_dma, src_dma,
                                    PAGE_SIZE, 0);
 +      if (!tx) {
 +              dev_err(dma_chan->device->dev,
 +                      "Self-test cannot prepare operation, disabling\n");
 +              err = -ENODEV;
 +              goto free_resources;
 +      }
 +
        cookie = mv_xor_tx_submit(tx);
 +      if (dma_submit_error(cookie)) {
 +              dev_err(dma_chan->device->dev,
 +                      "Self-test submit error, disabling\n");
 +              err = -ENODEV;
 +              goto free_resources;
 +      }
 +
        mv_xor_issue_pending(dma_chan);
        async_tx_ack(tx);
        msleep(1);
@@@ -889,7 -770,7 +793,7 @@@ out
  static int
  mv_xor_xor_self_test(struct mv_xor_chan *mv_chan)
  {
 -      int i, src_idx;
 +      int i, src_idx, ret;
        struct page *dest;
        struct page *xor_srcs[MV_XOR_NUM_SRC_TEST];
        dma_addr_t dma_srcs[MV_XOR_NUM_SRC_TEST];
                unmap->addr[i] = dma_map_page(dma_chan->device->dev, xor_srcs[i],
                                              0, PAGE_SIZE, DMA_TO_DEVICE);
                dma_srcs[i] = unmap->addr[i];
 +              ret = dma_mapping_error(dma_chan->device->dev, unmap->addr[i]);
 +              if (ret) {
 +                      err = -ENOMEM;
 +                      goto free_resources;
 +              }
                unmap->to_cnt++;
        }
  
        unmap->addr[src_count] = dma_map_page(dma_chan->device->dev, dest, 0, PAGE_SIZE,
                                      DMA_FROM_DEVICE);
        dest_dma = unmap->addr[src_count];
 +      ret = dma_mapping_error(dma_chan->device->dev, unmap->addr[src_count]);
 +      if (ret) {
 +              err = -ENOMEM;
 +              goto free_resources;
 +      }
        unmap->from_cnt = 1;
        unmap->len = PAGE_SIZE;
  
        tx = mv_xor_prep_dma_xor(dma_chan, dest_dma, dma_srcs,
                                 src_count, PAGE_SIZE, 0);
 +      if (!tx) {
 +              dev_err(dma_chan->device->dev,
 +                      "Self-test cannot prepare operation, disabling\n");
 +              err = -ENODEV;
 +              goto free_resources;
 +      }
  
        cookie = mv_xor_tx_submit(tx);
 +      if (dma_submit_error(cookie)) {
 +              dev_err(dma_chan->device->dev,
 +                      "Self-test submit error, disabling\n");
 +              err = -ENODEV;
 +              goto free_resources;
 +      }
 +
        mv_xor_issue_pending(dma_chan);
        async_tx_ack(tx);
        msleep(8);
@@@ -1041,6 -899,10 +945,10 @@@ static int mv_xor_channel_remove(struc
  
        dma_free_coherent(dev, MV_XOR_POOL_SIZE,
                          mv_chan->dma_desc_pool_virt, mv_chan->dma_desc_pool);
+       dma_unmap_single(dev, mv_chan->dummy_src_addr,
+                        MV_XOR_MIN_BYTE_COUNT, DMA_FROM_DEVICE);
+       dma_unmap_single(dev, mv_chan->dummy_dst_addr,
+                        MV_XOR_MIN_BYTE_COUNT, DMA_TO_DEVICE);
  
        list_for_each_entry_safe(chan, _chan, &mv_chan->dmadev.channels,
                                 device_node) {
@@@ -1070,6 -932,16 +978,16 @@@ mv_xor_channel_add(struct mv_xor_devic
  
        dma_dev = &mv_chan->dmadev;
  
+       /*
+        * These source and destination dummy buffers are used to implement
+        * a DMA_INTERRUPT operation as a minimum-sized XOR operation.
+        * Hence, we only need to map the buffers at initialization-time.
+        */
+       mv_chan->dummy_src_addr = dma_map_single(dma_dev->dev,
+               mv_chan->dummy_src, MV_XOR_MIN_BYTE_COUNT, DMA_FROM_DEVICE);
+       mv_chan->dummy_dst_addr = dma_map_single(dma_dev->dev,
+               mv_chan->dummy_dst, MV_XOR_MIN_BYTE_COUNT, DMA_TO_DEVICE);
        /* allocate coherent memory for hardware descriptors
         * note: writecombine gives slightly better performance, but
         * requires that we explicitly flush the writes
        dma_dev->dev = &pdev->dev;
  
        /* set prep routines based on capability */
+       if (dma_has_cap(DMA_INTERRUPT, dma_dev->cap_mask))
+               dma_dev->device_prep_dma_interrupt = mv_xor_prep_dma_interrupt;
        if (dma_has_cap(DMA_MEMCPY, dma_dev->cap_mask))
                dma_dev->device_prep_dma_memcpy = mv_xor_prep_dma_memcpy;
        if (dma_has_cap(DMA_XOR, dma_dev->cap_mask)) {
  
        mv_chan_unmask_interrupts(mv_chan);
  
-       mv_set_mode(mv_chan, DMA_MEMCPY);
+       mv_set_mode(mv_chan, DMA_XOR);
  
        spin_lock_init(&mv_chan->lock);
        INIT_LIST_HEAD(&mv_chan->chain);
index 7e97e53f9ff2474fd1741b911c43a277d8408ea2,298f9127e69715cf9e07899e2511e9bbaba50558..339b252fcedd8db0ac844e0a5a500ded59f51680
@@@ -16,6 -16,7 +16,7 @@@
  #include <linux/completion.h>
  #include <linux/miscdevice.h>
  #include <linux/dmaengine.h>
+ #include <linux/fsldma.h>
  #include <linux/interrupt.h>
  #include <linux/highmem.h>
  #include <linux/kernel.h>
@@@ -518,23 -519,22 +519,22 @@@ static noinline int fpga_program_dma(st
        config.direction = DMA_MEM_TO_DEV;
        config.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
        config.dst_maxburst = fpga_fifo_size(priv->regs) / 2 / 4;
-       ret = chan->device->device_control(chan, DMA_SLAVE_CONFIG,
-                                          (unsigned long)&config);
+       ret = dmaengine_slave_config(chan, &config);
        if (ret) {
                dev_err(priv->dev, "DMA slave configuration failed\n");
                goto out_dma_unmap;
        }
  
-       ret = chan->device->device_control(chan, FSLDMA_EXTERNAL_START, 1);
+       ret = fsl_dma_external_start(chan, 1)
        if (ret) {
                dev_err(priv->dev, "DMA external control setup failed\n");
                goto out_dma_unmap;
        }
  
        /* setup and submit the DMA transaction */
-       tx = chan->device->device_prep_dma_sg(chan,
-                                             table.sgl, num_pages,
-                                             vb->sglist, vb->sglen, 0);
+       tx = dmaengine_prep_dma_sg(chan, table.sgl, num_pages,
+                       vb->sglist, vb->sglen, 0);
        if (!tx) {
                dev_err(priv->dev, "Unable to prep DMA transaction\n");
                ret = -ENOMEM;
@@@ -749,8 -749,13 +749,8 @@@ static ssize_t fpga_read(struct file *f
                         loff_t *f_pos)
  {
        struct fpga_dev *priv = filp->private_data;
 -
 -      count = min_t(size_t, priv->bytes - *f_pos, count);
 -      if (copy_to_user(buf, priv->vb.vaddr + *f_pos, count))
 -              return -EFAULT;
 -
 -      *f_pos += count;
 -      return count;
 +      return simple_read_from_buffer(buf, count, ppos,
 +                                     priv->vb.vaddr, priv->bytes);
  }
  
  static loff_t fpga_llseek(struct file *filp, loff_t offset, int origin)
        if ((filp->f_flags & O_ACCMODE) != O_RDONLY)
                return -EINVAL;
  
 -      switch (origin) {
 -      case SEEK_SET: /* seek relative to the beginning of the file */
 -              newpos = offset;
 -              break;
 -      case SEEK_CUR: /* seek relative to current position in the file */
 -              newpos = filp->f_pos + offset;
 -              break;
 -      case SEEK_END: /* seek relative to the end of the file */
 -              newpos = priv->fw_size - offset;
 -              break;
 -      default:
 -              return -EINVAL;
 -      }
 -
 -      /* check for sanity */
 -      if (newpos > priv->fw_size)
 -              return -EINVAL;
 -
 -      filp->f_pos = newpos;
 -      return newpos;
 +      return fixed_size_llseek(file, offset, origin, priv->fw_size);
  }
  
  static const struct file_operations fpga_fops = {
index 536c863bebf1aee0658d1bda887c050a515769b6,b2852947d3a2b6282ab9a4975a99cc9e9027167e..6beee8ce2d68fe4fe0daa516392d055af3e1ed20
  #include <linux/clk.h>
  #include <linux/clk-provider.h>
  
+ #include <linux/dmaengine.h>
+ #include <linux/platform_data/dma-dw.h>
  enum {
        PORT_CE4100,
        PORT_BYT,
+       PORT_BSW0,
+       PORT_BSW1,
+       PORT_BSW2,
  };
  
  struct pxa_spi_info {
        enum pxa_ssp_type type;
        int port_id;
        int num_chipselect;
-       int tx_slave_id;
-       int tx_chan_id;
-       int rx_slave_id;
-       int rx_chan_id;
        unsigned long max_clk_rate;
+       /* DMA channel request parameters */
+       void *tx_param;
+       void *rx_param;
  };
  
+ static struct dw_dma_slave byt_tx_param = { .dst_id = 0 };
+ static struct dw_dma_slave byt_rx_param = { .src_id = 1 };
+ static struct dw_dma_slave bsw0_tx_param = { .dst_id = 0 };
+ static struct dw_dma_slave bsw0_rx_param = { .src_id = 1 };
+ static struct dw_dma_slave bsw1_tx_param = { .dst_id = 6 };
+ static struct dw_dma_slave bsw1_rx_param = { .src_id = 7 };
+ static struct dw_dma_slave bsw2_tx_param = { .dst_id = 8 };
+ static struct dw_dma_slave bsw2_rx_param = { .src_id = 9 };
+ static bool lpss_dma_filter(struct dma_chan *chan, void *param)
+ {
+       struct dw_dma_slave *dws = param;
+       if (dws->dma_dev != chan->device->dev)
+               return false;
+       chan->private = dws;
+       return true;
+ }
  static struct pxa_spi_info spi_info_configs[] = {
        [PORT_CE4100] = {
                .type = PXA25x_SSP,
                .port_id =  -1,
                .num_chipselect = -1,
-               .tx_slave_id = -1,
-               .tx_chan_id = -1,
-               .rx_slave_id = -1,
-               .rx_chan_id = -1,
                .max_clk_rate = 3686400,
        },
        [PORT_BYT] = {
                .type = LPSS_SSP,
                .port_id = 0,
                .num_chipselect = 1,
-               .tx_slave_id = 0,
-               .tx_chan_id = 0,
-               .rx_slave_id = 1,
-               .rx_chan_id = 1,
                .max_clk_rate = 50000000,
+               .tx_param = &byt_tx_param,
+               .rx_param = &byt_rx_param,
+       },
+       [PORT_BSW0] = {
+               .type = LPSS_SSP,
+               .port_id = 0,
+               .num_chipselect = 1,
+               .max_clk_rate = 50000000,
+               .tx_param = &bsw0_tx_param,
+               .rx_param = &bsw0_rx_param,
+       },
+       [PORT_BSW1] = {
+               .type = LPSS_SSP,
+               .port_id = 1,
+               .num_chipselect = 1,
+               .max_clk_rate = 50000000,
+               .tx_param = &bsw1_tx_param,
+               .rx_param = &bsw1_rx_param,
+       },
+       [PORT_BSW2] = {
+               .type = LPSS_SSP,
+               .port_id = 2,
+               .num_chipselect = 1,
+               .max_clk_rate = 50000000,
+               .tx_param = &bsw2_tx_param,
+               .rx_param = &bsw2_rx_param,
        },
  };
  
@@@ -59,6 -104,7 +104,7 @@@ static int pxa2xx_spi_pci_probe(struct 
        struct ssp_device *ssp;
        struct pxa_spi_info *c;
        char buf[40];
+       struct pci_dev *dma_dev;
  
        ret = pcim_enable_device(dev);
        if (ret)
        memset(&spi_pdata, 0, sizeof(spi_pdata));
        spi_pdata.num_chipselect = (c->num_chipselect > 0) ?
                                        c->num_chipselect : dev->devfn;
-       spi_pdata.tx_slave_id = c->tx_slave_id;
-       spi_pdata.tx_chan_id = c->tx_chan_id;
-       spi_pdata.rx_slave_id = c->rx_slave_id;
-       spi_pdata.rx_chan_id = c->rx_chan_id;
-       spi_pdata.enable_dma = c->rx_slave_id >= 0 && c->tx_slave_id >= 0;
+       dma_dev = pci_get_slot(dev->bus, PCI_DEVFN(PCI_SLOT(dev->devfn), 0));
+       if (c->tx_param) {
+               struct dw_dma_slave *slave = c->tx_param;
+               slave->dma_dev = &dma_dev->dev;
+               slave->src_master = 1;
+               slave->dst_master = 0;
+       }
+       if (c->rx_param) {
+               struct dw_dma_slave *slave = c->rx_param;
+               slave->dma_dev = &dma_dev->dev;
+               slave->src_master = 1;
+               slave->dst_master = 0;
+       }
+       spi_pdata.dma_filter = lpss_dma_filter;
+       spi_pdata.tx_param = c->tx_param;
+       spi_pdata.rx_param = c->rx_param;
+       spi_pdata.enable_dma = c->rx_param && c->tx_param;
  
        ssp = &spi_pdata.ssp;
        ssp->phys_base = pci_resource_start(dev, 0);
@@@ -123,11 -187,15 +187,14 @@@ static void pxa2xx_spi_pci_remove(struc
  
        platform_device_unregister(pdev);
        clk_unregister(spi_pdata->ssp.clk);
 -      pci_set_drvdata(dev, NULL);
  }
  
  static const struct pci_device_id pxa2xx_spi_pci_devices[] = {
        { PCI_VDEVICE(INTEL, 0x2e6a), PORT_CE4100 },
        { PCI_VDEVICE(INTEL, 0x0f0e), PORT_BYT },
+       { PCI_VDEVICE(INTEL, 0x228e), PORT_BSW0 },
+       { PCI_VDEVICE(INTEL, 0x2290), PORT_BSW1 },
+       { PCI_VDEVICE(INTEL, 0x22ac), PORT_BSW2 },
        { },
  };
  MODULE_DEVICE_TABLE(pci, pxa2xx_spi_pci_devices);
diff --combined drivers/spi/spi-pxa2xx.c
index 46f45ca2c69400888de13f390decbf09a30f27d1,256c0abbddd22e2b94ab81996d8072352e5c015d..d8a105f76837682b61670567aebe9741732f0f58
@@@ -1062,8 -1062,6 +1062,6 @@@ pxa2xx_spi_acpi_get_pdata(struct platfo
  
        pdata->num_chipselect = 1;
        pdata->enable_dma = true;
-       pdata->tx_chan_id = -1;
-       pdata->rx_chan_id = -1;
  
        return pdata;
  }
@@@ -1074,7 -1072,6 +1072,7 @@@ static struct acpi_device_id pxa2xx_spi
        { "INT3430", 0 },
        { "INT3431", 0 },
        { "80860F0E", 0 },
 +      { "8086228E", 0 },
        { },
  };
  MODULE_DEVICE_TABLE(acpi, pxa2xx_spi_acpi_match);
index 1bcb4b2141a6ed95a992ebd8350db0759e865b96,c3c70913e040b9f2302c625e4bd2fba7f5b582b3..cb51be55989eca88f8ec96c1529e7b86fa16a6ad
  #include <linux/dmaengine.h>
  
  struct uart_8250_dma {
+       /* Filter function */
        dma_filter_fn           fn;
+       /* Parameter to the filter function */
        void                    *rx_param;
        void                    *tx_param;
  
-       int                     rx_chan_id;
-       int                     tx_chan_id;
        struct dma_slave_config rxconf;
        struct dma_slave_config txconf;
  
@@@ -72,7 -72,6 +72,7 @@@ struct serial8250_config 
  #define UART_CAP_UUE  (1 << 12)       /* UART needs IER bit 6 set (Xscale) */
  #define UART_CAP_RTOIE        (1 << 13)       /* UART needs IER bit 4 set (Xscale, Tegra) */
  #define UART_CAP_HFIFO        (1 << 14)       /* UART has a "hidden" FIFO */
 +#define UART_CAP_RPM  (1 << 15)       /* Runtime PM is active while idle */
  
  #define UART_BUG_QUOT (1 << 0)        /* UART has buggy quot LSB */
  #define UART_BUG_TXEN (1 << 1)        /* UART has buggy TX IIR status */
@@@ -113,8 -112,6 +113,8 @@@ static inline void serial_dl_write(stru
        up->dl_write(up, value);
  }
  
 +struct uart_8250_port *serial8250_get_port(int line);
 +
  #if defined(__alpha__) && !defined(CONFIG_PCI)
  /*
   * Digital did something really horribly wrong with the OUT1 and OUT2
index 57d9df84ce5d7aca4fe25c557988742fbbb986bc,6664de2cdfdb57f7681ddc060f7ff37fceba7181..beea6ca73ee50c8f18757bb87970b1107733c419
@@@ -216,10 -216,7 +216,7 @@@ out
  
  static bool dw8250_dma_filter(struct dma_chan *chan, void *param)
  {
-       struct dw8250_data *data = param;
-       return chan->chan_id == data->dma.tx_chan_id ||
-              chan->chan_id == data->dma.rx_chan_id;
+       return false;
  }
  
  static void dw8250_setup_port(struct uart_8250_port *up)
@@@ -399,8 -396,6 +396,6 @@@ static int dw8250_probe(struct platform
        if (!IS_ERR(data->rst))
                reset_control_deassert(data->rst);
  
-       data->dma.rx_chan_id = -1;
-       data->dma.tx_chan_id = -1;
        data->dma.rx_param = data;
        data->dma.tx_param = data;
        data->dma.fn = dw8250_dma_filter;
@@@ -540,7 -535,6 +535,7 @@@ static const struct acpi_device_id dw82
        { "INT3434", 0 },
        { "INT3435", 0 },
        { "80860F0A", 0 },
 +      { "8086228A", 0 },
        { },
  };
  MODULE_DEVICE_TABLE(acpi, dw8250_acpi_match);
index 4f1cd296f1b13bb4a56d55f5b5e96d76a2a0b6fe,85a2eb986ffe86690ec724bcb9d32229b736da1e..beb9d71cd47ae499cc6e9bc585f8affe16d1d8ad
@@@ -25,6 -25,9 +25,9 @@@
  #include <asm/byteorder.h>
  #include <asm/io.h>
  
+ #include <linux/dmaengine.h>
+ #include <linux/platform_data/dma-dw.h>
  #include "8250.h"
  
  /*
@@@ -1349,12 -1352,18 +1352,15 @@@ ce4100_serial_setup(struct serial_priva
  #define PCI_DEVICE_ID_INTEL_BYT_UART1 0x0f0a
  #define PCI_DEVICE_ID_INTEL_BYT_UART2 0x0f0c
  
+ #define PCI_DEVICE_ID_INTEL_BSW_UART1 0x228a
+ #define PCI_DEVICE_ID_INTEL_BSW_UART2 0x228c
  #define BYT_PRV_CLK                   0x800
  #define BYT_PRV_CLK_EN                        (1 << 0)
  #define BYT_PRV_CLK_M_VAL_SHIFT               1
  #define BYT_PRV_CLK_N_VAL_SHIFT               16
  #define BYT_PRV_CLK_UPDATE            (1 << 31)
  
 -#define BYT_GENERAL_REG                       0x808
 -#define BYT_GENERAL_DIS_RTS_N_OVERRIDE        (1 << 3)
 -
  #define BYT_TX_OVF_INT                        0x820
  #define BYT_TX_OVF_INT_MASK           (1 << 1)
  
@@@ -1409,12 -1418,28 +1415,18 @@@ byt_set_termios(struct uart_port *p, st
        reg |= BYT_PRV_CLK_EN | BYT_PRV_CLK_UPDATE;
        writel(reg, p->membase + BYT_PRV_CLK);
  
 -      /*
 -       * If auto-handshake mechanism is not enabled,
 -       * disable rts_n override
 -       */
 -      reg = readl(p->membase + BYT_GENERAL_REG);
 -      reg &= ~BYT_GENERAL_DIS_RTS_N_OVERRIDE;
 -      if (termios->c_cflag & CRTSCTS)
 -              reg |= BYT_GENERAL_DIS_RTS_N_OVERRIDE;
 -      writel(reg, p->membase + BYT_GENERAL_REG);
 -
        serial8250_do_set_termios(p, termios, old);
  }
  
  static bool byt_dma_filter(struct dma_chan *chan, void *param)
  {
-       return chan->chan_id == *(int *)param;
+       struct dw_dma_slave *dws = param;
+       if (dws->dma_dev != chan->device->dev)
+               return false;
+       chan->private = dws;
+       return true;
  }
  
  static int
@@@ -1422,35 -1447,57 +1434,57 @@@ byt_serial_setup(struct serial_private 
                 const struct pciserial_board *board,
                 struct uart_8250_port *port, int idx)
  {
+       struct pci_dev *pdev = priv->dev;
+       struct device *dev = port->port.dev;
        struct uart_8250_dma *dma;
+       struct dw_dma_slave *tx_param, *rx_param;
+       struct pci_dev *dma_dev;
        int ret;
  
-       dma = devm_kzalloc(port->port.dev, sizeof(*dma), GFP_KERNEL);
+       dma = devm_kzalloc(dev, sizeof(*dma), GFP_KERNEL);
        if (!dma)
                return -ENOMEM;
  
-       switch (priv->dev->device) {
+       tx_param = devm_kzalloc(dev, sizeof(*tx_param), GFP_KERNEL);
+       if (!tx_param)
+               return -ENOMEM;
+       rx_param = devm_kzalloc(dev, sizeof(*rx_param), GFP_KERNEL);
+       if (!rx_param)
+               return -ENOMEM;
+       switch (pdev->device) {
        case PCI_DEVICE_ID_INTEL_BYT_UART1:
-               dma->rx_chan_id = 3;
-               dma->tx_chan_id = 2;
+       case PCI_DEVICE_ID_INTEL_BSW_UART1:
+               rx_param->src_id = 3;
+               tx_param->dst_id = 2;
                break;
        case PCI_DEVICE_ID_INTEL_BYT_UART2:
-               dma->rx_chan_id = 5;
-               dma->tx_chan_id = 4;
+       case PCI_DEVICE_ID_INTEL_BSW_UART2:
+               rx_param->src_id = 5;
+               tx_param->dst_id = 4;
                break;
        default:
                return -EINVAL;
        }
  
-       dma->rxconf.slave_id = dma->rx_chan_id;
+       rx_param->src_master = 1;
+       rx_param->dst_master = 0;
        dma->rxconf.src_maxburst = 16;
  
-       dma->txconf.slave_id = dma->tx_chan_id;
+       tx_param->src_master = 1;
+       tx_param->dst_master = 0;
        dma->txconf.dst_maxburst = 16;
  
+       dma_dev = pci_get_slot(pdev->bus, PCI_DEVFN(PCI_SLOT(pdev->devfn), 0));
+       rx_param->dma_dev = &dma_dev->dev;
+       tx_param->dma_dev = &dma_dev->dev;
        dma->fn = byt_dma_filter;
-       dma->rx_param = &dma->rx_chan_id;
-       dma->tx_param = &dma->tx_chan_id;
+       dma->rx_param = rx_param;
+       dma->tx_param = tx_param;
  
        ret = pci_default_setup(priv, board, port, idx);
        port->port.iotype = UPIO_MEM;
@@@ -1775,7 -1822,6 +1809,7 @@@ pci_wch_ch353_setup(struct serial_priva
  #define PCI_DEVICE_ID_COMMTECH_4222PCIE       0x0022
  #define PCI_DEVICE_ID_BROADCOM_TRUMANAGE 0x160a
  #define PCI_DEVICE_ID_AMCC_ADDIDATA_APCI7800 0x818e
 +#define PCI_DEVICE_ID_INTEL_QRK_UART  0x0936
  
  #define PCI_VENDOR_ID_SUNIX           0x1fd4
  #define PCI_DEVICE_ID_SUNIX_1999      0x1999
@@@ -1886,13 -1932,20 +1920,27 @@@ static struct pci_serial_quirk pci_seri
                .subdevice      = PCI_ANY_ID,
                .setup          = byt_serial_setup,
        },
 +      {
 +              .vendor         = PCI_VENDOR_ID_INTEL,
 +              .device         = PCI_DEVICE_ID_INTEL_QRK_UART,
 +              .subvendor      = PCI_ANY_ID,
 +              .subdevice      = PCI_ANY_ID,
 +              .setup          = pci_default_setup,
 +      },
+       {
+               .vendor         = PCI_VENDOR_ID_INTEL,
+               .device         = PCI_DEVICE_ID_INTEL_BSW_UART1,
+               .subvendor      = PCI_ANY_ID,
+               .subdevice      = PCI_ANY_ID,
+               .setup          = byt_serial_setup,
+       },
+       {
+               .vendor         = PCI_VENDOR_ID_INTEL,
+               .device         = PCI_DEVICE_ID_INTEL_BSW_UART2,
+               .subvendor      = PCI_ANY_ID,
+               .subdevice      = PCI_ANY_ID,
+               .setup          = byt_serial_setup,
+       },
        /*
         * ITE
         */
@@@ -2735,7 -2788,6 +2783,7 @@@ enum pci_board_num_t 
        pbn_ADDIDATA_PCIe_8_3906250,
        pbn_ce4100_1_115200,
        pbn_byt,
 +      pbn_qrk,
        pbn_omegapci,
        pbn_NETMOS9900_2s_115200,
        pbn_brcm_trumanage,
@@@ -3486,12 -3538,6 +3534,12 @@@ static struct pciserial_board pci_board
                .uart_offset    = 0x80,
                .reg_shift      = 2,
        },
 +      [pbn_qrk] = {
 +              .flags          = FL_BASE0,
 +              .num_ports      = 1,
 +              .base_baud      = 2764800,
 +              .reg_shift      = 2,
 +      },
        [pbn_omegapci] = {
                .flags          = FL_BASE0,
                .num_ports      = 8,
@@@ -5189,16 -5235,18 +5237,24 @@@ static struct pci_device_id serial_pci_
                PCI_CLASS_COMMUNICATION_SERIAL << 8, 0xff0000,
                pbn_byt },
        {       PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BYT_UART2,
+               PCI_ANY_ID,  PCI_ANY_ID,
+               PCI_CLASS_COMMUNICATION_SERIAL << 8, 0xff0000,
+               pbn_byt },
+       {       PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BSW_UART1,
+               PCI_ANY_ID,  PCI_ANY_ID,
+               PCI_CLASS_COMMUNICATION_SERIAL << 8, 0xff0000,
+               pbn_byt },
+       {       PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BSW_UART2,
                PCI_ANY_ID,  PCI_ANY_ID,
                PCI_CLASS_COMMUNICATION_SERIAL << 8, 0xff0000,
                pbn_byt },
  
 +      /*
 +       * Intel Quark x1000
 +       */
 +      {       PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_QRK_UART,
 +              PCI_ANY_ID, PCI_ANY_ID, 0, 0,
 +              pbn_qrk },
        /*
         * Cronyx Omega PCI
         */
index d7d4584549a5d77e84b02f567085bcc77da5526a,d8185c7f476f8ba3f1e28c926b656f42921aedb0..edde3eca055d055b3978273deb9058713c2d7a09
@@@ -37,6 -37,7 +37,7 @@@
  #include <linux/of_device.h>
  #include <linux/of_gpio.h>
  #include <linux/dma-mapping.h>
+ #include <linux/dmaengine.h>
  #include <linux/atmel_pdc.h>
  #include <linux/atmel_serial.h>
  #include <linux/uaccess.h>
@@@ -526,45 -527,6 +527,45 @@@ static void atmel_enable_ms(struct uart
        UART_PUT_IER(port, ier);
  }
  
 +/*
 + * Disable modem status interrupts
 + */
 +static void atmel_disable_ms(struct uart_port *port)
 +{
 +      struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
 +      uint32_t idr = 0;
 +
 +      /*
 +       * Interrupt should not be disabled twice
 +       */
 +      if (!atmel_port->ms_irq_enabled)
 +              return;
 +
 +      atmel_port->ms_irq_enabled = false;
 +
 +      if (atmel_port->gpio_irq[UART_GPIO_CTS] >= 0)
 +              disable_irq(atmel_port->gpio_irq[UART_GPIO_CTS]);
 +      else
 +              idr |= ATMEL_US_CTSIC;
 +
 +      if (atmel_port->gpio_irq[UART_GPIO_DSR] >= 0)
 +              disable_irq(atmel_port->gpio_irq[UART_GPIO_DSR]);
 +      else
 +              idr |= ATMEL_US_DSRIC;
 +
 +      if (atmel_port->gpio_irq[UART_GPIO_RI] >= 0)
 +              disable_irq(atmel_port->gpio_irq[UART_GPIO_RI]);
 +      else
 +              idr |= ATMEL_US_RIIC;
 +
 +      if (atmel_port->gpio_irq[UART_GPIO_DCD] >= 0)
 +              disable_irq(atmel_port->gpio_irq[UART_GPIO_DCD]);
 +      else
 +              idr |= ATMEL_US_DCDIC;
 +
 +      UART_PUT_IDR(port, idr);
 +}
 +
  /*
   * Control the transmission of a break signal
   */
@@@ -2032,9 -1994,7 +2033,9 @@@ static void atmel_set_termios(struct ua
  
        /* CTS flow-control and modem-status interrupts */
        if (UART_ENABLE_MS(port, termios->c_cflag))
 -              port->ops->enable_ms(port);
 +              atmel_enable_ms(port);
 +      else
 +              atmel_disable_ms(port);
  
        spin_unlock_irqrestore(&port->lock, flags);
  }
index 5e97baf92721bf2c8a59bf3471487ed4867c00a1,cdbc93a921851f488b6a8d17bb72a223397d173e..23ec781e9a619a6f4eb745b76cc9a7343eca6eca
@@@ -461,8 -461,7 +461,7 @@@ static void sdc_disable_channel(struct 
  
        spin_unlock_irqrestore(&mx3fb->lock, flags);
  
-       mx3_fbi->txd->chan->device->device_control(mx3_fbi->txd->chan,
-                                                  DMA_TERMINATE_ALL, 0);
+       dmaengine_terminate_all(mx3_fbi->txd->chan);
        mx3_fbi->txd = NULL;
        mx3_fbi->cookie = -EINVAL;
  }
@@@ -1179,7 -1178,7 +1178,7 @@@ static int mx3fb_pan_display(struct fb_
  
        /*
         * We enable the End of Frame interrupt, which will free a tx-descriptor,
 -       * which we will need for the next device_prep_slave_sg(). The
 +       * which we will need for the next dmaengine_prep_slave_sg(). The
         * IRQ-handler will disable the IRQ again.
         */
        init_completion(&mx3_fbi->flip_cmpl);
index 212c5b9ac106eb8817aa57cbe48875432f56351e,3254a039b0e07815a792274d370f1c750728f8f2..653a1fd07ae8d1e44267167eba4d9ac55f3cc21e
@@@ -199,15 -199,12 +199,12 @@@ enum dma_ctrl_flags 
   * configuration data in statically from the platform). An additional
   * argument of struct dma_slave_config must be passed in with this
   * command.
-  * @FSLDMA_EXTERNAL_START: this command will put the Freescale DMA controller
-  * into external start mode.
   */
  enum dma_ctrl_cmd {
        DMA_TERMINATE_ALL,
        DMA_PAUSE,
        DMA_RESUME,
        DMA_SLAVE_CONFIG,
-       FSLDMA_EXTERNAL_START,
  };
  
  /**
@@@ -307,7 -304,9 +304,9 @@@ enum dma_slave_buswidth 
   * struct dma_slave_config - dma slave channel runtime config
   * @direction: whether the data shall go in or out on this slave
   * channel, right now. DMA_MEM_TO_DEV and DMA_DEV_TO_MEM are
-  * legal values.
+  * legal values. DEPRECATED, drivers should use the direction argument
+  * to the device_prep_slave_sg and device_prep_dma_cyclic functions or
+  * the dir field in the dma_interleaved_template structure.
   * @src_addr: this is the physical address where DMA slave data
   * should be read (RX), if the source is memory this argument is
   * ignored.
@@@ -755,6 -754,16 +754,16 @@@ static inline struct dma_async_tx_descr
        return chan->device->device_prep_interleaved_dma(chan, xt, flags);
  }
  
+ static inline struct dma_async_tx_descriptor *dmaengine_prep_dma_sg(
+               struct dma_chan *chan,
+               struct scatterlist *dst_sg, unsigned int dst_nents,
+               struct scatterlist *src_sg, unsigned int src_nents,
+               unsigned long flags)
+ {
+       return chan->device->device_prep_dma_sg(chan, dst_sg, dst_nents,
+                       src_sg, src_nents, flags);
+ }
  static inline int dma_get_slave_caps(struct dma_chan *chan, struct dma_slave_caps *caps)
  {
        if (!chan || !caps)
@@@ -900,6 -909,18 +909,6 @@@ static inline void dmaengine_put(void
  }
  #endif
  
 -#ifdef CONFIG_NET_DMA
 -#define net_dmaengine_get()   dmaengine_get()
 -#define net_dmaengine_put()   dmaengine_put()
 -#else
 -static inline void net_dmaengine_get(void)
 -{
 -}
 -static inline void net_dmaengine_put(void)
 -{
 -}
 -#endif
 -
  #ifdef CONFIG_ASYNC_TX_DMA
  #define async_dmaengine_get() dmaengine_get()
  #define async_dmaengine_put() dmaengine_put()
@@@ -921,8 -942,16 +930,8 @@@ async_dma_find_channel(enum dma_transac
        return NULL;
  }
  #endif /* CONFIG_ASYNC_TX_DMA */
 -
 -dma_cookie_t dma_async_memcpy_buf_to_buf(struct dma_chan *chan,
 -      void *dest, void *src, size_t len);
 -dma_cookie_t dma_async_memcpy_buf_to_pg(struct dma_chan *chan,
 -      struct page *page, unsigned int offset, void *kdata, size_t len);
 -dma_cookie_t dma_async_memcpy_pg_to_pg(struct dma_chan *chan,
 -      struct page *dest_pg, unsigned int dest_off, struct page *src_pg,
 -      unsigned int src_off, size_t len);
  void dma_async_tx_descriptor_init(struct dma_async_tx_descriptor *tx,
 -      struct dma_chan *chan);
 +                                struct dma_chan *chan);
  
  static inline void async_tx_ack(struct dma_async_tx_descriptor *tx)
  {