Merge tag 'soc-for-linus-3' of git://git.kernel.org/pub/scm/linux/kernel/git/arm...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 7 May 2013 18:02:18 +0000 (11:02 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 7 May 2013 18:02:18 +0000 (11:02 -0700)
Pull ARM SoC platform updates (part 3) from Arnd Bergmann:
 "This is the third and smallest of the SoC specific updates.  Changes
  include:

   - SMP support for the Xilinx zynq platform
   - Smaller imx changes
   - LPAE support for mvebu
   - Moving the orion5x, kirkwood, dove and mvebu platforms to a common
     "mbus" driver for their internal devices.

  It would be good to get feedback on the location of the "mbus" driver.
  Since this is used on multiple platforms may potentially get shared
  with other architectures (powerpc and arm64), it was moved to
  drivers/bus/.  We expect other similar drivers to get moved to the
  same place in order to avoid creating more top-level directories under
  drivers/ or cluttering up the messy drivers/misc/ even more."

* tag 'soc-for-linus-3' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (50 commits)
  ARM: imx: reset_controller may be disabled
  ARM: mvebu: Align the internal registers virtual base to support LPAE
  ARM: mvebu: Limit the DMA zone when LPAE is selected
  arm: plat-orion: remove addr-map code
  arm: mach-mv78xx0: convert to use the mvebu-mbus driver
  arm: mach-orion5x: convert to use mvebu-mbus driver
  arm: mach-dove: convert to use mvebu-mbus driver
  arm: mach-kirkwood: convert to use mvebu-mbus driver
  arm: mach-mvebu: convert to use mvebu-mbus driver
  ARM i.MX53: set CLK_SET_RATE_PARENT flag on the tve_ext_sel clock
  ARM i.MX53: tve_di clock is not part of the CCM, but of TVE
  ARM i.MX53: make tve_ext_sel propagate rate change to PLL
  ARM i.MX53: Remove unused tve_gate clkdev entry
  ARM i.MX5: Remove tve_sel clock from i.MX53 clock tree
  ARM: i.MX5: Add PATA and SRTC clocks
  ARM: imx: do not bring up unavailable cores
  ARM: imx: add initial imx6dl support
  ARM: imx1: mm: add call to mxc_device_init
  ARM: imx_v4_v5_defconfig: Add CONFIG_GPIO_SYSFS
  ARM: imx_v6_v7_defconfig: Select CONFIG_PERF_EVENTS
  ...

19 files changed:
1  2 
Documentation/devicetree/bindings/staging/imx-drm/fsl-imx-drm.txt
arch/arm/Kconfig
arch/arm/Kconfig.debug
arch/arm/boot/dts/armada-370-xp.dtsi
arch/arm/boot/dts/zynq-7000.dtsi
arch/arm/configs/imx_v6_v7_defconfig
arch/arm/mach-imx/Kconfig
arch/arm/mach-imx/Makefile
arch/arm/mach-imx/clk-imx51-imx53.c
arch/arm/mach-imx/gpc.c
arch/arm/mach-imx/mach-imx6q.c
arch/arm/mach-imx/src.c
arch/arm/mach-kirkwood/Makefile
arch/arm/mach-kirkwood/board-dt.c
arch/arm/mach-kirkwood/common.h
arch/arm/mach-orion5x/board-dt.c
arch/arm/mach-orion5x/common.c
arch/arm/mach-zynq/Kconfig
drivers/staging/imx-drm/ipu-v3/ipu-common.c

index 8071ac20d4b3ab2e924ce9367040dc13bb2310a9,f7698573cb9cf4f906a904c9f1bb1f7ccd7abb87..b876d4925a57da507bfb0b8e302655d79a03bf6d
@@@ -8,6 -8,8 +8,8 @@@ Required properties
  - interrupts: Should contain sync interrupt and error interrupt,
    in this order.
  - #crtc-cells: 1, See below
+ - resets: phandle pointing to the system reset controller and
+           reset line index, see reset/fsl,imx-src.txt for details
  
  example:
  
@@@ -16,6 -18,7 +18,7 @@@ ipu: ipu@18000000 
        compatible = "fsl,imx53-ipu";
        reg = <0x18000000 0x080000000>;
        interrupts = <11 10>;
+       resets = <&src 2>;
  };
  
  Parallel display support
@@@ -26,7 -29,7 +29,7 @@@ Required properties
  - crtc: the crtc this display is connected to, see below
  Optional properties:
  - interface_pix_fmt: How this display is connected to the
 -  crtc. Currently supported types: "rgb24", "rgb565"
 +  crtc. Currently supported types: "rgb24", "rgb565", "bgr666"
  - edid: verbatim EDID data block describing attached display.
  - ddc: phandle describing the i2c bus handling the display data
    channel
diff --combined arch/arm/Kconfig
index 5c56fa8824e9e41c28c4b35ada36577f6a000fbe,fe31c8c6b3e2490945f047758ce849a964a3bb66..18bef301d6e690ce08f0c33c89ebb49be54a09dc
@@@ -15,7 -15,6 +15,7 @@@ config AR
        select GENERIC_IRQ_SHOW
        select GENERIC_PCI_IOMAP
        select GENERIC_SMP_IDLE_THREAD
 +      select GENERIC_IDLE_POLL_SETUP
        select GENERIC_STRNCPY_FROM_USER
        select GENERIC_STRNLEN_USER
        select HARDIRQS_SW_RESEND
@@@ -59,7 -58,6 +59,7 @@@
        select CLONE_BACKWARDS
        select OLD_SIGSUSPEND3
        select OLD_SIGACTION
 +      select HAVE_CONTEXT_TRACKING
        help
          The ARM series is a line of low-power-consumption RISC chip designs
          licensed by ARM Ltd and targeted at embedded applications and
@@@ -363,6 -361,37 +363,6 @@@ config ARCH_AT9
          This enables support for systems based on Atmel
          AT91RM9200 and AT91SAM9* processors.
  
 -config ARCH_BCM2835
 -      bool "Broadcom BCM2835 family"
 -      select ARCH_REQUIRE_GPIOLIB
 -      select ARM_AMBA
 -      select ARM_ERRATA_411920
 -      select ARM_TIMER_SP804
 -      select CLKDEV_LOOKUP
 -      select CLKSRC_OF
 -      select COMMON_CLK
 -      select CPU_V6
 -      select GENERIC_CLOCKEVENTS
 -      select MULTI_IRQ_HANDLER
 -      select PINCTRL
 -      select PINCTRL_BCM2835
 -      select SPARSE_IRQ
 -      select USE_OF
 -      help
 -        This enables support for the Broadcom BCM2835 SoC. This SoC is
 -        use in the Raspberry Pi, and Roku 2 devices.
 -
 -config ARCH_CNS3XXX
 -      bool "Cavium Networks CNS3XXX family"
 -      select ARM_GIC
 -      select CPU_V6K
 -      select GENERIC_CLOCKEVENTS
 -      select MIGHT_HAVE_CACHE_L2X0
 -      select MIGHT_HAVE_PCI
 -      select PCI_DOMAINS if PCI
 -      help
 -        Support for Cavium Networks CNS3XXX platform.
 -
  config ARCH_CLPS711X
        bool "Cirrus Logic CLPS711x/EP721x/EP731x-based"
        select ARCH_REQUIRE_GPIOLIB
@@@ -381,11 -410,25 +381,11 @@@ config ARCH_GEMIN
        bool "Cortina Systems Gemini"
        select ARCH_REQUIRE_GPIOLIB
        select ARCH_USES_GETTIMEOFFSET
 +      select NEED_MACH_GPIO_H
        select CPU_FA526
        help
          Support for the Cortina Systems Gemini family SoCs
  
 -config ARCH_SIRF
 -      bool "CSR SiRF"
 -      select ARCH_REQUIRE_GPIOLIB
 -      select AUTO_ZRELADDR
 -      select COMMON_CLK
 -      select GENERIC_CLOCKEVENTS
 -      select GENERIC_IRQ_CHIP
 -      select MIGHT_HAVE_CACHE_L2X0
 -      select NO_IOPORT
 -      select PINCTRL
 -      select PINCTRL_SIRF
 -      select USE_OF
 -      help
 -        Support for CSR SiRFprimaII/Marco/Polo platforms
 -
  config ARCH_EBSA110
        bool "EBSA-110"
        select ARCH_USES_GETTIMEOFFSET
@@@ -425,6 -468,21 +425,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_MXS
 -      bool "Freescale MXS-based"
 -      select ARCH_REQUIRE_GPIOLIB
 -      select CLKDEV_LOOKUP
 -      select CLKSRC_MMIO
 -      select COMMON_CLK
 -      select GENERIC_CLOCKEVENTS
 -      select HAVE_CLK_PREPARE
 -      select MULTI_IRQ_HANDLER
 -      select PINCTRL
 -      select SPARSE_IRQ
 -      select USE_OF
 -      help
 -        Support for Freescale MXS-based family of processors
 -
  config ARCH_NETX
        bool "Hilscher NetX based"
        select ARM_VIC
        help
          This enables support for systems based on the Hilscher NetX Soc
  
 -config ARCH_H720X
 -      bool "Hynix HMS720x-based"
 -      select ARCH_USES_GETTIMEOFFSET
 -      select CPU_ARM720T
 -      select ISA_DMA_API
 -      help
 -        This enables support for systems based on the Hynix HMS720x
 -
  config ARCH_IOP13XX
        bool "IOP13xx-based"
        depends on MMU
@@@ -483,8 -549,6 +483,8 @@@ config ARCH_IXP4X
        select GENERIC_CLOCKEVENTS
        select MIGHT_HAVE_PCI
        select NEED_MACH_IO_H
 +      select USB_EHCI_BIG_ENDIAN_MMIO
 +      select USB_EHCI_BIG_ENDIAN_DESC
        help
          Support for Intel's IXP4XX (XScale) family of processors.
  
@@@ -498,6 -562,7 +498,7 @@@ config ARCH_DOV
        select PINCTRL_DOVE
        select PLAT_ORION_LEGACY
        select USB_ARCH_HAS_EHCI
+       select MVEBU_MBUS
        help
          Support for the Marvell Dove SoC 88AP510
  
@@@ -511,6 -576,7 +512,7 @@@ config ARCH_KIRKWOO
        select PINCTRL
        select PINCTRL_KIRKWOOD
        select PLAT_ORION_LEGACY
+       select MVEBU_MBUS
        help
          Support for the following Marvell Kirkwood series SoCs:
          88F6180, 88F6192 and 88F6281.
@@@ -522,6 -588,7 +524,7 @@@ config ARCH_MV78XX
        select GENERIC_CLOCKEVENTS
        select PCI
        select PLAT_ORION_LEGACY
+       select MVEBU_MBUS
        help
          Support for the following Marvell MV78xx0 series SoCs:
          MV781x0, MV782x0.
@@@ -534,6 -601,7 +537,7 @@@ config ARCH_ORION5
        select GENERIC_CLOCKEVENTS
        select PCI
        select PLAT_ORION_LEGACY
