]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/commitdiff
Merge tag 'clk-for-linus-3.18' of git://git.linaro.org/people/mike.turquette/linux
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 15 Oct 2014 05:05:03 +0000 (07:05 +0200)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 15 Oct 2014 05:05:03 +0000 (07:05 +0200)
Pull clock tree updates from Mike Turquette:
 "The clk tree changes for 3.18 are dominated by clock drivers.  Mostly
  fixes and enhancements to existing drivers as well as new drivers.
  This tag contains a bit more arch code than I usually take due to some
  OMAP2+ changes.  Additionally it contains the restart notifier
  handlers which are merged as a dependency into several trees.

  The PXA changes are the only messy part.  Due to having a stable tree
  I had to revert one patch and follow up with one more fix near the tip
  of this tag.  Some dead code is introduced but it will soon become
  live code after 3.18-rc1 is released as the rest of the PXA family is
  converted over to the common clock framework.

  Another trend in this tag is that multiple vendors have started to
  push the complexity of changing their CPU frequency into the clock
  driver, whereas this used to be done in CPUfreq drivers.

  Changes to the clk core include a generic gpio-clock type and a
  clk_set_phase() function added to the top-level clk.h api.  Due to
  some confusion on the fbdev mailing list the kernel boot parameters
  documentation was updated to further explain the clk_ignore_unused
  parameter, which is often required by users of the simplefb driver.

  Finally some fixes to the locking around the clock debugfs stuff was
  done to prevent deadlocks when interacting with other subsystems."

* tag 'clk-for-linus-3.18' of git://git.linaro.org/people/mike.turquette/linux: (99 commits)
  clk: pxa clocks build system fix
  Revert "arm: pxa: Transition pxa27x to clk framework"
  clk: samsung: register restart handlers for s3c2412 and s3c2443
  clk: rockchip: add restart handler
  clk: rockchip: rk3288: i2s_frac adds flag to set parent's rate
  doc/kernel-parameters.txt: clarify clk_ignore_unused
  arm: pxa: Transition pxa27x to clk framework
  dts: add devicetree bindings for pxa27x clocks
  clk: add pxa27x clock drivers
  arm: pxa: add clock pll selection bits
  clk: dts: document pxa clock binding
  clk: add pxa clocks infrastructure
  clk: gpio-gate: Ensure gpiod_ APIs are prototyped
  clk: ti: dra7-atl-clock: Mark the device as pm_runtime_irq_safe
  clk: ti: LLVMLinux: Move __init outside of type definition
  clk: ti: consider the fact that of_clk_get() might return an error
  clk: ti: dra7-atl-clock: fix a memory leak
  clk: ti: change clock init to use generic of_clk_init
  clk: hix5hd2: add I2C clocks
  clk: hix5hd2: add watchdog0 clocks
  ...

1  2 
Documentation/devicetree/bindings/clock/renesas,cpg-mstp-clocks.txt
Documentation/kernel-parameters.txt
arch/arm/boot/dts/exynos3250.dtsi
arch/arm/boot/dts/sun5i-a10s.dtsi
arch/arm/boot/dts/sun5i-a13.dtsi
arch/arm/boot/dts/sun7i-a20.dtsi
arch/arm/mach-omap2/io.c
arch/arm/mach-omap2/prm_common.c
drivers/clk/Kconfig
drivers/clk/Makefile
include/linux/clk.h

index 8f1424f0fa439cdfac3e16e0e6e90ef039218ab0,a03c8c029a944416e610c5b22009942cab41ed5f..a5f52238c80d5f9b9560914f59e653e772b42bea
@@@ -11,11 -11,10 +11,12 @@@ Required Properties
  
    - compatible: Must be one of the following
      - "renesas,r7s72100-mstp-clocks" for R7S72100 (RZ) MSTP gate clocks
 +    - "renesas,r8a7740-mstp-clocks" for R8A7740 (R-Mobile A1) MSTP gate clocks
      - "renesas,r8a7779-mstp-clocks" for R8A7779 (R-Car H1) MSTP gate clocks
      - "renesas,r8a7790-mstp-clocks" for R8A7790 (R-Car H2) MSTP gate clocks
      - "renesas,r8a7791-mstp-clocks" for R8A7791 (R-Car M2) MSTP gate clocks
+     - "renesas,r8a7794-mstp-clocks" for R8A7794 (R-Car E2) MSTP gate clocks
 +    - "renesas,sh73a0-mstp-clocks" for SH73A0 (SH-MobileAG5) MSTP gate clocks
      - "renesas,cpg-mstp-clock" for generic MSTP gate clocks
    - reg: Base address and length of the I/O mapped registers used by the MSTP
      clocks. The first register is the clock control register and is mandatory.
index 04e9f5505faa8fa4133c198a946cdefab241824d,0ce01fb286c4fe103b8522f78635f22890395e87..b62bdcb1eb39fc33cb12ffb08b82dc38ecbbf88a
@@@ -605,11 -605,15 +605,15 @@@ bytes respectively. Such letter suffixe
                        See Documentation/s390/CommonIO for details.
        clk_ignore_unused
                        [CLK]
