Merge tag 'mvebu' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 14 Dec 2012 22:54:26 +0000 (14:54 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 14 Dec 2012 22:54:26 +0000 (14:54 -0800)
Pull ARM SoC updates for Marvell mvebu/kirkwood from Olof Johansson:
 "This is a branch with updates for Marvell's mvebu/kirkwood platforms.
  They came in late-ish, and were heavily interdependent such that it
  didn't make sense to split them up across the cross-platform topic
  branches.  So here they are (for the second release in a row) in a
  branch on their own."

* tag 'mvebu' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (88 commits)
  arm: l2x0: add aurora related properties to OF binding
  arm: mvebu: add Aurora L2 Cache Controller to the DT
  arm: mvebu: add L2 cache support
  dma: mv_xor: fix error handling path
  dma: mv_xor: fix error checking of irq_of_parse_and_map()
  dma: mv_xor: use request_irq() instead of devm_request_irq()
  dma: mv_xor: clear the window override control registers
  arm: mvebu: fix address decoding armada_cfg_base() function
  ARM: mvebu: update defconfig with I2C and RTC support
  ARM: mvebu: Add SATA support for OpenBlocks AX3-4
  ARM: mvebu: Add support for the RTC in OpenBlocks AX3-4
  ARM: mvebu: Add support for I2C on OpenBlocks AX3-4
  ARM: mvebu: Add support for I2C controllers in Armada 370/XP
  arm: mvebu: Add hardware I/O Coherency support
  arm: plat-orion: Add coherency attribute when setup mbus target
  arm: dma mapping: Export a dma ops function arm_dma_set_mask
  arm: mvebu: Add SMP support for Armada XP
  arm: mm: Add support for PJ4B cpu and init routines
  arm: mvebu: Add IPI support via doorbells
  arm: mvebu: Add initial support for power managmement service unit
  ...

14 files changed:
1  2 
Documentation/devicetree/bindings/arm/l2cc.txt
MAINTAINERS
arch/arm/Kconfig
arch/arm/boot/dts/Makefile
arch/arm/boot/dts/dove.dtsi
arch/arm/boot/dts/kirkwood.dtsi
arch/arm/include/asm/dma-mapping.h
arch/arm/mach-kirkwood/Kconfig
arch/arm/mach-kirkwood/board-dt.c
arch/arm/mach-kirkwood/common.c
arch/arm/mm/proc-v7.S
drivers/clk/Kconfig
drivers/clk/Makefile
drivers/dma/mv_xor.c

@@@ -10,6 -10,12 +10,12 @@@ Required properties
        "arm,pl310-cache"
        "arm,l220-cache"
        "arm,l210-cache"
+       "marvell,aurora-system-cache": Marvell Controller designed to be
+      compatible with the ARM one, with system cache mode (meaning
+      maintenance operations on L1 are broadcasted to the L2 and L2
+      performs the same operation).
+       "marvell,"aurora-outer-cache: Marvell Controller designed to be
+        compatible with the ARM one with outer cache mode.
  - cache-unified : Specifies the cache is a unified cache.
  - cache-level : Should be set to 2 for a level 2 cache.
  - reg : Physical base address and size of cache controller's memory mapped
@@@ -29,6 -35,9 +35,9 @@@ Optional properties
    filter. Addresses in the filter window are directed to the M1 port. Other
    addresses will go to the M0 port.
  - interrupts : 1 combined interrupt.
+ - cache-id-part: cache id part number to be used if it is not present
+   on hardware
+ - wt-override: If present then L2 is forced to Write through mode
  
  Example:
  
@@@ -37,7 -46,7 +46,7 @@@ L2: cache-controller 
          reg = <0xfff12000 0x1000>;
          arm,data-latency = <1 1 1>;
          arm,tag-latency = <2 2 2>;
 -        arm,filter-latency = <0x80000000 0x8000000>;
 +        arm,filter-ranges = <0x80000000 0x8000000>;
          cache-unified;
          cache-level = <2>;
        interrupts = <45>;
diff --combined MAINTAINERS
@@@ -337,13 -337,6 +337,13 @@@ W:       http://wireless.kernel.org
  S:    Orphan
  F:    drivers/net/wireless/adm8211.*
  
 +ADP1653 FLASH CONTROLLER DRIVER
 +M:    Sakari Ailus <sakari.ailus@iki.fi>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    drivers/media/i2c/adp1653.c
 +F:    include/media/adp1653.h
 +
  ADP5520 BACKLIGHT DRIVER WITH IO EXPANDER (ADP5520/ADP5501)
  M:    Michael Hennerich <michael.hennerich@analog.com>
  L:    device-drivers-devel@blackfin.uclinux.org
@@@ -692,12 -685,6 +692,12 @@@ M:       Lennert Buytenhek <kernel@wantstofly
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  
 +ARM/Allwinner A1X SoC support
 +M:    Maxime Ripard <maxime.ripard@free-electrons.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    arch/arm/mach-sunxi/
 +
  ARM/ATMEL AT91RM9200 AND AT91SAM ARM ARCHITECTURES
  M:    Andrew Victor <linux@maxim.org.za>
  M:    Nicolas Ferre <nicolas.ferre@atmel.com>
@@@ -720,12 -707,6 +720,12 @@@ S:       Maintaine
  F:    arch/arm/mach-cns3xxx/
  T:    git git://git.infradead.org/users/cbou/linux-cns3xxx.git
  
 +ARM/CIRRUS LOGIC CLPS711X ARM ARCHITECTURE
 +M:    Alexander Shiyan <shc_work@mail.ru>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Odd Fixes
 +F:    arch/arm/mach-clps711x/
 +
  ARM/CIRRUS LOGIC EP93XX ARM ARCHITECTURE
  M:    Hartley Sweeten <hsweeten@visionengravers.com>
  M:    Ryan Mallon <rmallon@gmail.com>
@@@ -816,6 -797,7 +816,6 @@@ L: linux-arm-kernel@lists.infradead.or
  S:    Maintained
  T:    git git://git.pengutronix.de/git/imx/linux-2.6.git
  F:    arch/arm/mach-imx/
 -F:    arch/arm/plat-mxc/
  F:    arch/arm/configs/imx*_defconfig
  
  ARM/FREESCALE IMX6
@@@ -1148,12 -1130,12 +1148,12 @@@ S:   Maintaine
  F:    drivers/media/platform/s5p-tv/
  
  ARM/SHMOBILE ARM ARCHITECTURE
 -M:    Paul Mundt <lethal@linux-sh.org>
 +M:    Simon Horman <horms@verge.net.au>
  M:    Magnus Damm <magnus.damm@gmail.com>
  L:    linux-sh@vger.kernel.org
  W:    http://oss.renesas.com
  Q:    http://patchwork.kernel.org/project/linux-sh/list/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6.git rmobile-latest
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas.git next
  S:    Supported
  F:    arch/arm/mach-shmobile/
  F:    drivers/sh/
@@@ -1255,7 -1237,6 +1255,7 @@@ F:      drivers/video/wm8505fb
  F:    drivers/video/wmt_ge_rops.*
  F:    drivers/tty/serial/vt8500_serial.c
  F:    drivers/rtc/rtc-vt8500-c
 +F:    drivers/mmc/host/wmt-sdmmc.c
  
  ARM/ZIPIT Z2 SUPPORT
  M:    Marek Vasut <marek.vasut@gmail.com>
@@@ -1266,11 -1247,9 +1266,11 @@@ F:    arch/arm/mach-pxa/include/mach/z2.
  
  ARM64 PORT (AARCH64 ARCHITECTURE)
  M:    Catalin Marinas <catalin.marinas@arm.com>
 +M:    Will Deacon <will.deacon@arm.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  F:    arch/arm64/
 +F:    Documentation/arm64/
  
  ASC7621 HARDWARE MONITOR DRIVER
  M:    George Joseph <george.joseph@fairview5.com>
@@@ -1389,6 -1368,14 +1389,6 @@@ S:     Maintaine
  F:    drivers/atm/
  F:    include/linux/atm*
  
 -ATMEL AT91 MCI DRIVER
 -M:    Ludovic Desroches <ludovic.desroches@atmel.com>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -W:    http://www.atmel.com/products/AT91/
 -W:    http://www.at91.com/
 -S:    Maintained
 -F:    drivers/mmc/host/at91_mci.c
 -
  ATMEL AT91 / AT32 MCI DRIVER
  M:    Ludovic Desroches <ludovic.desroches@atmel.com>
  S:    Maintained
@@@ -1501,14 -1488,6 +1501,14 @@@ F:    include/linux/ax25.
  F:    include/net/ax25.h
  F:    net/ax25/
  
 +AZ6007 DVB DRIVER
 +M:    Mauro Carvalho Chehab <mchehab@redhat.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Maintained
 +F:    drivers/media/usb/dvb-usb-v2/az6007.c
 +
  B43 WIRELESS DRIVER
  M:    Stefano Brivio <stefano.brivio@polimi.it>
  L:    linux-wireless@vger.kernel.org
@@@ -1695,9 -1674,10 +1695,9 @@@ F:     drivers/net/ethernet/broadcom/tg3.
  
  BROADCOM BRCM80211 IEEE802.11n WIRELESS DRIVER
  M:    Brett Rudley <brudley@broadcom.com>
 -M:    Roland Vossen <rvossen@broadcom.com>
  M:    Arend van Spriel <arend@broadcom.com>
  M:    Franky (Zhenhui) Lin <frankyl@broadcom.com>
 -M:    Kan Yan <kanyan@broadcom.com>
 +M:    Hante Meuleman <meuleman@broadcom.com>
  L:    linux-wireless@vger.kernel.org
  L:    brcm80211-dev-list@broadcom.com
  S:    Supported
@@@ -1760,11 -1740,11 +1760,11 @@@ F:   Documentation/filesystems/btrfs.tx
  F:    fs/btrfs/
  
  BTTV VIDEO4LINUX DRIVER
 -M:    Mauro Carvalho Chehab <mchehab@infradead.org>
 +M:    Mauro Carvalho Chehab <mchehab@redhat.com>
  L:    linux-media@vger.kernel.org
  W:    http://linuxtv.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 -S:    Maintained
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Odd fixes
  F:    Documentation/video4linux/bttv/
  F:    drivers/media/pci/bt8xx/bttv*
  
@@@ -1793,7 -1773,7 +1793,7 @@@ F:      fs/cachefiles
  CAFE CMOS INTEGRATED CAMERA CONTROLLER DRIVER
  M:    Jonathan Corbet <corbet@lwn.net>
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    Documentation/video4linux/cafe_ccic
  F:    drivers/media/platform/marvell-ccic/
@@@ -2014,6 -1994,7 +2014,6 @@@ F:      fs/coda
  F:    include/linux/coda*.h
  
  COMMON CLK FRAMEWORK
 -M:    Mike Turquette <mturquette@ti.com>
  M:    Mike Turquette <mturquette@linaro.org>
  L:    linux-arm-kernel@lists.infradead.org (same as CLK API & CLKDEV)
  T:    git git://git.linaro.org/people/mturquette/linux.git
@@@ -2179,22 -2160,12 +2179,22 @@@ CX18 VIDEO4LINUX DRIVE
  M:    Andy Walls <awalls@md.metrocast.net>
  L:    ivtv-devel@ivtvdriver.org (moderated for non-subscribers)
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  W:    http://linuxtv.org
  W:    http://www.ivtvdriver.org/index.php/Cx18
  S:    Maintained
  F:    Documentation/video4linux/cx18.txt
  F:    drivers/media/pci/cx18/
 +F:    include/uapi/linux/ivtv*
 +
 +CX88 VIDEO4LINUX DRIVER
 +M:    Mauro Carvalho Chehab <mchehab@redhat.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Odd fixes
 +F:    Documentation/video4linux/cx88/
 +F:    drivers/media/pci/cx88/
  
  CXD2820R MEDIA DRIVER
  M:    Antti Palosaari <crope@iki.fi>
@@@ -2751,15 -2722,6 +2751,15 @@@ W:    bluesmoke.sourceforge.ne
  S:    Maintained
  F:    drivers/edac/amd64_edac*
  
 +EDAC-CAVIUM
 +M:    Ralf Baechle <ralf@linux-mips.org>
 +M:    David Daney <david.daney@cavium.com>
 +L:    linux-edac@vger.kernel.org
 +L:    linux-mips@linux-mips.org
 +W:    bluesmoke.sourceforge.net
 +S:    Supported
 +F:    drivers/edac/octeon_edac*
 +
  EDAC-E752X
  M:    Mark Gross <mark.gross@intel.com>
  M:    Doug Thompson <dougthompson@xmission.com>
@@@ -2890,14 -2852,6 +2890,14 @@@ L:    netdev@vger.kernel.or
  S:    Maintained
  F:    drivers/net/ethernet/ibm/ehea/
  
 +EM28XX VIDEO4LINUX DRIVER
 +M:    Mauro Carvalho Chehab <mchehab@redhat.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Maintained
 +F:    drivers/media/usb/em28xx/
 +
  EMBEDDED LINUX
  M:    Paul Gortmaker <paul.gortmaker@windriver.com>
  M:    Matt Mackall <mpm@selenic.com>
@@@ -3096,14 -3050,6 +3096,14 @@@ T:    git git://git.alsa-project.org/alsa-
  S:    Maintained
  F:    sound/firewire/
  
 +FIREWIRE MEDIA DRIVERS (firedtv)
 +M:    Stefan Richter <stefanr@s5r6.in-berlin.de>
 +L:    linux-media@vger.kernel.org
 +L:    linux1394-devel@lists.sourceforge.net
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +S:    Maintained
 +F:    drivers/media/firewire/
 +
  FIREWIRE SBP-2 TARGET
  M:    Chris Boot <bootc@bootc.net>
  L:    linux-scsi@vger.kernel.org
@@@ -3390,56 -3336,56 +3390,56 @@@ F:   drivers/net/ethernet/aeroflex
  GSPCA FINEPIX SUBDRIVER
  M:    Frank Zago <frank@zago.net>
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    drivers/media/usb/gspca/finepix.c
  
  GSPCA GL860 SUBDRIVER
  M:    Olivier Lorin <o.lorin@laposte.net>
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    drivers/media/usb/gspca/gl860/
  
  GSPCA M5602 SUBDRIVER
  M:    Erik Andren <erik.andren@gmail.com>
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    drivers/media/usb/gspca/m5602/
  
  GSPCA PAC207 SONIXB SUBDRIVER
  M:    Hans de Goede <hdegoede@redhat.com>
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    drivers/media/usb/gspca/pac207.c
  
  GSPCA SN9C20X SUBDRIVER
  M:    Brian Johnson <brijohn@gmail.com>
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    drivers/media/usb/gspca/sn9c20x.c
  
  GSPCA T613 SUBDRIVER
  M:    Leandro Costantino <lcostantino@gmail.com>
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    drivers/media/usb/gspca/t613.c
  
  GSPCA USB WEBCAM DRIVER
  M:    Hans de Goede <hdegoede@redhat.com>
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    drivers/media/usb/gspca/
  
  STK1160 USB VIDEO CAPTURE DRIVER
  M:    Ezequiel Garcia <elezegarcia@gmail.com>
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    drivers/media/usb/stk1160/
  
@@@ -3646,7 -3592,7 +3646,7 @@@ S:      Maintaine
  F:    drivers/input/touchscreen/htcpen.c
  
  HUGETLB FILESYSTEM
 -M:    William Irwin <wli@holomorphy.com>
 +M:    Nadia Yvette Chambers <nyc@holomorphy.com>
  S:    Maintained
  F:    fs/hugetlbfs/
  
@@@ -3658,6 -3604,7 +3658,6 @@@ S:      Maintaine
  F:    drivers/hv/
  F:    drivers/hid/hid-hyperv.c
  F:    drivers/net/hyperv/
 -F:    drivers/staging/hv/
  
  I2C OVER PARALLEL PORT
  M:    Jean Delvare <khali@linux-fr.org>
@@@ -3837,12 -3784,6 +3837,12 @@@ F:    net/ieee802154
  F:    net/mac802154/
  F:    drivers/ieee802154/
  
 +IGUANAWORKS USB IR TRANSCEIVER
 +M:    Sean Young <sean@mess.org>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    drivers/media/rc/iguanair.c
 +
  IIO SUBSYSTEM AND DRIVERS
  M:    Jonathan Cameron <jic23@cam.ac.uk>
  L:    linux-iio@vger.kernel.org
@@@ -3856,15 -3797,6 +3856,15 @@@ M:    Stanislaw Gruszka <stf_xl@wp.pl
  S:    Maintained
  F:    drivers/usb/atm/ueagle-atm.c
  
 +INDUSTRY PACK SUBSYSTEM (IPACK)
 +M:    Samuel Iglesias Gonsalvez <siglesias@igalia.com>
 +M:    Jens Taprogge <jens.taprogge@taprogge.org>
 +M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 +L:    industrypack-devel@lists.sourceforge.net
 +W:    http://industrypack.sourceforge.net
 +S:    Maintained
 +F:    drivers/ipack/
 +
  INTEGRITY MEASUREMENT ARCHITECTURE (IMA)
  M:    Mimi Zohar <zohar@us.ibm.com>
  S:    Supported
@@@ -4004,9 -3936,7 +4004,9 @@@ M:      Greg Rose <gregory.v.rose@intel.com
  M:    Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
  M:    Alex Duyck <alexander.h.duyck@intel.com>
  M:    John Ronciak <john.ronciak@intel.com>
 +M:    Tushar Dave <tushar.n.dave@intel.com>
  L:    e1000-devel@lists.sourceforge.net
 +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
@@@ -4228,41 -4158,17 +4228,41 @@@ S:   Maintaine
  F:    Documentation/hwmon/it87
  F:    drivers/hwmon/it87.c
  
 +IT913X MEDIA DRIVER
 +M:    Malcolm Priestley <tvboxspy@gmail.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org/
 +Q:    http://patchwork.linuxtv.org/project/linux-media/list/
 +S:    Maintained
 +F:    drivers/media/usb/dvb-usb-v2/it913x*
 +
 +IT913X FE MEDIA DRIVER
 +M:    Malcolm Priestley <tvboxspy@gmail.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org/
 +Q:    http://patchwork.linuxtv.org/project/linux-media/list/
 +S:    Maintained
 +F:    drivers/media/dvb-frontends/it913x-fe*
 +
  IVTV VIDEO4LINUX DRIVER
  M:    Andy Walls <awalls@md.metrocast.net>
  L:    ivtv-devel@ivtvdriver.org (moderated for non-subscribers)
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  W:    http://www.ivtvdriver.org
  S:    Maintained
  F:    Documentation/video4linux/*.ivtv
  F:    drivers/media/pci/ivtv/
  F:    include/linux/ivtv*
  
 +IX2505V MEDIA DRIVER
 +M:    Malcolm Priestley <tvboxspy@gmail.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org/
 +Q:    http://patchwork.linuxtv.org/project/linux-media/list/
 +S:    Maintained
 +F:    drivers/media/dvb-frontends/ix2505v*
 +
  JC42.4 TEMPERATURE SENSOR DRIVER
  M:    Guenter Roeck <linux@roeck-us.net>
  L:    lm-sensors@lm-sensors.org
@@@ -4394,10 -4300,10 +4394,10 @@@ F:   include/linux/kvm
  F:    virt/kvm/
  
  KERNEL VIRTUAL MACHINE (KVM) FOR AMD-V
 -M:    Joerg Roedel <joerg.roedel@amd.com>
 +M:    Joerg Roedel <joro@8bytes.org>
  L:    kvm@vger.kernel.org
  W:    http://kvm.qumranet.com
 -S:    Supported
 +S:    Maintained
  F:    arch/x86/include/asm/svm.h
  F:    arch/x86/kvm/svm.c
  
@@@ -4405,7 -4311,6 +4405,7 @@@ KERNEL VIRTUAL MACHINE (KVM) FOR POWERP
  M:    Alexander Graf <agraf@suse.de>
  L:    kvm-ppc@vger.kernel.org
  W:    http://kvm.qumranet.com
 +T:    git git://github.com/agraf/linux-2.6.git
  S:    Supported
  F:    arch/powerpc/include/asm/kvm*
  F:    arch/powerpc/kvm/
@@@ -4708,14 -4613,6 +4708,14 @@@ S:    Maintaine
  F:    Documentation/hwmon/lm90
  F:    drivers/hwmon/lm90.c
  
 +LME2510 MEDIA DRIVER
 +M:    Malcolm Priestley <tvboxspy@gmail.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org/
 +Q:    http://patchwork.linuxtv.org/project/linux-media/list/
 +S:    Maintained
 +F:    drivers/media/usb/dvb-usb-v2/lmedm04*
 +
  LOCKDEP AND LOCKSTAT
  M:    Peter Zijlstra <peterz@infradead.org>
  M:    Ingo Molnar <mingo@redhat.com>
@@@ -4743,16 -4640,13 +4743,16 @@@ S:   Maintaine
  F:    fs/logfs/
  
  LSILOGIC MPT FUSION DRIVERS (FC/SAS/SPI)
 -M:    Eric Moore <Eric.Moore@lsi.com>
 +M:    Nagalakshmi Nandigama <Nagalakshmi.Nandigama@lsi.com>
 +M:    Sreekanth Reddy <Sreekanth.Reddy@lsi.com>
  M:    support@lsi.com
  L:    DL-MPTFusionLinux@lsi.com
  L:    linux-scsi@vger.kernel.org
  W:    http://www.lsilogic.com/support
  S:    Supported
  F:    drivers/message/fusion/
 +F:    drivers/scsi/mpt2sas/
 +F:    drivers/scsi/mpt3sas/
  
  LSILOGIC/SYMBIOS/NCR 53C8XX and 53C1010 PCI-SCSI drivers
  M:    Matthew Wilcox <matthew@wil.cx>
@@@ -4809,14 -4703,6 +4809,14 @@@ W:    http://www.tazenda.demon.co.uk/phil/
  S:    Maintained
  F:    arch/m68k/hp300/
  
 +M88RS2000 MEDIA DRIVER
 +M:    Malcolm Priestley <tvboxspy@gmail.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org/
 +Q:    http://patchwork.linuxtv.org/project/linux-media/list/
 +S:    Maintained
 +F:    drivers/media/dvb-frontends/m88rs2000*
 +
  MAC80211
  M:    Johannes Berg <johannes@sipsolutions.net>
  L:    linux-wireless@vger.kernel.org
@@@ -4871,6 -4757,12 +4871,12 @@@ S:    Maintaine
  F:    drivers/net/ethernet/marvell/mv643xx_eth.*
  F:    include/linux/mv643xx.h
  
+ MARVELL MVNETA ETHERNET DRIVER
+ M:    Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+ L:    netdev@vger.kernel.org
+ S:    Maintained
+ F:    drivers/net/ethernet/marvell/mvneta.*
  MARVELL MWIFIEX WIRELESS DRIVER
  M:    Bing Zhao <bzhao@marvell.com>
  L:    linux-wireless@vger.kernel.org
@@@ -4909,12 -4801,12 +4915,12 @@@ F:   Documentation/hwmon/max665
  F:    drivers/hwmon/max6650.c
  
  MEDIA INPUT INFRASTRUCTURE (V4L/DVB)
 -M:    Mauro Carvalho Chehab <mchehab@infradead.org>
 +M:    Mauro Carvalho Chehab <mchehab@redhat.com>
  P:    LinuxTV.org Project
  L:    linux-media@vger.kernel.org
  W:    http://linuxtv.org
  Q:    http://patchwork.kernel.org/project/linux-media/list/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    Documentation/dvb/
  F:    Documentation/video4linux/
@@@ -4922,13 -4814,8 +4928,13 @@@ F:    Documentation/DocBook/media
  F:    drivers/media/
  F:    drivers/staging/media/
  F:    include/media/
 -F:    include/linux/dvb/
 -F:    include/linux/videodev*.h
 +F:    include/uapi/linux/dvb/
 +F:    include/uapi/linux/videodev2.h
 +F:    include/uapi/linux/media.h
 +F:    include/uapi/linux/v4l2-*
 +F:    include/uapi/linux/meye.h
 +F:    include/uapi/linux/ivtv*
 +F:    include/uapi/linux/uvcvideo.h
  
  MEGARAID SCSI DRIVERS
  M:    Neela Syam Kolli <megaraidlinux@lsi.com>
@@@ -4939,14 -4826,6 +4945,14 @@@ F:    Documentation/scsi/megaraid.tx
  F:    drivers/scsi/megaraid.*
  F:    drivers/scsi/megaraid/
  
 +MELLANOX ETHERNET DRIVER (mlx4_en)
 +M:    Amir Vadai <amirv@mellanox.com>
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +W:    http://www.mellanox.com
 +Q:    http://patchwork.ozlabs.org/project/netdev/list/
 +F:    drivers/net/ethernet/mellanox/mlx4/en_*
 +
  MEMORY MANAGEMENT
  L:    linux-mm@kvack.org
  W:    http://www.linux-mm.org
@@@ -5010,7 -4889,7 +5016,7 @@@ W:      http://popies.net/meye
  S:    Orphan
  F:    Documentation/video4linux/meye.txt
  F:    drivers/media/pci/meye/
 -F:    include/linux/meye.h
 +F:    include/uapi/linux/meye.h
  
  MOTOROLA IMX MMC/SD HOST CONTROLLER INTERFACE DRIVER
  M:    Pavel Pisa <ppisa@pikron.com>
@@@ -5024,13 -4903,6 +5030,13 @@@ S:    Maintaine
  F:    Documentation/serial/moxa-smartio
  F:    drivers/tty/mxser.*
  
 +MR800 AVERMEDIA USB FM RADIO DRIVER
 +M:    Alexey Klimov <klimov.linux@gmail.com>
 +L:    linux-media@vger.kernel.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Maintained
 +F:    drivers/media/radio/radio-mr800.c
 +
  MSI LAPTOP SUPPORT
  M:    "Lee, Chun-Yi" <jlee@novell.com>
  L:    platform-driver-x86@vger.kernel.org
@@@ -5196,7 -5068,7 +5202,7 @@@ NETWORKING [GENERAL
  M:    "David S. Miller" <davem@davemloft.net>
  L:    netdev@vger.kernel.org
  W:    http://www.linuxfoundation.org/en/Net
 -W:    http://patchwork.ozlabs.org/project/netdev/list/
 +Q:    http://patchwork.ozlabs.org/project/netdev/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git
  S:    Maintained
@@@ -5256,7 -5128,6 +5262,7 @@@ F:      drivers/net/wireless
  NETWORKING DRIVERS
  L:    netdev@vger.kernel.org
  W:    http://www.linuxfoundation.org/en/Net
 +Q:    http://patchwork.ozlabs.org/project/netdev/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git
  S:    Odd Fixes
@@@ -5289,7 -5160,6 +5295,7 @@@ F:      net/nfc
  F:    include/linux/nfc.h
  F:    include/net/nfc/
  F:    drivers/nfc/
 +F:    include/linux/platform_data/pn544.h
  
  NFS, SUNRPC, AND LOCKD CLIENTS
  M:    Trond Myklebust <Trond.Myklebust@netapp.com>
@@@ -5493,7 -5363,7 +5499,7 @@@ F:      drivers/char/pcmcia/cm4040_cs.
  OMNIVISION OV7670 SENSOR DRIVER
  M:    Jonathan Corbet <corbet@lwn.net>
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    drivers/media/i2c/ov7670.c
  
@@@ -5832,12 -5702,6 +5838,12 @@@ S:    Maintaine
  F:    drivers/pinctrl/
  F:    include/linux/pinctrl/
  
 +PIN CONTROLLER - ATMEL AT91
 +M:    Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    drivers/pinctrl/pinctrl-at91.c
 +
  PIN CONTROLLER - ST SPEAR
  M:    Viresh Kumar <viresh.linux@gmail.com>
  L:    spear-devel@list.st.com
@@@ -6042,18 -5906,11 +6048,18 @@@ M:   Mike Isely <isely@pobox.com
  L:    pvrusb2@isely.net       (subscribers-only)
  L:    linux-media@vger.kernel.org
  W:    http://www.isely.net/pvrusb2/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    Documentation/video4linux/README.pvrusb2
  F:    drivers/media/usb/pvrusb2/
  
 +PWC WEBCAM DRIVER
 +M:    Hans de Goede <hdegoede@redhat.com>
 +L:    linux-media@vger.kernel.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Maintained
 +F:    drivers/media/usb/pwc/*
 +
  PWM SUBSYSTEM
  M:    Thierry Reding <thierry.reding@avionic-design.de>
  L:    linux-kernel@vger.kernel.org
@@@ -6196,21 -6053,6 +6202,21 @@@ S:    Maintaine
  F:    drivers/video/aty/radeon*
  F:    include/linux/radeonfb.h
  
 +RADIOSHARK RADIO DRIVER
 +M:    Hans de Goede <hdegoede@redhat.com>
 +L:    linux-media@vger.kernel.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Maintained
 +F:    drivers/media/radio/radio-shark.c
 +
 +RADIOSHARK2 RADIO DRIVER
 +M:    Hans de Goede <hdegoede@redhat.com>
 +L:    linux-media@vger.kernel.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Maintained
 +F:    drivers/media/radio/radio-shark2.c
 +F:    drivers/media/radio/radio-tea5777.c
 +
  RAGE128 FRAMEBUFFER DISPLAY DRIVER
  M:    Paul Mackerras <paulus@samba.org>
  L:    linux-fbdev@vger.kernel.org
@@@ -6451,19 -6293,10 +6457,19 @@@ L:   linux-arm-kernel@lists.infradead.or
  S:    Supported
  F:    drivers/mmc/host/s3cmci.*
  
 +SAA7134 VIDEO4LINUX DRIVER
 +M:    Mauro Carvalho Chehab <mchehab@redhat.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Odd fixes
 +F:    Documentation/video4linux/saa7134/
 +F:    drivers/media/pci/saa7134/
 +
  SAA7146 VIDEO4LINUX-2 DRIVER
  M:    Michael Hunold <michael@mihu.de>
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  W:    http://www.mihu.de/linux/saa7146
  S:    Maintained
  F:    drivers/media/common/saa7146/
@@@ -6498,14 -6331,6 +6504,14 @@@ F:    drivers/regulator/s5m*.
  F:    drivers/rtc/rtc-sec.c
  F:    include/linux/mfd/samsung/
  
 +SAMSUNG S3C24XX/S3C64XX SOC SERIES CAMIF DRIVER
 +M:    Sylwester Nawrocki <sylvester.nawrocki@gmail.com>
 +L:    linux-media@vger.kernel.org
 +L:    linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    drivers/media/platform/s3c-camif/
 +F:    include/media/s3c_camif.h
 +
  SERIAL DRIVERS
  M:    Alan Cox <alan@linux.intel.com>
  L:    linux-serial@vger.kernel.org
@@@ -6604,7 -6429,6 +6610,7 @@@ F:      drivers/scsi/st
  SCTP PROTOCOL
  M:    Vlad Yasevich <vyasevich@gmail.com>
  M:    Sridhar Samudrala <sri@us.ibm.com>
 +M:    Neil Horman <nhorman@tuxdriver.com>
  L:    linux-sctp@vger.kernel.org
  W:    http://lksctp.sourceforge.net
  S:    Maintained
@@@ -6800,18 -6624,6 +6806,18 @@@ S:    Supporte
  F:    arch/arm/mach-davinci
  F:    drivers/i2c/busses/i2c-davinci.c
  
 +TI DAVINCI SERIES MEDIA DRIVER
 +M:    Manjunath Hadli <manjunath.hadli@ti.com>
 +M:    Prabhakar Lad <prabhakar.lad@ti.com>
 +L:    linux-media@vger.kernel.org
 +L:    davinci-linux-open-source@linux.davincidsp.com (moderated for non-subscribers)
 +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:    Supported
 +F:    drivers/media/platform/davinci/
 +F:    include/media/davinci/
 +
  SIS 190 ETHERNET DRIVER
  M:    Francois Romieu <romieu@fr.zoreil.com>
  L:    netdev@vger.kernel.org
@@@ -6878,15 -6690,6 +6884,15 @@@ M:    Nicolas Pitre <nico@fluxnic.net
  S:    Odd Fixes
  F:    drivers/net/ethernet/smsc/smc91x.*
  
 +SMIA AND SMIA++ IMAGE SENSOR DRIVER
 +M:    Sakari Ailus <sakari.ailus@iki.fi>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    drivers/media/i2c/smiapp
 +F:    include/media/smiapp.h
 +F:    drivers/media/i2c/smiapp-pll.c
 +F:    drivers/media/i2c/smiapp-pll.h
 +
  SMM665 HARDWARE MONITOR DRIVER
  M:    Guenter Roeck <linux@roeck-us.net>
  L:    lm-sensors@lm-sensors.org
@@@ -6945,7 -6748,7 +6951,7 @@@ F:      arch/ia64/sn
  SOC-CAMERA V4L2 SUBSYSTEM
  M:    Guennadi Liakhovetski <g.liakhovetski@gmx.de>
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    include/media/soc*
  F:    drivers/media/i2c/soc_camera/
@@@ -7435,22 -7238,6 +7441,22 @@@ T:    git git://linuxtv.org/mkrufky/tuners
  S:    Maintained
  F:    drivers/media/tuners/tda8290.*
  
 +TEA5761 TUNER DRIVER
 +M:    Mauro Carvalho Chehab <mchehab@redhat.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Odd fixes
 +F:    drivers/media/tuners/tea5761.*
 +
 +TEA5767 TUNER DRIVER
 +M:    Mauro Carvalho Chehab <mchehab@redhat.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Maintained
 +F:    drivers/media/tuners/tea5767.*
 +
  TEAM DRIVER
  M:    Jiri Pirko <jpirko@redhat.com>
  L:    netdev@vger.kernel.org
@@@ -7458,12 -7245,6 +7464,12 @@@ S:    Supporte
  F:    drivers/net/team/
  F:    include/linux/if_team.h
  
 +TECHNOTREND USB IR RECEIVER
 +M:    Sean Young <sean@mess.org>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    drivers/media/rc/ttusbir.c
 +
  TEGRA SUPPORT
  M:    Stephen Warren <swarren@wwwdotorg.org>
  L:    linux-tegra@vger.kernel.org
@@@ -7616,14 -7397,6 +7622,14 @@@ S:    Maintaine
  F:    include/linux/shmem_fs.h
  F:    mm/shmem.c
  
 +TM6000 VIDEO4LINUX DRIVER
 +M:    Mauro Carvalho Chehab <mchehab@redhat.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Odd fixes
 +F:    drivers/media/usb/tm6000/
 +
  TPM DEVICE DRIVER
  M:    Kent Yoder <key@linux.vnet.ibm.com>
  M:    Rajiv Andrade <mail@srajiv.net>
@@@ -7657,7 -7430,6 +7663,7 @@@ K:      ^Subject:.*(?i)trivia
  
  TTY LAYER
  M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 +M:    Jiri Slaby <jslaby@suse.cz>
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git
  F:    drivers/tty/
@@@ -7683,7 -7455,8 +7689,7 @@@ S:      Maintaine
  F:    drivers/net/ethernet/dec/tulip/
  
  TUN/TAP driver
 -M:    Maxim Krasnyansky <maxk@qualcomm.com>
 -L:    vtun@office.satix.net
 +M:    Maxim Krasnyansky <maxk@qti.qualcomm.com>
  W:    http://vtun.sourceforge.net/tun
  S:    Maintained
  F:    Documentation/networking/tuntap.txt
@@@ -7805,12 -7578,6 +7811,12 @@@ S:    Maintaine
  F:    Documentation/usb/acm.txt
  F:    drivers/usb/class/cdc-acm.*
  
 +USB AR5523 WIRELESS DRIVER
 +M:    Pontus Fuchs <pontus.fuchs@gmail.com>
 +L:    linux-wireless@vger.kernel.org
 +S:    Maintained
 +F:    drivers/net/wireless/ath/ar5523/
 +
  USB ATTACHED SCSI
  M:    Matthew Wilcox <willy@linux.intel.com>
  M:    Sarah Sharp <sarah.a.sharp@linux.intel.com>
@@@ -7819,6 -7586,12 +7825,6 @@@ L:     linux-scsi@vger.kernel.or
  S:    Supported
  F:    drivers/usb/storage/uas.c
  
 -USB BLOCK DRIVER (UB ub)
 -M:    Pete Zaitcev <zaitcev@redhat.com>
 -L:    linux-usb@vger.kernel.org
 -S:    Supported
 -F:    drivers/block/ub.c
 -
  USB CDC ETHERNET DRIVER
  M:    Oliver Neukum <oliver@neukum.org>
  L:    linux-usb@vger.kernel.org
@@@ -8018,7 -7791,7 +8024,7 @@@ USB SN9C1xx DRIVE
  M:    Luca Risolia <luca.risolia@studio.unibo.it>
  L:    linux-usb@vger.kernel.org
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  W:    http://www.linux-projects.org
  S:    Maintained
  F:    Documentation/video4linux/sn9c102.txt
@@@ -8054,11 -7827,10 +8060,11 @@@ USB VIDEO CLAS
  M:    Laurent Pinchart <laurent.pinchart@ideasonboard.com>
  L:    linux-uvc-devel@lists.sourceforge.net (subscribers-only)
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  W:    http://www.ideasonboard.org/uvc/
  S:    Maintained
  F:    drivers/media/usb/uvc/
 +F:    include/uapi/linux/uvcvideo.h
  
  USB WEBCAM GADGET
  M:    Laurent Pinchart <laurent.pinchart@ideasonboard.com>
@@@ -8090,7 -7862,7 +8096,7 @@@ USB ZR364XX DRIVE
  M:    Antoine Jacquet <royale@zerezo.com>
  L:    linux-usb@vger.kernel.org
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  W:    http://royale.zerezo.com/zr364xx/
  S:    Maintained
  F:    Documentation/video4linux/zr364xx.txt
@@@ -8445,14 -8217,6 +8451,14 @@@ L:    linux-edac@vger.kernel.or
  S:    Maintained
  F:    arch/x86/kernel/cpu/mcheck/*
  
 +XC2028/3028 TUNER DRIVER
 +M:    Mauro Carvalho Chehab <mchehab@redhat.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Maintained
 +F:    drivers/media/tuners/tuner-xc2028.*
 +
  XEN HYPERVISOR INTERFACE
  M:    Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
  M:    Jeremy Fitzhardinge <jeremy@goop.org>
diff --combined arch/arm/Kconfig
@@@ -5,9 -5,8 +5,9 @@@ config AR
        select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
        select ARCH_HAVE_CUSTOM_GPIO_H
        select ARCH_WANT_IPC_PARSE_VERSION
 +      select BUILDTIME_EXTABLE_SORT if MMU
        select CPU_PM if (SUSPEND || CPU_IDLE)
 -      select DCACHE_WORD_ACCESS if (CPU_V6 || CPU_V6K || CPU_V7) && !CPU_BIG_ENDIAN
 +      select DCACHE_WORD_ACCESS if (CPU_V6 || CPU_V6K || CPU_V7) && !CPU_BIG_ENDIAN && MMU
        select GENERIC_ATOMIC64 if (CPU_V6 || !CPU_32v6K || !AEABI)
        select GENERIC_CLOCKEVENTS_BROADCAST if SMP
        select GENERIC_IRQ_PROBE
@@@ -22,7 -21,6 +22,7 @@@
        select HAVE_AOUT
        select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL
        select HAVE_ARCH_KGDB
 +      select HAVE_ARCH_SECCOMP_FILTER
        select HAVE_ARCH_TRACEHOOK
        select HAVE_BPF_JIT
        select HAVE_C_RECORDMCOUNT
@@@ -57,7 -55,6 +57,7 @@@
        select SYS_SUPPORTS_APM_EMULATION
        select HAVE_MOD_ARCH_SPECIFIC if ARM_UNWIND
        select MODULES_USE_ELF_REL
 +      select CLONE_BACKWARDS
        help
          The ARM series is a line of low-power-consumption RISC chip designs
          licensed by ARM Ltd and targeted at embedded applications and
@@@ -287,8 -284,8 +287,8 @@@ config ARCH_INTEGRATO
        select MULTI_IRQ_HANDLER
        select NEED_MACH_MEMORY_H
        select PLAT_VERSATILE
 -      select PLAT_VERSATILE_FPGA_IRQ
        select SPARSE_IRQ
 +      select VERSATILE_FPGA_IRQ
        help
          Support for ARM's Integrator platform.
  
@@@ -321,7 -318,7 +321,7 @@@ config ARCH_VERSATIL
        select PLAT_VERSATILE
        select PLAT_VERSATILE_CLCD
        select PLAT_VERSATILE_CLOCK
 -      select PLAT_VERSATILE_FPGA_IRQ
 +      select VERSATILE_FPGA_IRQ
        help
          This enables support for ARM Ltd Versatile board.
  
@@@ -333,15 -330,13 +333,15 @@@ config ARCH_AT9
        select IRQ_DOMAIN
        select NEED_MACH_GPIO_H
        select NEED_MACH_IO_H if PCCARD
 +      select PINCTRL
 +      select PINCTRL_AT91 if USE_OF
        help
          This enables support for systems based on Atmel
          AT91RM9200 and AT91SAM9* processors.
  
  config ARCH_BCM2835
        bool "Broadcom BCM2835 family"
 -      select ARCH_WANT_OPTIONAL_GPIOLIB
 +      select ARCH_REQUIRE_GPIOLIB
        select ARM_AMBA
        select ARM_ERRATA_411920
        select ARM_TIMER_SP804
        select COMMON_CLK
        select CPU_V6
        select GENERIC_CLOCKEVENTS
 +      select GENERIC_GPIO
        select MULTI_IRQ_HANDLER
 +      select PINCTRL
 +      select PINCTRL_BCM2835
        select SPARSE_IRQ
        select USE_OF
        help
@@@ -372,16 -364,11 +372,16 @@@ config ARCH_CNS3XX
  
  config ARCH_CLPS711X
        bool "Cirrus Logic CLPS711x/EP721x/EP731x-based"
 +      select ARCH_REQUIRE_GPIOLIB
        select ARCH_USES_GETTIMEOFFSET
 +      select AUTO_ZRELADDR
        select CLKDEV_LOOKUP
        select COMMON_CLK
        select CPU_ARM720T
 +      select GENERIC_CLOCKEVENTS
 +      select MULTI_IRQ_HANDLER
        select NEED_MACH_MEMORY_H
 +      select SPARSE_IRQ
        help
          Support for Cirrus Logic 711x/721x/731x based boards.
  
@@@ -446,6 -433,19 +446,6 @@@ config ARCH_FOOTBRIDG
          Support for systems based on the DC21285 companion chip
          ("FootBridge"), such as the Simtec CATS and the Rebel NetWinder.
  
 -config ARCH_MXC
 -      bool "Freescale MXC/iMX-based"
 -      select ARCH_REQUIRE_GPIOLIB
 -      select CLKDEV_LOOKUP
 -      select CLKSRC_MMIO
 -      select GENERIC_CLOCKEVENTS
 -      select GENERIC_IRQ_CHIP
 -      select MULTI_IRQ_HANDLER
 -      select SPARSE_IRQ
 -      select USE_OF
 -      help
 -        Support for Freescale MXC/iMX-based family of processors
 -
  config ARCH_MXS
        bool "Freescale MXS-based"
        select ARCH_REQUIRE_GPIOLIB
@@@ -533,11 -533,10 +533,12 @@@ config ARCH_IXP4X
  config ARCH_DOVE
        bool "Marvell Dove"
        select ARCH_REQUIRE_GPIOLIB
+       select COMMON_CLK_DOVE
        select CPU_V7
        select GENERIC_CLOCKEVENTS
        select MIGHT_HAVE_PCI
 +      select PINCTRL
 +      select PINCTRL_DOVE
        select PLAT_ORION_LEGACY
        select USB_ARCH_HAS_EHCI
        help
@@@ -549,9 -548,6 +550,9 @@@ config ARCH_KIRKWOO
        select CPU_FEROCEON
        select GENERIC_CLOCKEVENTS
        select PCI
 +      select PCI_QUIRKS
 +      select PINCTRL
 +      select PINCTRL_KIRKWOOD
        select PLAT_ORION_LEGACY
        help
          Support for the following Marvell Kirkwood series SoCs:
@@@ -591,7 -587,6 +592,7 @@@ config ARCH_MM
        select GPIO_PXA
        select IRQ_DOMAIN
        select NEED_MACH_GPIO_H
 +      select PINCTRL
        select PLAT_PXA
        select SPARSE_IRQ
        help
@@@ -650,7 -645,6 +651,7 @@@ config ARCH_TEGR
        select HAVE_CLK
        select HAVE_SMP
        select MIGHT_HAVE_CACHE_L2X0
 +      select SPARSE_IRQ
        select USE_OF
        help
          This enables support for NVIDIA Tegra based systems (Tegra APX,
@@@ -892,7 -886,6 +893,7 @@@ config ARCH_U850
        select GENERIC_CLOCKEVENTS
        select HAVE_SMP
        select MIGHT_HAVE_CACHE_L2X0
 +      select SPARSE_IRQ
        help
          Support for ST-Ericsson's Ux500 architecture
  
@@@ -907,13 -900,11 +908,13 @@@ config ARCH_NOMADI
        select MIGHT_HAVE_CACHE_L2X0
        select PINCTRL
        select PINCTRL_STN8815
 +      select SPARSE_IRQ
        help
          Support for the Nomadik platform by ST-Ericsson
  
  config PLAT_SPEAR
        bool "ST SPEAr"
 +      select ARCH_HAS_CPUFREQ
        select ARCH_REQUIRE_GPIOLIB
        select ARM_AMBA
        select CLKDEV_LOOKUP
@@@ -934,7 -925,6 +935,7 @@@ config ARCH_DAVINC
        select GENERIC_IRQ_CHIP
        select HAVE_IDE
        select NEED_MACH_GPIO_H
 +      select USE_OF
        select ZONE_DMA
        help
          Support for TI's DaVinci platform.
@@@ -948,10 -938,11 +949,10 @@@ config ARCH_OMA
        select CLKSRC_MMIO
        select GENERIC_CLOCKEVENTS
        select HAVE_CLK
 -      select NEED_MACH_GPIO_H
        help
          Support for TI's OMAP platform (OMAP1/2/3/4).
  
 -config ARCH_VT8500
 +config ARCH_VT8500_SINGLE
        bool "VIA/WonderMedia 85xx"
        select ARCH_HAS_CPUFREQ
        select ARCH_REQUIRE_GPIOLIB
        select GENERIC_CLOCKEVENTS
        select GENERIC_GPIO
        select HAVE_CLK
 +      select MULTI_IRQ_HANDLER
 +      select SPARSE_IRQ
        select USE_OF
        help
          Support for VIA/WonderMedia VT8500/WM85xx System-on-Chip.
  
 -config ARCH_ZYNQ
 -      bool "Xilinx Zynq ARM Cortex A9 Platform"
 -      select ARM_AMBA
 -      select ARM_GIC
 -      select CLKDEV_LOOKUP
 -      select CPU_V7
 -      select GENERIC_CLOCKEVENTS
 -      select ICST
 -      select MIGHT_HAVE_CACHE_L2X0
 -      select USE_OF
 -      help
 -        Support for Xilinx Zynq ARM Cortex A9 Platform
  endchoice
  
  menu "Multiple platform selection"
@@@ -1022,8 -1023,6 +1023,8 @@@ source "arch/arm/mach-mvebu/Kconfig
  
  source "arch/arm/mach-at91/Kconfig"
  
 +source "arch/arm/mach-bcm/Kconfig"
 +
  source "arch/arm/mach-clps711x/Kconfig"
  
  source "arch/arm/mach-cns3xxx/Kconfig"
@@@ -1060,13 -1059,14 +1061,13 @@@ source "arch/arm/mach-msm/Kconfig
  
  source "arch/arm/mach-mv78xx0/Kconfig"
  
 -source "arch/arm/plat-mxc/Kconfig"
 +source "arch/arm/mach-imx/Kconfig"
  
  source "arch/arm/mach-mxs/Kconfig"
  
  source "arch/arm/mach-netx/Kconfig"
  
  source "arch/arm/mach-nomadik/Kconfig"
 -source "arch/arm/plat-nomadik/Kconfig"
  
  source "arch/arm/plat-omap/Kconfig"
  
@@@ -1114,8 -1114,6 +1115,8 @@@ source "arch/arm/mach-exynos/Kconfig
  
  source "arch/arm/mach-shmobile/Kconfig"
  
 +source "arch/arm/mach-sunxi/Kconfig"
 +
  source "arch/arm/mach-prima2/Kconfig"
  
  source "arch/arm/mach-tegra/Kconfig"
@@@ -1129,12 -1127,8 +1130,12 @@@ source "arch/arm/mach-versatile/Kconfig
  source "arch/arm/mach-vexpress/Kconfig"
  source "arch/arm/plat-versatile/Kconfig"
  
 +source "arch/arm/mach-vt8500/Kconfig"
 +
  source "arch/arm/mach-w90x900/Kconfig"
  
 +source "arch/arm/mach-zynq/Kconfig"
 +
  # Definitions to make life easier
  config ARCH_ACORN
        bool
@@@ -1175,7 -1169,7 +1176,7 @@@ config ARM_NR_BANK
  config IWMMXT
        bool "Enable iWMMXt support"
        depends on CPU_XSCALE || CPU_XSC3 || CPU_MOHAWK || CPU_PJ4
 -      default y if PXA27x || PXA3xx || PXA95x || ARCH_MMP
 +      default y if PXA27x || PXA3xx || ARCH_MMP
        help
          Enable support for iWMMXt context switching at run time if
          running on a CPU that supports it.
@@@ -1,54 -1,30 +1,54 @@@
  ifeq ($(CONFIG_OF),y)
  
 -dtb-$(CONFIG_ARCH_AT91) += aks-cdu.dtb \
 -      at91sam9263ek.dtb \
 -      at91sam9g20ek_2mmc.dtb \
 -      at91sam9g20ek.dtb \
 -      at91sam9g25ek.dtb \
 -      at91sam9m10g45ek.dtb \
 -      at91sam9n12ek.dtb \
 -      ethernut5.dtb \
 -      evk-pro3.dtb \
 -      kizbox.dtb \
 -      tny_a9260.dtb \
 -      tny_a9263.dtb \
 -      tny_a9g20.dtb \
 -      usb_a9260.dtb \
 -      usb_a9263.dtb \
 -      usb_a9g20.dtb
 +# Keep at91 dtb files sorted alphabetically for each SoC
 +# rm9200
 +dtb-$(CONFIG_ARCH_AT91) += at91rm9200ek.dtb
 +# sam9260
 +dtb-$(CONFIG_ARCH_AT91) += animeo_ip.dtb
 +dtb-$(CONFIG_ARCH_AT91) += aks-cdu.dtb
 +dtb-$(CONFIG_ARCH_AT91) += ethernut5.dtb
 +dtb-$(CONFIG_ARCH_AT91) += evk-pro3.dtb
 +dtb-$(CONFIG_ARCH_AT91) += tny_a9260.dtb
 +dtb-$(CONFIG_ARCH_AT91) += usb_a9260.dtb
 +# sam9263
 +dtb-$(CONFIG_ARCH_AT91) += at91sam9263ek.dtb
 +dtb-$(CONFIG_ARCH_AT91) += tny_a9263.dtb
 +dtb-$(CONFIG_ARCH_AT91) += usb_a9263.dtb
 +# sam9g20
 +dtb-$(CONFIG_ARCH_AT91) += at91sam9g20ek.dtb
 +dtb-$(CONFIG_ARCH_AT91) += at91sam9g20ek_2mmc.dtb
 +dtb-$(CONFIG_ARCH_AT91) += kizbox.dtb
 +dtb-$(CONFIG_ARCH_AT91) += tny_a9g20.dtb
 +dtb-$(CONFIG_ARCH_AT91) += usb_a9g20.dtb
 +# sam9g45
 +dtb-$(CONFIG_ARCH_AT91) += at91sam9m10g45ek.dtb
 +dtb-$(CONFIG_ARCH_AT91) += pm9g45.dtb
 +# sam9n12
 +dtb-$(CONFIG_ARCH_AT91) += at91sam9n12ek.dtb
 +# sam9x5
 +dtb-$(CONFIG_ARCH_AT91) += at91sam9g15ek.dtb
 +dtb-$(CONFIG_ARCH_AT91) += at91sam9g25ek.dtb
 +dtb-$(CONFIG_ARCH_AT91) += at91sam9g35ek.dtb
 +dtb-$(CONFIG_ARCH_AT91) += at91sam9x25ek.dtb
 +dtb-$(CONFIG_ARCH_AT91) += at91sam9x35ek.dtb
 +
  dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb
 +dtb-$(CONFIG_ARCH_BCM) += bcm11351-brt.dtb
 +dtb-$(CONFIG_ARCH_DAVINCI) += da850-enbw-cmc.dtb \
 +      da850-evm.dtb
  dtb-$(CONFIG_ARCH_DOVE) += dove-cm-a510.dtb \
        dove-cubox.dtb \
        dove-dove-db.dtb
  dtb-$(CONFIG_ARCH_EXYNOS) += exynos4210-origen.dtb \
        exynos4210-smdkv310.dtb \
        exynos4210-trats.dtb \
 -      exynos5250-smdk5250.dtb
 -dtb-$(CONFIG_ARCH_HIGHBANK) += highbank.dtb
 +      exynos5250-smdk5250.dtb \
 +      exynos5440-ssdk5440.dtb \
 +      exynos4412-smdk4412.dtb \
 +      exynos5250-smdk5250.dtb \
 +      exynos5250-snow.dtb
 +dtb-$(CONFIG_ARCH_HIGHBANK) += highbank.dtb \
 +      ecx-2000.dtb
  dtb-$(CONFIG_ARCH_INTEGRATOR) += integratorap.dtb \
        integratorcp.dtb
  dtb-$(CONFIG_ARCH_LPC32XX) += ea3250.dtb phy3250.dtb
@@@ -60,77 -36,56 +60,79 @@@ dtb-$(CONFIG_ARCH_KIRKWOOD) += kirkwood
        kirkwood-ib62x0.dtb \
        kirkwood-iconnect.dtb \
        kirkwood-iomega_ix2_200.dtb \
 +      kirkwood-is2.dtb \
        kirkwood-km_kirkwood.dtb \
        kirkwood-lschlv2.dtb \
        kirkwood-lsxhl.dtb \
 +      kirkwood-mplcec4.dtb \
 +      kirkwood-ns2.dtb \
 +      kirkwood-ns2lite.dtb \
 +      kirkwood-ns2max.dtb \
 +      kirkwood-ns2mini.dtb \
 +      kirkwood-nsa310.dtb \
 +      kirkwood-topkick.dtb \
        kirkwood-ts219-6281.dtb \
 -      kirkwood-ts219-6282.dtb
 +      kirkwood-ts219-6282.dtb \
 +      kirkwood-openblocks_a6.dtb
  dtb-$(CONFIG_ARCH_MSM) += msm8660-surf.dtb \
        msm8960-cdp.dtb
  dtb-$(CONFIG_ARCH_MVEBU) += armada-370-db.dtb \
-       armada-xp-db.dtb
+       armada-370-mirabox.dtb \
+       armada-xp-db.dtb \
+       armada-xp-openblocks-ax3-4.dtb
  dtb-$(CONFIG_ARCH_MXC) += imx51-babbage.dtb \
        imx53-ard.dtb \
        imx53-evk.dtb \
        imx53-qsb.dtb \
        imx53-smd.dtb \
        imx6q-arm2.dtb \
 +      imx6q-sabreauto.dtb \
        imx6q-sabrelite.dtb \
        imx6q-sabresd.dtb
  dtb-$(CONFIG_ARCH_MXS) += imx23-evk.dtb \
        imx23-olinuxino.dtb \
        imx23-stmp378x_devb.dtb \
 +      imx28-apf28.dtb \
 +      imx28-apf28dev.dtb \
        imx28-apx4devkit.dtb \
        imx28-cfa10036.dtb \
        imx28-cfa10049.dtb \
        imx28-evk.dtb \
        imx28-m28evk.dtb \
 +      imx28-sps1.dtb \
        imx28-tx28.dtb
  dtb-$(CONFIG_ARCH_OMAP2PLUS) += omap2420-h4.dtb \
 +      omap3-beagle.dtb \
        omap3-beagle-xm.dtb \
        omap3-evm.dtb \
        omap3-tobi.dtb \
        omap4-panda.dtb \
 -      omap4-pandaES.dtb \
 -      omap4-var_som.dtb \
 +      omap4-panda-es.dtb \
 +      omap4-var-som.dtb \
        omap4-sdp.dtb \
        omap5-evm.dtb \
        am335x-evm.dtb \
 +      am335x-evmsk.dtb \
        am335x-bone.dtb
 +dtb-$(CONFIG_ARCH_ORION5X) += orion5x-lacie-ethernet-disk-mini-v2.dtb
  dtb-$(CONFIG_ARCH_PRIMA2) += prima2-evb.dtb
 -dtb-$(CONFIG_ARCH_U8500) += snowball.dtb
 +dtb-$(CONFIG_ARCH_U8500) += snowball.dtb \
 +      hrefprev60.dtb \
 +      hrefv60plus.dtb \
 +      ccu9540.dtb
  dtb-$(CONFIG_ARCH_SHMOBILE) += emev2-kzm9d.dtb \
        r8a7740-armadillo800eva.dtb \
 -      sh73a0-kzm9g.dtb
 +      sh73a0-kzm9g.dtb \
 +      sh7372-mackerel.dtb
  dtb-$(CONFIG_ARCH_SPEAR13XX) += spear1310-evb.dtb \
        spear1340-evb.dtb
  dtb-$(CONFIG_ARCH_SPEAR3XX)+= spear300-evb.dtb \
        spear310-evb.dtb \
 -      spear320-evb.dtb
 +      spear320-evb.dtb \
 +      spear320-hmi.dtb
  dtb-$(CONFIG_ARCH_SPEAR6XX)+= spear600-evb.dtb
 +dtb-$(CONFIG_ARCH_SUNXI) += sun4i-cubieboard.dtb \
 +      sun5i-olinuxino.dtb
  dtb-$(CONFIG_ARCH_TEGRA) += tegra20-harmony.dtb \
        tegra20-medcom-wide.dtb \
        tegra20-paz00.dtb \
@@@ -150,14 -105,5 +152,14 @@@ dtb-$(CONFIG_ARCH_VEXPRESS) += vexpress
  dtb-$(CONFIG_ARCH_VT8500) += vt8500-bv07.dtb \
        wm8505-ref.dtb \
        wm8650-mid.dtb
 +dtb-$(CONFIG_ARCH_ZYNQ) += zynq-zc702.dtb
  
 +targets += dtbs
  endif
 +
 +# *.dtb used to be generated in the directory above. Clean out the
 +# old build results so people don't accidentally use them.
 +dtbs: $(addprefix $(obj)/, $(dtb-y))
 +      $(Q)rm -f $(obj)/../*.dtb
 +
 +clean-files := *.dtb
@@@ -4,12 -4,6 +4,12 @@@
        compatible = "marvell,dove";
        model = "Marvell Armada 88AP510 SoC";
  
 +      aliases {
 +              gpio0 = &gpio0;
 +              gpio1 = &gpio1;
 +              gpio2 = &gpio2;
 +      };
 +
        soc@f1000000 {
                compatible = "simple-bus";
                #address-cells = <1>;
                        reg = <0x20204 0x04>, <0x20214 0x04>;
                };
  
+               core_clk: core-clocks@d0214 {
+                       compatible = "marvell,dove-core-clock";
+                       reg = <0xd0214 0x4>;
+                       #clock-cells = <1>;
+               };
+               gate_clk: clock-gating-control@d0038 {
+                       compatible = "marvell,dove-gating-clock";
+                       reg = <0xd0038 0x4>;
+                       clocks = <&core_clk 0>;
+                       #clock-cells = <1>;
+               };
                uart0: serial@12000 {
                        compatible = "ns16550a";
                        reg = <0x12000 0x100>;
@@@ -78,8 -85,7 +91,8 @@@
                        #gpio-cells = <2>;
                        gpio-controller;
                        reg = <0xd0400 0x20>;
 -                      ngpio = <32>;
 +                      ngpios = <32>;
 +                      interrupt-controller;
                        interrupts = <12>, <13>, <14>, <60>;
                };
  
                        #gpio-cells = <2>;
                        gpio-controller;
                        reg = <0xd0420 0x20>;
 -                      ngpio = <32>;
 +                      ngpios = <32>;
 +                      interrupt-controller;
                        interrupts = <61>;
                };
  
                        #gpio-cells = <2>;
                        gpio-controller;
                        reg = <0xe8400 0x0c>;
 -                      ngpio = <8>;
 +                      ngpios = <8>;
 +              };
 +
 +              pinctrl: pinctrl@d0200 {
 +                      compatible = "marvell,dove-pinctrl";
 +                      reg = <0xd0200 0x10>;
                };
  
                spi0: spi@10600 {
                        cell-index = <0>;
                        interrupts = <6>;
                        reg = <0x10600 0x28>;
+                       clocks = <&core_clk 0>;
                        status = "disabled";
                };
  
                        cell-index = <1>;
                        interrupts = <5>;
                        reg = <0x14600 0x28>;
+                       clocks = <&core_clk 0>;
                        status = "disabled";
                };
  
                        interrupts = <11>;
                        clock-frequency = <400000>;
                        timeout-ms = <1000>;
+                       clocks = <&core_clk 0>;
                        status = "disabled";
                };
  
                        compatible = "marvell,dove-sdhci";
                        reg = <0x92000 0x100>;
                        interrupts = <35>, <37>;
+                       clocks = <&gate_clk 8>;
                        status = "disabled";
                };
  
                        compatible = "marvell,dove-sdhci";
                        reg = <0x90000 0x100>;
                        interrupts = <36>, <38>;
+                       clocks = <&gate_clk 9>;
                        status = "disabled";
                };
  
                        compatible = "marvell,orion-sata";
                        reg = <0xa0000 0x2400>;
                        interrupts = <62>;
+                       clocks = <&gate_clk 3>;
                        nr-ports = <1>;
                        status = "disabled";
                };
                              <0xc8000000 0x800>;
                        reg-names = "regs", "sram";
                        interrupts = <31>;
+                       clocks = <&gate_clk 15>;
+                       status = "okay";
+               };
+               xor0: dma-engine@60800 {
+                       compatible = "marvell,orion-xor";
+                       reg = <0x60800 0x100
+                              0x60a00 0x100>;
+                       clocks = <&gate_clk 23>;
                        status = "okay";
+                       channel0 {
+                               interrupts = <39>;
+                               dmacap,memcpy;
+                               dmacap,xor;
+                       };
+                       channel1 {
+                               interrupts = <40>;
+                               dmacap,memset;
+                               dmacap,memcpy;
+                               dmacap,xor;
+                       };
+               };
+               xor1: dma-engine@60900 {
+                       compatible = "marvell,orion-xor";
+                       reg = <0x60900 0x100
+                              0x60b00 0x100>;
+                       clocks = <&gate_clk 24>;
+                       status = "okay";
+                       channel0 {
+                               interrupts = <42>;
+                               dmacap,memcpy;
+                               dmacap,xor;
+                       };
+                       channel1 {
+                               interrupts = <43>;
+                               dmacap,memset;
+                               dmacap,memcpy;
+                               dmacap,xor;
+                       };
                };
        };
  };
@@@ -4,10 -4,6 +4,10 @@@
        compatible = "marvell,kirkwood";
        interrupt-parent = <&intc>;
  
 +      aliases {
 +             gpio0 = &gpio0;
 +             gpio1 = &gpio1;
 +      };
        intc: interrupt-controller {
                compatible = "marvell,orion-intc", "marvell,intc";
                interrupt-controller;
                #address-cells = <1>;
                #size-cells = <1>;
  
+               core_clk: core-clocks@10030 {
+                       compatible = "marvell,kirkwood-core-clock";
+                       reg = <0x10030 0x4>;
+                       #clock-cells = <1>;
+               };
                gpio0: gpio@10100 {
                        compatible = "marvell,orion-gpio";
                        #gpio-cells = <2>;
                        gpio-controller;
                        reg = <0x10100 0x40>;
 -                      ngpio = <32>;
 +                      ngpios = <32>;
 +                      interrupt-controller;
                        interrupts = <35>, <36>, <37>, <38>;
                };
  
@@@ -38,8 -39,7 +44,8 @@@
                        #gpio-cells = <2>;
                        gpio-controller;
                        reg = <0x10140 0x40>;
 -                      ngpio = <18>;
 +                      ngpios = <18>;
 +                      interrupt-controller;
                        interrupts = <39>, <40>, <41>;
                };
  
@@@ -48,6 -48,7 +54,7 @@@
                        reg = <0x12000 0x100>;
                        reg-shift = <2>;
                        interrupts = <33>;
+                       clocks = <&gate_clk 7>;
                        /* set clock-frequency in board dts */
                        status = "disabled";
                };