+       select MVEBU_MBUS
        help
          Support for the following Marvell Orion 5x series SoCs:
          Orion-1 (5181), Orion-VoIP (5181L), Orion-NAS (5182),
@@@ -597,6 -665,24 +601,6 @@@ config ARCH_LPC32X
        help
          Support for the NXP LPC32XX family of processors
  
 -config ARCH_TEGRA
 -      bool "NVIDIA Tegra"
 -      select ARCH_HAS_CPUFREQ
 -      select ARCH_REQUIRE_GPIOLIB
 -      select CLKDEV_LOOKUP
 -      select CLKSRC_MMIO
 -      select CLKSRC_OF
 -      select COMMON_CLK
 -      select GENERIC_CLOCKEVENTS
 -      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,
 -        Tegra 6xx and Tegra 2 series).
 -
  config ARCH_PXA
        bool "PXA2xx/PXA3xx-based"
        depends on MMU
@@@ -634,8 -720,6 +638,8 @@@ config ARCH_SHMOBIL
        bool "Renesas SH-Mobile / R-Mobile"
        select CLKDEV_LOOKUP
        select GENERIC_CLOCKEVENTS
 +      select HAVE_ARM_SCU if SMP
 +      select HAVE_ARM_TWD if LOCAL_TIMERS
        select HAVE_CLK
        select HAVE_MACH_CLKDEV
        select HAVE_SMP
@@@ -689,15 -773,12 +693,15 @@@ config ARCH_SA110
  config ARCH_S3C24XX
        bool "Samsung S3C24XX SoCs"
        select ARCH_HAS_CPUFREQ
 -      select ARCH_USES_GETTIMEOFFSET
 +      select ARCH_REQUIRE_GPIOLIB
        select CLKDEV_LOOKUP
 +      select CLKSRC_MMIO
 +      select GENERIC_CLOCKEVENTS
        select HAVE_CLK
        select HAVE_S3C2410_I2C if I2C
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
        select HAVE_S3C_RTC if RTC_CLASS
 +      select MULTI_IRQ_HANDLER
        select NEED_MACH_GPIO_H
        select NEED_MACH_IO_H
        help
@@@ -710,11 -791,10 +714,11 @@@ config ARCH_S3C64X
        bool "Samsung S3C64XX"
        select ARCH_HAS_CPUFREQ
        select ARCH_REQUIRE_GPIOLIB
 -      select ARCH_USES_GETTIMEOFFSET
        select ARM_VIC
        select CLKDEV_LOOKUP
 +      select CLKSRC_MMIO
        select CPU_V6
 +      select GENERIC_CLOCKEVENTS
        select HAVE_CLK
        select HAVE_S3C2410_I2C if I2C
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
@@@ -748,11 -828,9 +752,11 @@@ config ARCH_S5P64X
  
  config ARCH_S5PC100
        bool "Samsung S5PC100"
 -      select ARCH_USES_GETTIMEOFFSET
 +      select ARCH_REQUIRE_GPIOLIB
        select CLKDEV_LOOKUP
 +      select CLKSRC_MMIO
        select CPU_V7
 +      select GENERIC_CLOCKEVENTS
        select HAVE_CLK
        select HAVE_S3C2410_I2C if I2C
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
@@@ -785,7 -863,6 +789,7 @@@ config ARCH_EXYNO
        select ARCH_HAS_HOLES_MEMORYMODEL
        select ARCH_SPARSEMEM_ENABLE
        select CLKDEV_LOOKUP
 +      select COMMON_CLK
        select CPU_V7
        select GENERIC_CLOCKEVENTS
        select HAVE_CLK
@@@ -828,6 -905,51 +832,6 @@@ config ARCH_U30
        help
          Support for ST-Ericsson U300 series mobile platforms.
  
 -config ARCH_U8500
 -      bool "ST-Ericsson U8500 Series"
 -      depends on MMU
 -      select ARCH_HAS_CPUFREQ
 -      select ARCH_REQUIRE_GPIOLIB
 -      select ARM_AMBA
 -      select CLKDEV_LOOKUP
 -      select CPU_V7
 -      select GENERIC_CLOCKEVENTS
 -      select HAVE_SMP
 -      select MIGHT_HAVE_CACHE_L2X0
 -      select SPARSE_IRQ
 -      help
 -        Support for ST-Ericsson's Ux500 architecture
 -
 -config ARCH_NOMADIK
 -      bool "STMicroelectronics Nomadik"
 -      select ARCH_REQUIRE_GPIOLIB
 -      select ARM_AMBA
 -      select ARM_VIC
 -      select CLKSRC_NOMADIK_MTU
 -      select COMMON_CLK
 -      select CPU_ARM926T
 -      select GENERIC_CLOCKEVENTS
 -      select MIGHT_HAVE_CACHE_L2X0
 -      select USE_OF
 -      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
 -      select CLKSRC_MMIO
 -      select COMMON_CLK
 -      select GENERIC_CLOCKEVENTS
 -      select HAVE_CLK
 -      help
 -        Support for ST's SPEAr platform (SPEAr3xx, SPEAr6xx and SPEAr13xx).
 -
  config ARCH_DAVINCI
        bool "TI DaVinci"
        select ARCH_HAS_HOLES_MEMORYMODEL
@@@ -919,8 -1041,6 +923,8 @@@ source "arch/arm/mach-at91/Kconfig
  
  source "arch/arm/mach-bcm/Kconfig"
  
 +source "arch/arm/mach-bcm2835/Kconfig"
 +
  source "arch/arm/mach-clps711x/Kconfig"
  
  source "arch/arm/mach-cns3xxx/Kconfig"
@@@ -935,6 -1055,8 +939,6 @@@ source "arch/arm/mach-footbridge/Kconfi
  
  source "arch/arm/mach-gemini/Kconfig"
  
 -source "arch/arm/mach-h720x/Kconfig"
 -
  source "arch/arm/mach-highbank/Kconfig"
  
  source "arch/arm/mach-integrator/Kconfig"
@@@ -986,7 -1108,7 +990,7 @@@ source "arch/arm/plat-samsung/Kconfig
  
  source "arch/arm/mach-socfpga/Kconfig"
  
 -source "arch/arm/plat-spear/Kconfig"
 +source "arch/arm/mach-spear/Kconfig"
  
  source "arch/arm/mach-s3c24xx/Kconfig"
  
@@@ -1055,6 -1177,7 +1059,6 @@@ config PLAT_VERSATIL
  config ARM_TIMER_SP804
        bool
        select CLKSRC_MMIO
 -      select HAVE_SCHED_CLOCK
  
  source arch/arm/mm/Kconfig
  
@@@ -1413,6 -1536,7 +1417,6 @@@ config SM
        depends on GENERIC_CLOCKEVENTS
        depends on HAVE_SMP
        depends on MMU
 -      select HAVE_ARM_SCU if !ARCH_MSM_SCORPIONMP
        select USE_GENERIC_SMP_HELPERS
        help
          This enables support for systems with more than one CPU. If you have
@@@ -1487,14 -1611,6 +1491,14 @@@ config HAVE_ARM_TW
        help
          This options enables support for the ARM timer and watchdog unit
  
 +config MCPM
 +      bool "Multi-Cluster Power Management"
 +      depends on CPU_V7 && SMP
 +      help
 +        This option provides the common power management infrastructure
 +        for (multi-)cluster based systems, such as big.LITTLE based
 +        systems.
 +
  choice
        prompt "Memory split"
        default VMSPLIT_3G
@@@ -1545,6 -1661,7 +1549,6 @@@ config LOCAL_TIMER
        bool "Use local timer interrupts"
        depends on SMP
        default y
 -      select HAVE_ARM_TWD if (!ARCH_MSM_SCORPIONMP && !EXYNOS4_MCT)
        help
          Enable support for local timers on SMP platforms, rather then the
          legacy IPI broadcast method.  Local timers allows the system
@@@ -1558,9 -1675,8 +1562,9 @@@ config ARCH_NR_GPI
        int
        default 1024 if ARCH_SHMOBILE || ARCH_TEGRA
        default 512 if SOC_OMAP5
 -      default 355 if ARCH_U8500
 -      default 288 if ARCH_VT8500 || ARCH_SUNXI
 +      default 392 if ARCH_U8500
 +      default 352 if ARCH_VT8500
 +      default 288 if ARCH_SUNXI
        default 264 if MACH_H4700
        default 0
        help
@@@ -1582,9 -1698,8 +1586,9 @@@ config SCHED_HRTIC
        def_bool HIGH_RES_TIMERS
  
  config THUMB2_KERNEL
 -      bool "Compile the kernel in Thumb-2 mode"
 +      bool "Compile the kernel in Thumb-2 mode" if !CPU_THUMBONLY
        depends on CPU_V7 && !CPU_V6 && !CPU_V6K
 +      default y if CPU_THUMBONLY
        select AEABI
        select ARM_ASM_UNIFIED
        select ARM_UNWIND
@@@ -2050,8 -2165,33 +2054,8 @@@ endmen
  menu "CPU Power Management"
  
  if ARCH_HAS_CPUFREQ
 -
  source "drivers/cpufreq/Kconfig"
  
 -config CPU_FREQ_SA1100
 -      bool
 -
 -config CPU_FREQ_SA1110
 -      bool
 -
 -config CPU_FREQ_INTEGRATOR
 -      tristate "CPUfreq driver for ARM Integrator CPUs"
 -      depends on ARCH_INTEGRATOR && CPU_FREQ
 -      default y
 -      help
 -        This enables the CPUfreq driver for ARM Integrator CPUs.
 -
 -        For details, take a look at <file:Documentation/cpu-freq>.
 -
 -        If in doubt, say Y.
 -
 -config CPU_FREQ_PXA
 -      bool
 -      depends on CPU_FREQ && ARCH_PXA && PXA25x
 -      default y
 -      select CPU_FREQ_DEFAULT_GOV_USERSPACE
 -      select CPU_FREQ_TABLE
 -
  config CPU_FREQ_S3C
        bool
        help
diff --combined arch/arm/Kconfig.debug
index f57a6ba26e046b448f979720ee068689cfcb7901,7e911fd4dd890fca893b1134fc6d0b0d6115386f..1d41908d5cda0644a31a9048c882369f21db235b
@@@ -89,10 -89,6 +89,10 @@@ choic
                bool "Kernel low-level debugging on 9263 and 9g45"
                depends on HAVE_AT91_DBGU1
  
 +      config DEBUG_BCM2835
 +              bool "Kernel low-level debugging on BCM2835 PL011 UART"
 +              depends on ARCH_BCM2835
 +
        config DEBUG_CLPS711X_UART1
                bool "Kernel low-level debugging messages via UART1"
                depends on ARCH_CLPS711X
                  Say Y here if you want the debug print routines to direct
                  their output to the second serial port on these devices.
  
 +      config DEBUG_CNS3XXX
 +              bool "Kernel Kernel low-level debugging on Cavium Networks CNS3xxx"
 +              depends on ARCH_CNS3XXX
 +              help
 +                Say Y here if you want the debug print routines to direct
 +                  their output to the CNS3xxx UART0.
 +
        config DEBUG_DAVINCI_DA8XX_UART1
                bool "Kernel low-level debugging on DaVinci DA8XX using UART1"
                depends on ARCH_DAVINCI_DA8XX
                  on i.MX53.
  
        config DEBUG_IMX6Q_UART