-                       Keep all clocks already enabled by bootloader on,
-                       even if no driver has claimed them. This is useful
-                       for debug and development, but should not be
-                       needed on a platform with proper driver support.
-                       For more information, see Documentation/clk.txt.
+                       Prevents the clock framework from automatically gating
+                       clocks that have not been explicitly enabled by a Linux
+                       device driver but are enabled in hardware at reset or
+                       by the bootloader/firmware. Note that this does not
+                       force such clocks to be always-on nor does it reserve
+                       those clocks in any way. This parameter is useful for
+                       debug and development, but should not be needed on a
+                       platform with proper driver support.  For more
+                       information, see Documentation/clk.txt.
  
        clock=          [BUGS=X86-32, HW] gettimeofday clocksource override.
                        [Deprecated]
                        Sets the size of kernel global memory area for
                        contiguous memory allocations and optionally the
                        placement constraint by the physical address range of
 -                      memory allocations. For more information, see
 +                      memory allocations. A value of 0 disables CMA
 +                      altogether. For more information, see
                        include/linux/dma-contiguous.h
  
        cmo_free_hint=  [PPC] Format: { yes | no }
  
        earlycon=       [KNL] Output early console device and options.
  
 +              cdns,<addr>
 +                      Start an early, polled-mode console on a cadence serial
 +                      port at the specified address. The cadence serial port
 +                      must already be setup and configured. Options are not
 +                      yet supported.
 +
                uart[8250],io,<addr>[,options]
                uart[8250],mmio,<addr>[,options]
                uart[8250],mmio32,<addr>[,options]
                        must already be setup and configured. Options are not
                        yet supported.
  
 +              msm_serial,<addr>
 +                      Start an early, polled-mode console on an msm serial
 +                      port at the specified address. The serial port
 +                      must already be setup and configured. Options are not
 +                      yet supported.
 +
 +              msm_serial_dm,<addr>
 +                      Start an early, polled-mode console on an msm serial
 +                      dm port at the specified address. The serial port
 +                      must already be setup and configured. Options are not
 +                      yet supported.
 +
                smh     Use ARM semihosting calls for early console.
  
        earlyprintk=    [X86,SH,BLACKFIN,ARM,M68k]
                        Set number of hash buckets for inode cache.
  
        ima_appraise=   [IMA] appraise integrity measurements
 -                      Format: { "off" | "enforce" | "fix" }
 +                      Format: { "off" | "enforce" | "fix" | "log" }
                        default: "enforce"
  
        ima_appraise_tcb [IMA]
        lockd.nlm_udpport=M     [NFS] Assign UDP port.
                        Format: <integer>
  
 +      locktorture.nreaders_stress= [KNL]
 +                      Set the number of locking read-acquisition kthreads.
 +                      Defaults to being automatically set based on the
 +                      number of online CPUs.
 +
 +      locktorture.nwriters_stress= [KNL]
 +                      Set the number of locking write-acquisition kthreads.
 +
 +      locktorture.onoff_holdoff= [KNL]
 +                      Set time (s) after boot for CPU-hotplug testing.
 +
 +      locktorture.onoff_interval= [KNL]
 +                      Set time (s) between CPU-hotplug operations, or
 +                      zero to disable CPU-hotplug testing.
 +
 +      locktorture.shuffle_interval= [KNL]
 +                      Set task-shuffle interval (jiffies).  Shuffling
 +                      tasks allows some CPUs to go into dyntick-idle
 +                      mode during the locktorture test.
 +
 +      locktorture.shutdown_secs= [KNL]
 +                      Set time (s) after boot system shutdown.  This
 +                      is useful for hands-off automated testing.
 +
 +      locktorture.stat_interval= [KNL]
 +                      Time (s) between statistics printk()s.
 +
 +      locktorture.stutter= [KNL]
 +                      Time (s) to stutter testing, for example,
 +                      specifying five seconds causes the test to run for
 +                      five seconds, wait for five seconds, and so on.
 +                      This tests the locking primitive's ability to
 +                      transition abruptly to and from idle.
 +
 +      locktorture.torture_runnable= [BOOT]
 +                      Start locktorture running at boot time.
 +
 +      locktorture.torture_type= [KNL]
 +                      Specify the locking implementation to test.
 +
 +      locktorture.verbose= [KNL]
 +                      Enable additional printk() statements.
 +
        logibm.irq=     [HW,MOUSE] Logitech Bus Mouse Driver
                        Format: <irq>
  
                        Lazy RCU callbacks are those which RCU can
                        prove do nothing more than free memory.
  
 +      rcutorture.cbflood_inter_holdoff= [KNL]
 +                      Set holdoff time (jiffies) between successive
 +                      callback-flood tests.
 +
 +      rcutorture.cbflood_intra_holdoff= [KNL]
 +                      Set holdoff time (jiffies) between successive
 +                      bursts of callbacks within a given callback-flood
 +                      test.
 +
 +      rcutorture.cbflood_n_burst= [KNL]
 +                      Set the number of bursts making up a given
 +                      callback-flood test.  Set this to zero to
 +                      disable callback-flood testing.
 +
 +      rcutorture.cbflood_n_per_burst= [KNL]
 +                      Set the number of callbacks to be registered
 +                      in a given burst of a callback-flood test.
 +
        rcutorture.fqs_duration= [KNL]
                        Set duration of force_quiescent_state bursts.
  
                        Set time (s) between CPU-hotplug operations, or
                        zero to disable CPU-hotplug testing.
  
 -      rcutorture.rcutorture_runnable= [BOOT]
 +      rcutorture.torture_runnable= [BOOT]
                        Start rcutorture running at boot time.
  
        rcutorture.shuffle_interval= [KNL]
        rcupdate.rcu_cpu_stall_timeout= [KNL]
                        Set timeout for RCU CPU stall warning messages.
  
 +      rcupdate.rcu_task_stall_timeout= [KNL]
 +                      Set timeout in jiffies for RCU task stall warning
 +                      messages.  Disable with a value less than or equal
 +                      to zero.
 +
        rdinit=         [KNL]
                        Format: <full_path>
                        Run specified binary instead of /init from the ramdisk,
  
        slram=          [HW,MTD]
  
 +      slab_nomerge    [MM]
 +                      Disable merging of slabs with similar size. May be
 +                      necessary if there is some reason to distinguish
 +                      allocs to different slabs. Debug options disable
 +                      merging on their own.
 +                      For more information see Documentation/vm/slub.txt.
 +
        slab_max_order= [MM, SLAB]
                        Determines the maximum allowed order for slabs.
                        A high setting may cause OOMs due to memory
                        For more information see Documentation/vm/slub.txt.
  
        slub_nomerge    [MM, SLUB]
 -                      Disable merging of slabs with similar size. May be
 -                      necessary if there is some reason to distinguish
 -                      allocs to different slabs. Debug options disable
 -                      merging on their own.
 -                      For more information see Documentation/vm/slub.txt.
 +                      Same with slab_nomerge. This is supported for legacy.
 +                      See slab_nomerge for more information.
  
        smart2=         [HW]
                        Format: <io1>[,<io2>[,...,<io8>]]
  
        tdfx=           [HW,DRM]
  
 -      test_suspend=   [SUSPEND]
 +      test_suspend=   [SUSPEND][,N]
                        Specify "mem" (for Suspend-to-RAM) or "standby" (for
 -                      standby suspend) as the system sleep state to briefly
 -                      enter during system startup.  The system is woken from
 -                      this state using a wakeup-capable RTC alarm.
 +                      standby suspend) or "freeze" (for suspend type freeze)
 +                      as the system sleep state during system startup with
 +                      the optional capability to repeat N number of times.
 +                      The system is woken from this state using a
 +                      wakeup-capable RTC alarm.
  
        thash_entries=  [KNL,NET]
                        Set number of hash buckets for TCP connection
                                        READ_DISC_INFO command);
                                e = NO_READ_CAPACITY_16 (don't use
                                        READ_CAPACITY_16 command);
 +                              f = NO_REPORT_OPCODES (don't use report opcodes
 +                                      command, uas only);
                                h = CAPACITY_HEURISTICS (decrease the
                                        reported device capacity by one
                                        sector if the number is odd);
                                        bogus residue values);
                                s = SINGLE_LUN (the device has only one
                                        Logical Unit);
 +                              t = NO_ATA_1X (don't allow ATA(12) and ATA(16)
 +                                      commands, uas only);
                                u = IGNORE_UAS (don't bind to the uas driver);
                                w = NO_WP_DETECT (don't test whether the
                                        medium is write-protected).
index 8831c48c2bc93b260d15a0cbb255d64467eb3a4d,72bf1b5737885cc0f8e7ae26595bc86a05d5031f..693a3275606f2ab4c25e7647c5606ac42e88139d
                        reg = <0x10020000 0x4000>;
                };
  
 +              mipi_phy: video-phy@10020710 {
 +                      compatible = "samsung,s5pv210-mipi-video-phy";
 +                      reg = <0x10020710 8>;
 +                      #phy-cells = <1>;
 +              };
 +
                pd_cam: cam-power-domain@10023C00 {
                        compatible = "samsung,exynos4210-pd";
                        reg = <0x10023C00 0x20>;
                        #clock-cells = <1>;
                };
  
