Merge branch 'for-linus' of git://git.infradead.org/users/vkoul/slave-dma
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 24 Apr 2015 16:49:37 +0000 (09:49 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 24 Apr 2015 16:49:37 +0000 (09:49 -0700)
Pull slave-dmaengine updates from Vinod Koul:

 - new drivers for:
        - Ingenic JZ4780 controller
        - APM X-Gene controller
        - Freescale RaidEngine device
        - Renesas USB Controller

  - remove device_alloc_chan_resources dummy handlers

  - sh driver cleanups for peri peri and related emmc and asoc patches
    as well

  - fixes and enhancements spread over the drivers

* 'for-linus' of git://git.infradead.org/users/vkoul/slave-dma: (59 commits)
  dmaengine: dw: don't prompt for DW_DMAC_CORE
  dmaengine: shdmac: avoid unused variable warnings
  dmaengine: fix platform_no_drv_owner.cocci warnings
  dmaengine: pch_dma: fix memory leak on failure path in pch_dma_probe()
  dmaengine: at_xdmac: unlock spin lock before return
  dmaengine: xgene: devm_ioremap() returns NULL on error
  dmaengine: xgene: buffer overflow in xgene_dma_init_channels()
  dmaengine: usb-dmac: Fix dereferencing freed memory 'desc'
  dmaengine: sa11x0: report slave capabilities to upper layers
  dmaengine: vdma: Fix compilation warnings
  dmaengine: fsl_raid: statify fsl_re_chan_probe
  dmaengine: Driver support for FSL RaidEngine device.
  dmaengine: xgene_dma_init_ring_mngr() can be static
  Documentation: dma: Add documentation for the APM X-Gene SoC DMA device DTS binding
  arm64: dts: Add APM X-Gene SoC DMA device and DMA clock DTS nodes
  dmaengine: Add support for APM X-Gene SoC DMA engine driver
  dmaengine: usb-dmac: Add Renesas USB DMA Controller (USB-DMAC) driver
  dmaengine: renesas,usb-dmac: Add device tree bindings documentation
  dmaengine: edma: fixed wrongly initialized data parameter to the edma callback
  dmaengine: ste_dma40: fix implicit conversion
  ...

22 files changed:
1  2 
MAINTAINERS
arch/arm/mach-shmobile/board-armadillo800eva.c
arch/arm64/boot/dts/apm/apm-storm.dtsi
drivers/dma/Kconfig
drivers/dma/Makefile
drivers/dma/amba-pl08x.c
drivers/dma/at_hdmac.c
drivers/dma/at_xdmac.c
drivers/dma/dma-jz4740.c
drivers/dma/dmaengine.c
drivers/dma/dw/core.c
drivers/dma/edma.c
drivers/dma/imx-sdma.c
drivers/dma/ioat/dma_v3.c
drivers/dma/mmp_pdma.c
drivers/dma/mmp_tdma.c
drivers/dma/qcom_bam_dma.c
drivers/dma/sh/shdmac.c
drivers/dma/ste_dma40.c
drivers/mmc/host/sh_mmcif.c
drivers/spi/spi-rspi.c
sound/soc/sh/fsi.c

diff --combined MAINTAINERS
index ea00017600351fa82f1aa9c308cb06f6634fed2f,be98874c8e070555f6e27465eca949bb01c9befe..62cd43e7f56fdfb97f504771b17b8208c265073d
@@@ -569,12 -569,6 +569,12 @@@ L:       nios2-dev@lists.rocketboards.org (mo
  S:    Maintained
  F:    drivers/mailbox/mailbox-altera.c
  
 +ALTERA PIO DRIVER
 +M:    Tien Hock Loh <thloh@altera.com>
 +L:    linux-gpio@vger.kernel.org
 +S:    Maintained
 +F:    drivers/gpio/gpio-altera.c
 +
  ALTERA TRIPLE SPEED ETHERNET DRIVER
  M:    Vince Bridgers <vbridger@opensource.altera.com>
  L:    netdev@vger.kernel.org
@@@ -631,19 -625,20 +631,19 @@@ F:      drivers/iommu/amd_iommu*.[ch
  F:    include/linux/amd-iommu.h
  
  AMD KFD
 -M:      Oded Gabbay <oded.gabbay@amd.com>
 -L:      dri-devel@lists.freedesktop.org
 -T:      git git://people.freedesktop.org/~gabbayo/linux.git
 -S:      Supported
 -F:      drivers/gpu/drm/amd/amdkfd/
 +M:    Oded Gabbay <oded.gabbay@amd.com>
 +L:    dri-devel@lists.freedesktop.org
 +T:    git git://people.freedesktop.org/~gabbayo/linux.git
 +S:    Supported
 +F:    drivers/gpu/drm/amd/amdkfd/
  F:    drivers/gpu/drm/amd/include/cik_structs.h
  F:    drivers/gpu/drm/amd/include/kgd_kfd_interface.h
 -F:      drivers/gpu/drm/radeon/radeon_kfd.c
 -F:      drivers/gpu/drm/radeon/radeon_kfd.h
 -F:      include/uapi/linux/kfd_ioctl.h
 +F:    drivers/gpu/drm/radeon/radeon_kfd.c
 +F:    drivers/gpu/drm/radeon/radeon_kfd.h
 +F:    include/uapi/linux/kfd_ioctl.h
  
  AMD MICROCODE UPDATE SUPPORT
 -M:    Andreas Herrmann <herrmann.der.user@googlemail.com>
 -L:    amd64-microcode@amd64.org
 +M:    Borislav Petkov <bp@alien8.de>
  S:    Maintained
  F:    arch/x86/kernel/cpu/microcode/amd*
  
@@@ -730,7 -725,7 +730,7 @@@ F: staging/iio/trigger/iio-trig-bfin-ti
  
  ANDROID DRIVERS
  M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 -M:    Arve Hjønnevåg <arve@android.com>
 +M:    Arve Hjønnevåg <arve@android.com>
  M:    Riley Andrews <riandrews@android.com>
  T:    git git://git.kernel.org/pub/scm/linux/kernel/gregkh/staging.git
  L:    devel@driverdev.osuosl.org
@@@ -886,11 -881,6 +886,11 @@@ S:       Maintaine
  F:    drivers/media/rc/meson-ir.c
  N:    meson[x68]
  
 +ARM/Annapurna Labs ALPINE ARCHITECTURE
 +M:    Tsahee Zidenberg <tsahee@annapurnalabs.com>
 +S:    Maintained
 +F:    arch/arm/mach-alpine/
 +
  ARM/ATMEL AT91RM9200 AND AT91SAM ARM ARCHITECTURES
  M:    Andrew Victor <linux@maxim.org.za>
  M:    Nicolas Ferre <nicolas.ferre@atmel.com>
@@@ -963,7 -953,7 +963,7 @@@ ARM/CORESIGHT FRAMEWORK AND DRIVER
  M:    Mathieu Poirier <mathieu.poirier@linaro.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
 -F:    drivers/coresight/*
 +F:    drivers/hwtracing/coresight/*
  F:    Documentation/trace/coresight.txt
  F:    Documentation/devicetree/bindings/arm/coresight.txt
  F:    Documentation/ABI/testing/sysfs-bus-coresight-devices-*
@@@ -1040,16 -1030,6 +1040,16 @@@ F:    arch/arm/mach-mxs
  F:    arch/arm/boot/dts/imx*
  F:    arch/arm/configs/imx*_defconfig
  
 +ARM/FREESCALE VYBRID ARM ARCHITECTURE
 +M:    Shawn Guo <shawn.guo@linaro.org>
 +M:    Sascha Hauer <kernel@pengutronix.de>
 +R:    Stefan Agner <stefan@agner.ch>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux.git
 +F:    arch/arm/mach-imx/*vf610*
 +F:    arch/arm/boot/dts/vf*
 +
  ARM/GLOMATION GESBC9312SX MACHINE SUPPORT
  M:    Lennert Buytenhek <kernel@wantstofly.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -1196,7 -1176,7 +1196,7 @@@ M:      Sebastian Hesselbarth <sebastian.hes
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  F:    arch/arm/mach-mvebu/
 -F:    drivers/rtc/armada38x-rtc
 +F:    drivers/rtc/rtc-armada38x.c
  
  ARM/Marvell Berlin SoC support
  M:    Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
@@@ -1208,7 -1188,6 +1208,7 @@@ ARM/Marvell Dove/MV78xx0/Orion SOC supp
  M:    Jason Cooper <jason@lakedaemon.net>
  M:    Andrew Lunn <andrew@lunn.ch>
  M:    Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
 +M:    Gregory Clement <gregory.clement@free-electrons.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  F:    arch/arm/mach-dove/
@@@ -1226,7 -1205,6 +1226,7 @@@ 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)
 +L:    linux-mediatek@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  F:    arch/arm/boot/dts/mt6*
  F:    arch/arm/boot/dts/mt8*
@@@ -1266,6 -1244,22 +1266,6 @@@ L:     openmoko-kernel@lists.openmoko.org (
  W:    http://wiki.openmoko.org/wiki/Neo_FreeRunner
  S:    Supported
  
 -ARM/QUALCOMM MSM MACHINE SUPPORT
 -M:    David Brown <davidb@codeaurora.org>
 -M:    Daniel Walker <dwalker@fifo99.com>
 -M:    Bryan Huntsman <bryanh@codeaurora.org>
 -L:    linux-arm-msm@vger.kernel.org
 -F:    arch/arm/mach-msm/
 -F:    drivers/video/fbdev/msm/
 -F:    drivers/mmc/host/msm_sdcc.c
 -F:    drivers/mmc/host/msm_sdcc.h
 -F:    drivers/tty/serial/msm_serial.h
 -F:    drivers/tty/serial/msm_serial.c
 -F:    drivers/*/pm8???-*
 -F:    drivers/mfd/ssbi.c
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/davidb/linux-msm.git
 -S:    Maintained
 -
  ARM/TOSA MACHINE SUPPORT
  M:    Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
  M:    Dirk Opfer <dirk@opfer-online.de>
@@@ -1323,11 -1317,6 +1323,11 @@@ L:    linux-soc@vger.kernel.or
  S:    Maintained
  F:    arch/arm/mach-qcom/
  F:    drivers/soc/qcom/
 +F:    drivers/tty/serial/msm_serial.h
 +F:    drivers/tty/serial/msm_serial.c
 +F:    drivers/*/pm8???-*
 +F:    drivers/mfd/ssbi.c
 +F:    drivers/firmware/qcom_scm.c
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/galak/linux-qcom.git
  
  ARM/RADISYS ENP2611 MACHINE SUPPORT
@@@ -1362,7 -1351,6 +1362,7 @@@ F:      drivers/i2c/busses/i2c-rk3x.
  F:    drivers/*/*rockchip*
  F:    drivers/*/*/*rockchip*
  F:    sound/soc/rockchip/
 +N:    rockchip
  
  ARM/SAMSUNG EXYNOS ARM ARCHITECTURES
  M:    Kukjin Kim <kgene@kernel.org>
@@@ -1426,9 -1414,11 +1426,9 @@@ 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/ape6evm_defconfig
  F:    arch/arm/configs/armadillo800eva_defconfig
  F:    arch/arm/configs/bockw_defconfig
  F:    arch/arm/configs/kzm9g_defconfig
 -F:    arch/arm/configs/mackerel_defconfig
  F:    arch/arm/configs/marzen_defconfig
  F:    arch/arm/configs/shmobile_defconfig
  F:    arch/arm/include/debug/renesas-scif.S
@@@ -1467,8 -1457,6 +1467,8 @@@ F:      drivers/clocksource/arm_global_timer
  F:    drivers/i2c/busses/i2c-st.c
  F:    drivers/media/rc/st_rc.c
  F:    drivers/mmc/host/sdhci-st.c
 +F:    drivers/phy/phy-miphy28lp.c
 +F:    drivers/phy/phy-miphy365x.c
  F:    drivers/phy/phy-stih407-usb.c
  F:    drivers/phy/phy-stih41x-usb.c
  F:    drivers/pinctrl/pinctrl-st.c
@@@ -1676,8 -1664,8 +1676,8 @@@ F:      drivers/misc/eeprom/at24.
  F:    include/linux/platform_data/at24.h
  
  ATA OVER ETHERNET (AOE) DRIVER
 -M:    "Ed L. Cashin" <ecashin@coraid.com>
 -W:    http://support.coraid.com/support/linux
 +M:    "Ed L. Cashin" <ed.cashin@acm.org>
 +W:    http://www.openaoe.org/
  S:    Supported
  F:    Documentation/aoe/
  F:    drivers/block/aoe/
@@@ -1742,7 -1730,7 +1742,7 @@@ S:      Maintaine
  F:    drivers/net/ethernet/atheros/
  
  ATM
 -M:    Chas Williams <chas@cmf.nrl.navy.mil>
 +M:    Chas Williams <3chas3@gmail.com>
  L:    linux-atm-general@lists.sourceforge.net (moderated for non-subscribers)
  L:    netdev@vger.kernel.org
  W:    http://linux-atm.sourceforge.net
@@@ -1763,7 -1751,7 +1763,7 @@@ S:      Supporte
  F:    drivers/tty/serial/atmel_serial.c
  
  ATMEL Audio ALSA driver
 -M:    Bo Shen <voice.shen@atmel.com>
 +M:    Nicolas Ferre <nicolas.ferre@atmel.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  S:    Supported
  F:    sound/soc/atmel
@@@ -1820,7 -1808,7 +1820,7 @@@ S:      Supporte
  F:    drivers/spi/spi-atmel.*
  
  ATMEL SSC DRIVER
 -M:    Bo Shen <voice.shen@atmel.com>
 +M:    Nicolas Ferre <nicolas.ferre@atmel.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Supported
  F:    drivers/misc/atmel-ssc.c
@@@ -1914,14 -1902,16 +1914,14 @@@ S:   Maintaine
  F:    drivers/media/radio/radio-aztech*
  
  B43 WIRELESS DRIVER
 -M:    Stefano Brivio <stefano.brivio@polimi.it>
  L:    linux-wireless@vger.kernel.org
  L:    b43-dev@lists.infradead.org
  W:    http://wireless.kernel.org/en/users/Drivers/b43
 -S:    Maintained
 +S:    Odd Fixes
  F:    drivers/net/wireless/b43/
  
  B43LEGACY WIRELESS DRIVER
  M:    Larry Finger <Larry.Finger@lwfinger.net>
 -M:    Stefano Brivio <stefano.brivio@polimi.it>
  L:    linux-wireless@vger.kernel.org
  L:    b43-dev@lists.infradead.org
  W:    http://wireless.kernel.org/en/users/Drivers/b43
@@@ -1964,10 -1954,10 +1964,10 @@@ F:   Documentation/filesystems/befs.tx
  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
 +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>
@@@ -2075,7 -2065,7 +2075,7 @@@ F:      include/net/bluetooth
  BONDING DRIVER
  M:    Jay Vosburgh <j.vosburgh@gmail.com>
  M:    Veaceslav Falico <vfalico@gmail.com>
 -M:    Andy Gospodarek <andy@greyhouse.net>
 +M:    Andy Gospodarek <gospo@cumulusnetworks.com>
  L:    netdev@vger.kernel.org
  W:    http://sourceforge.net/projects/bonding/
  S:    Supported
@@@ -2117,6 -2107,7 +2117,6 @@@ 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
@@@ -2378,9 -2369,8 +2378,9 @@@ F:      arch/x86/include/asm/tce.
  
  CAN NETWORK LAYER
  M:    Oliver Hartkopp <socketcan@hartkopp.net>
 +M:    Marc Kleine-Budde <mkl@pengutronix.de>
  L:    linux-can@vger.kernel.org
 -W:    http://gitorious.org/linux-can
 +W:    https://github.com/linux-can
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git
  S:    Maintained
@@@ -2396,7 -2386,7 +2396,7 @@@ CAN NETWORK DRIVER
  M:    Wolfgang Grandegger <wg@grandegger.com>
  M:    Marc Kleine-Budde <mkl@pengutronix.de>
  L:    linux-can@vger.kernel.org
 -W:    http://gitorious.org/linux-can
 +W:    https://github.com/linux-can
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git
  S:    Maintained
@@@ -2517,18 -2507,11 +2517,18 @@@ F:   Documentation/zh_CN
  
  CHIPIDEA USB HIGH SPEED DUAL ROLE CONTROLLER
  M:    Peter Chen <Peter.Chen@freescale.com>
 -T:    git git://github.com/hzpeterchen/linux-usb.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/peter.chen/usb.git
  L:    linux-usb@vger.kernel.org
  S:    Maintained
  F:    drivers/usb/chipidea/
  
 +CHIPONE ICN8318 I2C TOUCHSCREEN DRIVER
 +M:    Hans de Goede <hdegoede@redhat.com>
 +L:    linux-input@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/input/touchscreen/chipone_icn8318.txt
 +F:    drivers/input/touchscreen/chipone_icn8318.c
 +
  CHROME HARDWARE PLATFORM SUPPORT
  M:    Olof Johansson <olof@lixom.net>
  S:    Maintained
@@@ -2569,7 -2552,6 +2569,7 @@@ F:      include/linux/cleancache.
  
  CLK API
  M:    Russell King <linux@arm.linux.org.uk>
 +L:    linux-clk@vger.kernel.org
  S:    Maintained
  F:    include/linux/clk.h
  
@@@ -2630,7 -2612,7 +2630,7 @@@ F:      drivers/media/platform/coda
  COMMON CLK FRAMEWORK
  M:    Mike Turquette <mturquette@linaro.org>
  M:    Stephen Boyd <sboyd@codeaurora.org>
 -L:    linux-kernel@vger.kernel.org
 +L:    linux-clk@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git
  S:    Maintained
  F:    drivers/clk/
@@@ -2823,7 -2805,6 +2823,7 @@@ L:      linux-crypto@vger.kernel.or
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6.git
  S:    Maintained
  F:    Documentation/crypto/
 +F:    Documentation/DocBook/crypto-API.tmpl
  F:    arch/*/crypto/
  F:    crypto/
  F:    drivers/crypto/
@@@ -2894,11 -2875,11 +2894,11 @@@ S:   Supporte
  F:    drivers/net/ethernet/chelsio/cxgb3/
  
  CXGB3 ISCSI DRIVER (CXGB3I)
 -M:      Karen Xie <kxie@chelsio.com>
 -L:      linux-scsi@vger.kernel.org
 -W:      http://www.chelsio.com
 -S:      Supported
 -F:      drivers/scsi/cxgbi/cxgb3i
 +M:    Karen Xie <kxie@chelsio.com>
 +L:    linux-scsi@vger.kernel.org
 +W:    http://www.chelsio.com
 +S:    Supported
 +F:    drivers/scsi/cxgbi/cxgb3i
  
  CXGB3 IWARP RNIC DRIVER (IW_CXGB3)
  M:    Steve Wise <swise@chelsio.com>
@@@ -2915,11 -2896,11 +2915,11 @@@ S:   Supporte
  F:    drivers/net/ethernet/chelsio/cxgb4/
  
  CXGB4 ISCSI DRIVER (CXGB4I)
 -M:      Karen Xie <kxie@chelsio.com>
 -L:      linux-scsi@vger.kernel.org
 -W:      http://www.chelsio.com
 -S:      Supported
 -F:      drivers/scsi/cxgbi/cxgb4i
 +M:    Karen Xie <kxie@chelsio.com>
 +L:    linux-scsi@vger.kernel.org
 +W:    http://www.chelsio.com
 +S:    Supported
 +F:    drivers/scsi/cxgbi/cxgb4i
  
  CXGB4 IWARP RNIC DRIVER (IW_CXGB4)
  M:    Steve Wise <swise@chelsio.com>
@@@ -3145,15 -3126,12 +3145,15 @@@ S:   Supporte
  F:    Documentation/hwmon/da90??
  F:    drivers/gpio/gpio-da90??.c
  F:    drivers/hwmon/da90??-hwmon.c
 +F:    drivers/iio/adc/da91??-*.c
  F:    drivers/input/misc/da90??_onkey.c
  F:    drivers/input/touchscreen/da9052_tsi.c
  F:    drivers/leds/leds-da90??.c
  F:    drivers/mfd/da903x.c
  F:    drivers/mfd/da90??-*.c
 +F:    drivers/mfd/da91??-*.c
  F:    drivers/power/da9052-battery.c
 +F:    drivers/power/da91??-*.c
  F:    drivers/regulator/da903x.c
  F:    drivers/regulator/da9???-regulator.[ch]
  F:    drivers/rtc/rtc-da90??.c
@@@ -3163,7 -3141,6 +3163,7 @@@ F:      include/linux/mfd/da903x.
  F:    include/linux/mfd/da9052/
  F:    include/linux/mfd/da9055/
  F:    include/linux/mfd/da9063/
 +F:    include/linux/mfd/da9150/
  F:    include/sound/da[79]*.h
  F:    sound/soc/codecs/da[79]*.[ch]
  
@@@ -3264,13 -3241,6 +3264,13 @@@ S:    Maintaine
  F:    Documentation/hwmon/dme1737
  F:    drivers/hwmon/dme1737.c
  
 +DMI/SMBIOS SUPPORT
 +M:    Jean Delvare <jdelvare@suse.de>
 +S:    Maintained
 +F:    drivers/firmware/dmi-id.c
 +F:    drivers/firmware/dmi_scan.c
 +F:    include/linux/dmi.h
 +
  DOCKING STATION DRIVER
  M:    Shaohua Li <shaohua.li@intel.com>
  L:    linux-acpi@vger.kernel.org
@@@ -3284,9 -3254,7 +3284,9 @@@ S:      Maintaine
  F:    Documentation/
  X:    Documentation/ABI/
  X:    Documentation/devicetree/
 -X:    Documentation/[a-z][a-z]_[A-Z][A-Z]/
 +X:    Documentation/acpi
 +X:    Documentation/power
 +X:    Documentation/spi
  T:    git git://git.lwn.net/linux-2.6.git docs-next
  
  DOUBLETALK DRIVER
@@@ -3410,6 -3378,7 +3410,6 @@@ T:      git git://people.freedesktop.org/~ai
  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
@@@ -4176,12 -4145,6 +4176,12 @@@ F:    sound/soc/fsl/fsl
  F:    sound/soc/fsl/imx*
  F:    sound/soc/fsl/mpc8610_hpcd.c
  
 +FREESCALE QORIQ MANAGEMENT COMPLEX DRIVER
 +M:    J. German Rivera <German.Rivera@freescale.com>
 +L:    linux-kernel@vger.kernel.org
 +S:    Maintained
 +F:    drivers/staging/fsl-mc/
 +
  FREEVXFS FILESYSTEM
  M:    Christoph Hellwig <hch@infradead.org>
  W:    ftp://ftp.openlinux.org/pub/people/hch/vxfs
@@@ -4331,15 -4294,6 +4331,15 @@@ S:    Supporte
  F:    drivers/phy/
  F:    include/linux/phy/
  
 +GENERIC PM DOMAINS
 +M:    "Rafael J. Wysocki" <rjw@rjwysocki.net>
 +M:    Kevin Hilman <khilman@kernel.org>
 +M:    Ulf Hansson <ulf.hansson@linaro.org>
 +L:    linux-pm@vger.kernel.org
 +S:    Supported
 +F:    drivers/base/power/domain*.c
 +F:    include/linux/pm_domain.h
 +
  GENERIC UIO DRIVER FOR PCI DEVICES
  M:    "Michael S. Tsirkin" <mst@redhat.com>
  L:    kvm@vger.kernel.org
@@@ -4353,10 -4307,10 +4353,10 @@@ F:   scripts/get_maintainer.p
  
  GFS2 FILE SYSTEM
  M:    Steven Whitehouse <swhiteho@redhat.com>
 +M:    Bob Peterson <rpeterso@redhat.com>
  L:    cluster-devel@redhat.com
  W:    http://sources.redhat.com/cluster/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-3.0-fixes.git
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-3.0-nmw.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gfs2/linux-gfs2.git
  S:    Supported
  F:    Documentation/filesystems/gfs2*.txt
  F:    fs/gfs2/
@@@ -4466,7 -4420,7 +4466,7 @@@ S:      Maintaine
  F:    block/partitions/efi.*
  
  STK1160 USB VIDEO CAPTURE DRIVER
 -M:    Ezequiel Garcia <elezegarcia@gmail.com>
 +M:    Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
  L:    linux-media@vger.kernel.org
  T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
@@@ -4976,7 -4930,6 +4976,7 @@@ S:      Maintaine
  F:    drivers/iio/
  F:    drivers/staging/iio/
  F:    include/linux/iio/
 +F:    tools/iio/
  
  IKANOS/ADI EAGLE ADSL USB DRIVER
  M:    Matthieu Castet <castet.matthieu@free.fr>
@@@ -5009,6 -4962,11 +5009,11 @@@ W:    http://industrypack.sourceforge.ne
  S:    Maintained
  F:    drivers/ipack/
  
+ INGENIC JZ4780 DMA Driver
+ M:    Zubair Lutfullah Kakakhel <Zubair.Kakakhel@imgtec.com>
+ S:    Maintained
+ F:    drivers/dma/dma-jz4780.c
  INTEGRITY MEASUREMENT ARCHITECTURE (IMA)
  M:    Mimi Zohar <zohar@linux.vnet.ibm.com>
  M:    Dmitry Kasatkin <dmitry.kasatkin@gmail.com>
@@@ -5123,7 -5081,7 +5128,7 @@@ S:      Supporte
  F:    drivers/platform/x86/intel_menlow.c
  
  INTEL IA32 MICROCODE UPDATE SUPPORT
 -M:    Tigran Aivazian <tigran@aivazian.fsnet.co.uk>
 +M:    Borislav Petkov <bp@alien8.de>
  S:    Maintained
  F:    arch/x86/kernel/cpu/microcode/core*
  F:    arch/x86/kernel/cpu/microcode/intel*
@@@ -5164,21 -5122,22 +5169,21 @@@ M:   Deepak Saxena <dsaxena@plexity.net
  S:    Maintained
  F:    drivers/char/hw_random/ixp4xx-rng.c
  
 -INTEL ETHERNET DRIVERS (e100/e1000/e1000e/fm10k/igb/igbvf/ixgb/ixgbe/ixgbevf/i40e/i40evf)
 +INTEL ETHERNET DRIVERS
  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:    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>
 -L:    e1000-devel@lists.sourceforge.net
 +R:    Jesse Brandeburg <jesse.brandeburg@intel.com>
 +R:    Shannon Nelson <shannon.nelson@intel.com>
 +R:    Carolyn Wyborny <carolyn.wyborny@intel.com>
 +R:    Don Skidmore <donald.c.skidmore@intel.com>
 +R:    Matthew Vick <matthew.vick@intel.com>
 +R:    John Ronciak <john.ronciak@intel.com>
 +R:    Mitch Williams <mitch.a.williams@intel.com>
 +L:    intel-wired-lan@lists.osuosl.org
  W:    http://www.intel.com/support/feedback.htm
  W:    http://e1000.sourceforge.net/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net.git
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next.git
 +Q:    http://patchwork.ozlabs.org/project/intel-wired-lan/list/
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-queue.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/next-queue.git
  S:    Supported
  F:    Documentation/networking/e100.txt
  F:    Documentation/networking/e1000.txt
@@@ -5222,7 -5181,7 +5227,7 @@@ F:      arch/x86/kernel/tboot.
  INTEL WIRELESS WIMAX CONNECTION 2400
  M:    Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
  M:    linux-wimax@intel.com
 -L:     wimax@linuxwimax.org (subscribers-only)
 +L:    wimax@linuxwimax.org (subscribers-only)
  S:    Supported
  W:    http://linuxwimax.org
  F:    Documentation/wimax/README.i2400m
@@@ -5300,13 -5259,6 +5305,13 @@@ F:    drivers/char/ipmi
  F:    include/linux/ipmi*
  F:    include/uapi/linux/ipmi*
  
 +QCOM AUDIO (ASoC) DRIVERS
 +M:    Patrick Lai <plai@codeaurora.org>
 +M:    Banajit Goswami <bgoswami@codeaurora.org>
 +L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
 +S:    Supported
 +F:    sound/soc/qcom/
 +
  IPS SCSI RAID DRIVER
  M:    Adaptec OEM Raid Solutions <aacraid@adaptec.com>
  L:    linux-scsi@vger.kernel.org
@@@ -5627,8 -5579,6 +5632,8 @@@ S:      Supporte
  F:    Documentation/*/kvm*.txt
  F:    Documentation/virtual/kvm/
  F:    arch/*/kvm/
 +F:    arch/x86/kernel/kvm.c
 +F:    arch/x86/kernel/kvmclock.c
  F:    arch/*/include/asm/kvm*
  F:    include/linux/kvm*
  F:    include/uapi/linux/kvm*
@@@ -5925,7 -5875,7 +5930,7 @@@ F:      arch/powerpc/platforms/512x
  F:    arch/powerpc/platforms/52xx/
  
  LINUX FOR POWERPC EMBEDDED PPC4XX
 -M:  Alistair Popple <alistair@popple.id.au>
 +M:    Alistair Popple <alistair@popple.id.au>
  M:    Matt Porter <mporter@kernel.crashing.org>
  W:    http://www.penguinppc.org/
  L:    linuxppc-dev@lists.ozlabs.org
@@@ -6158,6 -6108,16 +6163,6 @@@ Q:     http://patchwork.linuxtv.org/project
  S:    Maintained
  F:    drivers/media/dvb-frontends/m88rs2000*
  
 -M88TS2022 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/tuners/m88ts2022*
 -
  MA901 MASTERKIT USB FM RADIO DRIVER
  M:    Alexey Klimov <klimov.linux@gmail.com>
  L:    linux-media@vger.kernel.org
@@@ -6350,7 -6310,6 +6355,7 @@@ 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
@@@ -6388,7 -6347,7 +6393,7 @@@ S:      Supporte
  F:    drivers/watchdog/mena21_wdt.c
  
  MEN CHAMELEON BUS (mcb)
 -M:    Johannes Thumshirn <johannes.thumshirn@men.de>
 +M:    Johannes Thumshirn <johannes.thumshirn@men.de>
  S:    Supported
  F:    drivers/mcb/
  F:    include/linux/mcb.h
@@@ -6581,7 -6540,6 +6586,7 @@@ M:      Laurent Pinchart <laurent.pinchart@i
  L:    linux-media@vger.kernel.org
  T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
 +F:    Documentation/devicetree/bindings/media/i2c/mt9v032.txt
  F:    drivers/media/i2c/mt9v032.c
  F:    include/media/mt9v032.h
  
@@@ -6594,8 -6552,10 +6599,8 @@@ F:     drivers/mfd
  F:    include/linux/mfd/
  
  MULTIMEDIA CARD (MMC), SECURE DIGITAL (SD) AND SDIO SUBSYSTEM
 -M:    Chris Ball <chris@printf.net>
  M:    Ulf Hansson <ulf.hansson@linaro.org>
  L:    linux-mmc@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc.git
  T:    git git://git.linaro.org/people/ulf.hansson/mmc.git
  S:    Maintained
  F:    drivers/mmc/
@@@ -6971,13 -6931,6 +6976,13 @@@ S:    Supporte
  F:    drivers/block/nvme*
  F:    include/linux/nvme.h
  
 +NXP-NCI NFC DRIVER
 +M:    Clément Perrochaud <clement.perrochaud@effinnov.com>
 +R:    Charles Gorand <charles.gorand@effinnov.com>
 +L:    linux-nfc@lists.01.org (moderated for non-subscribers)
 +S:    Supported
 +F:    drivers/nfc/nxp-nci
 +
  NXP TDA998X DRM DRIVER
  M:    Russell King <rmk+kernel@arm.linux.org.uk>
  S:    Supported
@@@ -6999,8 -6952,6 +7004,8 @@@ Q:      http://patchwork.kernel.org/project/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap.git
  S:    Maintained
  F:    arch/arm/*omap*/
 +F:    arch/arm/configs/omap1_defconfig
 +F:    arch/arm/configs/omap2plus_defconfig
  F:    drivers/i2c/busses/i2c-omap.c
  F:    drivers/irqchip/irq-omap-intc.c
  F:    drivers/mfd/*omap*.c
@@@ -7131,7 -7082,6 +7136,7 @@@ OMAP IMAGING SUBSYSTEM (OMAP3 ISP and O
  M:    Laurent Pinchart <laurent.pinchart@ideasonboard.com>
  L:    linux-media@vger.kernel.org
  S:    Maintained
 +F:    Documentation/devicetree/bindings/media/ti,omap3isp.txt
  F:    drivers/media/platform/omap3isp/
  F:    drivers/staging/media/omap4iss/
  
@@@ -7231,15 -7181,6 +7236,15 @@@ F:    Documentation/devicetree
  F:    arch/*/boot/dts/
  F:    include/dt-bindings/
  
 +OPEN FIRMWARE AND DEVICE TREE OVERLAYS
 +M:    Pantelis Antoniou <pantelis.antoniou@konsulko.com>
 +L:    devicetree@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/dynamic-resolution-notes.txt
 +F:    Documentation/devicetree/overlay-notes.txt
 +F:    drivers/of/overlay.c
 +F:    drivers/of/resolver.c
 +
  OPENRISC ARCHITECTURE
  M:    Jonas Bonn <jonas@southpole.se>
  W:    http://openrisc.net
@@@ -7277,7 -7218,8 +7282,7 @@@ ORACLE CLUSTER FILESYSTEM 2 (OCFS2
  M:    Mark Fasheh <mfasheh@suse.com>
  M:    Joel Becker <jlbec@evilplan.org>
  L:    ocfs2-devel@oss.oracle.com (moderated for non-subscribers)
 -W:    http://oss.oracle.com/projects/ocfs2/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2.git
 +W:    http://ocfs2.wiki.kernel.org
  S:    Supported
  F:    Documentation/filesystems/ocfs2.txt
  F:    Documentation/filesystems/dlmfs.txt
@@@ -7533,6 -7475,7 +7538,6 @@@ S:      Maintaine
  F:    drivers/pci/host/pci-exynos.c
  
  PCI DRIVER FOR SYNOPSIS DESIGNWARE
 -M:    Mohit Kumar <mohit.kumar@st.com>
  M:    Jingoo Han <jg1.han@samsung.com>
  L:    linux-pci@vger.kernel.org
  S:    Maintained
@@@ -7547,8 -7490,9 +7552,8 @@@ F:      Documentation/devicetree/bindings/pc
  F:    drivers/pci/host/pci-host-generic.c
  
  PCIE DRIVER FOR ST SPEAR13XX
 -M:    Mohit Kumar <mohit.kumar@st.com>
  L:    linux-pci@vger.kernel.org
 -S:    Maintained
 +S:    Orphan
  F:    drivers/pci/host/*spear*
  
  PCMCIA SUBSYSTEM
@@@ -7955,10 -7899,10 +7960,10 @@@ L:   rtc-linux@googlegroups.co
  S:    Maintained
  
  QAT DRIVER
 -M:      Tadeusz Struk <tadeusz.struk@intel.com>
 -L:      qat-linux@intel.com
 -S:      Supported
 -F:      drivers/crypto/qat/
 +M:    Tadeusz Struk <tadeusz.struk@intel.com>
 +L:    qat-linux@intel.com
 +S:    Supported
 +F:    drivers/crypto/qat/
  
  QIB DRIVER
  M:    Mike Marciniszyn <infinipath@intel.com>
@@@ -8109,17 -8053,11 +8114,17 @@@ S:   Maintaine
  F:    drivers/net/wireless/rt2x00/
  
  RAMDISK RAM BLOCK DEVICE DRIVER
 -M:    Nick Piggin <npiggin@kernel.dk>
 +M:    Jens Axboe <axboe@kernel.dk>
  S:    Maintained
  F:    Documentation/blockdev/ramdisk.txt
  F:    drivers/block/brd.c
  
 +PERSISTENT MEMORY DRIVER
 +M:    Ross Zwisler <ross.zwisler@linux.intel.com>
 +L:    linux-nvdimm@lists.01.org
 +S:    Supported
 +F:    drivers/block/pmem.c
 +
  RANDOM NUMBER DRIVER
  M:    "Theodore Ts'o" <tytso@mit.edu>
  S:    Maintained
@@@ -8191,7 -8129,6 +8196,7 @@@ X:      kernel/torture.
  
  REAL TIME CLOCK (RTC) SUBSYSTEM
  M:    Alessandro Zummo <a.zummo@towertech.it>
 +M:    Alexandre Belloni <alexandre.belloni@free-electrons.com>
  L:    rtc-linux@googlegroups.com
  Q:    http://patchwork.ozlabs.org/project/rtc-linux/list/
  S:    Maintained
@@@ -8403,6 -8340,7 +8408,6 @@@ F:      block/partitions/ibm.
  
  S390 NETWORK DRIVERS
  M:    Ursula Braun <ursula.braun@de.ibm.com>
 -M:    Frank Blaschka <blaschka@linux.vnet.ibm.com>
  M:    linux390@de.ibm.com
  L:    linux-s390@vger.kernel.org
  W:    http://www.ibm.com/developerworks/linux/linux390/
@@@ -8548,14 -8486,6 +8553,14 @@@ S:    Supporte
  L:    netdev@vger.kernel.org
  F:    drivers/net/ethernet/samsung/sxgbe/
  
 +SAMSUNG THERMAL DRIVER
 +M:    Lukasz Majewski <l.majewski@samsung.com>
 +L:    linux-pm@vger.kernel.org
 +L:    linux-samsung-soc@vger.kernel.org
 +S:    Supported
 +T:    https://github.com/lmajewski/linux-samsung-thermal.git
 +F:    drivers/thermal/samsung/
 +
  SAMSUNG USB2 PHY DRIVER
  M:    Kamil Debski <k.debski@samsung.com>
  L:    linux-kernel@vger.kernel.org
@@@ -8610,7 -8540,6 +8615,7 @@@ F:      include/uapi/linux/timex.
  F:    kernel/time/clocksource.c
  F:    kernel/time/time*.c
  F:    kernel/time/ntp.c
 +F:    tools/testing/selftests/timers/
  
  SC1200 WDT DRIVER
  M:    Zwane Mwaikambo <zwanem@gmail.com>
@@@ -8662,9 -8591,11 +8667,9 @@@ F:     drivers/scsi/sg.
  F:    include/scsi/sg.h
  
  SCSI SUBSYSTEM
 -M:    "James E.J. Bottomley" <JBottomley@parallels.com>
 +M:    "James E.J. Bottomley" <JBottomley@odin.com>
  L:    linux-scsi@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6.git
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-pending-2.6.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git
  S:    Maintained
  F:    drivers/scsi/
  F:    include/scsi/
@@@ -8717,8 -8648,10 +8722,8 @@@ S:     Maintaine
  F:    drivers/mmc/host/sdricoh_cs.c
  
  SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) DRIVER
 -M:    Chris Ball <chris@printf.net>
  L:    linux-mmc@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc.git
 -S:    Maintained
 +S:    Orphan
  F:    drivers/mmc/host/sdhci.*
  F:    drivers/mmc/host/sdhci-pltfm.[ch]
  
@@@ -8734,12 -8667,18 +8739,12 @@@ F:   include/linux/seccomp.
  K:    \bsecure_computing
  K:    \bTIF_SECCOMP\b
  
 -SECURE DIGITAL HOST CONTROLLER INTERFACE, OPEN FIRMWARE BINDINGS (SDHCI-OF)
 -M:    Anton Vorontsov <anton@enomsg.org>
 -L:    linuxppc-dev@lists.ozlabs.org
 -L:    linux-mmc@vger.kernel.org
 -S:    Maintained
 -F:    drivers/mmc/host/sdhci-pltfm.[ch]
 -
  SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) SAMSUNG DRIVER
  M:    Ben Dooks <ben-linux@fluff.org>
 +M:    Jaehoon Chung <jh80.chung@samsung.com>
  L:    linux-mmc@vger.kernel.org
  S:    Maintained
 -F:    drivers/mmc/host/sdhci-s3c.c
 +F:    drivers/mmc/host/sdhci-s3c*
  
  SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) ST SPEAR DRIVER
  M:    Viresh Kumar <viresh.linux@gmail.com>
@@@ -8803,15 -8742,6 +8808,15 @@@ W:    http://www.emulex.co
  S:    Supported
  F:    drivers/net/ethernet/emulex/benet/
  
 +EMULEX ONECONNECT ROCE DRIVER
 +M:    Selvin Xavier <selvin.xavier@emulex.com>
 +M:    Devesh Sharma <devesh.sharma@emulex.com>
 +M:    Mitesh Ahuja <mitesh.ahuja@emulex.com>
 +L:    linux-rdma@vger.kernel.org
 +W:    http://www.emulex.com
 +S:    Supported
 +F:    drivers/infiniband/hw/ocrdma/
 +
  SFC NETWORK DRIVER
  M:    Solarflare linux maintainers <linux-net-drivers@solarflare.com>
  M:    Shradha Shah <sshah@solarflare.com>
@@@ -8985,16 -8915,6 +8990,16 @@@ T:    git git://linuxtv.org/mhadli/v4l-dvb
  S:    Maintained
  F:    drivers/media/platform/am437x/
  
 +OV2659 OMNIVISION SENSOR DRIVER
 +M:    Lad, Prabhakar <prabhakar.csengg@gmail.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org/
 +Q:    http://patchwork.linuxtv.org/project/linux-media/list/
 +T:    git git://linuxtv.org/mhadli/v4l-dvb-davinci_devices.git
 +S:    Maintained
 +F:    drivers/media/i2c/ov2659.c
 +F:    include/media/ov2659.h
 +
  SIS 190 ETHERNET DRIVER
  M:    Francois Romieu <romieu@fr.zoreil.com>
  L:    netdev@vger.kernel.org
@@@ -9425,14 -9345,6 +9430,14 @@@ L:    linux-fbdev@vger.kernel.or
  S:    Maintained
  F:    drivers/staging/sm7xxfb/
  
 +STAGING - SILICON MOTION SM750 FRAME BUFFER DRIVER
 +M:    Sudip Mukherjee <sudipm.mukherjee@gmail.com>
 +M:    Teddy Wang <teddy.wang@siliconmotion.com>
 +M:    Sudip Mukherjee <sudip@vectorindia.org>
 +L:    linux-fbdev@vger.kernel.org
 +S:    Maintained
 +F:    drivers/staging/sm750fb/
 +
  STAGING - SLICOSS
  M:    Lior Dotan <liodot@gmail.com>
  M:    Christopher Harrer <charrer@alacritech.com>
@@@ -9895,7 -9807,7 +9900,7 @@@ F:      include/linux/wl12xx.
  
  TIPC NETWORK LAYER
  M:    Jon Maloy <jon.maloy@ericsson.com>
 -M:    Allan Stephens <allan.stephens@windriver.com>
 +M:    Ying Xue <ying.xue@windriver.com>
  L:    netdev@vger.kernel.org (core kernel code)
  L:    tipc-discussion@lists.sourceforge.net (user apps, general discussion)
  W:    http://tipc.sourceforge.net/
@@@ -9999,7 -9911,6 +10004,7 @@@ F:     drivers/media/pci/tw68
  TPM DEVICE DRIVER
  M:    Peter Huewe <peterhuewe@gmx.de>
  M:    Marcel Selhorst <tpmdd@selhorst.net>
 +R:    Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
  W:    http://tpmdd.sourceforge.net
  L:    tpmdd-devel@lists.sourceforge.net (moderated for non-subscribers)
  Q:    git git://github.com/PeterHuewe/linux-tpmdd.git
@@@ -10153,11 -10064,11 +10158,11 @@@ F:        include/linux/cdrom.
  F:    include/uapi/linux/cdrom.h
  
  UNISYS S-PAR DRIVERS
 -M:     Benjamin Romer <benjamin.romer@unisys.com>
 -M:     David Kershner <david.kershner@unisys.com>
 -L:     sparmaintainer@unisys.com (Unisys internal)
 -S:     Supported
 -F:     drivers/staging/unisys/
 +M:    Benjamin Romer <benjamin.romer@unisys.com>
 +M:    David Kershner <david.kershner@unisys.com>
 +L:    sparmaintainer@unisys.com (Unisys internal)
 +S:    Supported
 +F:    drivers/staging/unisys/
  
  UNIVERSAL FLASH STORAGE HOST CONTROLLER DRIVER
  M:    Vinayak Holikatti <vinholikatti@gmail.com>
@@@ -10205,12 -10116,6 +10210,12 @@@ S: Maintaine
  F:    drivers/net/usb/cdc_*.c
  F:    include/uapi/linux/usb/cdc.h
  
 +USB CHAOSKEY DRIVER
 +M:    Keith Packard <keithp@keithp.com>
 +L:    linux-usb@vger.kernel.org
 +S:    Maintained
 +F:    drivers/usb/misc/chaoskey.c
 +
  USB CYPRESS C67X00 DRIVER
  M:    Peter Korsgaard <jacmet@sunsite.dk>
  L:    linux-usb@vger.kernel.org
@@@ -10289,13 -10194,6 +10294,13 @@@ S: Maintaine
  F:    Documentation/usb/ohci.txt
  F:    drivers/usb/host/ohci*
  
 +USB OTG FSM (Finite State Machine)
 +M:    Peter Chen <Peter.Chen@freescale.com>
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/peter.chen/usb.git
 +L:    linux-usb@vger.kernel.org
 +S:    Maintained
 +F:    drivers/usb/common/usb-otg-fsm.c
 +
  USB OVER IP DRIVER
  M:    Valentina Manea <valentina.manea.m@gmail.com>
  M:    Shuah Khan <shuah.kh@samsung.com>
@@@ -10524,12 -10422,6 +10529,12 @@@ S: Maintaine
  F:    drivers/vhost/
  F:    include/uapi/linux/vhost.h
  
 +VIRTIO INPUT DRIVER
 +M:    Gerd Hoffmann <kraxel@redhat.com>
 +S:    Maintained
 +F:    drivers/virtio/virtio_input.c
 +F:    include/uapi/linux/virtio_input.h
 +
  VIA RHINE NETWORK DRIVER
  M:    Roger Luethi <rl@hellgate.ch>
  S:    Maintained
@@@ -10605,14 -10497,6 +10610,14 @@@ L: linux-kernel@vger.kernel.or
  S:    Maintained
  F:    drivers/misc/vmw_balloon.c
  
 +VMWARE VMMOUSE SUBDRIVER
 +M:    "VMware Graphics" <linux-graphics-maintainer@vmware.com>
 +M:    "VMware, Inc." <pv-drivers@vmware.com>
 +L:    linux-input@vger.kernel.org
 +S:    Maintained
 +F:    drivers/input/mouse/vmmouse.c
 +F:    drivers/input/mouse/vmmouse.h
 +
  VMWARE VMXNET3 ETHERNET DRIVER
  M:    Shreyas Bhatewara <sbhatewara@vmware.com>
  M:    "VMware, Inc." <pv-drivers@vmware.com>
@@@ -10728,7 -10612,7 +10733,7 @@@ F:   drivers/media/rc/winbond-cir.
  WIMAX STACK
  M:    Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
  M:    linux-wimax@intel.com
 -L:     wimax@linuxwimax.org (subscribers-only)
 +L:    wimax@linuxwimax.org (subscribers-only)
  S:    Supported
  W:    http://linuxwimax.org
  F:    Documentation/wimax/README.wimax
@@@ -10938,16 -10822,6 +10943,16 @@@ L: linux-serial@vger.kernel.or
  S:    Maintained
  F:    drivers/tty/serial/uartlite.c
  
 +XILINX VIDEO IP CORES
 +M:    Hyun Kwon <hyun.kwon@xilinx.com>
 +M:    Laurent Pinchart <laurent.pinchart@ideasonboard.com>
 +L:    linux-media@vger.kernel.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Supported
 +F:    Documentation/devicetree/bindings/media/xilinx/
 +F:    drivers/media/platform/xilinx/
 +F:    include/uapi/linux/xilinx-v4l2-controls.h
 +
  XILLYBUS DRIVER
  M:    Eli Billauer <eli.billauer@gmail.com>
  L:    linux-kernel@vger.kernel.org
@@@ -11029,7 -10903,6 +11034,7 @@@ L:   linux-mm@kvack.or
  S:    Maintained
  F:    mm/zsmalloc.c
  F:    include/linux/zsmalloc.h
 +F:    Documentation/vm/zsmalloc.txt
  
  ZSWAP COMPRESSED SWAP CACHING
  M:    Seth Jennings <sjennings@variantweb.net>
index 36aaeb12e1a558af99c7aa383adfdf2d5bcaa665,7eac84687cb4018118103132eadec5449423739b..bf37e3c532f661a6b8adb5cbb3997a289cb29eb7
@@@ -754,12 -754,12 +754,12 @@@ static struct platform_device vcc_sdhi
  };
  
  /* SDHI0 */
- static struct sh_mobile_sdhi_info sdhi0_info = {
-       .dma_slave_tx   = SHDMA_SLAVE_SDHI0_TX,
-       .dma_slave_rx   = SHDMA_SLAVE_SDHI0_RX,
-       .tmio_caps      = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ |
+ static struct tmio_mmc_data sdhi0_info = {
+       .chan_priv_tx   = (void *)SHDMA_SLAVE_SDHI0_TX,
+       .chan_priv_rx   = (void *)SHDMA_SLAVE_SDHI0_RX,
+       .capabilities   = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ |
                          MMC_CAP_POWER_OFF_CARD,
-       .tmio_flags     = TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_USE_GPIO_CD,
+       .flags          = TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_USE_GPIO_CD,
        .cd_gpio        = 167,
  };
  
@@@ -796,12 -796,12 +796,12 @@@ static struct platform_device sdhi0_dev
  };
  
  /* SDHI1 */
- static struct sh_mobile_sdhi_info sdhi1_info = {
-       .dma_slave_tx   = SHDMA_SLAVE_SDHI1_TX,
-       .dma_slave_rx   = SHDMA_SLAVE_SDHI1_RX,
-       .tmio_caps      = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ |
+ static struct tmio_mmc_data sdhi1_info = {
+       .chan_priv_tx   = (void *)SHDMA_SLAVE_SDHI1_TX,
+       .chan_priv_rx   = (void *)SHDMA_SLAVE_SDHI1_RX,
+       .capabilities   = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ |
                          MMC_CAP_POWER_OFF_CARD,
-       .tmio_flags     = TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_USE_GPIO_CD,
+       .flags          = TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_USE_GPIO_CD,
        /* Port72 cannot generate IRQs, will be used in polling mode. */
        .cd_gpio        = 72,
  };
@@@ -1015,6 -1015,7 +1015,6 @@@ static struct asoc_simple_card_info fsi
        .platform       = "sh_fsi2",
        .daifmt         = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBM_CFM,
        .cpu_dai = {
 -              .fmt    = SND_SOC_DAIFMT_IB_NF,
                .name   = "fsia-dai",
        },
        .codec_dai = {
@@@ -1039,9 -1040,9 +1039,9 @@@ static struct asoc_simple_card_info fsi
        .card           = "FSI2B-HDMI",
        .codec          = "sh-mobile-hdmi",
        .platform       = "sh_fsi2",
 +      .daifmt         = SND_SOC_DAIFMT_CBS_CFS,
        .cpu_dai = {
                .name   = "fsib-dai",
 -              .fmt    = SND_SOC_DAIFMT_CBS_CFS,
        },
        .codec_dai = {
                .name = "sh_mobile_hdmi-hifi",
index e74f6e0a208ccbf584d2b2d61c98d3d0f1d169e2,9471770040398e4495ef791f8f5a5a3828709106..c8d3e0e866787bcbe7ac1d72b370d20927a15a5d
                #address-cells = <2>;
                #size-cells = <2>;
                ranges;
+               dma-ranges = <0x0 0x0 0x0 0x0 0x400 0x0>;
  
                clocks {
                        #address-cells = <2>;
                                clock-output-names = "sge0clk";
                        };
  
 +                      sge1clk: sge1clk@1f21c000 {
 +                              compatible = "apm,xgene-device-clock";
 +                              #clock-cells = <1>;
 +                              clocks = <&socplldiv2 0>;
 +                              reg = <0x0 0x1f21c000 0x0 0x1000>;
 +                              reg-names = "csr-reg";
 +                              csr-mask = <0xc>;
 +                              clock-output-names = "sge1clk";
 +                      };
 +
                        xge0clk: xge0clk@1f61c000 {
                                compatible = "apm,xgene-device-clock";
                                #clock-cells = <1>;
                                reg-names = "csr-reg";
                                clock-output-names = "pcie4clk";
                        };
+                       dmaclk: dmaclk@1f27c000 {
+                               compatible = "apm,xgene-device-clock";
+                               #clock-cells = <1>;
+                               clocks = <&socplldiv2 0>;
+                               reg = <0x0 0x1f27c000 0x0 0x1000>;
+                               reg-names = "csr-reg";
+                               clock-output-names = "dmaclk";
+                       };
                };
  
                pcie0: pcie@1f2b0000 {
                };
  
                sgenet0: ethernet@1f210000 {
 -                      compatible = "apm,xgene-enet";
 +                      compatible = "apm,xgene1-sgenet";
                        status = "disabled";
                        reg = <0x0 0x1f210000 0x0 0xd100>,
                              <0x0 0x1f200000 0x0 0Xc300>,
                              <0x0 0x1B000000 0x0 0X200>;
                        reg-names = "enet_csr", "ring_csr", "ring_cmd";
 -                      interrupts = <0x0 0xA0 0x4>;
 +                      interrupts = <0x0 0xA0 0x4>,
 +                                   <0x0 0xA1 0x4>;
                        dma-coherent;
                        clocks = <&sge0clk 0>;
                        local-mac-address = [00 00 00 00 00 00];
                        phy-connection-type = "sgmii";
                };
  
 +              sgenet1: ethernet@1f210030 {
 +                      compatible = "apm,xgene1-sgenet";
 +                      status = "disabled";
 +                      reg = <0x0 0x1f210030 0x0 0xd100>,
 +                            <0x0 0x1f200000 0x0 0Xc300>,
 +                            <0x0 0x1B000000 0x0 0X8000>;
 +                      reg-names = "enet_csr", "ring_csr", "ring_cmd";
 +                      interrupts = <0x0 0xAC 0x4>,
 +                                   <0x0 0xAD 0x4>;
 +                      port-id = <1>;
 +                      dma-coherent;
 +                      clocks = <&sge1clk 0>;
 +                      local-mac-address = [00 00 00 00 00 00];
 +                      phy-connection-type = "sgmii";
 +              };
 +
                xgenet: ethernet@1f610000 {
 -                      compatible = "apm,xgene-enet";
 +                      compatible = "apm,xgene1-xgenet";
                        status = "disabled";
                        reg = <0x0 0x1f610000 0x0 0xd100>,
                              <0x0 0x1f600000 0x0 0Xc300>,
                              <0x0 0x18000000 0x0 0X200>;
                        reg-names = "enet_csr", "ring_csr", "ring_cmd";
 -                      interrupts = <0x0 0x60 0x4>;
 +                      interrupts = <0x0 0x60 0x4>,
 +                                   <0x0 0x61 0x4>;
                        dma-coherent;
                        clocks = <&xge0clk 0>;
                        /* mac address will be overwritten by the bootloader */
                        interrupts = <0x0 0x41 0x4>;
                        clocks = <&rngpkaclk 0>;
                };
+               dma: dma@1f270000 {
+                       compatible = "apm,xgene-storm-dma";
+                       device_type = "dma";
+                       reg = <0x0 0x1f270000 0x0 0x10000>,
+                             <0x0 0x1f200000 0x0 0x10000>,
+                             <0x0 0x1b008000 0x0 0x2000>,
+                             <0x0 0x1054a000 0x0 0x100>;
+                       interrupts = <0x0 0x82 0x4>,
+                                    <0x0 0xb8 0x4>,
+                                    <0x0 0xb9 0x4>,
+                                    <0x0 0xba 0x4>,
+                                    <0x0 0xbb 0x4>;
+                       dma-coherent;
+                       clocks = <&dmaclk 0>;
+               };
        };
  };
diff --combined drivers/dma/Kconfig
index 91eced044321610ef6dd2a9cf3dac415d154bd9f,b674683de24bac34d867c67f0c2f35dc9ed3cef3..fd7ac13f2574ab0aab2ecf0c5f6b38019459da99
@@@ -51,6 -51,19 +51,6 @@@ config INTEL_MIC_X100_DM
          OS and tools for MIC to use with this driver are available from
          <http://software.intel.com/en-us/mic-developer>.
  
 -config INTEL_MID_DMAC
 -      tristate "Intel MID DMA support for Peripheral DMA controllers"
 -      depends on PCI && X86
 -      select DMA_ENGINE
 -      default n
 -      help
 -        Enable support for the Intel(R) MID DMA engine present
 -        in Intel MID chipsets.
 -
 -        Say Y here if you have such a chipset.
 -
 -        If unsure, say N.
 -
  config ASYNC_TX_ENABLE_CHANNEL_SWITCH
        bool
  
@@@ -112,8 -125,17 +112,19 @@@ config FSL_DM
          EloPlus is on mpc85xx and mpc86xx and Pxxx parts, and the Elo3 is on
          some Txxx and Bxxx parts.
  
+ config FSL_RAID
+         tristate "Freescale RAID engine Support"
+         depends on FSL_SOC && !ASYNC_TX_ENABLE_CHANNEL_SWITCH
+         select DMA_ENGINE
+         select DMA_ENGINE_RAID
+         ---help---
+           Enable support for Freescale RAID Engine. RAID Engine is
+           available on some QorIQ SoCs (like P5020/P5040). It has
+           the capability to offload memcpy, xor and pq computation
+         for raid5/6.
 +source "drivers/dma/hsu/Kconfig"
 +
  config MPC512X_DMA
        tristate "Freescale MPC512x built-in DMA engine support"
        depends on PPC_MPC512x || PPC_MPC831x
@@@ -347,6 -369,16 +358,16 @@@ config DMA_JZ474
        select DMA_ENGINE
        select DMA_VIRTUAL_CHANNELS
  
+ config DMA_JZ4780
+       tristate "JZ4780 DMA support"
+       depends on MACH_JZ4780
+       select DMA_ENGINE
+       select DMA_VIRTUAL_CHANNELS
+       help
+         This selects support for the DMA controller in Ingenic JZ4780 SoCs.
+         If you have a board based on such a SoC and wish to use DMA for
+         devices which can use the DMA controller, say Y or M here.
  config K3_DMA
        tristate "Hisilicon K3 DMA support"
        depends on ARCH_HI3xxx
@@@ -414,6 -446,14 +435,14 @@@ config IMG_MDC_DM
        help
          Enable support for the IMG multi-threaded DMA controller (MDC).
  
+ config XGENE_DMA
+       tristate "APM X-Gene DMA support"
+       select DMA_ENGINE
+       select DMA_ENGINE_RAID
+       select ASYNC_TX_ENABLE_CHANNEL_SWITCH
+       help
+         Enable support for the APM X-Gene SoC DMA engine.
  config DMA_ENGINE
        bool
  
diff --combined drivers/dma/Makefile
index 7e8301cb489dee7dd682b8bc15b304fec9a6e223,345ec4758b9d9558dd9926b5d844582a7ea7d6f1..69f77d5ba53bb00ede8ea1ea0ed4a003e90d7f19
@@@ -6,11 -6,11 +6,11 @@@ obj-$(CONFIG_DMA_VIRTUAL_CHANNELS) += v
  obj-$(CONFIG_DMA_ACPI) += acpi-dma.o
  obj-$(CONFIG_DMA_OF) += of-dma.o
  
 -obj-$(CONFIG_INTEL_MID_DMAC) += intel_mid_dma.o
  obj-$(CONFIG_DMATEST) += dmatest.o
  obj-$(CONFIG_INTEL_IOATDMA) += ioat/
  obj-$(CONFIG_INTEL_IOP_ADMA) += iop-adma.o
  obj-$(CONFIG_FSL_DMA) += fsldma.o
 +obj-$(CONFIG_HSU_DMA) += hsu/
  obj-$(CONFIG_MPC512X_DMA) += mpc512x_dma.o
  obj-$(CONFIG_PPC_BESTCOMM) += bestcomm/
  obj-$(CONFIG_MV_XOR) += mv_xor.o
@@@ -41,9 -41,11 +41,11 @@@ obj-$(CONFIG_DMA_OMAP) += omap-dma.
  obj-$(CONFIG_DMA_BCM2835) += bcm2835-dma.o
  obj-$(CONFIG_MMP_PDMA) += mmp_pdma.o
  obj-$(CONFIG_DMA_JZ4740) += dma-jz4740.o
+ obj-$(CONFIG_DMA_JZ4780) += dma-jz4780.o
  obj-$(CONFIG_TI_CPPI41) += cppi41.o
  obj-$(CONFIG_K3_DMA) += k3dma.o
  obj-$(CONFIG_MOXART_DMA) += moxart-dma.o
+ obj-$(CONFIG_FSL_RAID) += fsl_raid.o
  obj-$(CONFIG_FSL_EDMA) += fsl-edma.o
  obj-$(CONFIG_QCOM_BAM_DMA) += qcom_bam_dma.o
  obj-y += xilinx/
@@@ -51,3 -53,4 +53,4 @@@ obj-$(CONFIG_INTEL_MIC_X100_DMA) += mic
  obj-$(CONFIG_NBPFAXI_DMA) += nbpfaxi.o
  obj-$(CONFIG_DMA_SUN6I) += sun6i-dma.o
  obj-$(CONFIG_IMG_MDC_DMA) += img-mdc-dma.o
+ obj-$(CONFIG_XGENE_DMA) += xgene-dma.o
diff --combined drivers/dma/amba-pl08x.c
index 83aa55d6fa5d65e6243abc13e29c1d4766768eeb,e7c50d4c3d45aeb1d56bf49dde74e6cc455cddb9..49d396ec06e58f7f5e1a530fdf30b29f3e91808c
   * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
   * more details.
   *
-  * You should have received a copy of the GNU General Public License along with
-  * this program; if not, write to the Free Software Foundation, Inc., 59
-  * Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-  *
   * The full GNU General Public License is in this distribution in the file
   * called COPYING.
   *
  
  #define DRIVER_NAME   "pl08xdmac"
  
 +#define PL80X_DMA_BUSWIDTHS \
 +      BIT(DMA_SLAVE_BUSWIDTH_UNDEFINED) | \
 +      BIT(DMA_SLAVE_BUSWIDTH_1_BYTE) | \
 +      BIT(DMA_SLAVE_BUSWIDTH_2_BYTES) | \
 +      BIT(DMA_SLAVE_BUSWIDTH_4_BYTES)
 +
  static struct amba_driver pl08x_amba_driver;
  struct pl08x_driver_data;
  
@@@ -1195,11 -1185,6 +1191,6 @@@ static void pl08x_free_txd_list(struct 
  /*
   * The DMA ENGINE API
   */
- static int pl08x_alloc_chan_resources(struct dma_chan *chan)
- {
-       return 0;
- }
  static void pl08x_free_chan_resources(struct dma_chan *chan)
  {
        /* Ensure all queued descriptors are freed */
@@@ -2066,7 -2051,6 +2057,6 @@@ static int pl08x_probe(struct amba_devi
        /* Initialize memcpy engine */
        dma_cap_set(DMA_MEMCPY, pl08x->memcpy.cap_mask);
        pl08x->memcpy.dev = &adev->dev;
-       pl08x->memcpy.device_alloc_chan_resources = pl08x_alloc_chan_resources;
        pl08x->memcpy.device_free_chan_resources = pl08x_free_chan_resources;
        pl08x->memcpy.device_prep_dma_memcpy = pl08x_prep_dma_memcpy;
        pl08x->memcpy.device_prep_dma_interrupt = pl08x_prep_dma_interrupt;
        pl08x->memcpy.device_pause = pl08x_pause;
        pl08x->memcpy.device_resume = pl08x_resume;
        pl08x->memcpy.device_terminate_all = pl08x_terminate_all;
 +      pl08x->memcpy.src_addr_widths = PL80X_DMA_BUSWIDTHS;
 +      pl08x->memcpy.dst_addr_widths = PL80X_DMA_BUSWIDTHS;
 +      pl08x->memcpy.directions = BIT(DMA_MEM_TO_MEM);
 +      pl08x->memcpy.residue_granularity = DMA_RESIDUE_GRANULARITY_SEGMENT;
  
        /* Initialize slave engine */
        dma_cap_set(DMA_SLAVE, pl08x->slave.cap_mask);
        dma_cap_set(DMA_CYCLIC, pl08x->slave.cap_mask);
        pl08x->slave.dev = &adev->dev;
-       pl08x->slave.device_alloc_chan_resources = pl08x_alloc_chan_resources;
        pl08x->slave.device_free_chan_resources = pl08x_free_chan_resources;
        pl08x->slave.device_prep_dma_interrupt = pl08x_prep_dma_interrupt;
        pl08x->slave.device_tx_status = pl08x_dma_tx_status;
        pl08x->slave.device_pause = pl08x_pause;
        pl08x->slave.device_resume = pl08x_resume;
        pl08x->slave.device_terminate_all = pl08x_terminate_all;
 +      pl08x->slave.src_addr_widths = PL80X_DMA_BUSWIDTHS;
 +      pl08x->slave.dst_addr_widths = PL80X_DMA_BUSWIDTHS;
 +      pl08x->slave.directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV);
 +      pl08x->slave.residue_granularity = DMA_RESIDUE_GRANULARITY_SEGMENT;
  
        /* Get the platform data */
        pl08x->pd = dev_get_platdata(&adev->dev);
diff --combined drivers/dma/at_hdmac.c
index 0b4fc6fb48ce7c5cec62d9a1ef4291e0b175cfaf,4f5b262f9a40a658368b9dcf4abcdcdb44689b16..57b2141ddddc1abca862197b78f8bd2e1cb51f57
@@@ -65,6 -65,21 +65,21 @@@ static void atc_issue_pending(struct dm
  
  /*----------------------------------------------------------------------*/
  
+ static inline unsigned int atc_get_xfer_width(dma_addr_t src, dma_addr_t dst,
+                                               size_t len)
+ {
+       unsigned int width;
+       if (!((src | dst  | len) & 3))
+               width = 2;
+       else if (!((src | dst | len) & 1))
+               width = 1;
+       else
+               width = 0;
+       return width;
+ }
  static struct at_desc *atc_first_active(struct at_dma_chan *atchan)
  {
        return list_first_entry(&atchan->active_list,
@@@ -238,126 -253,93 +253,126 @@@ static void atc_dostart(struct at_dma_c
  }
  
  /*
 - * atc_get_current_descriptors -
 - * locate the descriptor which equal to physical address in DSCR
 - * @atchan: the channel we want to start
 - * @dscr_addr: physical descriptor address in DSCR
 + * atc_get_desc_by_cookie - get the descriptor of a cookie
 + * @atchan: the DMA channel
 + * @cookie: the cookie to get the descriptor for
   */
 -static struct at_desc *atc_get_current_descriptors(struct at_dma_chan *atchan,
 -                                                      u32 dscr_addr)
 +static struct at_desc *atc_get_desc_by_cookie(struct at_dma_chan *atchan,
 +                                              dma_cookie_t cookie)
  {
 -      struct at_desc  *desc, *_desc, *child, *desc_cur = NULL;
 +      struct at_desc *desc, *_desc;
  
 -      list_for_each_entry_safe(desc, _desc, &atchan->active_list, desc_node) {
 -              if (desc->lli.dscr == dscr_addr) {
 -                      desc_cur = desc;
 -                      break;
 -              }
 +      list_for_each_entry_safe(desc, _desc, &atchan->queue, desc_node) {
 +              if (desc->txd.cookie == cookie)
 +                      return desc;
 +      }
  
 -              list_for_each_entry(child, &desc->tx_list, desc_node) {
 -                      if (child->lli.dscr == dscr_addr) {
 -                              desc_cur = child;
 -                              break;
 -                      }
 -              }
 +      list_for_each_entry_safe(desc, _desc, &atchan->active_list, desc_node) {
 +              if (desc->txd.cookie == cookie)
 +                      return desc;
        }
  
 -      return desc_cur;
 +      return NULL;
  }
  
 -/*
 - * atc_get_bytes_left -
 - * Get the number of bytes residue in dma buffer,
 - * @chan: the channel we want to start
 +/**
 + * atc_calc_bytes_left - calculates the number of bytes left according to the
 + * value read from CTRLA.
 + *
 + * @current_len: the number of bytes left before reading CTRLA
 + * @ctrla: the value of CTRLA
 + * @desc: the descriptor containing the transfer width
 + */
 +static inline int atc_calc_bytes_left(int current_len, u32 ctrla,
 +                                      struct at_desc *desc)
 +{
 +      return current_len - ((ctrla & ATC_BTSIZE_MAX) << desc->tx_width);
 +}
 +
 +/**
 + * atc_calc_bytes_left_from_reg - calculates the number of bytes left according
 + * to the current value of CTRLA.
 + *
 + * @current_len: the number of bytes left before reading CTRLA
 + * @atchan: the channel to read CTRLA for
 + * @desc: the descriptor containing the transfer width
   */
 -static int atc_get_bytes_left(struct dma_chan *chan)
 +static inline int atc_calc_bytes_left_from_reg(int current_len,
 +                      struct at_dma_chan *atchan, struct at_desc *desc)
 +{
 +      u32 ctrla = channel_readl(atchan, CTRLA);
 +
 +      return atc_calc_bytes_left(current_len, ctrla, desc);
 +}
 +
 +/**
 + * atc_get_bytes_left - get the number of bytes residue for a cookie
 + * @chan: DMA channel
 + * @cookie: transaction identifier to check status of
 + */
 +static int atc_get_bytes_left(struct dma_chan *chan, dma_cookie_t cookie)
  {
        struct at_dma_chan      *atchan = to_at_dma_chan(chan);
 -      struct at_dma           *atdma = to_at_dma(chan->device);
 -      int     chan_id = atchan->chan_common.chan_id;
        struct at_desc *desc_first = atc_first_active(atchan);
 -      struct at_desc *desc_cur;
 -      int ret = 0, count = 0;
 +      struct at_desc *desc;
 +      int ret;
 +      u32 ctrla, dscr;
  
        /*
 -       * Initialize necessary values in the first time.
 -       * remain_desc record remain desc length.
 +       * If the cookie doesn't match to the currently running transfer then
 +       * we can return the total length of the associated DMA transfer,
 +       * because it is still queued.
         */
 -      if (atchan->remain_desc == 0)
 -              /* First descriptor embedds the transaction length */
 -              atchan->remain_desc = desc_first->len;
 +      desc = atc_get_desc_by_cookie(atchan, cookie);
 +      if (desc == NULL)
 +              return -EINVAL;
 +      else if (desc != desc_first)
 +              return desc->total_len;
  
 -      /*
 -       * This happens when current descriptor transfer complete.
 -       * The residual buffer size should reduce current descriptor length.
 -       */
 -      if (unlikely(test_bit(ATC_IS_BTC, &atchan->status))) {
 -              clear_bit(ATC_IS_BTC, &atchan->status);
 -              desc_cur = atc_get_current_descriptors(atchan,
 -                                              channel_readl(atchan, DSCR));
 -              if (!desc_cur) {
 -                      ret = -EINVAL;
 -                      goto out;
 -              }
 +      /* cookie matches to the currently running transfer */
 +      ret = desc_first->total_len;
 +
 +      if (desc_first->lli.dscr) {
 +              /* hardware linked list transfer */
 +
 +              /*
 +               * Calculate the residue by removing the length of the child
 +               * descriptors already transferred from the total length.
 +               * To get the current child descriptor we can use the value of
 +               * the channel's DSCR register and compare it against the value
 +               * of the hardware linked list structure of each child
 +               * descriptor.
 +               */
  
 -              count = (desc_cur->lli.ctrla & ATC_BTSIZE_MAX)
 -                      << desc_first->tx_width;
 -              if (atchan->remain_desc < count) {
 -                      ret = -EINVAL;
 -                      goto out;
 +              ctrla = channel_readl(atchan, CTRLA);
 +              rmb(); /* ensure CTRLA is read before DSCR */
 +              dscr = channel_readl(atchan, DSCR);
 +
 +              /* for the first descriptor we can be more accurate */
 +              if (desc_first->lli.dscr == dscr)
 +                      return atc_calc_bytes_left(ret, ctrla, desc_first);
 +
 +              ret -= desc_first->len;
 +              list_for_each_entry(desc, &desc_first->tx_list, desc_node) {
 +                      if (desc->lli.dscr == dscr)
 +                              break;
 +
 +                      ret -= desc->len;
                }
  
 -              atchan->remain_desc -= count;
 -              ret = atchan->remain_desc;
 -      } else {
                /*
 -               * Get residual bytes when current
 -               * descriptor transfer in progress.
 +               * For the last descriptor in the chain we can calculate
 +               * the remaining bytes using the channel's register.
 +               * Note that the transfer width of the first and last
 +               * descriptor may differ.
                 */
 -              count = (channel_readl(atchan, CTRLA) & ATC_BTSIZE_MAX)
 -                              << (desc_first->tx_width);
 -              ret = atchan->remain_desc - count;
 +              if (!desc->lli.dscr)
 +                      ret = atc_calc_bytes_left_from_reg(ret, atchan, desc);
 +      } else {
 +              /* single transfer */
 +              ret = atc_calc_bytes_left_from_reg(ret, atchan, desc_first);
        }
 -      /*
 -       * Check fifo empty.
 -       */
 -      if (!(dma_readl(atdma, CHSR) & AT_DMA_EMPT(chan_id)))
 -              atc_issue_pending(chan);
  
 -out:
        return ret;
  }
  
@@@ -572,6 -554,8 +587,6 @@@ static irqreturn_t at_dma_interrupt(in
                                        /* Give information to tasklet */
                                        set_bit(ATC_IS_ERROR, &atchan->status);
                                }
 -                              if (pending & AT_DMA_BTC(i))
 -                                      set_bit(ATC_IS_BTC, &atchan->status);
                                tasklet_schedule(&atchan->tasklet);
                                ret = IRQ_HANDLED;
                        }
@@@ -659,16 -643,10 +674,10 @@@ atc_prep_dma_memcpy(struct dma_chan *ch
         * We can be a lot more clever here, but this should take care
         * of the most common optimization.
         */
-       if (!((src | dest  | len) & 3)) {
-               ctrla = ATC_SRC_WIDTH_WORD | ATC_DST_WIDTH_WORD;
-               src_width = dst_width = 2;
-       } else if (!((src | dest | len) & 1)) {
-               ctrla = ATC_SRC_WIDTH_HALFWORD | ATC_DST_WIDTH_HALFWORD;
-               src_width = dst_width = 1;
-       } else {
-               ctrla = ATC_SRC_WIDTH_BYTE | ATC_DST_WIDTH_BYTE;
-               src_width = dst_width = 0;
-       }
+       src_width = dst_width = atc_get_xfer_width(src, dest, len);
+       ctrla = ATC_SRC_WIDTH(src_width) |
+               ATC_DST_WIDTH(dst_width);
  
        for (offset = 0; offset < len; offset += xfer_count << src_width) {
                xfer_count = min_t(size_t, (len - offset) >> src_width,
                desc->lli.ctrlb = ctrlb;
  
                desc->txd.cookie = 0;
 +              desc->len = xfer_count << src_width;
  
                atc_desc_chain(&first, &prev, desc);
        }
  
        /* First descriptor of the chain embedds additional information */
        first->txd.cookie = -EBUSY;
 -      first->len = len;
 +      first->total_len = len;
 +
 +      /* set transfer width for the calculation of the residue */
        first->tx_width = src_width;
 +      prev->tx_width = src_width;
  
        /* set end-of-link to the last link descriptor of list*/
        set_desc_eol(desc);
@@@ -787,7 -761,6 +796,7 @@@ atc_prep_slave_sg(struct dma_chan *chan
                                        | ATC_SRC_WIDTH(mem_width)
                                        | len >> mem_width;
                        desc->lli.ctrlb = ctrlb;
 +                      desc->len = len;
  
                        atc_desc_chain(&first, &prev, desc);
                        total_len += len;
                                        | ATC_DST_WIDTH(mem_width)
                                        | len >> reg_width;
                        desc->lli.ctrlb = ctrlb;
 +                      desc->len = len;
  
                        atc_desc_chain(&first, &prev, desc);
                        total_len += len;
  
        /* First descriptor of the chain embedds additional information */
        first->txd.cookie = -EBUSY;
 -      first->len = total_len;
 +      first->total_len = total_len;
 +
 +      /* set transfer width for the calculation of the residue */
        first->tx_width = reg_width;
 +      prev->tx_width = reg_width;
  
        /* first link descriptor of list is responsible of flags */
        first->txd.flags = flags; /* client is in control of this ack */
@@@ -861,6 -830,144 +870,144 @@@ err
        return NULL;
  }
  
+ /**
+  * atc_prep_dma_sg - prepare memory to memory scather-gather operation
+  * @chan: the channel to prepare operation on
+  * @dst_sg: destination scatterlist
+  * @dst_nents: number of destination scatterlist entries
+  * @src_sg: source scatterlist
+  * @src_nents: number of source scatterlist entries
+  * @flags: tx descriptor status flags
+  */
+ static struct dma_async_tx_descriptor *
+ atc_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)
+ {
+       struct at_dma_chan      *atchan = to_at_dma_chan(chan);
+       struct at_desc          *desc = NULL;
+       struct at_desc          *first = NULL;
+       struct at_desc          *prev = NULL;
+       unsigned int            src_width;
+       unsigned int            dst_width;
+       size_t                  xfer_count;
+       u32                     ctrla;
+       u32                     ctrlb;
+       size_t                  dst_len = 0, src_len = 0;
+       dma_addr_t              dst = 0, src = 0;
+       size_t                  len = 0, total_len = 0;
+       if (unlikely(dst_nents == 0 || src_nents == 0))
+               return NULL;
+       if (unlikely(dst_sg == NULL || src_sg == NULL))
+               return NULL;
+       ctrlb =   ATC_DEFAULT_CTRLB | ATC_IEN
+               | ATC_SRC_ADDR_MODE_INCR
+               | ATC_DST_ADDR_MODE_INCR
+               | ATC_FC_MEM2MEM;
+       /*
+        * loop until there is either no more source or no more destination
+        * scatterlist entry
+        */
+       while (true) {
+               /* prepare the next transfer */
+               if (dst_len == 0) {
+                       /* no more destination scatterlist entries */
+                       if (!dst_sg || !dst_nents)
+                               break;
+                       dst = sg_dma_address(dst_sg);
+                       dst_len = sg_dma_len(dst_sg);
+                       dst_sg = sg_next(dst_sg);
+                       dst_nents--;
+               }
+               if (src_len == 0) {
+                       /* no more source scatterlist entries */
+                       if (!src_sg || !src_nents)
+                               break;
+                       src = sg_dma_address(src_sg);
+                       src_len = sg_dma_len(src_sg);
+                       src_sg = sg_next(src_sg);
+                       src_nents--;
+               }
+               len = min_t(size_t, src_len, dst_len);
+               if (len == 0)
+                       continue;
+               /* take care for the alignment */
+               src_width = dst_width = atc_get_xfer_width(src, dst, len);
+               ctrla = ATC_SRC_WIDTH(src_width) |
+                       ATC_DST_WIDTH(dst_width);
+               /*
+                * The number of transfers to set up refer to the source width
+                * that depends on the alignment.
+                */
+               xfer_count = len >> src_width;
+               if (xfer_count > ATC_BTSIZE_MAX) {
+                       xfer_count = ATC_BTSIZE_MAX;
+                       len = ATC_BTSIZE_MAX << src_width;
+               }
+               /* create the transfer */
+               desc = atc_desc_get(atchan);
+               if (!desc)
+                       goto err_desc_get;
+               desc->lli.saddr = src;
+               desc->lli.daddr = dst;
+               desc->lli.ctrla = ctrla | xfer_count;
+               desc->lli.ctrlb = ctrlb;
+               desc->txd.cookie = 0;
+               desc->len = len;
+               /*
+                * Although we only need the transfer width for the first and
+                * the last descriptor, its easier to set it to all descriptors.
+                */
+               desc->tx_width = src_width;
+               atc_desc_chain(&first, &prev, desc);
+               /* update the lengths and addresses for the next loop cycle */
+               dst_len -= len;
+               src_len -= len;
+               dst += len;
+               src += len;
+               total_len += len;
+       }
+       /* First descriptor of the chain embedds additional information */
+       first->txd.cookie = -EBUSY;
+       first->total_len = total_len;
+       /* set end-of-link to the last link descriptor of list*/
+       set_desc_eol(desc);
+       first->txd.flags = flags; /* client is in control of this ack */
+       return &first->txd;
+ err_desc_get:
+       atc_desc_put(atchan, first);
+       return NULL;
+ }
  /**
   * atc_dma_cyclic_check_values
   * Check for too big/unaligned periods and unaligned DMA buffer
@@@ -912,7 -1019,6 +1059,7 @@@ atc_dma_cyclic_fill_desc(struct dma_cha
                                | ATC_FC_MEM2PER
                                | ATC_SIF(atchan->mem_if)
                                | ATC_DIF(atchan->per_if);
 +              desc->len = period_len;
                break;
  
        case DMA_DEV_TO_MEM:
                                | ATC_FC_PER2MEM
                                | ATC_SIF(atchan->per_if)
                                | ATC_DIF(atchan->mem_if);
 +              desc->len = period_len;
                break;
  
        default:
@@@ -1006,7 -1111,7 +1153,7 @@@ atc_prep_dma_cyclic(struct dma_chan *ch
  
        /* First descriptor of the chain embedds additional information */
        first->txd.cookie = -EBUSY;
 -      first->len = buf_len;
 +      first->total_len = buf_len;
        first->tx_width = reg_width;
  
        return &first->txd;
@@@ -1160,7 -1265,7 +1307,7 @@@ atc_tx_status(struct dma_chan *chan
        spin_lock_irqsave(&atchan->lock, flags);
  
        /*  Get number of bytes left in the active transactions */
 -      bytes = atc_get_bytes_left(chan);
 +      bytes = atc_get_bytes_left(chan, cookie);
  
        spin_unlock_irqrestore(&atchan->lock, flags);
  
@@@ -1256,6 -1361,7 +1403,6 @@@ static int atc_alloc_chan_resources(str
  
        spin_lock_irqsave(&atchan->lock, flags);
        atchan->descs_allocated = i;
 -      atchan->remain_desc = 0;
        list_splice(&tmp_list, &atchan->free_list);
        dma_cookie_init(chan);
        spin_unlock_irqrestore(&atchan->lock, flags);
@@@ -1298,6 -1404,7 +1445,6 @@@ static void atc_free_chan_resources(str
        list_splice_init(&atchan->free_list, &list);
        atchan->descs_allocated = 0;
        atchan->status = 0;
 -      atchan->remain_desc = 0;
  
        dev_vdbg(chan2dev(chan), "free_chan_resources: done\n");
  }
@@@ -1461,8 -1568,10 +1608,10 @@@ static int __init at_dma_probe(struct p
  
        /* setup platform data for each SoC */
        dma_cap_set(DMA_MEMCPY, at91sam9rl_config.cap_mask);
+       dma_cap_set(DMA_SG, at91sam9rl_config.cap_mask);
        dma_cap_set(DMA_MEMCPY, at91sam9g45_config.cap_mask);
        dma_cap_set(DMA_SLAVE, at91sam9g45_config.cap_mask);
+       dma_cap_set(DMA_SG, at91sam9g45_config.cap_mask);
  
        /* get DMA parameters from controller type */
        plat_dat = at_dma_get_driver_data(pdev);
                atdma->dma_common.residue_granularity = DMA_RESIDUE_GRANULARITY_BURST;
        }
  
+       if (dma_has_cap(DMA_SG, atdma->dma_common.cap_mask))
+               atdma->dma_common.device_prep_dma_sg = atc_prep_dma_sg;
        dma_writel(atdma, EN, AT_DMA_ENABLE);
  
-       dev_info(&pdev->dev, "Atmel AHB DMA Controller ( %s%s), %d channels\n",
+       dev_info(&pdev->dev, "Atmel AHB DMA Controller ( %s%s%s), %d channels\n",
          dma_has_cap(DMA_MEMCPY, atdma->dma_common.cap_mask) ? "cpy " : "",
          dma_has_cap(DMA_SLAVE, atdma->dma_common.cap_mask)  ? "slave " : "",
+         dma_has_cap(DMA_SG, atdma->dma_common.cap_mask)  ? "sg-cpy " : "",
          plat_dat->nr_channels);
  
        dma_async_device_register(&atdma->dma_common);
diff --combined drivers/dma/at_xdmac.c
index d9891d3461f6fbd42f5cb85041147513ca07ba73,6d18abf88cb505c5fdcff9ef6c8227e93bc39e23..933e4b338459284465d7970e3ff7dbf0f37314b8
@@@ -664,6 -664,7 +664,6 @@@ at_xdmac_prep_dma_cyclic(struct dma_cha
        struct at_xdmac_desc    *first = NULL, *prev = NULL;
        unsigned int            periods = buf_len / period_len;
        int                     i;
 -      u32                     cfg;
  
        dev_dbg(chan2dev(chan), "%s: buf_addr=%pad, buf_len=%zd, period_len=%zd, dir=%s, flags=0x%lx\n",
                __func__, &buf_addr, buf_len, period_len,
                if (direction == DMA_DEV_TO_MEM) {
                        desc->lld.mbr_sa = atchan->per_src_addr;
                        desc->lld.mbr_da = buf_addr + i * period_len;
 -                      cfg = atchan->cfg[AT_XDMAC_DEV_TO_MEM_CFG];
 +                      desc->lld.mbr_cfg = atchan->cfg[AT_XDMAC_DEV_TO_MEM_CFG];
                } else {
                        desc->lld.mbr_sa = buf_addr + i * period_len;
                        desc->lld.mbr_da = atchan->per_dst_addr;
 -                      cfg = atchan->cfg[AT_XDMAC_MEM_TO_DEV_CFG];
 +                      desc->lld.mbr_cfg = atchan->cfg[AT_XDMAC_MEM_TO_DEV_CFG];
                }
                desc->lld.mbr_ubc = AT_XDMAC_MBR_UBC_NDV1
                        | AT_XDMAC_MBR_UBC_NDEN
                        | AT_XDMAC_MBR_UBC_NSEN
                        | AT_XDMAC_MBR_UBC_NDE
 -                      | period_len >> at_xdmac_get_dwidth(cfg);
 +                      | period_len >> at_xdmac_get_dwidth(desc->lld.mbr_cfg);
  
                dev_dbg(chan2dev(chan),
                         "%s: lld: mbr_sa=%pad, mbr_da=%pad, mbr_ubc=0x%08x\n",
@@@ -1154,8 -1155,10 +1154,10 @@@ static int at_xdmac_device_resume(struc
        dev_dbg(chan2dev(chan), "%s\n", __func__);
  
        spin_lock_bh(&atchan->lock);
-       if (!at_xdmac_chan_is_paused(atchan))
+       if (!at_xdmac_chan_is_paused(atchan)) {
+               spin_unlock_bh(&atchan->lock);
                return 0;
+       }
  
        at_xdmac_write(atxdmac, AT_XDMAC_GRWR, atchan->mask);
        clear_bit(AT_XDMAC_CHAN_IS_PAUSED, &atchan->status);
diff --combined drivers/dma/dma-jz4740.c
index 84884418fd30fc73a700bde9c0bebd67d72ea0a5,7497578c9cfc1089cf368199fdf9ed7a78051c89..7638b24ce8d0dac2672da6d4e83ce9956f054607
@@@ -7,10 -7,6 +7,6 @@@
   *  Free Software Foundation;  either version 2 of the License, or (at your
   *  option) any later version.
   *
-  *  You should have received a copy of the GNU General Public License along
-  *  with this program; if not, write to the Free Software Foundation, Inc.,
-  *  675 Mass Ave, Cambridge, MA 02139, USA.
-  *
   */
  
  #include <linux/dmaengine.h>
@@@ -343,7 -339,7 +339,7 @@@ static void jz4740_dma_chan_irq(struct 
  {
        spin_lock(&chan->vchan.lock);
        if (chan->desc) {
-               if (chan->desc && chan->desc->cyclic) {
+               if (chan->desc->cyclic) {
                        vchan_cyclic_callback(&chan->desc->vdesc);
                } else {
                        if (chan->next_sg == chan->desc->num_sgs) {
@@@ -496,11 -492,6 +492,6 @@@ static enum dma_status jz4740_dma_tx_st
        return status;
  }
  
- static int jz4740_dma_alloc_chan_resources(struct dma_chan *c)
- {
-       return 0;
- }
  static void jz4740_dma_free_chan_resources(struct dma_chan *c)
  {
        vchan_free_chan_resources(to_virt_chan(c));
@@@ -511,9 -502,6 +502,9 @@@ static void jz4740_dma_desc_free(struc
        kfree(container_of(vdesc, struct jz4740_dma_desc, vdesc));
  }
  
 +#define JZ4740_DMA_BUSWIDTHS (BIT(DMA_SLAVE_BUSWIDTH_1_BYTE) | \
 +      BIT(DMA_SLAVE_BUSWIDTH_2_BYTES) | BIT(DMA_SLAVE_BUSWIDTH_4_BYTES))
 +
  static int jz4740_dma_probe(struct platform_device *pdev)
  {
        struct jz4740_dmaengine_chan *chan;
  
        dma_cap_set(DMA_SLAVE, dd->cap_mask);
        dma_cap_set(DMA_CYCLIC, dd->cap_mask);
-       dd->device_alloc_chan_resources = jz4740_dma_alloc_chan_resources;
        dd->device_free_chan_resources = jz4740_dma_free_chan_resources;
        dd->device_tx_status = jz4740_dma_tx_status;
        dd->device_issue_pending = jz4740_dma_issue_pending;
        dd->device_prep_dma_cyclic = jz4740_dma_prep_dma_cyclic;
        dd->device_config = jz4740_dma_slave_config;
        dd->device_terminate_all = jz4740_dma_terminate_all;
 +      dd->src_addr_widths = JZ4740_DMA_BUSWIDTHS;
 +      dd->dst_addr_widths = JZ4740_DMA_BUSWIDTHS;
 +      dd->directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV);
 +      dd->residue_granularity = DMA_RESIDUE_GRANULARITY_BURST;
        dd->dev = &pdev->dev;
        INIT_LIST_HEAD(&dd->channels);
  
diff --combined drivers/dma/dmaengine.c
index ac336a961dea97be01894027b9f4bd16d5566bad,24967c89f5d47b583e06822989dbfcc9c918246e..0e035a8cf40146ccf191d3e26418dc04ed7da0b8
   * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
   * more details.
   *
-  * You should have received a copy of the GNU General Public License along with
-  * this program; if not, write to the Free Software Foundation, Inc., 59
-  * Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-  *
   * The full GNU General Public License is included in this distribution in the
   * file called COPYING.
   */
@@@ -354,20 -350,6 +350,6 @@@ struct dma_chan *dma_find_channel(enum 
        return this_cpu_read(channel_table[tx_type]->chan);
  }
  EXPORT_SYMBOL(dma_find_channel);
- /*
-  * net_dma_find_channel - find a channel for net_dma
-  * net_dma has alignment requirements
-  */
- struct dma_chan *net_dma_find_channel(void)
- {
-       struct dma_chan *chan = dma_find_channel(DMA_MEMCPY);
-       if (chan && !is_dma_copy_aligned(chan->device, 1, 1, 1))
-               return NULL;
-       return chan;
- }
- EXPORT_SYMBOL(net_dma_find_channel);
  
  /**
   * dma_issue_pending_all - flush all pending operations across all channels
@@@ -859,6 -841,9 +841,6 @@@ int dma_async_device_register(struct dm
        BUG_ON(!device->device_issue_pending);
        BUG_ON(!device->dev);
  
 -      WARN(dma_has_cap(DMA_SLAVE, device->cap_mask) && !device->directions,
 -           "this driver doesn't support generic slave capabilities reporting\n");
 -
        /* note: this only matters in the
         * CONFIG_ASYNC_TX_ENABLE_CHANNEL_SWITCH=n case
         */
diff --combined drivers/dma/dw/core.c
index a8ad05291b274498b55deef4bba88a2dbf1ffbd3,a1c078d8cc85bdbc9b549dbd8199f067eefb6548..1022c2e1a2b0adeac7e5954cd55363e2df7f7dab
@@@ -230,7 -230,8 +230,8 @@@ static void dwc_dostart(struct dw_dma_c
        /* ASSERT:  channel is idle */
        if (dma_readl(dw, CH_EN) & dwc->mask) {
                dev_err(chan2dev(&dwc->chan),
-                       "BUG: Attempted to start non-idle channel\n");
+                       "%s: BUG: Attempted to start non-idle channel\n",
+                       __func__);
                dwc_dump_chan_regs(dwc);
  
                /* The tasklet will hopefully advance the queue... */
@@@ -626,7 -627,7 +627,7 @@@ static irqreturn_t dw_dma_interrupt(in
        dev_vdbg(dw->dma.dev, "%s: status=0x%x\n", __func__, status);
  
        /* Check if we have any interrupt from the DMAC */
 -      if (!status)
 +      if (!status || !dw->in_use)
                return IRQ_NONE;
  
        /*
@@@ -814,11 -815,8 +815,8 @@@ dwc_prep_slave_sg(struct dma_chan *chan
  
  slave_sg_todev_fill_desc:
                        desc = dwc_desc_get(dwc);
-                       if (!desc) {
-                               dev_err(chan2dev(chan),
-                                       "not enough descriptors available\n");
+                       if (!desc)
                                goto err_desc_get;
-                       }
  
                        desc->lli.sar = mem;
                        desc->lli.dar = reg;
  
  slave_sg_fromdev_fill_desc:
                        desc = dwc_desc_get(dwc);
-                       if (!desc) {
-                               dev_err(chan2dev(chan),
-                                               "not enough descriptors available\n");
+                       if (!desc)
                                goto err_desc_get;
-                       }
  
                        desc->lli.sar = reg;
                        desc->lli.dar = mem;
        return &first->txd;
  
  err_desc_get:
+       dev_err(chan2dev(chan),
+               "not enough descriptors available. Direction %d\n", direction);
        dwc_desc_put(dwc, first);
        return NULL;
  }
@@@ -1261,7 -1258,8 +1258,8 @@@ int dw_dma_cyclic_start(struct dma_cha
        /* Assert channel is idle */
        if (dma_readl(dw, CH_EN) & dwc->mask) {
                dev_err(chan2dev(&dwc->chan),
-                       "BUG: Attempted to start non-idle channel\n");
+                       "%s: BUG: Attempted to start non-idle channel\n",
+                       __func__);
                dwc_dump_chan_regs(dwc);
                spin_unlock_irqrestore(&dwc->lock, flags);
                return -EBUSY;
diff --combined drivers/dma/edma.c
index 53dbd3b3384cfd8b00940f7a7cd752b28bcac71a,0ea813d98998d93b7d2ee0fdc5d82d407be5538b..bf09db7ca9ee9c691bcb59888575d2679b4ddd3e
@@@ -260,13 -260,6 +260,13 @@@ static int edma_terminate_all(struct dm
         */
        if (echan->edesc) {
                int cyclic = echan->edesc->cyclic;
 +
 +              /*
 +               * free the running request descriptor
 +               * since it is not in any of the vdesc lists
 +               */
 +              edma_desc_free(&echan->edesc->vdesc);
 +
                echan->edesc = NULL;
                edma_stop(echan->ch_num);
                /* Move the cyclic channel back to default queue */
@@@ -812,7 -805,7 +812,7 @@@ static int edma_alloc_chan_resources(st
        LIST_HEAD(descs);
  
        a_ch_num = edma_alloc_channel(echan->ch_num, edma_callback,
-                                       chan, EVENTQ_DEFAULT);
+                                       echan, EVENTQ_DEFAULT);
  
        if (a_ch_num < 0) {
                ret = -ENODEV;
diff --combined drivers/dma/imx-sdma.c
index 66a0efb9651d3d8f3240701fafe2299b9abca598,eb10109c55ad39c292f244bb7b7a107b86cb2e16..62bbd79338e05e26d37ead9cf0a78dbfefb84c2b
@@@ -531,10 -531,6 +531,10 @@@ static int sdma_run_channel0(struct sdm
                dev_err(sdma->dev, "Timeout waiting for CH0 ready\n");
        }
  
 +      /* Set bits of CONFIG register with dynamic context switching */
 +      if (readl(sdma->regs + SDMA_H_CONFIG) == 0)
 +              writel_relaxed(SDMA_H_CONFIG_CSM, sdma->regs + SDMA_H_CONFIG);
 +
        return ret ? 0 : -ETIMEDOUT;
  }
  
@@@ -1260,6 -1256,7 +1260,7 @@@ static void sdma_issue_pending(struct d
  
  #define SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V1       34
  #define SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V2       38
+ #define SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V3       41
  
  static void sdma_add_scripts(struct sdma_engine *sdma,
                const struct sdma_script_start_addrs *addr)
@@@ -1306,6 -1303,9 +1307,9 @@@ static void sdma_load_firmware(const st
        case 2:
                sdma->script_number = SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V2;
                break;
+       case 3:
+               sdma->script_number = SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V3;
+               break;
        default:
                dev_err(sdma->dev, "unknown firmware version\n");
                goto err_firmware;
@@@ -1398,6 -1398,9 +1402,6 @@@ static int sdma_init(struct sdma_engin
  
        writel_relaxed(ccb_phys, sdma->regs + SDMA_H_C0PTR);
  
 -      /* Set bits of CONFIG register with given context switching mode */
 -      writel_relaxed(SDMA_H_CONFIG_CSM, sdma->regs + SDMA_H_CONFIG);
 -
        /* Initializes channel's priorities */
        sdma_set_channel_priority(&sdma->channel[0], 7);
  
index 194ec20c940841c9b0de473ac43417f4235c0482,3d19a3187a7751e337926abfdc9603fcf661358b..64790a45ef5d8aed5bf8abbaa14a7b276f89e2de
   * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
   * more details.
   *
-  * You should have received a copy of the GNU General Public License along with
-  * this program; if not, write to the Free Software Foundation, Inc.,
-  * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
-  *
   * The full GNU General Public License is included in this distribution in
   * the file called "COPYING".
   *
@@@ -230,10 -226,6 +226,10 @@@ static bool is_bwd_noraid(struct pci_de
        switch (pdev->device) {
        case PCI_DEVICE_ID_INTEL_IOAT_BWD2:
        case PCI_DEVICE_ID_INTEL_IOAT_BWD3:
 +      case PCI_DEVICE_ID_INTEL_IOAT_BDXDE0:
 +      case PCI_DEVICE_ID_INTEL_IOAT_BDXDE1:
 +      case PCI_DEVICE_ID_INTEL_IOAT_BDXDE2:
 +      case PCI_DEVICE_ID_INTEL_IOAT_BDXDE3:
                return true;
        default:
                return false;
diff --combined drivers/dma/mmp_pdma.c
index eb410044e1af5415f4aa1aad48f7564588be1bb1,4c4cda98072bd34a3cccafdf2ff94a801c25f80b..462a0229a743099253ee06a479ff41b2a855e5e9
@@@ -219,9 -219,6 +219,9 @@@ static irqreturn_t mmp_pdma_int_handler
  
        while (dint) {
                i = __ffs(dint);
 +              /* only handle interrupts belonging to pdma driver*/
 +              if (i >= pdev->dma_channels)
 +                      break;
                dint &= (dint - 1);
                phy = &pdev->phy[i];
                ret = mmp_pdma_chan_handler(irq, phy);
@@@ -973,7 -970,7 +973,7 @@@ static int mmp_pdma_chan_init(struct mm
        return 0;
  }
  
- static struct of_device_id mmp_pdma_dt_ids[] = {
+ static const struct of_device_id mmp_pdma_dt_ids[] = {
        { .compatible = "marvell,pdma-1.0", },
        {}
  };
@@@ -1002,9 -999,6 +1002,9 @@@ static int mmp_pdma_probe(struct platfo
        struct resource *iores;
        int i, ret, irq = 0;
        int dma_channels = 0, irq_num = 0;
 +      const enum dma_slave_buswidth widths =
 +              DMA_SLAVE_BUSWIDTH_1_BYTE   | DMA_SLAVE_BUSWIDTH_2_BYTES |
 +              DMA_SLAVE_BUSWIDTH_4_BYTES;
  
        pdev = devm_kzalloc(&op->dev, sizeof(*pdev), GFP_KERNEL);
        if (!pdev)
        pdev->device.device_config = mmp_pdma_config;
        pdev->device.device_terminate_all = mmp_pdma_terminate_all;
        pdev->device.copy_align = PDMA_ALIGNMENT;
 +      pdev->device.src_addr_widths = widths;
 +      pdev->device.dst_addr_widths = widths;
 +      pdev->device.directions = BIT(DMA_MEM_TO_DEV) | BIT(DMA_DEV_TO_MEM);
 +      pdev->device.residue_granularity = DMA_RESIDUE_GRANULARITY_DESCRIPTOR;
  
        if (pdev->dev->coherent_dma_mask)
                dma_set_mask(pdev->dev, pdev->dev->coherent_dma_mask);
diff --combined drivers/dma/mmp_tdma.c
index b6f4e1fc9c784cc0a3fce3d76877774760cd8c59,bc7bc5329ca58581b48dbf439a2e81af15b174d3..449e785def17d2af759a4b82e1a0b5723b85d4ca
@@@ -110,7 -110,7 +110,7 @@@ struct mmp_tdma_chan 
        struct tasklet_struct           tasklet;
  
        struct mmp_tdma_desc            *desc_arr;
 -      phys_addr_t                     desc_arr_phys;
 +      dma_addr_t                      desc_arr_phys;
        int                             desc_num;
        enum dma_transfer_direction     dir;
        dma_addr_t                      dev_addr;
@@@ -166,12 -166,9 +166,12 @@@ static void mmp_tdma_enable_chan(struc
  static int mmp_tdma_disable_chan(struct dma_chan *chan)
  {
        struct mmp_tdma_chan *tdmac = to_mmp_tdma_chan(chan);
 +      u32 tdcr;
  
 -      writel(readl(tdmac->reg_base + TDCR) & ~TDCR_CHANEN,
 -                                      tdmac->reg_base + TDCR);
 +      tdcr = readl(tdmac->reg_base + TDCR);
 +      tdcr |= TDCR_ABR;
 +      tdcr &= ~TDCR_CHANEN;
 +      writel(tdcr, tdmac->reg_base + TDCR);
  
        tdmac->status = DMA_COMPLETE;
  
@@@ -299,27 -296,12 +299,27 @@@ static int mmp_tdma_clear_chan_irq(stru
        return -EAGAIN;
  }
  
 +static size_t mmp_tdma_get_pos(struct mmp_tdma_chan *tdmac)
 +{
 +      size_t reg;
 +
 +      if (tdmac->idx == 0) {
 +              reg = __raw_readl(tdmac->reg_base + TDSAR);
 +              reg -= tdmac->desc_arr[0].src_addr;
 +      } else if (tdmac->idx == 1) {
 +              reg = __raw_readl(tdmac->reg_base + TDDAR);
 +              reg -= tdmac->desc_arr[0].dst_addr;
 +      } else
 +              return -EINVAL;
 +
 +      return reg;
 +}
 +
  static irqreturn_t mmp_tdma_chan_handler(int irq, void *dev_id)
  {
        struct mmp_tdma_chan *tdmac = dev_id;
  
        if (mmp_tdma_clear_chan_irq(tdmac) == 0) {
 -              tdmac->pos = (tdmac->pos + tdmac->period_len) % tdmac->buf_len;
                tasklet_schedule(&tdmac->tasklet);
                return IRQ_HANDLED;
        } else
@@@ -361,7 -343,7 +361,7 @@@ static void mmp_tdma_free_descriptor(st
        int size = tdmac->desc_num * sizeof(struct mmp_tdma_desc);
  
        gpool = tdmac->pool;
 -      if (tdmac->desc_arr)
 +      if (gpool && tdmac->desc_arr)
                gen_pool_free(gpool, (unsigned long)tdmac->desc_arr,
                                size);
        tdmac->desc_arr = NULL;
@@@ -517,7 -499,6 +517,7 @@@ static enum dma_status mmp_tdma_tx_stat
  {
        struct mmp_tdma_chan *tdmac = to_mmp_tdma_chan(chan);
  
 +      tdmac->pos = mmp_tdma_get_pos(tdmac);
        dma_set_tx_state(txstate, chan->completed_cookie, chan->cookie,
                         tdmac->buf_len - tdmac->pos);
  
@@@ -613,7 -594,7 +613,7 @@@ struct dma_chan *mmp_tdma_xlate(struct 
        return dma_request_channel(mask, mmp_tdma_filter_fn, &param);
  }
  
- static struct of_device_id mmp_tdma_dt_ids[] = {
+ static const struct of_device_id mmp_tdma_dt_ids[] = {
        { .compatible = "marvell,adma-1.0", .data = (void *)MMP_AUD_TDMA},
        { .compatible = "marvell,pxa910-squ", .data = (void *)PXA910_SQU},
        {}
@@@ -629,7 -610,7 +629,7 @@@ static int mmp_tdma_probe(struct platfo
        int i, ret;
        int irq = 0, irq_num = 0;
        int chan_num = TDMA_CHANNEL_NUM;
 -      struct gen_pool *pool;
 +      struct gen_pool *pool = NULL;
  
        of_id = of_match_device(mmp_tdma_dt_ids, &pdev->dev);
        if (of_id)
index 9c914d62590626fb8f407d7f0bed63b27c37a4f1,1576cd97d4d8708ada4179cd7e0a921e188325f9..5a250cdc83769f0d4aaff65530c76b705a474e25
@@@ -162,15 -162,44 +162,44 @@@ static const struct reg_offset_data bam
        [BAM_P_IRQ_STTS]        = { 0x1010, 0x1000, 0x00, 0x00 },
        [BAM_P_IRQ_CLR]         = { 0x1014, 0x1000, 0x00, 0x00 },
        [BAM_P_IRQ_EN]          = { 0x1018, 0x1000, 0x00, 0x00 },
 -      [BAM_P_EVNT_DEST_ADDR]  = { 0x102C, 0x00, 0x1000, 0x00 },
 -      [BAM_P_EVNT_REG]        = { 0x1018, 0x00, 0x1000, 0x00 },
 -      [BAM_P_SW_OFSTS]        = { 0x1000, 0x00, 0x1000, 0x00 },
 +      [BAM_P_EVNT_DEST_ADDR]  = { 0x182C, 0x00, 0x1000, 0x00 },
 +      [BAM_P_EVNT_REG]        = { 0x1818, 0x00, 0x1000, 0x00 },
 +      [BAM_P_SW_OFSTS]        = { 0x1800, 0x00, 0x1000, 0x00 },
        [BAM_P_DATA_FIFO_ADDR]  = { 0x1824, 0x00, 0x1000, 0x00 },
        [BAM_P_DESC_FIFO_ADDR]  = { 0x181C, 0x00, 0x1000, 0x00 },
        [BAM_P_EVNT_GEN_TRSHLD] = { 0x1828, 0x00, 0x1000, 0x00 },
        [BAM_P_FIFO_SIZES]      = { 0x1820, 0x00, 0x1000, 0x00 },
  };
  
+ static const struct reg_offset_data bam_v1_7_reg_info[] = {
+       [BAM_CTRL]              = { 0x00000, 0x00, 0x00, 0x00 },
+       [BAM_REVISION]          = { 0x01000, 0x00, 0x00, 0x00 },
+       [BAM_NUM_PIPES]         = { 0x01008, 0x00, 0x00, 0x00 },
+       [BAM_DESC_CNT_TRSHLD]   = { 0x00008, 0x00, 0x00, 0x00 },
+       [BAM_IRQ_SRCS]          = { 0x03010, 0x00, 0x00, 0x00 },
+       [BAM_IRQ_SRCS_MSK]      = { 0x03014, 0x00, 0x00, 0x00 },
+       [BAM_IRQ_SRCS_UNMASKED] = { 0x03018, 0x00, 0x00, 0x00 },
+       [BAM_IRQ_STTS]          = { 0x00014, 0x00, 0x00, 0x00 },
+       [BAM_IRQ_CLR]           = { 0x00018, 0x00, 0x00, 0x00 },
+       [BAM_IRQ_EN]            = { 0x0001C, 0x00, 0x00, 0x00 },
+       [BAM_CNFG_BITS]         = { 0x0007C, 0x00, 0x00, 0x00 },
+       [BAM_IRQ_SRCS_EE]       = { 0x03000, 0x00, 0x00, 0x1000 },
+       [BAM_IRQ_SRCS_MSK_EE]   = { 0x03004, 0x00, 0x00, 0x1000 },
+       [BAM_P_CTRL]            = { 0x13000, 0x1000, 0x00, 0x00 },
+       [BAM_P_RST]             = { 0x13004, 0x1000, 0x00, 0x00 },
+       [BAM_P_HALT]            = { 0x13008, 0x1000, 0x00, 0x00 },
+       [BAM_P_IRQ_STTS]        = { 0x13010, 0x1000, 0x00, 0x00 },
+       [BAM_P_IRQ_CLR]         = { 0x13014, 0x1000, 0x00, 0x00 },
+       [BAM_P_IRQ_EN]          = { 0x13018, 0x1000, 0x00, 0x00 },
+       [BAM_P_EVNT_DEST_ADDR]  = { 0x1382C, 0x00, 0x1000, 0x00 },
+       [BAM_P_EVNT_REG]        = { 0x13818, 0x00, 0x1000, 0x00 },
+       [BAM_P_SW_OFSTS]        = { 0x13800, 0x00, 0x1000, 0x00 },
+       [BAM_P_DATA_FIFO_ADDR]  = { 0x13824, 0x00, 0x1000, 0x00 },
+       [BAM_P_DESC_FIFO_ADDR]  = { 0x1381C, 0x00, 0x1000, 0x00 },
+       [BAM_P_EVNT_GEN_TRSHLD] = { 0x13828, 0x00, 0x1000, 0x00 },
+       [BAM_P_FIFO_SIZES]      = { 0x13820, 0x00, 0x1000, 0x00 },
+ };
  /* BAM CTRL */
  #define BAM_SW_RST                    BIT(0)
  #define BAM_EN                                BIT(1)
@@@ -1051,6 -1080,7 +1080,7 @@@ static void bam_channel_init(struct bam
  static const struct of_device_id bam_of_match[] = {
        { .compatible = "qcom,bam-v1.3.0", .data = &bam_v1_3_reg_info },
        { .compatible = "qcom,bam-v1.4.0", .data = &bam_v1_4_reg_info },
+       { .compatible = "qcom,bam-v1.7.0", .data = &bam_v1_7_reg_info },
        {}
  };
  
@@@ -1113,7 -1143,7 +1143,7 @@@ static int bam_dma_probe(struct platfor
  
        if (!bdev->channels) {
                ret = -ENOMEM;
-               goto err_disable_clk;
+               goto err_tasklet_kill;
        }
  
        /* allocate and initialize channels */
        ret = devm_request_irq(bdev->dev, bdev->irq, bam_dma_irq,
                        IRQF_TRIGGER_HIGH, "bam_dma", bdev);
        if (ret)
-               goto err_disable_clk;
+               goto err_bam_channel_exit;
  
        /* set max dma segment size */
        bdev->common.dev = bdev->dev;
        ret = dma_set_max_seg_size(bdev->common.dev, BAM_MAX_DATA_SIZE);
        if (ret) {
                dev_err(bdev->dev, "cannot set maximum segment size\n");
-               goto err_disable_clk;
+               goto err_bam_channel_exit;
        }
  
        platform_set_drvdata(pdev, bdev);
        dma_cap_set(DMA_SLAVE, bdev->common.cap_mask);
  
        /* initialize dmaengine apis */
 +      bdev->common.directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV);
 +      bdev->common.residue_granularity = DMA_RESIDUE_GRANULARITY_SEGMENT;
 +      bdev->common.src_addr_widths = DMA_SLAVE_BUSWIDTH_4_BYTES;
 +      bdev->common.dst_addr_widths = DMA_SLAVE_BUSWIDTH_4_BYTES;
        bdev->common.device_alloc_chan_resources = bam_alloc_chan;
        bdev->common.device_free_chan_resources = bam_free_chan;
        bdev->common.device_prep_slave_sg = bam_prep_slave_sg;
        ret = dma_async_device_register(&bdev->common);
        if (ret) {
                dev_err(bdev->dev, "failed to register dma async device\n");
-               goto err_disable_clk;
+               goto err_bam_channel_exit;
        }
  
        ret = of_dma_controller_register(pdev->dev.of_node, bam_dma_xlate,
  
  err_unregister_dma:
        dma_async_device_unregister(&bdev->common);
+ err_bam_channel_exit:
+       for (i = 0; i < bdev->num_channels; i++)
+               tasklet_kill(&bdev->channels[i].vc.task);
+ err_tasklet_kill:
+       tasklet_kill(&bdev->task);
  err_disable_clk:
        clk_disable_unprepare(bdev->bamclk);
        return ret;
  }
  
diff --combined drivers/dma/sh/shdmac.c
index 9f1d4c7dbab8389039e4ae1da636ca13521314ee,1858259f3be434cc721c104adddcd74efd7b60b3..11707df1a68944979c99579605c0afcd25a41364
@@@ -443,7 -443,7 +443,7 @@@ static bool sh_dmae_reset(struct sh_dma
        return ret;
  }
  
- #if defined(CONFIG_CPU_SH4) || defined(CONFIG_ARM)
+ #if defined(CONFIG_CPU_SH4) || defined(CONFIG_ARCH_SHMOBILE)
  static irqreturn_t sh_dmae_err(int irq, void *data)
  {
        struct sh_dmae_device *shdev = data;
@@@ -582,12 -582,15 +582,12 @@@ static void sh_dmae_chan_remove(struct 
        }
  }
  
 -static void sh_dmae_shutdown(struct platform_device *pdev)
 -{
 -      struct sh_dmae_device *shdev = platform_get_drvdata(pdev);
 -      sh_dmae_ctl_stop(shdev);
 -}
 -
  #ifdef CONFIG_PM
  static int sh_dmae_runtime_suspend(struct device *dev)
  {
 +      struct sh_dmae_device *shdev = dev_get_drvdata(dev);
 +
 +      sh_dmae_ctl_stop(shdev);
        return 0;
  }
  
@@@ -602,9 -605,6 +602,9 @@@ static int sh_dmae_runtime_resume(struc
  #ifdef CONFIG_PM_SLEEP
  static int sh_dmae_suspend(struct device *dev)
  {
 +      struct sh_dmae_device *shdev = dev_get_drvdata(dev);
 +
 +      sh_dmae_ctl_stop(shdev);
        return 0;
  }
  
@@@ -689,7 -689,7 +689,7 @@@ static int sh_dmae_probe(struct platfor
        const struct sh_dmae_pdata *pdata;
        unsigned long chan_flag[SH_DMAE_MAX_CHANNELS] = {};
        int chan_irq[SH_DMAE_MAX_CHANNELS];
- #if defined(CONFIG_CPU_SH4) || defined(CONFIG_ARM)
+ #if defined(CONFIG_CPU_SH4) || defined(CONFIG_ARCH_SHMOBILE)
        unsigned long irqflags = 0;
        int errirq;
  #endif
@@@ -929,12 -929,13 +929,12 @@@ static int sh_dmae_remove(struct platfo
  }
  
  static struct platform_driver sh_dmae_driver = {
 -      .driver         = {
 +      .driver         = {
                .pm     = &sh_dmae_pm,
                .name   = SH_DMAE_DRV_NAME,
                .of_match_table = sh_dmae_of_match,
        },
        .remove         = sh_dmae_remove,
 -      .shutdown       = sh_dmae_shutdown,
  };
  
  static int __init sh_dmae_init(void)
diff --combined drivers/dma/ste_dma40.c
index 1332b1d4d541cb37c99f4a4ada988f3cbaee0f7f,75faaeac197d8f84b5f11c9e91d17bc33f30febf..3c10f034d4b935490113a7f8471ff08053cf7c3c
@@@ -2514,7 -2514,8 +2514,8 @@@ static struct dma_async_tx_descriptor *
        sg_dma_len(&dst_sg) = size;
        sg_dma_len(&src_sg) = size;
  
-       return d40_prep_sg(chan, &src_sg, &dst_sg, 1, DMA_NONE, dma_flags);
+       return d40_prep_sg(chan, &src_sg, &dst_sg, 1,
+                          DMA_MEM_TO_MEM, dma_flags);
  }
  
  static struct dma_async_tx_descriptor *
@@@ -2526,7 -2527,8 +2527,8 @@@ d40_prep_memcpy_sg(struct dma_chan *cha
        if (dst_nents != src_nents)
                return NULL;
  
-       return d40_prep_sg(chan, src_sg, dst_sg, src_nents, DMA_NONE, dma_flags);
+       return d40_prep_sg(chan, src_sg, dst_sg, src_nents,
+                          DMA_MEM_TO_MEM, dma_flags);
  }
  
  static struct dma_async_tx_descriptor *
@@@ -3548,7 -3550,7 +3550,7 @@@ static int __init d40_probe(struct plat
  
        if (!plat_data) {
                if (np) {
 -                      if(d40_of_probe(pdev, np)) {
 +                      if (d40_of_probe(pdev, np)) {
                                ret = -ENOMEM;
                                goto failure;
                        }
index 072f67066df38e8d60d4eb0d1f5bc656947fa1fa,26b7889febb2760c40738f9af35965c00dcc2f95..2b6ef6bd5d5fee1c3277c4970549da294b4706da
@@@ -388,7 -388,7 +388,7 @@@ sh_mmcif_request_dma_one(struct sh_mmci
  {
        struct dma_slave_config cfg = { 0, };
        struct dma_chan *chan;
-       unsigned int slave_id;
+       void *slave_data = NULL;
        struct resource *res;
        dma_cap_mask_t mask;
        int ret;
        dma_cap_set(DMA_SLAVE, mask);
  
        if (pdata)
-               slave_id = direction == DMA_MEM_TO_DEV
-                        ? pdata->slave_id_tx : pdata->slave_id_rx;
-       else
-               slave_id = 0;
+               slave_data = direction == DMA_MEM_TO_DEV ?
+                       (void *)pdata->slave_id_tx :
+                       (void *)pdata->slave_id_rx;
  
        chan = dma_request_slave_channel_compat(mask, shdma_chan_filter,
-                               (void *)(unsigned long)slave_id, &host->pd->dev,
+                               slave_data, &host->pd->dev,
                                direction == DMA_MEM_TO_DEV ? "tx" : "rx");
  
        dev_dbg(&host->pd->dev, "%s: %s: got channel %p\n", __func__,
  
        res = platform_get_resource(host->pd, IORESOURCE_MEM, 0);
  
-       /* In the OF case the driver will get the slave ID from the DT */
-       cfg.slave_id = slave_id;
        cfg.direction = direction;
  
        if (direction == DMA_DEV_TO_MEM) {
@@@ -875,7 -872,6 +872,7 @@@ static void sh_mmcif_start_cmd(struct s
        struct mmc_command *cmd = mrq->cmd;
        u32 opc = cmd->opcode;
        u32 mask;
 +      unsigned long flags;
  
        switch (opc) {
        /* response busy check */
        /* set arg */
        sh_mmcif_writel(host->addr, MMCIF_CE_ARG, cmd->arg);
        /* set cmd */
 +      spin_lock_irqsave(&host->lock, flags);
        sh_mmcif_writel(host->addr, MMCIF_CE_CMD_SET, opc);
  
        host->wait_for = MMCIF_WAIT_FOR_CMD;
        schedule_delayed_work(&host->timeout_work, host->timeout);
 +      spin_unlock_irqrestore(&host->lock, flags);
  }
  
  static void sh_mmcif_stop_cmd(struct sh_mmcif_host *host,
@@@ -1174,12 -1168,6 +1171,12 @@@ static irqreturn_t sh_mmcif_irqt(int ir
        struct sh_mmcif_host *host = dev_id;
        struct mmc_request *mrq;
        bool wait = false;
 +      unsigned long flags;
 +      int wait_work;
 +
 +      spin_lock_irqsave(&host->lock, flags);
 +      wait_work = host->wait_for;
 +      spin_unlock_irqrestore(&host->lock, flags);
  
        cancel_delayed_work_sync(&host->timeout_work);
  
         * All handlers return true, if processing continues, and false, if the
         * request has to be completed - successfully or not
         */
 -      switch (host->wait_for) {
 +      switch (wait_work) {
        case MMCIF_WAIT_FOR_REQUEST:
                /* We're too late, the timeout has already kicked in */
                mutex_unlock(&host->thread_lock);
@@@ -1321,15 -1309,15 +1318,15 @@@ static void mmcif_timeout_work(struct w
                /* Don't run after mmc_remove_host() */
                return;
  
 -      dev_err(&host->pd->dev, "Timeout waiting for %u on CMD%u\n",
 -              host->wait_for, mrq->cmd->opcode);
 -
        spin_lock_irqsave(&host->lock, flags);
        if (host->state == STATE_IDLE) {
                spin_unlock_irqrestore(&host->lock, flags);
                return;
        }
  
 +      dev_err(&host->pd->dev, "Timeout waiting for %u on CMD%u\n",
 +              host->wait_for, mrq->cmd->opcode);
 +
        host->state = STATE_TIMEOUT;
        spin_unlock_irqrestore(&host->lock, flags);
  
diff --combined drivers/spi/spi-rspi.c
index 186924aa4740e758af2075f417745487825b6163,3f4110628474def7a841633ba3ce0ebc07d12537..f6bac9e77d067390f29584595b2a219b69e749e4
  #define SPBFCR_RXRST          0x40    /* Receive Buffer Data Reset */
  #define SPBFCR_TXTRG_MASK     0x30    /* Transmit Buffer Data Triggering Number */
  #define SPBFCR_RXTRG_MASK     0x07    /* Receive Buffer Data Triggering Number */
 +/* QSPI on R-Car Gen2 */
 +#define SPBFCR_TXTRG_1B               0x00    /* 31 bytes (1 byte available) */
 +#define SPBFCR_TXTRG_32B      0x30    /* 0 byte (32 bytes available) */
 +#define SPBFCR_RXTRG_1B               0x00    /* 1 byte (31 bytes available) */
 +#define SPBFCR_RXTRG_32B      0x07    /* 32 bytes (0 byte available) */
 +
 +#define QSPI_BUFFER_SIZE        32u
  
  struct rspi_data {
        void __iomem *addr;
@@@ -373,52 -366,6 +373,52 @@@ static int qspi_set_config_register(str
        return 0;
  }
  
 +static void qspi_update(const struct rspi_data *rspi, u8 mask, u8 val, u8 reg)
 +{
 +      u8 data;
 +
 +      data = rspi_read8(rspi, reg);
 +      data &= ~mask;
 +      data |= (val & mask);
 +      rspi_write8(rspi, data, reg);
 +}
 +
 +static int qspi_set_send_trigger(struct rspi_data *rspi, unsigned int len)
 +{
 +      unsigned int n;
 +
 +      n = min(len, QSPI_BUFFER_SIZE);
 +
 +      if (len >= QSPI_BUFFER_SIZE) {
 +              /* sets triggering number to 32 bytes */
 +              qspi_update(rspi, SPBFCR_TXTRG_MASK,
 +                           SPBFCR_TXTRG_32B, QSPI_SPBFCR);
 +      } else {
 +              /* sets triggering number to 1 byte */
 +              qspi_update(rspi, SPBFCR_TXTRG_MASK,
 +                           SPBFCR_TXTRG_1B, QSPI_SPBFCR);
 +      }
 +
 +      return n;
 +}
 +
 +static void qspi_set_receive_trigger(struct rspi_data *rspi, unsigned int len)
 +{
 +      unsigned int n;
 +
 +      n = min(len, QSPI_BUFFER_SIZE);
 +
 +      if (len >= QSPI_BUFFER_SIZE) {
 +              /* sets triggering number to 32 bytes */
 +              qspi_update(rspi, SPBFCR_RXTRG_MASK,
 +                           SPBFCR_RXTRG_32B, QSPI_SPBFCR);
 +      } else {
 +              /* sets triggering number to 1 byte */
 +              qspi_update(rspi, SPBFCR_RXTRG_MASK,
 +                           SPBFCR_RXTRG_1B, QSPI_SPBFCR);
 +      }
 +}
 +
  #define set_config_register(spi, n) spi->ops->set_config_register(spi, n)
  
  static void rspi_enable_irq(const struct rspi_data *rspi, u8 enable)
@@@ -662,29 -609,19 +662,29 @@@ static bool rspi_can_dma(struct spi_mas
        return __rspi_can_dma(rspi, xfer);
  }
  
 -static int rspi_common_transfer(struct rspi_data *rspi,
 -                              struct spi_transfer *xfer)
 +static int rspi_dma_check_then_transfer(struct rspi_data *rspi,
 +                                       struct spi_transfer *xfer)
  {
 -      int ret;
 -
        if (rspi->master->can_dma && __rspi_can_dma(rspi, xfer)) {
                /* rx_buf can be NULL on RSPI on SH in TX-only Mode */
 -              ret = rspi_dma_transfer(rspi, &xfer->tx_sg,
 +              int ret = rspi_dma_transfer(rspi, &xfer->tx_sg,
                                        xfer->rx_buf ? &xfer->rx_sg : NULL);
                if (ret != -EAGAIN)
 -                      return ret;
 +                      return 0;
        }
  
 +      return -EAGAIN;
 +}
 +
 +static int rspi_common_transfer(struct rspi_data *rspi,
 +                              struct spi_transfer *xfer)
 +{
 +      int ret;
 +
 +      ret = rspi_dma_check_then_transfer(rspi, xfer);
 +      if (ret != -EAGAIN)
 +              return ret;
 +
        ret = rspi_pio_transfer(rspi, xfer->tx_buf, xfer->rx_buf, xfer->len);
        if (ret < 0)
                return ret;
@@@ -724,59 -661,12 +724,59 @@@ static int rspi_rz_transfer_one(struct 
        return rspi_common_transfer(rspi, xfer);
  }
  
 +static int qspi_trigger_transfer_out_int(struct rspi_data *rspi, const u8 *tx,
 +                                      u8 *rx, unsigned int len)
 +{
 +      int i, n, ret;
 +      int error;
 +
 +      while (len > 0) {
 +              n = qspi_set_send_trigger(rspi, len);
 +              qspi_set_receive_trigger(rspi, len);
 +              if (n == QSPI_BUFFER_SIZE) {
 +                      error = rspi_wait_for_tx_empty(rspi);
 +                      if (error < 0) {
 +                              dev_err(&rspi->master->dev, "transmit timeout\n");
 +                              return error;
 +                      }
 +                      for (i = 0; i < n; i++)
 +                              rspi_write_data(rspi, *tx++);
 +
 +                      error = rspi_wait_for_rx_full(rspi);
 +                      if (error < 0) {
 +                              dev_err(&rspi->master->dev, "receive timeout\n");
 +                              return error;
 +                      }
 +                      for (i = 0; i < n; i++)
 +                              *rx++ = rspi_read_data(rspi);
 +              } else {
 +                      ret = rspi_pio_transfer(rspi, tx, rx, n);
 +                      if (ret < 0)
 +                              return ret;
 +              }
 +              len -= n;
 +      }
 +
 +      return 0;
 +}
 +
  static int qspi_transfer_out_in(struct rspi_data *rspi,
                                struct spi_transfer *xfer)
  {
 +      int ret;
 +
        qspi_receive_init(rspi);
  
 -      return rspi_common_transfer(rspi, xfer);
 +      ret = rspi_dma_check_then_transfer(rspi, xfer);
 +      if (ret != -EAGAIN)
 +              return ret;
 +
 +      ret = qspi_trigger_transfer_out_int(rspi, xfer->tx_buf,
 +                                          xfer->rx_buf, xfer->len);
 +      if (ret < 0)
 +              return ret;
 +
 +      return 0;
  }
  
  static int qspi_transfer_out(struct rspi_data *rspi, struct spi_transfer *xfer)
@@@ -1023,7 -913,6 +1023,6 @@@ static struct dma_chan *rspi_request_dm
        }
  
        memset(&cfg, 0, sizeof(cfg));
-       cfg.slave_id = id;
        cfg.direction = dir;
        if (dir == DMA_MEM_TO_DEV) {
                cfg.dst_addr = port_addr;
diff --combined sound/soc/sh/fsi.c
index 0c2af21b0b82513176ac841ae8e394cd6711eead,bb20550b007cba3d419f99c773cf91cb4a21fd08..142c066eaee2ecb13dcfbee6ac01b076ce52894c
@@@ -250,6 -250,7 +250,7 @@@ struct fsi_clk 
  
  struct fsi_priv {
        void __iomem *base;
+       phys_addr_t phys;
        struct fsi_master *master;
  
        struct fsi_stream playback;
@@@ -1371,13 -1372,18 +1372,18 @@@ static int fsi_dma_probe(struct fsi_pri
                                shdma_chan_filter, (void *)io->dma_id,
                                dev, is_play ? "tx" : "rx");
        if (io->chan) {
-               struct dma_slave_config cfg;
+               struct dma_slave_config cfg = {};
                int ret;
  
-               cfg.slave_id    = io->dma_id;
-               cfg.dst_addr    = 0; /* use default addr */
-               cfg.src_addr    = 0; /* use default addr */
-               cfg.direction   = is_play ? DMA_MEM_TO_DEV : DMA_DEV_TO_MEM;
+               if (is_play) {
+                       cfg.dst_addr            = fsi->phys + REG_DODT;
+                       cfg.dst_addr_width      = DMA_SLAVE_BUSWIDTH_4_BYTES;
+                       cfg.direction           = DMA_MEM_TO_DEV;
+               } else {
+                       cfg.src_addr            = fsi->phys + REG_DIDT;
+                       cfg.src_addr_width      = DMA_SLAVE_BUSWIDTH_4_BYTES;
+                       cfg.direction           = DMA_DEV_TO_MEM;
+               }
  
                ret = dmaengine_slave_config(io->chan, &cfg);
                if (ret < 0) {
@@@ -1876,40 -1882,7 +1882,40 @@@ static void fsi_handler_init(struct fsi
        }
  }
  
 -static struct of_device_id fsi_of_match[];
 +static const struct fsi_core fsi1_core = {
 +      .ver    = 1,
 +
 +      /* Interrupt */
 +      .int_st = INT_ST,
 +      .iemsk  = IEMSK,
 +      .imsk   = IMSK,
 +};
 +
 +static const struct fsi_core fsi2_core = {
 +      .ver    = 2,
 +
 +      /* Interrupt */
 +      .int_st = CPU_INT_ST,
 +      .iemsk  = CPU_IEMSK,
 +      .imsk   = CPU_IMSK,
 +      .a_mclk = A_MST_CTLR,
 +      .b_mclk = B_MST_CTLR,
 +};
 +
 +static const struct of_device_id fsi_of_match[] = {
 +      { .compatible = "renesas,sh_fsi",       .data = &fsi1_core},
 +      { .compatible = "renesas,sh_fsi2",      .data = &fsi2_core},
 +      {},
 +};
 +MODULE_DEVICE_TABLE(of, fsi_of_match);
 +
 +static const struct platform_device_id fsi_id_table[] = {
 +      { "sh_fsi",     (kernel_ulong_t)&fsi1_core },
 +      { "sh_fsi2",    (kernel_ulong_t)&fsi2_core },
 +      {},
 +};
 +MODULE_DEVICE_TABLE(platform, fsi_id_table);
 +
  static int fsi_probe(struct platform_device *pdev)
  {
        struct fsi_master *master;
        /* FSI A setting */
        fsi             = &master->fsia;
        fsi->base       = master->base;
+       fsi->phys       = res->start;
        fsi->master     = master;
        fsi_port_info_init(fsi, &info.port_a);
        fsi_handler_init(fsi, &info.port_a);
        /* FSI B setting */
        fsi             = &master->fsib;
        fsi->base       = master->base + 0x40;
+       fsi->phys       = res->start + 0x40;
        fsi->master     = master;
        fsi_port_info_init(fsi, &info.port_b);
        fsi_handler_init(fsi, &info.port_b);
@@@ -2105,6 -2080,40 +2113,6 @@@ static struct dev_pm_ops fsi_pm_ops = 
        .resume                 = fsi_resume,
  };
  
 -static struct fsi_core fsi1_core = {
 -      .ver    = 1,
 -
 -      /* Interrupt */
 -      .int_st = INT_ST,
 -      .iemsk  = IEMSK,
 -      .imsk   = IMSK,
 -};
 -
 -static struct fsi_core fsi2_core = {
 -      .ver    = 2,
 -
 -      /* Interrupt */
 -      .int_st = CPU_INT_ST,
 -      .iemsk  = CPU_IEMSK,
 -      .imsk   = CPU_IMSK,
 -      .a_mclk = A_MST_CTLR,
 -      .b_mclk = B_MST_CTLR,
 -};
 -
 -static struct of_device_id fsi_of_match[] = {
 -      { .compatible = "renesas,sh_fsi",       .data = &fsi1_core},
 -      { .compatible = "renesas,sh_fsi2",      .data = &fsi2_core},
 -      {},
 -};
 -MODULE_DEVICE_TABLE(of, fsi_of_match);
 -
 -static struct platform_device_id fsi_id_table[] = {
 -      { "sh_fsi",     (kernel_ulong_t)&fsi1_core },
 -      { "sh_fsi2",    (kernel_ulong_t)&fsi2_core },
 -      {},
 -};
 -MODULE_DEVICE_TABLE(platform, fsi_id_table);
 -
  static struct platform_driver fsi_driver = {
        .driver         = {
                .name   = "fsi-pcm-audio",
  
  module_platform_driver(fsi_driver);
  
 -MODULE_LICENSE("GPL");
 +MODULE_LICENSE("GPL v2");
  MODULE_DESCRIPTION("SuperH onchip FSI audio driver");
  MODULE_AUTHOR("Kuninori Morimoto <morimoto.kuninori@renesas.com>");
  MODULE_ALIAS("platform:fsi-pcm-audio");