-               bool "i.MX6Q Debug UART"
+               bool "i.MX6Q/DL Debug UART"
                depends on SOC_IMX6Q
                help
                  Say Y here if you want kernel low-level debugging support
-                 on i.MX6Q.
+                 on i.MX6Q/DL.
  
        config DEBUG_MMP_UART2
                bool "Kernel low-level debugging message via MMP UART2"
                  Say Y here if you want kernel low-level debugging support
                  on MVEBU based platforms.
  
 +      config DEBUG_NOMADIK_UART
 +              bool "Kernel low-level debugging messages via NOMADIK UART"
 +              depends on ARCH_NOMADIK
 +              help
 +                Say Y here if you want kernel low-level debugging support
 +                on NOMADIK based platforms.
 +
        config DEBUG_OMAP2PLUS_UART
                bool "Kernel low-level debugging messages via OMAP2PLUS UART"
                depends on ARCH_OMAP2PLUS
                  Say Y here if you want kernel low-level debugging support
                  on PicoXcell based platforms.
  
 +      config DEBUG_PXA_UART1
 +              depends on ARCH_PXA
 +              bool "Use PXA UART1 for low-level debug"
 +              help
 +                Say Y here if you want kernel low-level debugging support
 +                on PXA UART1.
 +
        config DEBUG_REALVIEW_STD_PORT
                bool "RealView Default UART"
                depends on ARCH_REALVIEW
  
        config DEBUG_S3C_UART0
                depends on PLAT_SAMSUNG
 +              select DEBUG_EXYNOS_UART if ARCH_EXYNOS
                bool "Use S3C UART 0 for low-level debug"
                help
                  Say Y here if you want the debug print routines to direct
  
        config DEBUG_S3C_UART1
                depends on PLAT_SAMSUNG
 +              select DEBUG_EXYNOS_UART if ARCH_EXYNOS
                bool "Use S3C UART 1 for low-level debug"
                help
                  Say Y here if you want the debug print routines to direct
  
        config DEBUG_S3C_UART2
                depends on PLAT_SAMSUNG
 +              select DEBUG_EXYNOS_UART if ARCH_EXYNOS
                bool "Use S3C UART 2 for low-level debug"
                help
                  Say Y here if you want the debug print routines to direct
  
        config DEBUG_S3C_UART3
                depends on PLAT_SAMSUNG && ARCH_EXYNOS
 +              select DEBUG_EXYNOS_UART
                bool "Use S3C UART 3 for low-level debug"
                help
                  Say Y here if you want the debug print routines to direct
                  Say Y here if you want the debug print routines to direct
                  their output to the uart1 port on SiRFmarco devices.
  
 +      config DEBUG_UX500_UART
 +              depends on ARCH_U8500
 +              bool "Use Ux500 UART for low-level debug"
 +              help
 +                Say Y here if you want kernel low-level debugging support
 +                on Ux500 based platforms.
 +
        config DEBUG_VEXPRESS_UART0_DETECT
                bool "Autodetect UART0 on Versatile Express Cortex-A core tiles"
                depends on ARCH_VEXPRESS && CPU_CP15_MMU
  
  endchoice
  
 +config DEBUG_EXYNOS_UART
 +      bool
 +
  config DEBUG_IMX_UART_PORT
        int "i.MX Debug UART Port Selection" if DEBUG_IMX1_UART || \
                                                DEBUG_IMX25_UART || \
@@@ -619,10 -580,6 +619,10 @@@ endchoic
  
  config DEBUG_LL_INCLUDE
        string
 +      default "debug/bcm2835.S" if DEBUG_BCM2835
 +      default "debug/cns3xxx.S" if DEBUG_CNS3XXX
 +      default "debug/exynos.S" if DEBUG_EXYNOS_UART
 +      default "debug/highbank.S" if DEBUG_HIGHBANK_UART
        default "debug/icedcc.S" if DEBUG_ICEDCC
        default "debug/imx.S" if DEBUG_IMX1_UART || \
                                 DEBUG_IMX25_UART || \
                                 DEBUG_IMX51_UART || \
                                 DEBUG_IMX53_UART ||\
                                 DEBUG_IMX6Q_UART
 -      default "debug/highbank.S" if DEBUG_HIGHBANK_UART
        default "debug/mvebu.S" if DEBUG_MVEBU_UART
 +      default "debug/mxs.S" if DEBUG_IMX23_UART || DEBUG_IMX28_UART
 +      default "debug/nomadik.S" if DEBUG_NOMADIK_UART
        default "debug/omap2plus.S" if DEBUG_OMAP2PLUS_UART
        default "debug/picoxcell.S" if DEBUG_PICOXCELL_UART
 +      default "debug/pxa.S" if DEBUG_PXA_UART1 || DEBUG_MMP_UART2 || \
 +                               DEBUG_MMP_UART3
 +      default "debug/sirf.S" if DEBUG_SIRFPRIMA2_UART1 || DEBUG_SIRFMARCO_UART1
        default "debug/socfpga.S" if DEBUG_SOCFPGA_UART
        default "debug/sunxi.S" if DEBUG_SUNXI_UART0 || DEBUG_SUNXI_UART1
 +      default "debug/tegra.S" if DEBUG_TEGRA_UART
 +      default "debug/ux500.S" if DEBUG_UX500_UART
        default "debug/vexpress.S" if DEBUG_VEXPRESS_UART0_DETECT || \
                DEBUG_VEXPRESS_UART0_CA9 || DEBUG_VEXPRESS_UART0_RS1
        default "debug/vt8500.S" if DEBUG_VT8500_UART0
 -      default "debug/tegra.S" if DEBUG_TEGRA_UART
        default "debug/zynq.S" if DEBUG_ZYNQ_UART0 || DEBUG_ZYNQ_UART1
        default "mach/debug-macro.S"
  
 +config DEBUG_UNCOMPRESS
 +      bool
 +      default y if ARCH_MULTIPLATFORM && DEBUG_LL && \
 +                   !DEBUG_OMAP2PLUS_UART && \
 +                   !DEBUG_TEGRA_UART
 +
 +config UNCOMPRESS_INCLUDE
 +      string
 +      default "debug/uncompress.h" if ARCH_MULTIPLATFORM
 +      default "mach/uncompress.h"
 +
  config EARLY_PRINTK
        bool "Early printk"
        depends on DEBUG_LL
index 758c4ea903446175c76a8ec7a01c91929d2ed0c6,7704829a12c0125b7308772206ccfa2bef0f7756..9693f796bcfe1d13617933db8b78412174384e77
                               clocks = <&coreclk 2>;
                };
  
-               addr-decoding@d0020000 {
-                       compatible = "marvell,armada-addr-decoding-controller";
-                       reg = <0xd0020000 0x258>;
-               };
                sata@d00a0000 {
                        compatible = "marvell,orion-sata";
                        reg = <0xd00a0000 0x2400>;
                        clocks = <&coreclk 0>;
                        status = "disabled";
                };
 +
 +              devbus-bootcs@d0010400 {
 +                      compatible = "marvell,mvebu-devbus";
 +                      reg = <0xd0010400 0x8>;
 +                      #address-cells = <1>;
 +                      #size-cells = <1>;
 +                      clocks = <&coreclk 0>;
 +                      status = "disabled";
 +              };
 +
 +              devbus-cs0@d0010408 {
 +                      compatible = "marvell,mvebu-devbus";
 +                      reg = <0xd0010408 0x8>;
 +                      #address-cells = <1>;
 +                      #size-cells = <1>;
 +                      clocks = <&coreclk 0>;
 +                      status = "disabled";
 +              };
 +
 +              devbus-cs1@d0010410 {
 +                      compatible = "marvell,mvebu-devbus";
 +                      reg = <0xd0010410 0x8>;
 +                      #address-cells = <1>;
 +                      #size-cells = <1>;
 +                      clocks = <&coreclk 0>;
 +                      status = "disabled";
 +              };
 +
 +              devbus-cs2@d0010418 {
 +                      compatible = "marvell,mvebu-devbus";
 +                      reg = <0xd0010418 0x8>;
 +                      #address-cells = <1>;
 +                      #size-cells = <1>;
 +                      clocks = <&coreclk 0>;
 +                      status = "disabled";
 +              };
 +
 +              devbus-cs3@d0010420 {
 +                      compatible = "marvell,mvebu-devbus";
 +                      reg = <0xd0010420 0x8>;
 +                      #address-cells = <1>;
 +                      #size-cells = <1>;
 +                      clocks = <&coreclk 0>;
 +                      status = "disabled";
 +              };
        };
  };
  
index 748fc347ed186088c17dfa230d7239ee656a4e61,2a1df1bc4b9927c6b7bc00d79485f6243950eba6..14fb2e609babcc881deeff1c59ea8d39090ff90f
  / {
        compatible = "xlnx,zynq-7000";
  
 +      pmu {
 +              compatible = "arm,cortex-a9-pmu";
 +              interrupts = <0 5 4>, <0 6 4>;
 +              interrupt-parent = <&intc>;
 +              reg = < 0xf8891000 0x1000 0xf8893000 0x1000 >;
 +      };
 +
        amba {
                compatible = "simple-bus";
                #address-cells = <1>;
                        clock-names = "cpu_1x";
                        clock-ranges;
                };
+               scutimer: scutimer@f8f00600 {
+                       interrupt-parent = <&intc>;
+                       interrupts = < 1 13 0x301 >;
+                       compatible = "arm,cortex-a9-twd-timer";
+                       reg = < 0xf8f00600 0x20 >;
+                       clocks = <&cpu_clk 1>;
+               } ;
        };
  };
index 088d6c11a0fa1cb896cf9e2c04351d9382b98b17,12f50c7963fda7f996074790f11fae19a1cad79a..6ec010f248b5b54a73cea23d06691c207e3ea468
@@@ -9,6 -9,7 +9,7 @@@ CONFIG_CGROUPS=
  CONFIG_RELAY=y
  CONFIG_BLK_DEV_INITRD=y
  CONFIG_EXPERT=y
+ CONFIG_PERF_EVENTS=y
  # CONFIG_SLUB_DEBUG is not set
  # CONFIG_COMPAT_BRK is not set
  CONFIG_MODULES=y
@@@ -188,7 -189,6 +189,7 @@@ CONFIG_USB_EHCI_HCD=
  CONFIG_USB_EHCI_MXC=y
  CONFIG_USB_CHIPIDEA=y
  CONFIG_USB_CHIPIDEA_HOST=y
 +CONFIG_USB_PHY=y
  CONFIG_USB_MXS_PHY=y
  CONFIG_USB_STORAGE=y
  CONFIG_MMC=y