+               cmu_dmc: clock-controller@105C0000 {
+                       compatible = "samsung,exynos3250-cmu-dmc";
+                       reg = <0x105C0000 0x2000>;
+                       #clock-cells = <1>;
+               };
                rtc: rtc@10070000 {
 -                      compatible = "samsung,s3c6410-rtc";
 +                      compatible = "samsung,exynos3250-rtc";
                        reg = <0x10070000 0x100>;
                        interrupts = <0 73 0>, <0 74 0>;
                        status = "disabled";
                        interrupts = <0 240 0>;
                };
  
 +              fimd: fimd@11c00000 {
 +                      compatible = "samsung,exynos3250-fimd";
 +                      reg = <0x11c00000 0x30000>;
 +                      interrupt-names = "fifo", "vsync", "lcd_sys";
 +                      interrupts = <0 84 0>, <0 85 0>, <0 86 0>;
 +                      clocks = <&cmu CLK_SCLK_FIMD0>, <&cmu CLK_FIMD0>;
 +                      clock-names = "sclk_fimd", "fimd";
 +                      samsung,power-domain = <&pd_lcd0>;
 +                      samsung,sysreg = <&sys_reg>;
 +                      status = "disabled";
 +              };
 +
 +              dsi_0: dsi@11C80000 {
 +                      compatible = "samsung,exynos3250-mipi-dsi";
 +                      reg = <0x11C80000 0x10000>;
 +                      interrupts = <0 83 0>;
 +                      samsung,phy-type = <0>;
 +                      samsung,power-domain = <&pd_lcd0>;
 +                      phys = <&mipi_phy 1>;
 +                      phy-names = "dsim";
 +                      clocks = <&cmu CLK_DSIM0>, <&cmu CLK_SCLK_MIPI0>;
 +                      clock-names = "bus_clk", "pll_clk";
 +                      #address-cells = <1>;
 +                      #size-cells = <0>;
 +                      status = "disabled";
 +              };
 +
                mshc_0: mshc@12510000 {
                        compatible = "samsung,exynos5250-dw-mshc";
                        reg = <0x12510000 0x1000>;
index d73a2287b37ab7affcb826c2ad864d8eefdb0c59,82094283473d92e54c67c9e3d2e866e077be6073..531272c0e526aec013c22ec6a7d6a3a044f88467
  
                mbus_clk: clk@01c2015c {
                        #clock-cells = <0>;
-                       compatible = "allwinner,sun4i-a10-mod0-clk";
+                       compatible = "allwinner,sun5i-a13-mbus-clk";
                        reg = <0x01c2015c 0x4>;
                        clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
                        clock-output-names = "mbus";
                #size-cells = <1>;
                ranges;
  
 +              dma: dma-controller@01c02000 {
 +                      compatible = "allwinner,sun4i-a10-dma";
 +                      reg = <0x01c02000 0x1000>;
 +                      interrupts = <27>;
 +                      clocks = <&ahb_gates 6>;
 +                      #dma-cells = <2>;
 +              };
 +
                spi0: spi@01c05000 {
                        compatible = "allwinner,sun4i-a10-spi";
                        reg = <0x01c05000 0x1000>;
                        interrupts = <10>;
                        clocks = <&ahb_gates 20>, <&spi0_clk>;
                        clock-names = "ahb", "mod";
 +                      dmas = <&dma 1 27>, <&dma 1 26>;
 +                      dma-names = "rx", "tx";
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        interrupts = <11>;
                        clocks = <&ahb_gates 21>, <&spi1_clk>;
                        clock-names = "ahb", "mod";
 +                      dmas = <&dma 1 9>, <&dma 1 8>;
 +                      dma-names = "rx", "tx";
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        interrupts = <12>;
                        clocks = <&ahb_gates 22>, <&spi2_clk>;
                        clock-names = "ahb", "mod";
 +                      dmas = <&dma 1 29>, <&dma 1 28>;
 +                      dma-names = "rx", "tx";
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        reg = <0x01c2ac00 0x400>;
                        interrupts = <7>;
                        clocks = <&apb1_gates 0>;
 -                      clock-frequency = <100000>;
                        status = "disabled";
                };
  
                        reg = <0x01c2b000 0x400>;
                        interrupts = <8>;
                        clocks = <&apb1_gates 1>;
 -                      clock-frequency = <100000>;
                        status = "disabled";
                };
  
                        reg = <0x01c2b400 0x400>;
                        interrupts = <9>;
                        clocks = <&apb1_gates 2>;
 -                      clock-frequency = <100000>;
                        status = "disabled";
                };
  