@@@ -57,6 -58,7 +64,7 @@@
                        reg = <0x12100 0x100>;
                        reg-shift = <2>;
                        interrupts = <34>;
+                       clocks = <&gate_clk 7>;
                        /* set clock-frequency in board dts */
                        status = "disabled";
                };
                        cell-index = <0>;
                        interrupts = <23>;
                        reg = <0x10600 0x28>;
+                       clocks = <&gate_clk 7>;
                        status = "disabled";
                };
  
+               gate_clk: clock-gating-control@2011c {
+                       compatible = "marvell,kirkwood-gating-clock";
+                       reg = <0x2011c 0x4>;
+                       clocks = <&core_clk 0>;
+                       #clock-cells = <1>;
+               };
                wdt@20300 {
                        compatible = "marvell,orion-wdt";
                        reg = <0x20300 0x28>;
+                       clocks = <&gate_clk 7>;
+                       status = "okay";
+               };
+               xor@60800 {
+                       compatible = "marvell,orion-xor";
+                       reg = <0x60800 0x100
+                              0x60A00 0x100>;
+                       status = "okay";
+                       clocks = <&gate_clk 8>;
+                       xor00 {
+                             interrupts = <5>;
+                             dmacap,memcpy;
+                             dmacap,xor;
+                       };
+                       xor01 {
+                             interrupts = <6>;
+                             dmacap,memcpy;
+                             dmacap,xor;
+                             dmacap,memset;
+                       };
+               };
+               xor@60900 {
+                       compatible = "marvell,orion-xor";
+                       reg = <0x60900 0x100
+                              0xd0B00 0x100>;
                        status = "okay";
+                       clocks = <&gate_clk 16>;
+                       xor00 {
+                             interrupts = <7>;
+                             dmacap,memcpy;
+                             dmacap,xor;
+                       };
+                       xor01 {
+                             interrupts = <8>;
+                             dmacap,memcpy;
+                             dmacap,xor;
+                             dmacap,memset;
+                       };
                };
  
 +              ehci@50000 {
 +                      compatible = "marvell,orion-ehci";
 +                      reg = <0x50000 0x1000>;
 +                      interrupts = <19>;
 +                      status = "okay";
 +              };
 +
                sata@80000 {
                        compatible = "marvell,orion-sata";
                        reg = <0x80000 0x5000>;
                        interrupts = <21>;
+                       clocks = <&gate_clk 14>, <&gate_clk 15>;
+                       clock-names = "0", "1";
                        status = "disabled";
                };
  
                        reg = <0x3000000 0x400>;
                        chip-delay = <25>;
                        /* set partition map and/or chip-delay in board dts */