index 2ebc97e16b911da6c33df4e78b80d02b6a7cc036,2b09a0471d7b7a8c54e543f88991248073eab282..78f795d73cb64eeae161bda1ea5917aa3bf8fe3d
@@@ -65,6 -65,9 +65,9 @@@ config IRAM_ALLO
        bool
        select GENERIC_ALLOCATOR
  
+ config HAVE_IMX_ANATOP
+       bool
  config HAVE_IMX_GPC
        bool
  
@@@ -73,6 -76,7 +76,7 @@@ config HAVE_IMX_MMD
  
  config HAVE_IMX_SRC
        def_bool y if SMP
+       select ARCH_HAS_RESET_CONTROLLER
  
  config IMX_HAVE_IOMUX_V1
        bool
@@@ -115,6 -119,8 +119,8 @@@ config SOC_IMX2
  
  config SOC_IMX27
        bool
+       select ARCH_HAS_CPUFREQ
+       select ARCH_HAS_OPP
        select COMMON_CLK
        select CPU_ARM926T
        select IMX_HAVE_IOMUX_V1
@@@ -142,6 -148,7 +148,7 @@@ config SOC_IMX3
  config SOC_IMX5
        bool
        select ARCH_HAS_CPUFREQ
+       select ARCH_HAS_OPP
        select ARCH_MXC_IOMUX_V3
        select COMMON_CLK
        select CPU_V7
  
  config        SOC_IMX51
        bool
 +      select HAVE_IMX_SRC
        select PINCTRL
        select PINCTRL_IMX51
        select SOC_IMX5
@@@ -466,6 -472,8 +473,6 @@@ config MACH_MX31ADS_WM1133_EV
        depends on MACH_MX31ADS
        depends on MFD_WM8350_I2C
        depends on REGULATOR_WM8350 = y
 -      select MFD_WM8350_CONFIG_MODE_0
 -      select MFD_WM8352_CONFIG_MODE_0
        help
          Include support for the Wolfson Microelectronics 1133-EV1 PMU
          and audio module for the MX31ADS platform.
@@@ -773,7 -781,6 +780,7 @@@ comment "Device tree only
  config        SOC_IMX53
        bool "i.MX53 support"
        select HAVE_CAN_FLEXCAN if CAN
 +      select HAVE_IMX_SRC
        select IMX_HAVE_PLATFORM_IMX2_WDT
        select PINCTRL
        select PINCTRL_IMX53
          This enables support for Freescale i.MX53 processor.
  
  config SOC_IMX6Q
-       bool "i.MX6 Quad support"
+       bool "i.MX6 Quad/DualLite support"
        select ARCH_HAS_CPUFREQ
        select ARCH_HAS_OPP
        select ARM_CPU_SUSPEND if PM
        select ARM_GIC
        select COMMON_CLK
        select CPU_V7
 -      select HAVE_ARM_SCU
 +      select HAVE_ARM_SCU if SMP
 +      select HAVE_ARM_TWD if LOCAL_TIMERS
        select HAVE_CAN_FLEXCAN if CAN
+       select HAVE_IMX_ANATOP
        select HAVE_IMX_GPC
        select HAVE_IMX_MMDC
        select HAVE_IMX_SRC
index fbe60a14534492310f26ee5f3af2871f2f64a1d5,b16eb39b9f5db50c2c47f48c62664eb9a2189584..930958973f81f14fce5ca270bcb3667b5f660ffa
@@@ -29,7 -29,7 +29,7 @@@ obj-$(CONFIG_MXC_USE_EPIT) += epit.
  obj-$(CONFIG_MXC_DEBUG_BOARD) += 3ds_debugboard.o
  
  ifeq ($(CONFIG_CPU_IDLE),y)
 -obj-y += cpuidle.o
 +obj-$(CONFIG_SOC_IMX5) += cpuidle-imx5.o
  obj-$(CONFIG_SOC_IMX6Q) += cpuidle-imx6q.o
  endif
  
@@@ -91,6 -91,7 +91,7 @@@ obj-$(CONFIG_MACH_EUKREA_CPUIMX35SD) +
  obj-$(CONFIG_MACH_EUKREA_MBIMXSD35_BASEBOARD) += eukrea_mbimxsd35-baseboard.o
  obj-$(CONFIG_MACH_VPR200) += mach-vpr200.o
  
+ obj-$(CONFIG_HAVE_IMX_ANATOP) += anatop.o
  obj-$(CONFIG_HAVE_IMX_GPC) += gpc.o
  obj-$(CONFIG_HAVE_IMX_MMDC) += mmdc.o
  obj-$(CONFIG_HAVE_IMX_SRC) += src.o
index 2bc623b414c1c322957d07114b2e2819d25dda4b,41dd4d6e5b91ded17101c37f1459423122418227..6fc486b6a3c68f7a5bd6a5457680cd895f41dc76
@@@ -45,16 -45,40 +45,40 @@@ static const char *mx53_ipu_di1_sel[] 
  static const char *mx53_ldb_di1_sel[] = { "pll3_sw", "pll4_sw", };
  static const char *mx51_tve_ext_sel[] = { "osc", "ckih1", };
  static const char *mx53_tve_ext_sel[] = { "pll4_sw", "ckih1", };
- static const char *tve_sel[] = { "tve_pred", "tve_ext_sel", };
+ static const char *mx51_tve_sel[] = { "tve_pred", "tve_ext_sel", };
  static const char *ipu_sel[] = { "axi_a", "axi_b", "emi_slow_gate", "ahb", };
+ static const char *gpu3d_sel[] = { "axi_a", "axi_b", "emi_slow_gate", "ahb" };
+ static const char *gpu2d_sel[] = { "axi_a", "axi_b", "emi_slow_gate", "ahb" };
  static const char *vpu_sel[] = { "axi_a", "axi_b", "emi_slow_gate", "ahb", };
  static const char *mx53_can_sel[] = { "ipg", "ckih1", "ckih2", "lp_apm", };
+ static const char *mx53_cko1_sel[] = {
+       "cpu_podf", "pll1_sw", "pll2_sw", "pll3_sw",
+       "emi_slow_podf", "pll4_sw", "nfc_podf", "dummy",
+       "di_pred", "dummy", "dummy", "ahb",
+       "ipg", "per_root", "ckil", "dummy",};
+ static const char *mx53_cko2_sel[] = {
+       "dummy"/* dptc_core */, "dummy"/* dptc_perich */,
+       "dummy", "esdhc_a_podf",
+       "usboh3_podf", "dummy"/* wrck_clk_root */,
+       "ecspi_podf", "dummy"/* pll1_ref_clk */,
+       "esdhc_b_podf", "dummy"/* ddr_clk_root */,
+       "dummy"/* arm_axi_clk_root */, "dummy"/* usb_phy_out */,
+       "vpu_sel", "ipu_sel",
+       "osc", "ckih1",
+       "dummy", "esdhc_c_sel",
+       "ssi1_root_podf", "ssi2_root_podf",
+       "dummy", "dummy",
+       "dummy"/* lpsr_clk_root */, "dummy"/* pgc_clk_root */,
+       "dummy"/* tve_out */, "usb_phy_sel",
+       "tve_sel", "lp_apm",
+       "uart_root", "dummy"/* spdif0_clk_root */,
+       "dummy", "dummy", };
  
  enum imx5_clks {
        dummy, ckil, osc, ckih1, ckih2, ahb, ipg, axi_a, axi_b, uart_pred,
        uart_root, esdhc_a_pred, esdhc_b_pred, esdhc_c_s, esdhc_d_s,
        emi_sel, emi_slow_podf, nfc_podf, ecspi_pred, ecspi_podf, usboh3_pred,
-       usboh3_podf, usb_phy_pred, usb_phy_podf, cpu_podf, di_pred, tve_di,
+       usboh3_podf, usb_phy_pred, usb_phy_podf, cpu_podf, di_pred, tve_di_unused,
        tve_s, uart1_ipg_gate, uart1_per_gate, uart2_ipg_gate,
        uart2_per_gate, uart3_ipg_gate, uart3_per_gate, i2c1_gate, i2c2_gate,
        gpt_ipg_gate, pwm1_ipg_gate, pwm1_hf_gate, pwm2_ipg_gate, pwm2_hf_gate,
        ssi2_root_gate, ssi3_root_gate, ssi_ext1_gate, ssi_ext2_gate,
        epit1_ipg_gate, epit1_hf_gate, epit2_ipg_gate, epit2_hf_gate,
        can_sel, can1_serial_gate, can1_ipg_gate,
-       owire_gate,
+       owire_gate, gpu3d_s, gpu2d_s, gpu3d_gate, gpu2d_gate, garb_gate,
+       cko1_sel, cko1_podf, cko1,
+       cko2_sel, cko2_podf, cko2,
+       srtc_gate, pata_gate,
        clk_max
  };
  
@@@ -160,8 -187,6 +187,6 @@@ static void __init mx5_clocks_common_in
                                usb_phy_sel_str, ARRAY_SIZE(usb_phy_sel_str));
        clk[cpu_podf] = imx_clk_divider("cpu_podf", "pll1_sw", MXC_CCM_CACRR, 0, 3);
        clk[di_pred] = imx_clk_divider("di_pred", "pll3_sw", MXC_CCM_CDCDR, 6, 3);
-       clk[tve_di] = imx_clk_fixed("tve_di", 65000000); /* FIXME */
-       clk[tve_s] = imx_clk_mux("tve_sel", MXC_CCM_CSCMR1, 7, 1, tve_sel, ARRAY_SIZE(tve_sel));
        clk[iim_gate] = imx_clk_gate2("iim_gate", "ipg", MXC_CCM_CCGR0, 30);
        clk[uart1_ipg_gate] = imx_clk_gate2("uart1_ipg_gate", "ipg", MXC_CCM_CCGR1, 6);
        clk[uart1_per_gate] = imx_clk_gate2("uart1_per_gate", "uart_root", MXC_CCM_CCGR1, 8);
        clk[nfc_gate] = imx_clk_gate2("nfc_gate", "nfc_podf", MXC_CCM_CCGR5, 20);
        clk[ipu_di0_gate] = imx_clk_gate2("ipu_di0_gate", "ipu_di0_sel", MXC_CCM_CCGR6, 10);
        clk[ipu_di1_gate] = imx_clk_gate2("ipu_di1_gate", "ipu_di1_sel", MXC_CCM_CCGR6, 12);