index c4b5d7825b9f78c89c0e088f07d77bc60e98e813,53e0e72a9d327947a6a9cc253db96f94cc60c9a3..b131068f4f351ca92e7df07d63641cec143c5fc2
  
                mbus_clk: clk@01c2015c {
                        #clock-cells = <0>;
-                       compatible = "allwinner,sun4i-a10-mod0-clk";
+                       compatible = "allwinner,sun5i-a13-mbus-clk";
                        reg = <0x01c2015c 0x4>;
                        clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
                        clock-output-names = "mbus";
                #size-cells = <1>;
                ranges;
  
 +              dma: dma-controller@01c02000 {
 +                      compatible = "allwinner,sun4i-a10-dma";
 +                      reg = <0x01c02000 0x1000>;
 +                      interrupts = <27>;
 +                      clocks = <&ahb_gates 6>;
 +                      #dma-cells = <2>;
 +              };
 +
                spi0: spi@01c05000 {
                        compatible = "allwinner,sun4i-a10-spi";
                        reg = <0x01c05000 0x1000>;
                        interrupts = <10>;
                        clocks = <&ahb_gates 20>, <&spi0_clk>;
                        clock-names = "ahb", "mod";
 +                      dmas = <&dma 1 27>, <&dma 1 26>;
 +                      dma-names = "rx", "tx";
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        interrupts = <11>;
                        clocks = <&ahb_gates 21>, <&spi1_clk>;
                        clock-names = "ahb", "mod";
 +                      dmas = <&dma 1 9>, <&dma 1 8>;
 +                      dma-names = "rx", "tx";
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        interrupts = <12>;
                        clocks = <&ahb_gates 22>, <&spi2_clk>;
                        clock-names = "ahb", "mod";
 +                      dmas = <&dma 1 29>, <&dma 1 28>;
 +                      dma-names = "rx", "tx";
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        reg = <0x01c2ac00 0x400>;
                        interrupts = <7>;
                        clocks = <&apb1_gates 0>;
 -                      clock-frequency = <100000>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        reg = <0x01c2b000 0x400>;
                        interrupts = <8>;
                        clocks = <&apb1_gates 1>;
 -                      clock-frequency = <100000>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        reg = <0x01c2b400 0x400>;
                        interrupts = <9>;
                        clocks = <&apb1_gates 2>;
 -                      clock-frequency = <100000>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
index a96b9946506949d89e839310ac4980cd61111a17,2edef89ef0a58c258c6ebd7908cbf1af742c60c0..82097c905c48cb5e99387db684c113fb6d37cb94
@@@ -3,48 -3,12 +3,48 @@@
   *
   * Maxime Ripard <maxime.ripard@free-electrons.com>
   *
 - * The code contained herein is licensed under the GNU General Public
 - * License. You may obtain a copy of the GNU General Public License
 - * Version 2 or later at the following locations:
 + * This file is dual-licensed: you can use it either under the terms
 + * of the GPL or the X11 license, at your option. Note that this dual
 + * licensing only applies to this file, and not this project as a
 + * whole.
   *
 - * http://www.opensource.org/licenses/gpl-license.html
 - * http://www.gnu.org/copyleft/gpl.html
 + *  a) This library is free software; you can redistribute it and/or
 + *     modify it under the terms of the GNU General Public License as
 + *     published by the Free Software Foundation; either version 2 of the
 + *     License, or (at your option) any later version.
 + *
 + *     This library is distributed in the hope that it will be useful,
 + *     but WITHOUT ANY WARRANTY; without even the implied warranty of
 + *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 + *     GNU General Public License for more details.
 + *
 + *     You should have received a copy of the GNU General Public
 + *     License along with this library; if not, write to the Free
 + *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
 + *     MA 02110-1301 USA
 + *
 + * Or, alternatively,
 + *
 + *  b) Permission is hereby granted, free of charge, to any person
 + *     obtaining a copy of this software and associated documentation
 + *     files (the "Software"), to deal in the Software without
 + *     restriction, including without limitation the rights to use,
 + *     copy, modify, merge, publish, distribute, sublicense, and/or
 + *     sell copies of the Software, and to permit persons to whom the
 + *     Software is furnished to do so, subject to the following
 + *     conditions:
 + *
 + *     The above copyright notice and this permission notice shall be
 + *     included in all copies or substantial portions of the Software.
 + *
 + *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 + *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 + *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 + *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 + *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 + *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 + *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 + *     OTHER DEALINGS IN THE SOFTWARE.
   */
  
  /include/ "skeleton.dtsi"
  
                mbus_clk: clk@01c2015c {
                        #clock-cells = <0>;
-                       compatible = "allwinner,sun4i-a10-mod0-clk";
+                       compatible = "allwinner,sun5i-a13-mbus-clk";
                        reg = <0x01c2015c 0x4>;
                        clocks = <&osc24M>, <&pll6 2>, <&pll5 1>;
                        clock-output-names = "mbus";
                        interrupts = <0 0 4>;
                };
  
 +              dma: dma-controller@01c02000 {
 +                      compatible = "allwinner,sun4i-a10-dma";
 +                      reg = <0x01c02000 0x1000>;
 +                      interrupts = <0 27 4>;
 +                      clocks = <&ahb_gates 6>;
 +                      #dma-cells = <2>;
 +              };
 +
                spi0: spi@01c05000 {
                        compatible = "allwinner,sun4i-a10-spi";
                        reg = <0x01c05000 0x1000>;
                        interrupts = <0 10 4>;
                        clocks = <&ahb_gates 20>, <&spi0_clk>;
                        clock-names = "ahb", "mod";
 +                      dmas = <&dma 1 27>, <&dma 1 26>;
 +                      dma-names = "rx", "tx";
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        interrupts = <0 11 4>;
                        clocks = <&ahb_gates 21>, <&spi1_clk>;
                        clock-names = "ahb", "mod";
 +                      dmas = <&dma 1 9>, <&dma 1 8>;
 +                      dma-names = "rx", "tx";
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        interrupts = <0 12 4>;
                        clocks = <&ahb_gates 22>, <&spi2_clk>;
                        clock-names = "ahb", "mod";
 +                      dmas = <&dma 1 29>, <&dma 1 28>;
 +                      dma-names = "rx", "tx";
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        interrupts = <0 50 4>;
                        clocks = <&ahb_gates 23>, <&spi3_clk>;
                        clock-names = "ahb", "mod";
 +                      dmas = <&dma 1 31>, <&dma 1 30>;
 +                      dma-names = "rx", "tx";
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                                allwinner,pull = <0>;
                        };
  
 +                      uart3_pins_a: uart3@0 {
 +                              allwinner,pins = "PG6", "PG7", "PG8", "PG9";
 +                              allwinner,function = "uart3";
 +                              allwinner,drive = <0>;
 +                              allwinner,pull = <0>;
 +                      };
 +
 +                      uart4_pins_a: uart4@0 {
 +                              allwinner,pins = "PG10", "PG11";
 +                              allwinner,function = "uart4";
 +                              allwinner,drive = <0>;
 +                              allwinner,pull = <0>;
 +                      };
 +
 +                      uart5_pins_a: uart5@0 {
 +                              allwinner,pins = "PI10", "PI11";
 +                              allwinner,function = "uart5";
 +                              allwinner,drive = <0>;
 +                              allwinner,pull = <0>;
 +                      };
 +
                        uart6_pins_a: uart6@0 {
                                allwinner,pins = "PI12", "PI13";
                                allwinner,function = "uart6";
                                allwinner,pull = <0>;
                        };
  
 +                      i2c3_pins_a: i2c3@0 {
 +                              allwinner,pins = "PI0", "PI1";
 +                              allwinner,function = "i2c3";
 +                              allwinner,drive = <0>;
 +                              allwinner,pull = <0>;
 +                      };
 +
                        emac_pins_a: emac0@0 {
                                allwinner,pins = "PA0", "PA1", "PA2",
                                                "PA3", "PA4", "PA5", "PA6",
                                allwinner,pull = <0>;
                        };
  
 +                      spi2_pins_b: spi2@1 {
 +                              allwinner,pins = "PB14", "PB15", "PB16", "PB17";
 +                              allwinner,function = "spi2";
 +                              allwinner,drive = <0>;
 +                              allwinner,pull = <0>;
 +                      };
 +
                        mmc0_pins_a: mmc0@0 {
                                allwinner,pins = "PF0","PF1","PF2","PF3","PF4","PF5";
                                allwinner,function = "mmc0";
                        reg = <0x01c2ac00 0x400>;
                        interrupts = <0 7 4>;
                        clocks = <&apb1_gates 0>;
 -                      clock-frequency = <100000>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        reg = <0x01c2b000 0x400>;
                        interrupts = <0 8 4>;
                        clocks = <&apb1_gates 1>;
 -                      clock-frequency = <100000>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        reg = <0x01c2b400 0x400>;
                        interrupts = <0 9 4>;
                        clocks = <&apb1_gates 2>;
 -                      clock-frequency = <100000>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        reg = <0x01c2b800 0x400>;
                        interrupts = <0 88 4>;
                        clocks = <&apb1_gates 3>;
 -                      clock-frequency = <100000>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        reg = <0x01c2c000 0x400>;
                        interrupts = <0 89 4>;
                        clocks = <&apb1_gates 15>;
 -                      clock-frequency = <100000>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
diff --combined arch/arm/mach-omap2/io.c
index b8ad045bcb8dfbe528a40b93657e0bf373e1832d,a1b82a994842b51c20e4dfccdac7f752c4d740c1..03cbb16898a3f0eeef87144ea70f5b8d96849650
@@@ -231,6 -231,15 +231,6 @@@ static struct map_desc omap44xx_io_desc
                .length         = L4_PER_44XX_SIZE,
                .type           = MT_DEVICE,
        },
 -#ifdef CONFIG_OMAP4_ERRATA_I688
 -      {
 -              .virtual        = OMAP4_SRAM_VA,
 -              .pfn            = __phys_to_pfn(OMAP4_SRAM_PA),
 -              .length         = PAGE_SIZE,
 -              .type           = MT_MEMORY_RW_SO,
 -      },
 -#endif
 -
  };
  #endif
  