+                       clocks = <&gate_clk 7>;
                        status = "disabled";
                };
  
                        #size-cells = <0>;
                        interrupts = <29>;
                        clock-frequency = <100000>;
+                       clocks = <&gate_clk 7>;
                        status = "disabled";
                };
  
                              <0xf5000000 0x800>;
                        reg-names = "regs", "sram";
                        interrupts = <22>;
+                       clocks = <&gate_clk 17>;
                        status = "okay";
                };
        };
@@@ -111,6 -111,8 +111,8 @@@ static inline void dma_free_noncoherent
  
  extern int dma_supported(struct device *dev, u64 mask);
  
+ extern int arm_dma_set_mask(struct device *dev, u64 dma_mask);
  /**
   * arm_dma_alloc - allocate consistent memory for DMA
   * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
@@@ -210,6 -212,13 +212,6 @@@ static inline void dma_free_writecombin
   */
  extern void __init init_dma_coherent_pool_size(unsigned long size);
  
 -/*
 - * This can be called during boot to increase the size of the consistent
 - * DMA region above it's default value of 2MB. It must be called before the
 - * memory allocator is initialised, i.e. before any core_initcall.
 - */
 -static inline void init_consistent_dma_size(unsigned long size) { }
 -
  /*
   * For SA-1111, IXP425, and ADI systems  the dma-mapping functions are "magic"
   * and utilize bounce buffers as needed to work around limited DMA windows.
@@@ -46,11 -46,8 +46,13 @@@ config MACH_GURUPLU
  
  config ARCH_KIRKWOOD_DT
        bool "Marvell Kirkwood Flattened Device Tree"
 +      select POWER_SUPPLY
 +      select POWER_RESET
 +      select POWER_RESET_GPIO
 +      select REGULATOR
 +      select REGULATOR_FIXED_VOLTAGE
+       select MVEBU_CLK_CORE
+       select MVEBU_CLK_GATING
        select USE_OF
        help
          Say 'Y' here if you want your kernel to support the
@@@ -135,63 -132,6 +137,63 @@@ config MACH_KM_KIRKWOOD_D
          Say 'Y' here if you want your kernel to support the
          Keymile Kirkwood Reference Desgin, using Flattened Device Tree.
  
 +config MACH_INETSPACE_V2_DT
 +      bool "LaCie Internet Space v2 NAS (Flattened Device Tree)"
 +      select ARCH_KIRKWOOD_DT
 +      help
 +        Say 'Y' here if you want your kernel to support the LaCie
 +        Internet Space v2 NAS, using Flattened Device Tree.
 +
 +config MACH_MPLCEC4_DT
 +      bool "MPL CEC4 (Flattened Device Tree)"
 +      select ARCH_KIRKWOOD_DT
 +      help
 +        Say 'Y' here if you want your kernel to support the
 +        MPL CEC4 (Flattened Device Tree).
 +
 +config MACH_NETSPACE_V2_DT
 +      bool "LaCie Network Space v2 NAS (Flattened Device Tree)"
 +      select ARCH_KIRKWOOD_DT
 +      help
 +        Say 'Y' here if you want your kernel to support the LaCie
 +        Network Space v2 NAS, using Flattened Device Tree.
 +
 +config MACH_NETSPACE_MAX_V2_DT
 +      bool "LaCie Network Space Max v2 NAS (Flattened Device Tree)"
 +      select ARCH_KIRKWOOD_DT
 +      help
 +        Say 'Y' here if you want your kernel to support the LaCie
 +        Network Space Max v2 NAS, using Flattened Device Tree.
 +
 +config MACH_NETSPACE_LITE_V2_DT
 +      bool "LaCie Network Space Lite v2 NAS (Flattened Device Tree)"
 +      select ARCH_KIRKWOOD_DT
 +      help
 +        Say 'Y' here if you want your kernel to support the LaCie
 +        Network Space Lite v2 NAS, using Flattened Device Tree.
 +
 +config MACH_NETSPACE_MINI_V2_DT
 +      bool "LaCie Network Space Mini v2 NAS (Flattened Device Tree)"
 +      select ARCH_KIRKWOOD_DT
 +      help
 +        Say 'Y' here if you want your kernel to support the LaCie
 +        Network Space Mini v2 NAS (aka SafeBox), using Flattened
 +        Device Tree.
 +
 +config MACH_OPENBLOCKS_A6_DT
 +      bool "Plat'Home OpenBlocks A6 (Flattened Device Tree)"
 +      select ARCH_KIRKWOOD_DT
 +      help
 +        Say 'Y' here if you want your kernel to support the
 +        Plat'Home OpenBlocks A6 (Flattened Device Tree).
 +
 +config MACH_TOPKICK_DT
 +      bool "USI Topkick (Flattened Device Tree)"
 +      select ARCH_KIRKWOOD_DT
 +      help
 +        Say 'Y' here if you want your kernel to support the
 +        USI Topkick, using Flattened Device Tree
 +
  config MACH_TS219
        bool "QNAP TS-110, TS-119, TS-119P+, TS-210, TS-219, TS-219P and TS-219P+ Turbo NAS"
        help
@@@ -278,14 -218,6 +280,14 @@@ config MACH_T532
          Say 'Y' here if you want your kernel to support the
          HP t5325 Thin Client.
  
 +config MACH_NSA310_DT
 +      bool "ZyXEL NSA-310 (Flattened Device Tree)"
 +      select ARCH_KIRKWOOD_DT
 +      select ARM_ATAG_DTB_COMPAT
 +      help
 +        Say 'Y' here if you want your kernel to support the
 +        ZyXEL NSA-310 board (Flattened Device Tree).
 +
  endmenu
  
  endif
  #include <linux/init.h>
  #include <linux/of.h>
  #include <linux/of_platform.h>
+ #include <linux/clk-provider.h>
+ #include <linux/clk/mvebu.h>
  #include <linux/kexec.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
  #include <mach/bridge-regs.h>
+ #include <linux/platform_data/usb-ehci-orion.h>
  #include <plat/irq.h>
+ #include <plat/common.h>
  #include "common.h"
  
  static struct of_device_id kirkwood_dt_match_table[] __initdata = {
        { }
  };
  
- static struct of_dev_auxdata kirkwood_auxdata_lookup[] __initdata = {
-       OF_DEV_AUXDATA("marvell,orion-spi", 0xf1010600, "orion_spi.0", NULL),
-       OF_DEV_AUXDATA("marvell,mv64xxx-i2c", 0xf1011000, "mv64xxx_i2c.0",
-                      NULL),
-       OF_DEV_AUXDATA("marvell,mv64xxx-i2c", 0xf1011100, "mv64xxx_i2c.1",
-                      NULL),
-       OF_DEV_AUXDATA("marvell,orion-wdt", 0xf1020300, "orion_wdt", NULL),
-       OF_DEV_AUXDATA("marvell,orion-sata", 0xf1080000, "sata_mv.0", NULL),
-       OF_DEV_AUXDATA("marvell,orion-nand", 0xf4000000, "orion_nand", NULL),
-       OF_DEV_AUXDATA("marvell,orion-crypto", 0xf1030000, "mv_crypto", NULL),
-       {},
- };
+ /*
+  * There are still devices that doesn't know about DT yet.  Get clock
+  * gates here and add a clock lookup alias, so that old platform
+  * devices still work.
+ */
+ static void __init kirkwood_legacy_clk_init(void)
+ {
+       struct device_node *np = of_find_compatible_node(
+               NULL, NULL, "marvell,kirkwood-gating-clock");
+       struct of_phandle_args clkspec;
+       clkspec.np = np;
+       clkspec.args_count = 1;
+       clkspec.args[0] = CGC_BIT_GE0;
+       orion_clkdev_add(NULL, "mv643xx_eth_port.0",
+                        of_clk_get_from_provider(&clkspec));
+       clkspec.args[0] = CGC_BIT_PEX0;
+       orion_clkdev_add("0", "pcie",
+                        of_clk_get_from_provider(&clkspec));
+       clkspec.args[0] = CGC_BIT_USB0;
+       orion_clkdev_add(NULL, "orion-ehci.0",
+                        of_clk_get_from_provider(&clkspec));
+       clkspec.args[0] = CGC_BIT_PEX1;
+       orion_clkdev_add("1", "pcie",
+                        of_clk_get_from_provider(&clkspec));
+       clkspec.args[0] = CGC_BIT_GE1;
+       orion_clkdev_add(NULL, "mv643xx_eth_port.1",
+                        of_clk_get_from_provider(&clkspec));
+ }
+ static void __init kirkwood_of_clk_init(void)
+ {
+       mvebu_clocks_init();
+       kirkwood_legacy_clk_init();
+ }
  
  static void __init kirkwood_dt_init(void)
  {
        kirkwood_l2_init();
  
        /* Setup root of clk tree */
-       kirkwood_clk_init();
-       /* internal devices that every board has */
-       kirkwood_xor0_init();
-       kirkwood_xor1_init();
+       kirkwood_of_clk_init();
  
  #ifdef CONFIG_KEXEC
        kexec_reinit = kirkwood_enable_pcie;
        if (of_machine_is_compatible("keymile,km_kirkwood"))
                km_kirkwood_init();
  
-       of_platform_populate(NULL, kirkwood_dt_match_table,
-                            kirkwood_auxdata_lookup, NULL);
 +      if (of_machine_is_compatible("lacie,inetspace_v2") ||
 +          of_machine_is_compatible("lacie,netspace_v2") ||
 +          of_machine_is_compatible("lacie,netspace_max_v2") ||
 +          of_machine_is_compatible("lacie,netspace_lite_v2") ||
 +          of_machine_is_compatible("lacie,netspace_mini_v2"))
 +              ns2_init();
 +
 +      if (of_machine_is_compatible("mpl,cec4"))
 +              mplcec4_init();
 +
 +      if (of_machine_is_compatible("plathome,openblocks-a6"))
 +              openblocks_a6_init();
 +
 +      if (of_machine_is_compatible("usi,topkick"))
 +              usi_topkick_init();
 +
 +      if (of_machine_is_compatible("zyxel,nsa310"))
 +              nsa310_init();
 +
+       of_platform_populate(NULL, kirkwood_dt_match_table, NULL, NULL);
  }
  
 -static const char *kirkwood_dt_board_compat[] = {
 +static const char * const kirkwood_dt_board_compat[] = {
        "globalscale,dreamplug",
        "dlink,dns-320",
        "dlink,dns-325",
        "buffalo,lsxl",
        "iom,ix2-200",
        "keymile,km_kirkwood",
 +      "lacie,inetspace_v2",
 +      "lacie,netspace_max_v2",
 +      "lacie,netspace_v2",
 +      "lacie,netspace_lite_v2",
 +      "lacie,netspace_mini_v2",
 +      "mpl,cec4",
 +      "plathome,openblocks-a6",
 +      "usi,topkick",
 +      "zyxel,nsa310",
        NULL
  };
  
  #include <linux/clk-provider.h>
  #include <linux/spinlock.h>
  #include <linux/mv643xx_i2c.h>
 +#include <linux/timex.h>
 +#include <linux/kexec.h>
  #include <net/dsa.h>
  #include <asm/page.h>
 -#include <asm/timex.h>
 -#include <asm/kexec.h>
  #include <asm/mach/map.h>
  #include <asm/mach/time.h>
  #include <mach/kirkwood.h>
@@@ -260,13 -260,12 +260,13 @@@ void __init kirkwood_clk_init(void
        orion_clkdev_add(NULL, "orion_nand", runit);
        orion_clkdev_add(NULL, "mvsdio", sdio);
        orion_clkdev_add(NULL, "mv_crypto", crypto);
-       orion_clkdev_add(NULL, MV_XOR_SHARED_NAME ".0", xor0);
-       orion_clkdev_add(NULL, MV_XOR_SHARED_NAME ".1", xor1);
+       orion_clkdev_add(NULL, MV_XOR_NAME ".0", xor0);
+       orion_clkdev_add(NULL, MV_XOR_NAME ".1", xor1);
        orion_clkdev_add("0", "pcie", pex0);
        orion_clkdev_add("1", "pcie", pex1);
        orion_clkdev_add(NULL, "kirkwood-i2s", audio);
        orion_clkdev_add(NULL, MV64XXX_I2C_CTLR_NAME ".0", runit);
 +      orion_clkdev_add(NULL, MV64XXX_I2C_CTLR_NAME ".1", runit);
  
        /* Marvell says runit is used by SPI, UART, NAND, TWSI, ...,
         * so should never be gated.
@@@ -426,7 -425,7 +426,7 @@@ void __init kirkwood_sdio_init(struct m
  /*****************************************************************************
   * SPI
   ****************************************************************************/
 -void __init kirkwood_spi_init()
 +void __init kirkwood_spi_init(void)
  {
        orion_spi_init(SPI_PHYS_BASE);
  }
@@@ -647,7 -646,8 +647,7 @@@ void __init kirkwood_l2_init(void
  
  void __init kirkwood_init(void)
  {
 -      printk(KERN_INFO "Kirkwood: %s, TCLK=%d.\n",
 -              kirkwood_id(), kirkwood_tclk);
 +      pr_info("Kirkwood: %s, TCLK=%d.\n", kirkwood_id(), kirkwood_tclk);
  
        /*
         * Disable propagation of mbus errors to the CPU local bus,
        kirkwood_xor1_init();
        kirkwood_crypto_init();
  
 -#ifdef CONFIG_KEXEC 
 +#ifdef CONFIG_KEXEC
        kexec_reinit = kirkwood_enable_pcie;
  #endif
  }
diff --combined arch/arm/mm/proc-v7.S
@@@ -57,7 -57,7 +57,7 @@@ ENTRY(cpu_v7_reset
   THUMB(       bic     r1, r1, #1 << 30 )              @ SCTLR.TE (Thumb exceptions)
        mcr     p15, 0, r1, c1, c0, 0           @ disable MMU
        isb
 -      mov     pc, r0
 +      bx      r0
  ENDPROC(cpu_v7_reset)
        .popsection
  
@@@ -169,6 -169,63 +169,63 @@@ __v7_ca15mp_setup
        orreq   r0, r0, r10                     @ Enable CPU-specific SMP bits
        mcreq   p15, 0, r0, c1, c0, 1
  #endif
+ __v7_pj4b_setup:
+ #ifdef CONFIG_CPU_PJ4B
+ /* Auxiliary Debug Modes Control 1 Register */
+ #define PJ4B_STATIC_BP (1 << 2) /* Enable Static BP */
+ #define PJ4B_INTER_PARITY (1 << 8) /* Disable Internal Parity Handling */
+ #define PJ4B_BCK_OFF_STREX (1 << 5) /* Enable the back off of STREX instr */
+ #define PJ4B_CLEAN_LINE (1 << 16) /* Disable data transfer for clean line */
+ /* Auxiliary Debug Modes Control 2 Register */
+ #define PJ4B_FAST_LDR (1 << 23) /* Disable fast LDR */
+ #define PJ4B_SNOOP_DATA (1 << 25) /* Do not interleave write and snoop data */
+ #define PJ4B_CWF (1 << 27) /* Disable Critical Word First feature */
+ #define PJ4B_OUTSDNG_NC (1 << 29) /* Disable outstanding non cacheable rqst */
+ #define PJ4B_L1_REP_RR (1 << 30) /* L1 replacement - Strict round robin */
+ #define PJ4B_AUX_DBG_CTRL2 (PJ4B_SNOOP_DATA | PJ4B_CWF |\
+                           PJ4B_OUTSDNG_NC | PJ4B_L1_REP_RR)
+ /* Auxiliary Functional Modes Control Register 0 */
+ #define PJ4B_SMP_CFB (1 << 1) /* Set SMP mode. Join the coherency fabric */
+ #define PJ4B_L1_PAR_CHK (1 << 2) /* Support L1 parity checking */
+ #define PJ4B_BROADCAST_CACHE (1 << 8) /* Broadcast Cache and TLB maintenance */
+ /* Auxiliary Debug Modes Control 0 Register */
+ #define PJ4B_WFI_WFE (1 << 22) /* WFI/WFE - serve the DVM and back to idle */
+       /* Auxiliary Debug Modes Control 1 Register */
+       mrc     p15, 1, r0, c15, c1, 1
+       orr     r0, r0, #PJ4B_CLEAN_LINE
+       orr     r0, r0, #PJ4B_BCK_OFF_STREX
+       orr     r0, r0, #PJ4B_INTER_PARITY
+       bic     r0, r0, #PJ4B_STATIC_BP
+       mcr     p15, 1, r0, c15, c1, 1
+       /* Auxiliary Debug Modes Control 2 Register */
+       mrc     p15, 1, r0, c15, c1, 2
+       bic     r0, r0, #PJ4B_FAST_LDR
+       orr     r0, r0, #PJ4B_AUX_DBG_CTRL2
+       mcr     p15, 1, r0, c15, c1, 2
+       /* Auxiliary Functional Modes Control Register 0 */
+       mrc     p15, 1, r0, c15, c2, 0
+ #ifdef CONFIG_SMP
+       orr     r0, r0, #PJ4B_SMP_CFB
+ #endif
+       orr     r0, r0, #PJ4B_L1_PAR_CHK
+       orr     r0, r0, #PJ4B_BROADCAST_CACHE
+       mcr     p15, 1, r0, c15, c2, 0
+       /* Auxiliary Debug Modes Control 0 Register */
+       mrc     p15, 1, r0, c15, c1, 0
+       orr     r0, r0, #PJ4B_WFI_WFE
+       mcr     p15, 1, r0, c15, c1, 0
+ #endif /* CONFIG_CPU_PJ4B */
  __v7_setup:
        adr     r12, __v7_setup_stack           @ the local stack
        stmia   r12, {r0-r5, r7, r9, r11, lr}
@@@ -342,6 -399,16 +399,16 @@@ __v7_ca9mp_proc_info
        .long   0xff0ffff0
        __v7_proc __v7_ca9mp_setup
        .size   __v7_ca9mp_proc_info, . - __v7_ca9mp_proc_info
+       /*
+        * Marvell PJ4B processor.
+        */
+       .type   __v7_pj4b_proc_info, #object
+ __v7_pj4b_proc_info:
+       .long   0x562f5840
+       .long   0xfffffff0
+       __v7_proc __v7_pj4b_setup
+       .size   __v7_pj4b_proc_info, . - __v7_pj4b_proc_info
  #endif        /* CONFIG_ARM_LPAE */
  
        /*
diff --combined drivers/clk/Kconfig
@@@ -42,12 -42,10 +42,12 @@@ config COMMON_CLK_WM831
  
  config COMMON_CLK_VERSATILE
        bool "Clock driver for ARM Reference designs"
 -      depends on ARCH_INTEGRATOR || ARCH_REALVIEW
 +      depends on ARCH_INTEGRATOR || ARCH_REALVIEW || ARCH_VEXPRESS
        ---help---
 -          Supports clocking on ARM Reference designs Integrator/AP,
 -        Integrator/CP, RealView PB1176, EB, PB11MP and PBX.
 +          Supports clocking on ARM Reference designs:
 +        - Integrator/AP and Integrator/CP
 +        - RealView PB1176, EB, PB11MP and PBX
 +        - Versatile Express
  
  config COMMON_CLK_MAX77686
        tristate "Clock driver for Maxim 77686 MFD"
        ---help---
          This driver supports Maxim 77686 crystal oscillator clock. 
  
 +config CLK_TWL6040
 +      tristate "External McPDM functional clock from twl6040"
 +      depends on TWL6040_CORE
 +      ---help---
 +        Enable the external functional clock support on OMAP4+ platforms for
 +        McPDM. McPDM module is using the external bit clock on the McPDM bus
 +        as functional clock.
 +
  endmenu
+ source "drivers/clk/mvebu/Kconfig"
diff --combined drivers/clk/Makefile
@@@ -13,16 -13,14 +13,17 @@@ obj-$(CONFIG_PLAT_SPEAR)   += spear
  obj-$(CONFIG_ARCH_U300)               += clk-u300.o
  obj-$(CONFIG_COMMON_CLK_VERSATILE) += versatile/
  obj-$(CONFIG_ARCH_PRIMA2)     += clk-prima2.o
+ obj-$(CONFIG_PLAT_ORION)      += mvebu/
  ifeq ($(CONFIG_COMMON_CLK), y)
  obj-$(CONFIG_ARCH_MMP)                += mmp/
  endif
  obj-$(CONFIG_MACH_LOONGSON1)  += clk-ls1x.o
  obj-$(CONFIG_ARCH_U8500)      += ux500/
  obj-$(CONFIG_ARCH_VT8500)     += clk-vt8500.o
 +obj-$(CONFIG_ARCH_SUNXI)      += clk-sunxi.o
 +obj-$(CONFIG_ARCH_ZYNQ)               += clk-zynq.o
  
  # Chip specific
  obj-$(CONFIG_COMMON_CLK_WM831X) += clk-wm831x.o
  obj-$(CONFIG_COMMON_CLK_MAX77686) += clk-max77686.o
 +obj-$(CONFIG_CLK_TWL6040)     += clk-twl6040.o
diff --combined drivers/dma/mv_xor.c
@@@ -26,6 -26,9 +26,9 @@@
  #include <linux/platform_device.h>
  #include <linux/memory.h>
  #include <linux/clk.h>
+ #include <linux/of.h>
+ #include <linux/of_irq.h>
+ #include <linux/irqdomain.h>
  #include <linux/platform_data/dma-mv_xor.h>
  
  #include "dmaengine.h"
  static void mv_xor_issue_pending(struct dma_chan *chan);
  
  #define to_mv_xor_chan(chan)          \
-       container_of(chan, struct mv_xor_chan, common)
- #define to_mv_xor_device(dev)         \
-       container_of(dev, struct mv_xor_device, common)
+       container_of(chan, struct mv_xor_chan, dmachan)
  
  #define to_mv_xor_slot(tx)            \
        container_of(tx, struct mv_xor_desc_slot, async_tx)
  
+ #define mv_chan_to_devp(chan)           \
+       ((chan)->dmadev.dev)
  static void mv_desc_init(struct mv_xor_desc_slot *desc, unsigned long flags)
  {
        struct mv_xor_desc *hw_desc = desc->hw_desc;
@@@ -166,7 -169,7 +169,7 @@@ static int mv_is_err_intr(u32 intr_caus
  static void mv_xor_device_clear_eoc_cause(struct mv_xor_chan *chan)
  {
        u32 val = ~(1 << (chan->idx * 16));
-       dev_dbg(chan->device->common.dev, "%s, val 0x%08x\n", __func__, val);
+       dev_dbg(mv_chan_to_devp(chan), "%s, val 0x%08x\n", __func__, val);
        __raw_writel(val, XOR_INTR_CAUSE(chan));
  }
  
@@@ -206,9 -209,9 +209,9 @@@ static void mv_set_mode(struct mv_xor_c
                op_mode = XOR_OPERATION_MODE_MEMSET;
                break;
        default:
-               dev_printk(KERN_ERR, chan->device->common.dev,
-                          "error: unsupported operation %d.\n",
-                          type);
+               dev_err(mv_chan_to_devp(chan),
+                       "error: unsupported operation %d.\n",
+                       type);
                BUG();
                return;
        }
@@@ -223,7 -226,7 +226,7 @@@ static void mv_chan_activate(struct mv_
  {
        u32 activation;
  
-       dev_dbg(chan->device->common.dev, " activate chan.\n");
+       dev_dbg(mv_chan_to_devp(chan), " activate chan.\n");
        activation = __raw_readl(XOR_ACTIVATION(chan));
        activation |= 0x1;
        __raw_writel(activation, XOR_ACTIVATION(chan));
@@@ -251,7 -254,7 +254,7 @@@ static int mv_chan_xor_slot_count(size_
  static void mv_xor_free_slots(struct mv_xor_chan *mv_chan,
                              struct mv_xor_desc_slot *slot)
  {
-       dev_dbg(mv_chan->device->common.dev, "%s %d slot %p\n",
+       dev_dbg(mv_chan_to_devp(mv_chan), "%s %d slot %p\n",
                __func__, __LINE__, slot);
  
        slot->slots_per_op = 0;
  static void mv_xor_start_new_chain(struct mv_xor_chan *mv_chan,
                                   struct mv_xor_desc_slot *sw_desc)
  {
-       dev_dbg(mv_chan->device->common.dev, "%s %d: sw_desc %p\n",
+       dev_dbg(mv_chan_to_devp(mv_chan), "%s %d: sw_desc %p\n",
                __func__, __LINE__, sw_desc);
        if (sw_desc->type != mv_chan->current_type)
                mv_set_mode(mv_chan, sw_desc->type);
                mv_chan_set_next_descriptor(mv_chan, sw_desc->async_tx.phys);
        }
        mv_chan->pending += sw_desc->slot_cnt;
-       mv_xor_issue_pending(&mv_chan->common);
+       mv_xor_issue_pending(&mv_chan->dmachan);
  }
  
  static dma_cookie_t
@@@ -308,8 -311,7 +311,7 @@@ mv_xor_run_tx_complete_actions(struct m
                 */
                if (desc->group_head && desc->unmap_len) {
                        struct mv_xor_desc_slot *unmap = desc->group_head;
-                       struct device *dev =
-                               &mv_chan->device->pdev->dev;
+                       struct device *dev = mv_chan_to_devp(mv_chan);
                        u32 len = unmap->unmap_len;
                        enum dma_ctrl_flags flags = desc->async_tx.flags;
                        u32 src_cnt;
@@@ -353,7 -355,7 +355,7 @@@ mv_xor_clean_completed_slots(struct mv_
  {
        struct mv_xor_desc_slot *iter, *_iter;
  
-       dev_dbg(mv_chan->device->common.dev, "%s %d\n", __func__, __LINE__);
+       dev_dbg(mv_chan_to_devp(mv_chan), "%s %d\n", __func__, __LINE__);
        list_for_each_entry_safe(iter, _iter, &mv_chan->completed_slots,
                                 completed_node) {
  
@@@ -369,7 -371,7 +371,7 @@@ static in
  mv_xor_clean_slot(struct mv_xor_desc_slot *desc,
        struct mv_xor_chan *mv_chan)
  {
-       dev_dbg(mv_chan->device->common.dev, "%s %d: desc %p flags %d\n",
+       dev_dbg(mv_chan_to_devp(mv_chan), "%s %d: desc %p flags %d\n",
                __func__, __LINE__, desc, desc->async_tx.flags);
        list_del(&desc->chain_node);
        /* the client is allowed to attach dependent operations
@@@ -393,8 -395,8 +395,8 @@@ static void __mv_xor_slot_cleanup(struc
        u32 current_desc = mv_chan_get_current_desc(mv_chan);
        int seen_current = 0;
  
-       dev_dbg(mv_chan->device->common.dev, "%s %d\n", __func__, __LINE__);
-       dev_dbg(mv_chan->device->common.dev, "current_desc %x\n", current_desc);
+       dev_dbg(mv_chan_to_devp(mv_chan), "%s %d\n", __func__, __LINE__);
+       dev_dbg(mv_chan_to_devp(mv_chan), "current_desc %x\n", current_desc);
        mv_xor_clean_completed_slots(mv_chan);
  
        /* free completed slots from the chain starting with
        }
  
        if (cookie > 0)
-               mv_chan->common.completed_cookie = cookie;
+               mv_chan->dmachan.completed_cookie = cookie;
  }
  
  static void
@@@ -547,7 -549,7 +549,7 @@@ mv_xor_tx_submit(struct dma_async_tx_de
        dma_cookie_t cookie;
        int new_hw_chain = 1;
  
-       dev_dbg(mv_chan->device->common.dev,
+       dev_dbg(mv_chan_to_devp(mv_chan),
                "%s sw_desc %p: async_tx %p\n",
                __func__, sw_desc, &sw_desc->async_tx);
  
                if (!mv_can_chain(grp_start))
                        goto submit_done;
  
-               dev_dbg(mv_chan->device->common.dev, "Append to last desc %x\n",
+               dev_dbg(mv_chan_to_devp(mv_chan), "Append to last desc %x\n",
                        old_chain_tail->async_tx.phys);
  
                /* fix up the hardware chain */
@@@ -604,9 -606,7 +606,7 @@@ static int mv_xor_alloc_chan_resources(
        int idx;
        struct mv_xor_chan *mv_chan = to_mv_xor_chan(chan);
        struct mv_xor_desc_slot *slot = NULL;
-       struct mv_xor_platform_data *plat_data =
-               mv_chan->device->pdev->dev.platform_data;
-       int num_descs_in_pool = plat_data->pool_size/MV_XOR_SLOT_SIZE;
+       int num_descs_in_pool = MV_XOR_POOL_SIZE/MV_XOR_SLOT_SIZE;
  
        /* Allocate descriptor slots */
        idx = mv_chan->slots_allocated;
                                " %d descriptor slots", idx);
                        break;
                }
-               hw_desc = (char *) mv_chan->device->dma_desc_pool_virt;
+               hw_desc = (char *) mv_chan->dma_desc_pool_virt;
                slot->hw_desc = (void *) &hw_desc[idx * MV_XOR_SLOT_SIZE];
  
                dma_async_tx_descriptor_init(&slot->async_tx, chan);
                INIT_LIST_HEAD(&slot->chain_node);
                INIT_LIST_HEAD(&slot->slot_node);
                INIT_LIST_HEAD(&slot->tx_list);
-               hw_desc = (char *) mv_chan->device->dma_desc_pool;
+               hw_desc = (char *) mv_chan->dma_desc_pool;
                slot->async_tx.phys =
                        (dma_addr_t) &hw_desc[idx * MV_XOR_SLOT_SIZE];
                slot->idx = idx++;
                                        struct mv_xor_desc_slot,
                                        slot_node);
  
-       dev_dbg(mv_chan->device->common.dev,
+       dev_dbg(mv_chan_to_devp(mv_chan),
                "allocated %d descriptor slots last_used: %p\n",
                mv_chan->slots_allocated, mv_chan->last_used);
  
@@@ -656,7 -656,7 +656,7 @@@ mv_xor_prep_dma_memcpy(struct dma_chan 
        struct mv_xor_desc_slot *sw_desc, *grp_start;
        int slot_cnt;
  
-       dev_dbg(mv_chan->device->common.dev,
+       dev_dbg(mv_chan_to_devp(mv_chan),
                "%s dest: %x src %x len: %u flags: %ld\n",
                __func__, dest, src, len, flags);
        if (unlikely(len < MV_XOR_MIN_BYTE_COUNT))
        }
        spin_unlock_bh(&mv_chan->lock);
  
-       dev_dbg(mv_chan->device->common.dev,
+       dev_dbg(mv_chan_to_devp(mv_chan),
                "%s sw_desc %p async_tx %p\n",
                __func__, sw_desc, sw_desc ? &sw_desc->async_tx : 0);
  
@@@ -695,7 -695,7 +695,7 @@@ mv_xor_prep_dma_memset(struct dma_chan 
        struct mv_xor_desc_slot *sw_desc, *grp_start;
        int slot_cnt;
  
-       dev_dbg(mv_chan->device->common.dev,
+       dev_dbg(mv_chan_to_devp(mv_chan),
                "%s dest: %x len: %u flags: %ld\n",
                __func__, dest, len, flags);
        if (unlikely(len < MV_XOR_MIN_BYTE_COUNT))
                sw_desc->unmap_len = len;
        }
        spin_unlock_bh(&mv_chan->lock);
-       dev_dbg(mv_chan->device->common.dev,
+       dev_dbg(mv_chan_to_devp(mv_chan),
                "%s sw_desc %p async_tx %p \n",
                __func__, sw_desc, &sw_desc->async_tx);
        return sw_desc ? &sw_desc->async_tx : NULL;
@@@ -737,7 -737,7 +737,7 @@@ mv_xor_prep_dma_xor(struct dma_chan *ch
  
        BUG_ON(len > MV_XOR_MAX_BYTE_COUNT);
  
-       dev_dbg(mv_chan->device->common.dev,
+       dev_dbg(mv_chan_to_devp(mv_chan),
                "%s src_cnt: %d len: dest %x %u flags: %ld\n",
                __func__, src_cnt, len, dest, flags);
  
                        mv_desc_set_src_addr(grp_start, src_cnt, src[src_cnt]);
        }
        spin_unlock_bh(&mv_chan->lock);
-       dev_dbg(mv_chan->device->common.dev,
+       dev_dbg(mv_chan_to_devp(mv_chan),
                "%s sw_desc %p async_tx %p \n",
                __func__, sw_desc, &sw_desc->async_tx);
        return sw_desc ? &sw_desc->async_tx : NULL;
@@@ -791,12 -791,12 +791,12 @@@ static void mv_xor_free_chan_resources(
        }
        mv_chan->last_used = NULL;
  
-       dev_dbg(mv_chan->device->common.dev, "%s slots_allocated %d\n",
+       dev_dbg(mv_chan_to_devp(mv_chan), "%s slots_allocated %d\n",
                __func__, mv_chan->slots_allocated);
        spin_unlock_bh(&mv_chan->lock);
  
        if (in_use_descs)
-               dev_err(mv_chan->device->common.dev,
+               dev_err(mv_chan_to_devp(mv_chan),
                        "freeing %d in use descriptors!\n", in_use_descs);
  }
  
@@@ -828,42 -828,42 +828,42 @@@ static void mv_dump_xor_regs(struct mv_
        u32 val;
  
        val = __raw_readl(XOR_CONFIG(chan));
-       dev_printk(KERN_ERR, chan->device->common.dev,
-                  "config       0x%08x.\n", val);
+       dev_err(mv_chan_to_devp(chan),
+               "config       0x%08x.\n", val);
  
        val = __raw_readl(XOR_ACTIVATION(chan));
-       dev_printk(KERN_ERR, chan->device->common.dev,
-                  "activation   0x%08x.\n", val);
+       dev_err(mv_chan_to_devp(chan),
+               "activation   0x%08x.\n", val);
  
        val = __raw_readl(XOR_INTR_CAUSE(chan));
-       dev_printk(KERN_ERR, chan->device->common.dev,
-                  "intr cause   0x%08x.\n", val);
+       dev_err(mv_chan_to_devp(chan),
+               "intr cause   0x%08x.\n", val);
  
        val = __raw_readl(XOR_INTR_MASK(chan));
-       dev_printk(KERN_ERR, chan->device->common.dev,
-                  "intr mask    0x%08x.\n", val);
+       dev_err(mv_chan_to_devp(chan),
+               "intr mask    0x%08x.\n", val);
  
        val = __raw_readl(XOR_ERROR_CAUSE(chan));
-       dev_printk(KERN_ERR, chan->device->common.dev,
-                  "error cause  0x%08x.\n", val);
+       dev_err(mv_chan_to_devp(chan),
+               "error cause  0x%08x.\n", val);
  
        val = __raw_readl(XOR_ERROR_ADDR(chan));
-       dev_printk(KERN_ERR, chan->device->common.dev,
-                  "error addr   0x%08x.\n", val);
+       dev_err(mv_chan_to_devp(chan),
+               "error addr   0x%08x.\n", val);
  }
  
  static void mv_xor_err_interrupt_handler(struct mv_xor_chan *chan,
                                         u32 intr_cause)
  {
        if (intr_cause & (1 << 4)) {
-            dev_dbg(chan->device->common.dev,
+            dev_dbg(mv_chan_to_devp(chan),
                     "ignore this error\n");
             return;
        }
  
-       dev_printk(KERN_ERR, chan->device->common.dev,
-                  "error on chan %d. intr cause 0x%08x.\n",
-                  chan->idx, intr_cause);
+       dev_err(mv_chan_to_devp(chan),
+               "error on chan %d. intr cause 0x%08x.\n",
+               chan->idx, intr_cause);
  
        mv_dump_xor_regs(chan);
        BUG();
@@@ -874,7 -874,7 +874,7 @@@ static irqreturn_t mv_xor_interrupt_han
        struct mv_xor_chan *chan = data;
        u32 intr_cause = mv_chan_get_intr_cause(chan);
  
-       dev_dbg(chan->device->common.dev, "intr cause %x\n", intr_cause);
+       dev_dbg(mv_chan_to_devp(chan), "intr cause %x\n", intr_cause);
  
        if (mv_is_err_intr(intr_cause))
                mv_xor_err_interrupt_handler(chan, intr_cause);
@@@ -901,7 -901,7 +901,7 @@@ static void mv_xor_issue_pending(struc
   */
  #define MV_XOR_TEST_SIZE 2000
  
- static int mv_xor_memcpy_self_test(struct mv_xor_device *device)
 -static int __devinit mv_xor_memcpy_self_test(struct mv_xor_chan *mv_chan)
++static int mv_xor_memcpy_self_test(struct mv_xor_chan *mv_chan)
  {
        int i;
        void *src, *dest;
        dma_cookie_t cookie;
        struct dma_async_tx_descriptor *tx;
        int err = 0;
-       struct mv_xor_chan *mv_chan;
  
        src = kmalloc(sizeof(u8) * MV_XOR_TEST_SIZE, GFP_KERNEL);
        if (!src)
        for (i = 0; i < MV_XOR_TEST_SIZE; i++)
                ((u8 *) src)[i] = (u8)i;
  
-       /* Start copy, using first DMA channel */
-       dma_chan = container_of(device->common.channels.next,
-                               struct dma_chan,
-                               device_node);
+       dma_chan = &mv_chan->dmachan;
        if (mv_xor_alloc_chan_resources(dma_chan) < 1) {
                err = -ENODEV;
                goto out;
  
        if (mv_xor_status(dma_chan, cookie, NULL) !=
            DMA_SUCCESS) {
-               dev_printk(KERN_ERR, dma_chan->device->dev,
-                          "Self-test copy timed out, disabling\n");
+               dev_err(dma_chan->device->dev,
+                       "Self-test copy timed out, disabling\n");
                err = -ENODEV;
                goto free_resources;
        }
  
-       mv_chan = to_mv_xor_chan(dma_chan);
-       dma_sync_single_for_cpu(&mv_chan->device->pdev->dev, dest_dma,
+       dma_sync_single_for_cpu(dma_chan->device->dev, dest_dma,
                                MV_XOR_TEST_SIZE, DMA_FROM_DEVICE);
        if (memcmp(src, dest, MV_XOR_TEST_SIZE)) {
-               dev_printk(KERN_ERR, dma_chan->device->dev,
-                          "Self-test copy failed compare, disabling\n");
+               dev_err(dma_chan->device->dev,
+                       "Self-test copy failed compare, disabling\n");
                err = -ENODEV;
                goto free_resources;
        }
@@@ -975,8 -970,8 +970,8 @@@ out
  }
  
  #define MV_XOR_NUM_SRC_TEST 4 /* must be <= 15 */
 -static int __devinit
 +static int
- mv_xor_xor_self_test(struct mv_xor_device *device)
+ mv_xor_xor_self_test(struct mv_xor_chan *mv_chan)
  {
        int i, src_idx;
        struct page *dest;
        u8 cmp_byte = 0;
        u32 cmp_word;
        int err = 0;
-       struct mv_xor_chan *mv_chan;
  
        for (src_idx = 0; src_idx < MV_XOR_NUM_SRC_TEST; src_idx++) {
                xor_srcs[src_idx] = alloc_page(GFP_KERNEL);
  
        memset(page_address(dest), 0, PAGE_SIZE);
  
-       dma_chan = container_of(device->common.channels.next,
-                               struct dma_chan,
-                               device_node);
+       dma_chan = &mv_chan->dmachan;
        if (mv_xor_alloc_chan_resources(dma_chan) < 1) {
                err = -ENODEV;
                goto out;
  
        if (mv_xor_status(dma_chan, cookie, NULL) !=
            DMA_SUCCESS) {
-               dev_printk(KERN_ERR, dma_chan->device->dev,
-                          "Self-test xor timed out, disabling\n");
+               dev_err(dma_chan->device->dev,
+                       "Self-test xor timed out, disabling\n");
                err = -ENODEV;
                goto free_resources;
        }
  
-       mv_chan = to_mv_xor_chan(dma_chan);
-       dma_sync_single_for_cpu(&mv_chan->device->pdev->dev, dest_dma,
+       dma_sync_single_for_cpu(dma_chan->device->dev, dest_dma,
                                PAGE_SIZE, DMA_FROM_DEVICE);
        for (i = 0; i < (PAGE_SIZE / sizeof(u32)); i++) {
                u32 *ptr = page_address(dest);
                if (ptr[i] != cmp_word) {
-                       dev_printk(KERN_ERR, dma_chan->device->dev,
-                                  "Self-test xor failed compare, disabling."
-                                  " index %d, data %x, expected %x\n", i,
-                                  ptr[i], cmp_word);
+                       dev_err(dma_chan->device->dev,
+                               "Self-test xor failed compare, disabling."
+                               " index %d, data %x, expected %x\n", i,
+                               ptr[i], cmp_word);
                        err = -ENODEV;
                        goto free_resources;
                }
        return err;
  }
  
- static int __devexit mv_xor_remove(struct platform_device *dev)
+ /* This driver does not implement any of the optional DMA operations. */
+ static int
+ mv_xor_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd,
+              unsigned long arg)
+ {
+       return -ENOSYS;
+ }
+ static int mv_xor_channel_remove(struct mv_xor_chan *mv_chan)
  {
-       struct mv_xor_device *device = platform_get_drvdata(dev);
        struct dma_chan *chan, *_chan;
-       struct mv_xor_chan *mv_chan;
-       struct mv_xor_platform_data *plat_data = dev->dev.platform_data;
+       struct device *dev = mv_chan->dmadev.dev;
  
-       dma_async_device_unregister(&device->common);
+       dma_async_device_unregister(&mv_chan->dmadev);
  
-       dma_free_coherent(&dev->dev, plat_data->pool_size,
-                       device->dma_desc_pool_virt, device->dma_desc_pool);
+       dma_free_coherent(dev, MV_XOR_POOL_SIZE,
+                         mv_chan->dma_desc_pool_virt, mv_chan->dma_desc_pool);
  
-       list_for_each_entry_safe(chan, _chan, &device->common.channels,
-                               device_node) {
-               mv_chan = to_mv_xor_chan(chan);
+       list_for_each_entry_safe(chan, _chan, &mv_chan->dmadev.channels,
+                                device_node) {
                list_del(&chan->device_node);
        }
  
+       free_irq(mv_chan->irq, mv_chan);
        return 0;
  }
  
- static int mv_xor_probe(struct platform_device *pdev)
+ static struct mv_xor_chan *
+ mv_xor_channel_add(struct mv_xor_device *xordev,
+                  struct platform_device *pdev,
+                  int idx, dma_cap_mask_t cap_mask, int irq)
  {
        int ret = 0;
-       int irq;
-       struct mv_xor_device *adev;
        struct mv_xor_chan *mv_chan;
        struct dma_device *dma_dev;
-       struct mv_xor_platform_data *plat_data = pdev->dev.platform_data;
  
+       mv_chan = devm_kzalloc(&pdev->dev, sizeof(*mv_chan), GFP_KERNEL);
+       if (!mv_chan) {
+               ret = -ENOMEM;
+               goto err_free_dma;
+       }
  
-       adev = devm_kzalloc(&pdev->dev, sizeof(*adev), GFP_KERNEL);
-       if (!adev)
-               return -ENOMEM;
+       mv_chan->idx = idx;
+       mv_chan->irq = irq;
  
-       dma_dev = &adev->common;
+       dma_dev = &mv_chan->dmadev;
  
        /* allocate coherent memory for hardware descriptors
         * note: writecombine gives slightly better performance, but
         * requires that we explicitly flush the writes
         */
-       adev->dma_desc_pool_virt = dma_alloc_writecombine(&pdev->dev,
-                                                         plat_data->pool_size,
-                                                         &adev->dma_desc_pool,
-                                                         GFP_KERNEL);
-       if (!adev->dma_desc_pool_virt)
-               return -ENOMEM;
-       adev->id = plat_data->hw_id;
+       mv_chan->dma_desc_pool_virt =
+         dma_alloc_writecombine(&pdev->dev, MV_XOR_POOL_SIZE,
+                                &mv_chan->dma_desc_pool, GFP_KERNEL);
+       if (!mv_chan->dma_desc_pool_virt)
+               return ERR_PTR(-ENOMEM);
  
        /* discover transaction capabilites from the platform data */
-       dma_dev->cap_mask = plat_data->cap_mask;
-       adev->pdev = pdev;
-       platform_set_drvdata(pdev, adev);
-       adev->shared = platform_get_drvdata(plat_data->shared);
+       dma_dev->cap_mask = cap_mask;
  
        INIT_LIST_HEAD(&dma_dev->channels);
  
        dma_dev->device_free_chan_resources = mv_xor_free_chan_resources;
        dma_dev->device_tx_status = mv_xor_status;
        dma_dev->device_issue_pending = mv_xor_issue_pending;
+       dma_dev->device_control = mv_xor_control;
        dma_dev->dev = &pdev->dev;
  
        /* set prep routines based on capability */
                dma_dev->device_prep_dma_xor = mv_xor_prep_dma_xor;
        }
  
-       mv_chan = devm_kzalloc(&pdev->dev, sizeof(*mv_chan), GFP_KERNEL);
-       if (!mv_chan) {
-               ret = -ENOMEM;
-               goto err_free_dma;
-       }
-       mv_chan->device = adev;
-       mv_chan->idx = plat_data->hw_id;
-       mv_chan->mmr_base = adev->shared->xor_base;
+       mv_chan->mmr_base = xordev->xor_base;
        if (!mv_chan->mmr_base) {
                ret = -ENOMEM;
                goto err_free_dma;
        /* clear errors before enabling interrupts */
        mv_xor_device_clear_err_status(mv_chan);
  
-       irq = platform_get_irq(pdev, 0);
-       if (irq < 0) {
-               ret = irq;
-               goto err_free_dma;
-       }
-       ret = devm_request_irq(&pdev->dev, irq,
-                              mv_xor_interrupt_handler,
-                              0, dev_name(&pdev->dev), mv_chan);
+       ret = request_irq(mv_chan->irq, mv_xor_interrupt_handler,
+                         0, dev_name(&pdev->dev), mv_chan);
        if (ret)
                goto err_free_dma;
  
        INIT_LIST_HEAD(&mv_chan->chain);
        INIT_LIST_HEAD(&mv_chan->completed_slots);
        INIT_LIST_HEAD(&mv_chan->all_slots);
-       mv_chan->common.device = dma_dev;
-       dma_cookie_init(&mv_chan->common);
+       mv_chan->dmachan.device = dma_dev;
+       dma_cookie_init(&mv_chan->dmachan);
  
-       list_add_tail(&mv_chan->common.device_node, &dma_dev->channels);
+       list_add_tail(&mv_chan->dmachan.device_node, &dma_dev->channels);
  
        if (dma_has_cap(DMA_MEMCPY, dma_dev->cap_mask)) {
-               ret = mv_xor_memcpy_self_test(adev);
+               ret = mv_xor_memcpy_self_test(mv_chan);
                dev_dbg(&pdev->dev, "memcpy self test returned %d\n", ret);
                if (ret)
-                       goto err_free_dma;
+                       goto err_free_irq;
        }
  
        if (dma_has_cap(DMA_XOR, dma_dev->cap_mask)) {
-               ret = mv_xor_xor_self_test(adev);
+               ret = mv_xor_xor_self_test(mv_chan);
                dev_dbg(&pdev->dev, "xor self test returned %d\n", ret);
                if (ret)
-                       goto err_free_dma;
+                       goto err_free_irq;
        }
  
-       dev_printk(KERN_INFO, &pdev->dev, "Marvell XOR: "
+       dev_info(&pdev->dev, "Marvell XOR: "
          "( %s%s%s%s)\n",
          dma_has_cap(DMA_XOR, dma_dev->cap_mask) ? "xor " : "",
          dma_has_cap(DMA_MEMSET, dma_dev->cap_mask)  ? "fill " : "",
          dma_has_cap(DMA_INTERRUPT, dma_dev->cap_mask) ? "intr " : "");
  
        dma_async_device_register(dma_dev);
-       goto out;
+       return mv_chan;
  
+ err_free_irq:
+       free_irq(mv_chan->irq, mv_chan);
   err_free_dma:
-       dma_free_coherent(&adev->pdev->dev, plat_data->pool_size,
-                       adev->dma_desc_pool_virt, adev->dma_desc_pool);
-  out:
-       return ret;
+       dma_free_coherent(&pdev->dev, MV_XOR_POOL_SIZE,
+                         mv_chan->dma_desc_pool_virt, mv_chan->dma_desc_pool);
+       return ERR_PTR(ret);
  }
  
  static void
- mv_xor_conf_mbus_windows(struct mv_xor_shared_private *msp,
+ mv_xor_conf_mbus_windows(struct mv_xor_device *xordev,
                         const struct mbus_dram_target_info *dram)
  {
-       void __iomem *base = msp->xor_base;
+       void __iomem *base = xordev->xor_base;
        u32 win_enable = 0;
        int i;
  
  
        writel(win_enable, base + WINDOW_BAR_ENABLE(0));
        writel(win_enable, base + WINDOW_BAR_ENABLE(1));
+       writel(0, base + WINDOW_OVERRIDE_CTRL(0));
+       writel(0, base + WINDOW_OVERRIDE_CTRL(1));
  }
  
- static struct platform_driver mv_xor_driver = {
-       .probe          = mv_xor_probe,
-       .remove         = mv_xor_remove,
-       .driver         = {
-               .owner  = THIS_MODULE,
-               .name   = MV_XOR_NAME,
-       },
- };
- static int mv_xor_shared_probe(struct platform_device *pdev)
 -static int __devinit mv_xor_probe(struct platform_device *pdev)
++static int mv_xor_probe(struct platform_device *pdev)
  {
        const struct mbus_dram_target_info *dram;
-       struct mv_xor_shared_private *msp;
+       struct mv_xor_device *xordev;
+       struct mv_xor_platform_data *pdata = pdev->dev.platform_data;
        struct resource *res;
+       int i, ret;
  
-       dev_printk(KERN_NOTICE, &pdev->dev, "Marvell shared XOR driver\n");
+       dev_notice(&pdev->dev, "Marvell XOR driver\n");
  
-       msp = devm_kzalloc(&pdev->dev, sizeof(*msp), GFP_KERNEL);
-       if (!msp)
+       xordev = devm_kzalloc(&pdev->dev, sizeof(*xordev), GFP_KERNEL);
+       if (!xordev)
                return -ENOMEM;
  
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        if (!res)
                return -ENODEV;
  
-       msp->xor_base = devm_ioremap(&pdev->dev, res->start,
-                                    resource_size(res));
-       if (!msp->xor_base)
+       xordev->xor_base = devm_ioremap(&pdev->dev, res->start,
+                                       resource_size(res));
+       if (!xordev->xor_base)
                return -EBUSY;
  
        res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
        if (!res)
                return -ENODEV;
  
-       msp->xor_high_base = devm_ioremap(&pdev->dev, res->start,
-                                         resource_size(res));
-       if (!msp->xor_high_base)
+       xordev->xor_high_base = devm_ioremap(&pdev->dev, res->start,
+                                            resource_size(res));
+       if (!xordev->xor_high_base)
                return -EBUSY;
  
-       platform_set_drvdata(pdev, msp);
+       platform_set_drvdata(pdev, xordev);
  
        /*
         * (Re-)program MBUS remapping windows if we are asked to.
         */
        dram = mv_mbus_dram_info();
        if (dram)
-               mv_xor_conf_mbus_windows(msp, dram);
+               mv_xor_conf_mbus_windows(xordev, dram);
  
        /* Not all platforms can gate the clock, so it is not
         * an error if the clock does not exists.
         */
-       msp->clk = clk_get(&pdev->dev, NULL);
-       if (!IS_ERR(msp->clk))
-               clk_prepare_enable(msp->clk);
+       xordev->clk = clk_get(&pdev->dev, NULL);
+       if (!IS_ERR(xordev->clk))
+               clk_prepare_enable(xordev->clk);
+       if (pdev->dev.of_node) {
+               struct device_node *np;
+               int i = 0;
+               for_each_child_of_node(pdev->dev.of_node, np) {
+                       dma_cap_mask_t cap_mask;
+                       int irq;
+                       dma_cap_zero(cap_mask);
+                       if (of_property_read_bool(np, "dmacap,memcpy"))
+                               dma_cap_set(DMA_MEMCPY, cap_mask);
+                       if (of_property_read_bool(np, "dmacap,xor"))
+                               dma_cap_set(DMA_XOR, cap_mask);
+                       if (of_property_read_bool(np, "dmacap,memset"))
+                               dma_cap_set(DMA_MEMSET, cap_mask);
+                       if (of_property_read_bool(np, "dmacap,interrupt"))
+                               dma_cap_set(DMA_INTERRUPT, cap_mask);
+                       irq = irq_of_parse_and_map(np, 0);
+                       if (!irq) {
+                               ret = -ENODEV;
+                               goto err_channel_add;
+                       }
+                       xordev->channels[i] =
+                               mv_xor_channel_add(xordev, pdev, i,
+                                                  cap_mask, irq);
+                       if (IS_ERR(xordev->channels[i])) {
+                               ret = PTR_ERR(xordev->channels[i]);
+                               xordev->channels[i] = NULL;
+                               irq_dispose_mapping(irq);
+                               goto err_channel_add;
+                       }
+                       i++;
+               }
+       } else if (pdata && pdata->channels) {
+               for (i = 0; i < MV_XOR_MAX_CHANNELS; i++) {
+                       struct mv_xor_channel_data *cd;
+                       int irq;
+                       cd = &pdata->channels[i];
+                       if (!cd) {
+                               ret = -ENODEV;
+                               goto err_channel_add;
+                       }
+                       irq = platform_get_irq(pdev, i);
+                       if (irq < 0) {
+                               ret = irq;
+                               goto err_channel_add;
+                       }
+                       xordev->channels[i] =
+                               mv_xor_channel_add(xordev, pdev, i,
+                                                  cd->cap_mask, irq);
+                       if (IS_ERR(xordev->channels[i])) {
+                               ret = PTR_ERR(xordev->channels[i]);
+                               goto err_channel_add;
+                       }
+               }
+       }
  
        return 0;
+ err_channel_add:
+       for (i = 0; i < MV_XOR_MAX_CHANNELS; i++)
+               if (xordev->channels[i]) {
+                       if (pdev->dev.of_node)
+                               irq_dispose_mapping(xordev->channels[i]->irq);
+                       mv_xor_channel_remove(xordev->channels[i]);
+               }
+       clk_disable_unprepare(xordev->clk);
+       clk_put(xordev->clk);
+       return ret;
  }
  
- static int mv_xor_shared_remove(struct platform_device *pdev)
 -static int __devexit mv_xor_remove(struct platform_device *pdev)
++static int mv_xor_remove(struct platform_device *pdev)
  {
-       struct mv_xor_shared_private *msp = platform_get_drvdata(pdev);
+       struct mv_xor_device *xordev = platform_get_drvdata(pdev);
+       int i;
+       for (i = 0; i < MV_XOR_MAX_CHANNELS; i++) {
+               if (xordev->channels[i])
+                       mv_xor_channel_remove(xordev->channels[i]);
+       }
  
-       if (!IS_ERR(msp->clk)) {
-               clk_disable_unprepare(msp->clk);
-               clk_put(msp->clk);
+       if (!IS_ERR(xordev->clk)) {
+               clk_disable_unprepare(xordev->clk);
+               clk_put(xordev->clk);
        }
  
        return 0;
  }
  
- static struct platform_driver mv_xor_shared_driver = {
-       .probe          = mv_xor_shared_probe,
-       .remove         = mv_xor_shared_remove,
+ #ifdef CONFIG_OF
 -static struct of_device_id mv_xor_dt_ids[] __devinitdata = {
++static struct of_device_id mv_xor_dt_ids[] = {
+        { .compatible = "marvell,orion-xor", },
+        {},
+ };
+ MODULE_DEVICE_TABLE(of, mv_xor_dt_ids);
+ #endif
+ static struct platform_driver mv_xor_driver = {
+       .probe          = mv_xor_probe,
 -      .remove         = __devexit_p(mv_xor_remove),
++      .remove         = mv_xor_remove,
        .driver         = {
-               .owner  = THIS_MODULE,
-               .name   = MV_XOR_SHARED_NAME,
+               .owner          = THIS_MODULE,
+               .name           = MV_XOR_NAME,
+               .of_match_table = of_match_ptr(mv_xor_dt_ids),
        },
  };
  
  
  static int __init mv_xor_init(void)
  {
-       int rc;
-       rc = platform_driver_register(&mv_xor_shared_driver);
-       if (!rc) {
-               rc = platform_driver_register(&mv_xor_driver);
-               if (rc)
-                       platform_driver_unregister(&mv_xor_shared_driver);
-       }
-       return rc;
+       return platform_driver_register(&mv_xor_driver);
  }
  module_init(mv_xor_init);
  
  static void __exit mv_xor_exit(void)
  {
        platform_driver_unregister(&mv_xor_driver);
-       platform_driver_unregister(&mv_xor_shared_driver);
        return;
  }