+       clk[gpu3d_s] = imx_clk_mux("gpu3d_sel", MXC_CCM_CBCMR, 4, 2, gpu3d_sel, ARRAY_SIZE(gpu3d_sel));
+       clk[gpu2d_s] = imx_clk_mux("gpu2d_sel", MXC_CCM_CBCMR, 16, 2, gpu2d_sel, ARRAY_SIZE(gpu2d_sel));
+       clk[gpu3d_gate] = imx_clk_gate2("gpu3d_gate", "gpu3d_sel", MXC_CCM_CCGR5, 2);
+       clk[garb_gate] = imx_clk_gate2("garb_gate", "axi_a", MXC_CCM_CCGR5, 4);
+       clk[gpu2d_gate] = imx_clk_gate2("gpu2d_gate", "gpu2d_sel", MXC_CCM_CCGR6, 14);
        clk[vpu_s] = imx_clk_mux("vpu_sel", MXC_CCM_CBCMR, 14, 2, vpu_sel, ARRAY_SIZE(vpu_sel));
        clk[vpu_gate] = imx_clk_gate2("vpu_gate", "vpu_sel", MXC_CCM_CCGR5, 6);
        clk[vpu_reference_gate] = imx_clk_gate2("vpu_reference_gate", "osc", MXC_CCM_CCGR5, 8);
        clk[epit2_ipg_gate] = imx_clk_gate2("epit2_ipg_gate", "ipg", MXC_CCM_CCGR2, 6);
        clk[epit2_hf_gate] = imx_clk_gate2("epit2_hf_gate", "per_root", MXC_CCM_CCGR2, 8);
        clk[owire_gate] = imx_clk_gate2("owire_gate", "per_root", MXC_CCM_CCGR2, 22);
+       clk[srtc_gate] = imx_clk_gate2("srtc_gate", "per_root", MXC_CCM_CCGR4, 28);
+       clk[pata_gate] = imx_clk_gate2("pata_gate", "ipg", MXC_CCM_CCGR4, 0);
  
        for (i = 0; i < ARRAY_SIZE(clk); i++)
                if (IS_ERR(clk[i]))
        clk_register_clkdev(clk[ssi_ext1_gate], "ssi_ext1", NULL);
        clk_register_clkdev(clk[ssi_ext2_gate], "ssi_ext2", NULL);
        clk_register_clkdev(clk[sdma_gate], NULL, "imx35-sdma");
 -      clk_register_clkdev(clk[cpu_podf], "cpu", NULL);
 +      clk_register_clkdev(clk[cpu_podf], NULL, "cpufreq-cpu0.0");
        clk_register_clkdev(clk[iim_gate], "iim", NULL);
        clk_register_clkdev(clk[dummy], NULL, "imx2-wdt.0");
        clk_register_clkdev(clk[dummy], NULL, "imx2-wdt.1");
        clk_register_clkdev(clk[dummy], NULL, "imx-keypad");
-       clk_register_clkdev(clk[tve_gate], NULL, "imx-tve.0");
        clk_register_clkdev(clk[ipu_di1_gate], "di1", "imx-tve.0");
        clk_register_clkdev(clk[gpc_dvfs], "gpc_dvfs", NULL);
        clk_register_clkdev(clk[epit1_ipg_gate], "ipg", "imx-epit.0");
@@@ -331,8 -362,10 +362,10 @@@ int __init mx51_clocks_init(unsigned lo
                                mx51_ipu_di0_sel, ARRAY_SIZE(mx51_ipu_di0_sel));
        clk[ipu_di1_sel] = imx_clk_mux("ipu_di1_sel", MXC_CCM_CSCMR2, 29, 3,
                                mx51_ipu_di1_sel, ARRAY_SIZE(mx51_ipu_di1_sel));
-       clk[tve_ext_sel] = imx_clk_mux("tve_ext_sel", MXC_CCM_CSCMR1, 6, 1,
-                               mx51_tve_ext_sel, ARRAY_SIZE(mx51_tve_ext_sel));
+       clk[tve_ext_sel] = imx_clk_mux_flags("tve_ext_sel", MXC_CCM_CSCMR1, 6, 1,
+                               mx51_tve_ext_sel, ARRAY_SIZE(mx51_tve_ext_sel), CLK_SET_RATE_PARENT);
+       clk[tve_s] = imx_clk_mux("tve_sel", MXC_CCM_CSCMR1, 7, 1,
+                               mx51_tve_sel, ARRAY_SIZE(mx51_tve_sel));
        clk[tve_gate] = imx_clk_gate2("tve_gate", "tve_sel", MXC_CCM_CCGR2, 30);
        clk[tve_pred] = imx_clk_divider("tve_pred", "pll3_sw", MXC_CCM_CDCDR, 28, 3);
        clk[esdhc1_per_gate] = imx_clk_gate2("esdhc1_per_gate", "esdhc_a_podf", MXC_CCM_CCGR3, 2);
        clk_register_clkdev(clk[mx51_mipi], "mipi_hsp", NULL);
        clk_register_clkdev(clk[vpu_gate], NULL, "imx51-vpu.0");
        clk_register_clkdev(clk[fec_gate], NULL, "imx27-fec.0");
 -      clk_register_clkdev(clk[ipu_gate], "bus", "40000000.ipu");
 -      clk_register_clkdev(clk[ipu_di0_gate], "di0", "40000000.ipu");
 -      clk_register_clkdev(clk[ipu_di1_gate], "di1", "40000000.ipu");
        clk_register_clkdev(clk[usb_phy_gate], "phy", "mxc-ehci.0");
        clk_register_clkdev(clk[esdhc1_ipg_gate], "ipg", "sdhci-esdhc-imx51.0");
        clk_register_clkdev(clk[dummy], "ahb", "sdhci-esdhc-imx51.0");