@@@ -260,6 -269,14 +260,6 @@@ static struct map_desc omap54xx_io_desc
                .length         = L4_PER_54XX_SIZE,
                .type           = MT_DEVICE,
        },
 -#ifdef CONFIG_OMAP4_ERRATA_I688
 -      {
 -              .virtual        = OMAP4_SRAM_VA,
 -              .pfn            = __phys_to_pfn(OMAP4_SRAM_PA),
 -              .length         = PAGE_SIZE,
 -              .type           = MT_MEMORY_RW_SO,
 -      },
 -#endif
  };
  #endif
  
@@@ -650,7 -667,6 +650,7 @@@ void __init omap5_init_early(void
        omap2_set_globals_cm(OMAP2_L4_IO_ADDRESS(OMAP54XX_CM_CORE_AON_BASE),
                             OMAP2_L4_IO_ADDRESS(OMAP54XX_CM_CORE_BASE));
        omap2_set_globals_prcm_mpu(OMAP2_L4_IO_ADDRESS(OMAP54XX_PRCM_MPU_BASE));
 +      omap4_pm_init_early();
        omap_prm_base_init();
        omap_cm_base_init();
        omap44xx_prm_init();
  void __init omap5_init_late(void)
  {
        omap_common_late_init();
 +      omap4_pm_init();
 +      omap2_clk_enable_autoidle_all();
  }
  #endif
  
@@@ -681,7 -695,6 +681,7 @@@ void __init dra7xx_init_early(void
        omap2_set_globals_cm(OMAP2_L4_IO_ADDRESS(DRA7XX_CM_CORE_AON_BASE),
                             OMAP2_L4_IO_ADDRESS(OMAP54XX_CM_CORE_BASE));
        omap2_set_globals_prcm_mpu(OMAP2_L4_IO_ADDRESS(OMAP54XX_PRCM_MPU_BASE));
 +      omap4_pm_init_early();
        omap_prm_base_init();
        omap_cm_base_init();
        omap44xx_prm_init();
  void __init dra7xx_init_late(void)
  {
        omap_common_late_init();
 +      omap4_pm_init();
 +      omap2_clk_enable_autoidle_all();
  }
  #endif
  
@@@ -723,8 -734,16 +723,16 @@@ int __init omap_clk_init(void
        ti_clk_init_features();
  
        ret = of_prcm_init();
-       if (!ret)
-               ret = omap_clk_soc_init();
+       if (ret)
+               return ret;
+       of_clk_init(NULL);
+       ti_dt_clk_init_retry_clks();
+       ti_dt_clockdomains_setup();
+       ret = omap_clk_soc_init();
  
        return ret;
  }
index 74054b81360079aa835a80a68b0ddc453b393829,3b890807f5e6bcc77d0c72f7168c2bb2fd1c55b1..ee2b5222eac07f279e87a6126d7ed5a864d12d73
@@@ -467,7 -467,7 +467,7 @@@ int prm_unregister(struct prm_ll_data *
        return 0;
  }
  
 -static struct of_device_id omap_prcm_dt_match_table[] = {
 +static const struct of_device_id omap_prcm_dt_match_table[] = {
        { .compatible = "ti,am3-prcm" },
        { .compatible = "ti,am3-scrm" },
        { .compatible = "ti,am4-prcm" },
@@@ -525,8 -525,6 +525,6 @@@ int __init of_prcm_init(void
                memmap_index++;
        }
  
-       ti_dt_clockdomains_setup();
        return 0;
  }
  
diff --combined drivers/clk/Kconfig
index 84e0590e31dc754fd1562d8bd99d2c3273090f3f,1d4d3fc182dd1108ad6b42f8f920c45c3f1f400d..455fd17d938eaa6525f4af01e0d0d2f786bd08d8
@@@ -32,21 -32,23 +32,32 @@@ config COMMON_CLK_WM831
  
  source "drivers/clk/versatile/Kconfig"
  
+ config COMMON_CLK_MAX_GEN
+         bool
  config COMMON_CLK_MAX77686
        tristate "Clock driver for Maxim 77686 MFD"
        depends on MFD_MAX77686
+       select COMMON_CLK_MAX_GEN
        ---help---
          This driver supports Maxim 77686 crystal oscillator clock. 
  
+ config COMMON_CLK_MAX77802
+       tristate "Clock driver for Maxim 77802 PMIC"
+       depends on MFD_MAX77686
+       select COMMON_CLK_MAX_GEN
+       ---help---
+         This driver supports Maxim 77802 crystal oscillator clock.
 +config COMMON_CLK_RK808
 +      tristate "Clock driver for RK808"
 +      depends on MFD_RK808
 +      ---help---
 +        This driver supports RK808 crystal oscillator clock. These
 +        multi-function devices have two fixed-rate oscillators,
 +        clocked at 32KHz each. Clkout1 is always on, Clkout2 can off
 +        by control register.
 +
  config COMMON_CLK_SI5351
        tristate "Clock driver for SiLabs 5351A/B/C"
        depends on I2C
@@@ -118,6 -120,11 +129,11 @@@ config COMMON_CLK_PALMA
          This driver supports TI Palmas devices 32KHz output KG and KG_AUDIO
          using common clock framework.
  
+ config COMMON_CLK_PXA
+       def_bool COMMON_CLK && ARCH_PXA
+       ---help---
+         Sypport for the Marvell PXA SoC.
  source "drivers/clk/qcom/Kconfig"
  
  endmenu
diff --combined drivers/clk/Makefile
index 99f53d5f876618be908525c3cbc4b9c3803119a2,5eaf1b547f19bab66375b32ca355b232979f5644..d5fba5bc6e1bc1f07991be58f367c30a253a58f7
@@@ -9,6 -9,7 +9,7 @@@ obj-$(CONFIG_COMMON_CLK) += clk-gate.
  obj-$(CONFIG_COMMON_CLK)      += clk-mux.o
  obj-$(CONFIG_COMMON_CLK)      += clk-composite.o
  obj-$(CONFIG_COMMON_CLK)      += clk-fractional-divider.o
+ obj-$(CONFIG_COMMON_CLK)      += clk-gpio-gate.o
  ifeq ($(CONFIG_OF), y)
  obj-$(CONFIG_COMMON_CLK)      += clk-conf.o
  endif
@@@ -22,13 -23,14 +23,15 @@@ obj-$(CONFIG_ARCH_CLPS711X)                += clk-clp
  obj-$(CONFIG_ARCH_EFM32)              += clk-efm32gg.o
  obj-$(CONFIG_ARCH_HIGHBANK)           += clk-highbank.o
  obj-$(CONFIG_MACH_LOONGSON1)          += clk-ls1x.o
+ obj-$(CONFIG_COMMON_CLK_MAX_GEN)      += clk-max-gen.o
  obj-$(CONFIG_COMMON_CLK_MAX77686)     += clk-max77686.o
+ obj-$(CONFIG_COMMON_CLK_MAX77802)     += clk-max77802.o
  obj-$(CONFIG_ARCH_MOXART)             += clk-moxart.o
  obj-$(CONFIG_ARCH_NOMADIK)            += clk-nomadik.o
  obj-$(CONFIG_ARCH_NSPIRE)             += clk-nspire.o
  obj-$(CONFIG_COMMON_CLK_PALMAS)               += clk-palmas.o
  obj-$(CONFIG_CLK_PPC_CORENET)         += clk-ppc-corenet.o
 +obj-$(CONFIG_COMMON_CLK_RK808)                += clk-rk808.o
  obj-$(CONFIG_COMMON_CLK_S2MPS11)      += clk-s2mps11.o
  obj-$(CONFIG_COMMON_CLK_SI5351)               += clk-si5351.o
  obj-$(CONFIG_COMMON_CLK_SI570)                += clk-si570.o
@@@ -49,6 -51,7 +52,7 @@@ obj-$(CONFIG_ARCH_MMP)                        += mmp
  endif
  obj-$(CONFIG_PLAT_ORION)              += mvebu/
  obj-$(CONFIG_ARCH_MXS)                        += mxs/
+ obj-$(CONFIG_COMMON_CLK_PXA)          += pxa/
  obj-$(CONFIG_COMMON_CLK_QCOM)         += qcom/
  obj-$(CONFIG_ARCH_ROCKCHIP)           += rockchip/
  obj-$(CONFIG_COMMON_CLK_SAMSUNG)      += samsung/
diff --combined include/linux/clk.h
index afb44bfaf8d1bec1c38346587ffad6c45e3b0dd9,38bdedd3e389bf874663b8fe65ba175a22ca668c..c7f258a81761d22b1b204654d3582af55044915a
@@@ -106,6 -106,25 +106,25 @@@ int clk_notifier_unregister(struct clk 
   */
  long clk_get_accuracy(struct clk *clk);
  
+ /**
+  * clk_set_phase - adjust the phase shift of a clock signal
+  * @clk: clock signal source
+  * @degrees: number of degrees the signal is shifted
+  *
+  * Shifts the phase of a clock signal by the specified degrees. Returns 0 on
+  * success, -EERROR otherwise.
+  */
+ int clk_set_phase(struct clk *clk, int degrees);
+ /**
+  * clk_get_phase - return the phase shift of a clock signal
+  * @clk: clock signal source
+  *
+  * Returns the phase shift of a clock node in degrees, otherwise returns
+  * -EERROR.
+  */
+ int clk_get_phase(struct clk *clk);
  #else
  
  static inline long clk_get_accuracy(struct clk *clk)
        return -ENOTSUPP;
  }
  
+ static inline long clk_set_phase(struct clk *clk, int phase)
+ {
+       return -ENOTSUPP;
+ }
+ static inline long clk_get_phase(struct clk *clk)
+ {
+       return -ENOTSUPP;
+ }
  #endif
  
  /**
@@@ -238,7 -267,7 +267,7 @@@ void clk_put(struct clk *clk)
  
  /**
   * devm_clk_put       - "free" a managed clock source
 - * @dev: device used to acuqire the clock
 + * @dev: device used to acquire the clock
   * @clk: clock source acquired with devm_clk_get()
   *
   * Note: drivers must ensure that all clk_enable calls made on this