@@@ -420,23 -456,23 +453,23 @@@ int __init mx53_clocks_init(unsigned lo
        clk[pll3_sw] = imx_clk_pllv2("pll3_sw", "osc", MX53_DPLL3_BASE);
        clk[pll4_sw] = imx_clk_pllv2("pll4_sw", "osc", MX53_DPLL4_BASE);
  
-       clk[ldb_di1_sel] = imx_clk_mux("ldb_di1_sel", MXC_CCM_CSCMR2, 9, 1,
-                               mx53_ldb_di1_sel, ARRAY_SIZE(mx53_ldb_di1_sel));
        clk[ldb_di1_div_3_5] = imx_clk_fixed_factor("ldb_di1_div_3_5", "ldb_di1_sel", 2, 7);
-       clk[ldb_di1_div] = imx_clk_divider("ldb_di1_div", "ldb_di1_div_3_5", MXC_CCM_CSCMR2, 11, 1);
+       clk[ldb_di1_div] = imx_clk_divider_flags("ldb_di1_div", "ldb_di1_div_3_5", MXC_CCM_CSCMR2, 11, 1, 0);
+       clk[ldb_di1_sel] = imx_clk_mux_flags("ldb_di1_sel", MXC_CCM_CSCMR2, 9, 1,
+                               mx53_ldb_di1_sel, ARRAY_SIZE(mx53_ldb_di1_sel), CLK_SET_RATE_PARENT);
        clk[di_pll4_podf] = imx_clk_divider("di_pll4_podf", "pll4_sw", MXC_CCM_CDCDR, 16, 3);
-       clk[ldb_di0_sel] = imx_clk_mux("ldb_di0_sel", MXC_CCM_CSCMR2, 8, 1,
-                               mx53_ldb_di0_sel, ARRAY_SIZE(mx53_ldb_di0_sel));
        clk[ldb_di0_div_3_5] = imx_clk_fixed_factor("ldb_di0_div_3_5", "ldb_di0_sel", 2, 7);
-       clk[ldb_di0_div] = imx_clk_divider("ldb_di0_div", "ldb_di0_div_3_5", MXC_CCM_CSCMR2, 10, 1);
+       clk[ldb_di0_div] = imx_clk_divider_flags("ldb_di0_div", "ldb_di0_div_3_5", MXC_CCM_CSCMR2, 10, 1, 0);
+       clk[ldb_di0_sel] = imx_clk_mux_flags("ldb_di0_sel", MXC_CCM_CSCMR2, 8, 1,
+                               mx53_ldb_di0_sel, ARRAY_SIZE(mx53_ldb_di0_sel), CLK_SET_RATE_PARENT);
        clk[ldb_di0_gate] = imx_clk_gate2("ldb_di0_gate", "ldb_di0_div", MXC_CCM_CCGR6, 28);
        clk[ldb_di1_gate] = imx_clk_gate2("ldb_di1_gate", "ldb_di1_div", MXC_CCM_CCGR6, 30);
        clk[ipu_di0_sel] = imx_clk_mux("ipu_di0_sel", MXC_CCM_CSCMR2, 26, 3,
                                mx53_ipu_di0_sel, ARRAY_SIZE(mx53_ipu_di0_sel));
        clk[ipu_di1_sel] = imx_clk_mux("ipu_di1_sel", MXC_CCM_CSCMR2, 29, 3,
                                mx53_ipu_di1_sel, ARRAY_SIZE(mx53_ipu_di1_sel));
-       clk[tve_ext_sel] = imx_clk_mux("tve_ext_sel", MXC_CCM_CSCMR1, 6, 1,
-                               mx53_tve_ext_sel, ARRAY_SIZE(mx53_tve_ext_sel));
+       clk[tve_ext_sel] = imx_clk_mux_flags("tve_ext_sel", MXC_CCM_CSCMR1, 6, 1,
+                               mx53_tve_ext_sel, ARRAY_SIZE(mx53_tve_ext_sel), CLK_SET_RATE_PARENT);
        clk[tve_gate] = imx_clk_gate2("tve_gate", "tve_pred", MXC_CCM_CCGR2, 30);
        clk[tve_pred] = imx_clk_divider("tve_pred", "tve_ext_sel", MXC_CCM_CDCDR, 28, 3);
        clk[esdhc1_per_gate] = imx_clk_gate2("esdhc1_per_gate", "esdhc_a_podf", MXC_CCM_CCGR3, 2);
        clk[can2_ipg_gate] = imx_clk_gate2("can2_ipg_gate", "ipg", MXC_CCM_CCGR4, 6);
        clk[i2c3_gate] = imx_clk_gate2("i2c3_gate", "per_root", MXC_CCM_CCGR1, 22);
  
+       clk[cko1_sel] = imx_clk_mux("cko1_sel", MXC_CCM_CCOSR, 0, 4,
+                               mx53_cko1_sel, ARRAY_SIZE(mx53_cko1_sel));
+       clk[cko1_podf] = imx_clk_divider("cko1_podf", "cko1_sel", MXC_CCM_CCOSR, 4, 3);
+       clk[cko1] = imx_clk_gate2("cko1", "cko1_podf", MXC_CCM_CCOSR, 7);
+       clk[cko2_sel] = imx_clk_mux("cko2_sel", MXC_CCM_CCOSR, 16, 5,
+                               mx53_cko2_sel, ARRAY_SIZE(mx53_cko2_sel));
+       clk[cko2_podf] = imx_clk_divider("cko2_podf", "cko2_sel", MXC_CCM_CCOSR, 21, 3);
+       clk[cko2] = imx_clk_gate2("cko2", "cko2_podf", MXC_CCM_CCOSR, 24);
        for (i = 0; i < ARRAY_SIZE(clk); i++)
                if (IS_ERR(clk[i]))
                        pr_err("i.MX53 clk %d: register failed with %ld\n",
        clk_register_clkdev(clk[vpu_gate], NULL, "imx53-vpu.0");
        clk_register_clkdev(clk[i2c3_gate], NULL, "imx21-i2c.2");
        clk_register_clkdev(clk[fec_gate], NULL, "imx25-fec.0");
 -      clk_register_clkdev(clk[ipu_gate], "bus", "18000000.ipu");
 -      clk_register_clkdev(clk[ipu_di0_gate], "di0", "18000000.ipu");
 -      clk_register_clkdev(clk[ipu_di1_gate], "di1", "18000000.ipu");
 -      clk_register_clkdev(clk[ipu_gate], "hsp", "18000000.ipu");
        clk_register_clkdev(clk[usb_phy1_gate], "usb_phy1", "mxc-ehci.0");
        clk_register_clkdev(clk[esdhc1_ipg_gate], "ipg", "sdhci-esdhc-imx53.0");
        clk_register_clkdev(clk[dummy], "ahb", "sdhci-esdhc-imx53.0");
diff --combined arch/arm/mach-imx/gpc.c
index 02b61cdf39b97bbf5c7aee5f92b74a8c3fb86684,c20445c56032364aa7147d968546f91b7539adfd..44a65e9ff1fc9366bb62c35242c4f6dcc188a0d2
@@@ -1,5 -1,5 +1,5 @@@
  /*
-  * Copyright 2011 Freescale Semiconductor, Inc.
+  * Copyright 2011-2013 Freescale Semiconductor, Inc.
   * Copyright 2011 Linaro Ltd.
   *
   * The code contained herein is licensed under the GNU General Public
@@@ -16,7 -16,6 +16,7 @@@
  #include <linux/of_address.h>
  #include <linux/of_irq.h>
  #include <linux/irqchip/arm-gic.h>
 +#include "common.h"
  
  #define GPC_IMR1              0x008
  #define GPC_PGC_CPU_PDN               0x2a0
@@@ -69,6 -68,27 +69,27 @@@ static int imx_gpc_irq_set_wake(struct 
        return 0;
  }
  
+ void imx_gpc_mask_all(void)
+ {
+       void __iomem *reg_imr1 = gpc_base + GPC_IMR1;
+       int i;
+       for (i = 0; i < IMR_NUM; i++) {
+               gpc_saved_imrs[i] = readl_relaxed(reg_imr1 + i * 4);
+               writel_relaxed(~0, reg_imr1 + i * 4);
+       }
+ }
+ void imx_gpc_restore_all(void)
+ {
+       void __iomem *reg_imr1 = gpc_base + GPC_IMR1;
+       int i;
+       for (i = 0; i < IMR_NUM; i++)
+               writel_relaxed(gpc_saved_imrs[i], reg_imr1 + i * 4);
+ }
  static void imx_gpc_irq_unmask(struct irq_data *d)
  {
        void __iomem *reg;
index 99502eeefdf7ed46c13b1ccc8c7d140ce33b145c,7230aede4ca26fe85f169c8caf146c410158e345..5536fd81379a87dc2d7856a9b46338578aa52cbd
@@@ -1,5 -1,5 +1,5 @@@
  /*
-  * Copyright 2011 Freescale Semiconductor, Inc.
+  * Copyright 2011-2013 Freescale Semiconductor, Inc.
   * Copyright 2011 Linaro Ltd.
   *
   * The code contained herein is licensed under the GNU General Public
  #include "cpuidle.h"
  #include "hardware.h"
  
- #define IMX6Q_ANALOG_DIGPROG  0x260
+ static u32 chip_revision;
  
static int imx6q_revision(void)
+ int imx6q_revision(void)
  {
-       struct device_node *np;
-       void __iomem *base;
-       static u32 rev;
-       if (!rev) {
-               np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-anatop");
-               if (!np)
-                       return IMX_CHIP_REVISION_UNKNOWN;
-               base = of_iomap(np, 0);
-               if (!base) {
-                       of_node_put(np);
-                       return IMX_CHIP_REVISION_UNKNOWN;
-               }
-               rev =  readl_relaxed(base + IMX6Q_ANALOG_DIGPROG);
-               iounmap(base);
-               of_node_put(np);
-       }
+       return chip_revision;
+ }
+ static void __init imx6q_init_revision(void)
+ {
+       u32 rev = imx_anatop_get_digprog();
  
        switch (rev & 0xff) {
        case 0:
-               return IMX_CHIP_REVISION_1_0;
+               chip_revision = IMX_CHIP_REVISION_1_0;
+               break;
        case 1:
-               return IMX_CHIP_REVISION_1_1;
+               chip_revision = IMX_CHIP_REVISION_1_1;
+               break;
        case 2:
-               return IMX_CHIP_REVISION_1_2;
+               chip_revision = IMX_CHIP_REVISION_1_2;
+               break;
        default:
-               return IMX_CHIP_REVISION_UNKNOWN;
+               chip_revision = IMX_CHIP_REVISION_UNKNOWN;
        }
+       mxc_set_cpu_type(rev >> 16 & 0xff);
  }
  
 -void imx6q_restart(char mode, const char *cmd)
 +static void imx6q_restart(char mode, const char *cmd)
  {
        struct device_node *np;
        void __iomem *wdog_base;
@@@ -164,29 -158,7 +158,7 @@@ static void __init imx6q_1588_init(void
  }
  static void __init imx6q_usb_init(void)
  {
-       struct regmap *anatop;
- #define HW_ANADIG_USB1_CHRG_DETECT            0x000001b0
- #define HW_ANADIG_USB2_CHRG_DETECT            0x00000210
- #define BM_ANADIG_USB_CHRG_DETECT_EN_B                0x00100000
- #define BM_ANADIG_USB_CHRG_DETECT_CHK_CHRG_B  0x00080000
-       anatop = syscon_regmap_lookup_by_compatible("fsl,imx6q-anatop");
-       if (!IS_ERR(anatop)) {
-               /*
-                * The external charger detector needs to be disabled,
-                * or the signal at DP will be poor
-                */
-               regmap_write(anatop, HW_ANADIG_USB1_CHRG_DETECT,
-                               BM_ANADIG_USB_CHRG_DETECT_EN_B
-                               | BM_ANADIG_USB_CHRG_DETECT_CHK_CHRG_B);
-               regmap_write(anatop, HW_ANADIG_USB2_CHRG_DETECT,
-                               BM_ANADIG_USB_CHRG_DETECT_EN_B |
-                               BM_ANADIG_USB_CHRG_DETECT_CHK_CHRG_B);
-       } else {
-               pr_warn("failed to find fsl,imx6q-anatop regmap\n");
-       }
+       imx_anatop_usb_chrg_detect_disable();
  }
  
  static void __init imx6q_init_machine(void)
  
        of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
  
+       imx_anatop_init();
        imx6q_pm_init();
        imx6q_usb_init();
        imx6q_1588_init();
@@@ -255,7 -228,7 +228,7 @@@ put_node
        of_node_put(np);
  }
  
 -struct platform_device imx6q_cpufreq_pdev = {
 +static struct platform_device imx6q_cpufreq_pdev = {
        .name = "imx6q-cpufreq",
  };
  
@@@ -282,6 -255,7 +255,7 @@@ static void __init imx6q_map_io(void
  
  static void __init imx6q_init_irq(void)
  {
+       imx6q_init_revision();
        l2x0_of_init(0, ~0UL);
        imx_src_init();
        imx_gpc_init();
@@@ -292,15 -266,17 +266,17 @@@ static void __init imx6q_timer_init(voi
  {
        mx6q_clocks_init();
        clocksource_of_init();
-       imx_print_silicon_rev("i.MX6Q", imx6q_revision());
+       imx_print_silicon_rev(cpu_is_imx6dl() ? "i.MX6DL" : "i.MX6Q",
+                             imx6q_revision());
  }
  
  static const char *imx6q_dt_compat[] __initdata = {
+       "fsl,imx6dl",
        "fsl,imx6q",
        NULL,
  };
  
- DT_MACHINE_START(IMX6Q, "Freescale i.MX6 Quad (Device Tree)")
+ DT_MACHINE_START(IMX6Q, "Freescale i.MX6 Quad/DualLite (Device Tree)")
        .smp            = smp_ops(imx_smp_ops),
        .map_io         = imx6q_map_io,
        .init_irq       = imx6q_init_irq,
diff --combined arch/arm/mach-imx/src.c
index 97d086889481a0091fba58effed7f7fe478c90ea,4e0236c89c5ed2a3dbf8870b48ccb641ae6c2b80..10a6b1a8c5acee611c2ae0c74766866b70cffd67
  #include <linux/io.h>
  #include <linux/of.h>
  #include <linux/of_address.h>
+ #include <linux/reset-controller.h>
  #include <linux/smp.h>
  #include <asm/smp_plat.h>
 +#include "common.h"
  
  #define SRC_SCR                               0x000
  #define SRC_GPR1                      0x020
  #define BP_SRC_SCR_WARM_RESET_ENABLE  0
+ #define BP_SRC_SCR_SW_GPU_RST         1
+ #define BP_SRC_SCR_SW_VPU_RST         2
+ #define BP_SRC_SCR_SW_IPU1_RST                3
+ #define BP_SRC_SCR_SW_OPEN_VG_RST     4
+ #define BP_SRC_SCR_SW_IPU2_RST                12
  #define BP_SRC_SCR_CORE1_RST          14
  #define BP_SRC_SCR_CORE1_ENABLE               22
  
  static void __iomem *src_base;
+ static DEFINE_SPINLOCK(scr_lock);
+ static const int sw_reset_bits[5] = {
+       BP_SRC_SCR_SW_GPU_RST,
+       BP_SRC_SCR_SW_VPU_RST,
+       BP_SRC_SCR_SW_IPU1_RST,
+       BP_SRC_SCR_SW_OPEN_VG_RST,
+       BP_SRC_SCR_SW_IPU2_RST
+ };
+ static int imx_src_reset_module(struct reset_controller_dev *rcdev,
+               unsigned long sw_reset_idx)
+ {
+       unsigned long timeout;
+       unsigned long flags;
+       int bit;
+       u32 val;
+       if (!src_base)
+               return -ENODEV;
+       if (sw_reset_idx >= ARRAY_SIZE(sw_reset_bits))
+               return -EINVAL;
+       bit = 1 << sw_reset_bits[sw_reset_idx];
+       spin_lock_irqsave(&scr_lock, flags);
+       val = readl_relaxed(src_base + SRC_SCR);
+       val |= bit;
+       writel_relaxed(val, src_base + SRC_SCR);
+       spin_unlock_irqrestore(&scr_lock, flags);
+       timeout = jiffies + msecs_to_jiffies(1000);
+       while (readl(src_base + SRC_SCR) & bit) {
+               if (time_after(jiffies, timeout))
+                       return -ETIME;
+               cpu_relax();
+       }
+       return 0;
+ }
+ static struct reset_control_ops imx_src_ops = {
+       .reset = imx_src_reset_module,
+ };
+ static struct reset_controller_dev imx_reset_controller = {
+       .ops = &imx_src_ops,
+       .nr_resets = ARRAY_SIZE(sw_reset_bits),
+ };
  
  void imx_enable_cpu(int cpu, bool enable)
  {
  
        cpu = cpu_logical_map(cpu);
        mask = 1 << (BP_SRC_SCR_CORE1_ENABLE + cpu - 1);
+       spin_lock(&scr_lock);
        val = readl_relaxed(src_base + SRC_SCR);
        val = enable ? val | mask : val & ~mask;
        writel_relaxed(val, src_base + SRC_SCR);
+       spin_unlock(&scr_lock);
  }
  
  void imx_set_cpu_jump(int cpu, void *jump_addr)
@@@ -61,9 -118,11 +119,11 @@@ void imx_src_prepare_restart(void
        u32 val;
  
        /* clear enable bits of secondary cores */
+       spin_lock(&scr_lock);
        val = readl_relaxed(src_base + SRC_SCR);
        val &= ~(0x7 << BP_SRC_SCR_CORE1_ENABLE);
        writel_relaxed(val, src_base + SRC_SCR);
+       spin_unlock(&scr_lock);
  
        /* clear persistent entry register of primary core */
        writel_relaxed(0, src_base + SRC_GPR1);
@@@ -74,17 -133,21 +134,23 @@@ void __init imx_src_init(void
        struct device_node *np;
        u32 val;
  
 -      np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-src");
 +      np = of_find_compatible_node(NULL, NULL, "fsl,imx51-src");
 +      if (!np)
 +              return;
        src_base = of_iomap(np, 0);
        WARN_ON(!src_base);
  
+       imx_reset_controller.of_node = np;
+       if (IS_ENABLED(CONFIG_RESET_CONTROLLER))
+               reset_controller_register(&imx_reset_controller);
        /*
         * force warm reset sources to generate cold reset
         * for a more reliable restart
         */
+       spin_lock(&scr_lock);
        val = readl_relaxed(src_base + SRC_SCR);
        val &= ~(1 << BP_SRC_SCR_WARM_RESET_ENABLE);
        writel_relaxed(val, src_base + SRC_SCR);
+       spin_unlock(&scr_lock);
  }
index cdbca328a412b2490a1eafd47f901d8bcf0ca9f2,d805f8078fa3293fcc39073d06c5e93815371558..e1f3735d34154aaa90da215fdab1359070f8ab64
@@@ -1,44 -1,42 +1,44 @@@
- obj-y                         += common.o addr-map.o irq.o pcie.o mpp.o
+ obj-y                         += common.o irq.o pcie.o mpp.o
  
 +obj-$(CONFIG_MACH_D2NET_V2)           += d2net_v2-setup.o lacie_v2-common.o
  obj-$(CONFIG_MACH_DB88F6281_BP)               += db88f6281-bp-setup.o
 -obj-$(CONFIG_MACH_RD88F6192_NAS)      += rd88f6192-nas-setup.o
 -obj-$(CONFIG_MACH_RD88F6281)          += rd88f6281-setup.o
 -obj-$(CONFIG_MACH_MV88F6281GTW_GE)    += mv88f6281gtw_ge-setup.o
 -obj-$(CONFIG_MACH_SHEEVAPLUG)         += sheevaplug-setup.o
 +obj-$(CONFIG_MACH_DOCKSTAR)           += dockstar-setup.o
  obj-$(CONFIG_MACH_ESATA_SHEEVAPLUG)   += sheevaplug-setup.o
  obj-$(CONFIG_MACH_GURUPLUG)           += guruplug-setup.o
 -obj-$(CONFIG_MACH_DOCKSTAR)           += dockstar-setup.o
 -obj-$(CONFIG_MACH_TS219)              += ts219-setup.o tsx1x-common.o
 -obj-$(CONFIG_MACH_TS41X)              += ts41x-setup.o tsx1x-common.o
 -obj-$(CONFIG_MACH_OPENRD)             += openrd-setup.o
 -obj-$(CONFIG_MACH_NETSPACE_V2)                += netspace_v2-setup.o lacie_v2-common.o
  obj-$(CONFIG_MACH_INETSPACE_V2)               += netspace_v2-setup.o lacie_v2-common.o
 -obj-$(CONFIG_MACH_NETSPACE_MAX_V2)    += netspace_v2-setup.o lacie_v2-common.o
 -obj-$(CONFIG_MACH_D2NET_V2)           += d2net_v2-setup.o lacie_v2-common.o
 +obj-$(CONFIG_MACH_MV88F6281GTW_GE)    += mv88f6281gtw_ge-setup.o
  obj-$(CONFIG_MACH_NET2BIG_V2)         += netxbig_v2-setup.o lacie_v2-common.o
  obj-$(CONFIG_MACH_NET5BIG_V2)         += netxbig_v2-setup.o lacie_v2-common.o
 +obj-$(CONFIG_MACH_NETSPACE_MAX_V2)    += netspace_v2-setup.o lacie_v2-common.o
 +obj-$(CONFIG_MACH_NETSPACE_V2)                += netspace_v2-setup.o lacie_v2-common.o
 +obj-$(CONFIG_MACH_OPENRD)             += openrd-setup.o
 +obj-$(CONFIG_MACH_RD88F6192_NAS)      += rd88f6192-nas-setup.o
 +obj-$(CONFIG_MACH_RD88F6281)          += rd88f6281-setup.o
 +obj-$(CONFIG_MACH_SHEEVAPLUG)         += sheevaplug-setup.o
  obj-$(CONFIG_MACH_T5325)              += t5325-setup.o
 +obj-$(CONFIG_MACH_TS219)              += ts219-setup.o tsx1x-common.o
 +obj-$(CONFIG_MACH_TS41X)              += ts41x-setup.o tsx1x-common.o
  
  obj-$(CONFIG_ARCH_KIRKWOOD_DT)                += board-dt.o
 -obj-$(CONFIG_MACH_DREAMPLUG_DT)               += board-dreamplug.o
 -obj-$(CONFIG_MACH_GURUPLUG_DT)                += board-guruplug.o
 -obj-$(CONFIG_MACH_ICONNECT_DT)                += board-iconnect.o
 +obj-$(CONFIG_MACH_CLOUDBOX_DT)                += board-ns2.o
  obj-$(CONFIG_MACH_DLINK_KIRKWOOD_DT)  += board-dnskw.o
 -obj-$(CONFIG_MACH_IB62X0_DT)          += board-ib62x0.o
 -obj-$(CONFIG_MACH_TS219_DT)           += board-ts219.o tsx1x-common.o
  obj-$(CONFIG_MACH_DOCKSTAR_DT)                += board-dockstar.o
 +obj-$(CONFIG_MACH_DREAMPLUG_DT)               += board-dreamplug.o
  obj-$(CONFIG_MACH_GOFLEXNET_DT)               += board-goflexnet.o
 -obj-$(CONFIG_MACH_LSXL_DT)            += board-lsxl.o
 +obj-$(CONFIG_MACH_GURUPLUG_DT)                += board-guruplug.o
 +obj-$(CONFIG_MACH_IB62X0_DT)          += board-ib62x0.o
 +obj-$(CONFIG_MACH_ICONNECT_DT)                += board-iconnect.o
 +obj-$(CONFIG_MACH_INETSPACE_V2_DT)    += board-ns2.o
  obj-$(CONFIG_MACH_IOMEGA_IX2_200_DT)  += board-iomega_ix2_200.o
  obj-$(CONFIG_MACH_KM_KIRKWOOD_DT)     += board-km_kirkwood.o
 -obj-$(CONFIG_MACH_INETSPACE_V2_DT)    += board-ns2.o
 +obj-$(CONFIG_MACH_LSXL_DT)            += board-lsxl.o
  obj-$(CONFIG_MACH_MPLCEC4_DT)         += board-mplcec4.o
 -obj-$(CONFIG_MACH_NETSPACE_V2_DT)     += board-ns2.o
 -obj-$(CONFIG_MACH_NETSPACE_MAX_V2_DT) += board-ns2.o
  obj-$(CONFIG_MACH_NETSPACE_LITE_V2_DT)        += board-ns2.o
 +obj-$(CONFIG_MACH_NETSPACE_MAX_V2_DT) += board-ns2.o
  obj-$(CONFIG_MACH_NETSPACE_MINI_V2_DT)        += board-ns2.o
 +obj-$(CONFIG_MACH_NETSPACE_V2_DT)     += board-ns2.o
  obj-$(CONFIG_MACH_NSA310_DT)          += board-nsa310.o
  obj-$(CONFIG_MACH_OPENBLOCKS_A6_DT)   += board-openblocks_a6.o
 +obj-$(CONFIG_MACH_READYNAS_DT)                += board-readynas.o
  obj-$(CONFIG_MACH_TOPKICK_DT)         += board-usi_topkick.o
 +obj-$(CONFIG_MACH_TS219_DT)           += board-ts219.o tsx1x-common.o
index 7904758e771fb1f30df89036191956831a88e9c7,f5437c27dc2adc7dbcf1757b7c332c2d38663193..e9647b80cb590d9d0131b9542a5e476da9cad459
@@@ -93,7 -93,7 +93,7 @@@ static void __init kirkwood_dt_init(voi
         */
        writel(readl(CPU_CONFIG) & ~CPU_CONFIG_ERROR_PROP, CPU_CONFIG);
  
-       kirkwood_setup_cpu_mbus();
+       kirkwood_setup_wins();
  
        kirkwood_l2_init();
  
        if (of_machine_is_compatible("keymile,km_kirkwood"))
                km_kirkwood_init();
  
 -      if (of_machine_is_compatible("lacie,inetspace_v2") ||
 -          of_machine_is_compatible("lacie,netspace_v2") ||
 -          of_machine_is_compatible("lacie,netspace_max_v2") ||
 +      if (of_machine_is_compatible("lacie,cloudbox") ||
 +          of_machine_is_compatible("lacie,inetspace_v2") ||
            of_machine_is_compatible("lacie,netspace_lite_v2") ||
 -          of_machine_is_compatible("lacie,netspace_mini_v2"))
 +          of_machine_is_compatible("lacie,netspace_max_v2") ||
 +          of_machine_is_compatible("lacie,netspace_mini_v2") ||
 +          of_machine_is_compatible("lacie,netspace_v2"))
                ns2_init();
  
        if (of_machine_is_compatible("mpl,cec4"))
                mplcec4_init();
  
 +      if (of_machine_is_compatible("netgear,readynas-duo-v2"))
 +              netgear_readynas_init();
 +
        if (of_machine_is_compatible("plathome,openblocks-a6"))
                openblocks_a6_init();
  
@@@ -175,14 -171,12 +175,14 @@@ static const char * const kirkwood_dt_b
        "buffalo,lsxl",
        "iom,ix2-200",
        "keymile,km_kirkwood",
 +      "lacie,cloudbox",
        "lacie,inetspace_v2",
 -      "lacie,netspace_max_v2",
 -      "lacie,netspace_v2",
        "lacie,netspace_lite_v2",
 +      "lacie,netspace_max_v2",
        "lacie,netspace_mini_v2",
 +      "lacie,netspace_v2",
        "mpl,cec4",
 +      "netgear,readynas-duo-v2",
        "plathome,openblocks-a6",
        "usi,topkick",
        "zyxel,nsa310",
index 3147be2f34da7558818c6a7a667058f50b22b94e,e24f74305b3413e583d116d006686cec8108acfc..21da3b1ebd7bf843c2b9b1e11a8fd025b5e30287
@@@ -30,7 -30,7 +30,7 @@@ void kirkwood_init(void)
  void kirkwood_init_early(void);
  void kirkwood_init_irq(void);
  
- void kirkwood_setup_cpu_mbus(void);
+ void kirkwood_setup_wins(void);
  
  void kirkwood_enable_pcie(void);
  void kirkwood_pcie_id(u32 *dev, u32 *rev);
@@@ -141,24 -141,12 +141,24 @@@ void openblocks_a6_init(void)
  static inline void openblocks_a6_init(void) {};
  #endif
  
 +#ifdef CONFIG_MACH_READYNAS_DT
 +void netgear_readynas_init(void);
 +#else
 +static inline void netgear_readynas_init(void) {};
 +#endif
 +
  #ifdef CONFIG_MACH_TOPKICK_DT
  void usi_topkick_init(void);
  #else
  static inline void usi_topkick_init(void) {};
  #endif
  
 +#ifdef CONFIG_MACH_CLOUDBOX_DT
 +void cloudbox_init(void);
 +#else
 +static inline void cloudbox_init(void) {};
 +#endif
 +
  /* early init functions not converted to fdt yet */
  char *kirkwood_id(void);
  void kirkwood_l2_init(void);
index 94fbb815680c40d117069714d2d1d8b342949ce2,6bbc8786c1e3f0e1ed3021c70148676e3f7301eb..b91002ca92f3b42b6a04f54683daa4f2504e5c2a
@@@ -14,7 -14,6 +14,7 @@@
  #include <linux/init.h>
  #include <linux/of.h>
  #include <linux/of_platform.h>
 +#include <linux/cpu.h>
  #include <asm/system_misc.h>
  #include <asm/mach/arch.h>
  #include <mach/orion5x.h>
@@@ -42,7 -41,7 +42,7 @@@ static void __init orion5x_dt_init(void
        /*
         * Setup Orion address map
         */
-       orion5x_setup_cpu_mbus_bridge();
+       orion5x_setup_wins();
  
        /* Setup root of clk tree */
        clk_init();
@@@ -53,7 -52,7 +53,7 @@@
         */
        if (dev == MV88F5281_DEV_ID && rev == MV88F5281_REV_D0) {
                printk(KERN_INFO "Orion: Applying 5281 D0 WFI workaround.\n");
 -              disable_hlt();
 +              cpu_idle_poll_ctrl(true);
        }
  
        if (of_machine_is_compatible("lacie,ethernet-disk-mini-v2"))
index 2075bf8e3d90959784d27ff0b36bb423836c2711,8e468e3a60153a483d02a07219fa31ac1055a218..b97fd672e89d74f40e3ebfc0b1e18c365be785f3
@@@ -19,7 -19,6 +19,7 @@@
  #include <linux/ata_platform.h>
  #include <linux/delay.h>
  #include <linux/clk-provider.h>
 +#include <linux/cpu.h>
  #include <net/dsa.h>
  #include <asm/page.h>
  #include <asm/setup.h>
@@@ -35,7 -34,6 +35,6 @@@
  #include <linux/platform_data/usb-ehci-orion.h>
  #include <plat/time.h>
  #include <plat/common.h>
- #include <plat/addr-map.h>
  #include "common.h"
  
  /*****************************************************************************
@@@ -175,7 -173,8 +174,8 @@@ void __init orion5x_xor_init(void
   ****************************************************************************/
  static void __init orion5x_crypto_init(void)
  {
-       orion5x_setup_sram_win();
+       mvebu_mbus_add_window("sram", ORION5X_SRAM_PHYS_BASE,
+                             ORION5X_SRAM_SIZE);
        orion_crypto_init(ORION5X_CRYPTO_PHYS_BASE, ORION5X_SRAM_PHYS_BASE,
                          SZ_8K, IRQ_ORION5X_CESA);
  }
@@@ -194,6 -193,9 +194,9 @@@ void __init orion5x_wdt_init(void
   ****************************************************************************/
  void __init orion5x_init_early(void)
  {
+       u32 rev, dev;
+       const char *mbus_soc_name;
        orion_time_set_base(TIMER_VIRT_BASE);
  
        /*
         * the allocations won't fail.
         */
        init_dma_coherent_pool_size(SZ_1M);
+       /* Initialize the MBUS driver */
+       orion5x_pcie_id(&dev, &rev);
+       if (dev == MV88F5281_DEV_ID)
+               mbus_soc_name = "marvell,orion5x-88f5281-mbus";
+       else if (dev == MV88F5182_DEV_ID)
+               mbus_soc_name = "marvell,orion5x-88f5182-mbus";
+       else if (dev == MV88F5181_DEV_ID)
+               mbus_soc_name = "marvell,orion5x-88f5181-mbus";
+       else if (dev == MV88F6183_DEV_ID)
+               mbus_soc_name = "marvell,orion5x-88f6183-mbus";
+       else
+               mbus_soc_name = NULL;
+       mvebu_mbus_init(mbus_soc_name, ORION5X_BRIDGE_WINS_BASE,
+                       ORION5X_BRIDGE_WINS_SZ,
+                       ORION5X_DDR_WINS_BASE, ORION5X_DDR_WINS_SZ);
+ }
+ void orion5x_setup_wins(void)
+ {
+       /*
+        * The PCIe windows will no longer be statically allocated
+        * here once Orion5x is migrated to the pci-mvebu driver.
+        */
+       mvebu_mbus_add_window_remap_flags("pcie0.0", ORION5X_PCIE_IO_PHYS_BASE,
+                                         ORION5X_PCIE_IO_SIZE,
+                                         ORION5X_PCIE_IO_BUS_BASE,
+                                         MVEBU_MBUS_PCI_IO);
+       mvebu_mbus_add_window_remap_flags("pcie0.0", ORION5X_PCIE_MEM_PHYS_BASE,
+                                         ORION5X_PCIE_MEM_SIZE,
+                                         MVEBU_MBUS_NO_REMAP,
+                                         MVEBU_MBUS_PCI_MEM);
+       mvebu_mbus_add_window_remap_flags("pci0.0", ORION5X_PCI_IO_PHYS_BASE,
+                                         ORION5X_PCI_IO_SIZE,
+                                         ORION5X_PCI_IO_BUS_BASE,
+                                         MVEBU_MBUS_PCI_IO);
+       mvebu_mbus_add_window_remap_flags("pci0.0", ORION5X_PCI_MEM_PHYS_BASE,
+                                         ORION5X_PCI_MEM_SIZE,
+                                         MVEBU_MBUS_NO_REMAP,
+                                         MVEBU_MBUS_PCI_MEM);
  }
  
  int orion5x_tclk;
@@@ -283,7 -325,7 +326,7 @@@ void __init orion5x_init(void
        /*
         * Setup Orion address map
         */
-       orion5x_setup_cpu_mbus_bridge();
+       orion5x_setup_wins();
  
        /* Setup root of clk tree */
        clk_init();
         */
        if (dev == MV88F5281_DEV_ID && rev == MV88F5281_REV_D0) {
                printk(KERN_INFO "Orion: Applying 5281 D0 WFI workaround.\n");
 -              disable_hlt();
 +              cpu_idle_poll_ctrl(true);
        }
  
        /*
index cf3226b041f51a7f8b53daa60e3aa1a0bce9c2bc,f4a7e630bde04dc778b89021838eee4df95806f9..c1d61f281e68d424b82060caf6b0601e6ecbf967
@@@ -5,11 -5,10 +5,12 @@@ config ARCH_ZYN
        select COMMON_CLK
        select CPU_V7
        select GENERIC_CLOCKEVENTS
 +      select HAVE_ARM_SCU if SMP
 +      select HAVE_ARM_TWD if LOCAL_TIMERS
        select ICST
        select MIGHT_HAVE_CACHE_L2X0
        select USE_OF
+       select HAVE_SMP
        select SPARSE_IRQ
        select CADENCE_TTC_TIMER
        help
index 0880ef1a01baa4ab4a355302d05fde8c65ca7aae,148f98e9aaf7aa31fbefd7d73a78e444b3793bd3..0127601c26c7ff6b7a50ebd72d034c444ef434e4
@@@ -16,6 -16,7 +16,7 @@@
  #include <linux/export.h>
  #include <linux/types.h>
  #include <linux/init.h>
+ #include <linux/reset.h>
  #include <linux/platform_device.h>
  #include <linux/err.h>
  #include <linux/spinlock.h>
@@@ -225,8 -226,7 +226,8 @@@ int ipu_cpmem_set_format_passthrough(st
  }
  EXPORT_SYMBOL_GPL(ipu_cpmem_set_format_passthrough);
  
 -void ipu_cpmem_set_yuv_interleaved(struct ipu_ch_param *p, u32 pixel_format)
 +void ipu_cpmem_set_yuv_interleaved(struct ipu_ch_param __iomem *p,
 +                                 u32 pixel_format)
  {
        switch (pixel_format) {
        case V4L2_PIX_FMT_UYVY:
@@@ -661,7 -661,7 +662,7 @@@ int ipu_idmac_disable_channel(struct ip
  }
  EXPORT_SYMBOL_GPL(ipu_idmac_disable_channel);
  
- static int ipu_reset(struct ipu_soc *ipu)
+ static int ipu_memory_reset(struct ipu_soc *ipu)
  {
        unsigned long timeout;
  
@@@ -1105,7 -1105,12 +1106,12 @@@ static int ipu_probe(struct platform_de
        if (ret)
                goto out_failed_irq;
  
-       ret = ipu_reset(ipu);
+       ret = device_reset(&pdev->dev);
+       if (ret) {
+               dev_err(&pdev->dev, "failed to reset: %d\n", ret);
+               goto out_failed_reset;
+       }
+       ret = ipu_memory_reset(ipu);
        if (ret)
                goto out_failed_reset;
  
  failed_add_clients:
        ipu_submodules_exit(ipu);
  failed_submodules_init:
-       ipu_irq_exit(ipu);
  out_failed_reset:
+       ipu_irq_exit(ipu);
  out_failed_irq:
        clk_disable_unprepare(ipu->clk);
  failed_clk_get: