Merge tag 'armsoc-drivers' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 26 Jun 2015 18:54:29 +0000 (11:54 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 26 Jun 2015 18:54:29 +0000 (11:54 -0700)
Pull ARM SoC driver updates from Kevin Hilman:
 "Some of these are for drivers/soc, where we're now putting
  SoC-specific drivers these days.  Some are for other driver subsystems
  where we have received acks from the appropriate maintainers.

  Some highlights:

   - simple-mfd: document DT bindings and misc updates
   - migrate mach-berlin to simple-mfd for clock, pinctrl and reset
   - memory: support for Tegra132 SoC
   - memory: introduce tegra EMC driver for scaling memory frequency
   - misc. updates for ARM CCI and CCN busses"

* tag 'armsoc-drivers' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (48 commits)
  drivers: soc: sunxi: Introduce SoC driver to map SRAMs
  arm-cci: Add aliases for PMU events
  arm-cci: Add CCI-500 PMU support
  arm-cci: Sanitise CCI400 PMU driver specific code
  arm-cci: Abstract handling for CCI events
  arm-cci: Abstract out the PMU counter details
  arm-cci: Cleanup PMU driver code
  arm-cci: Do not enable CCI-400 PMU by default
  firmware: qcom: scm: Add HDCP Support
  ARM: berlin: add an ADC node for the BG2Q
  ARM: berlin: remove useless chip and system ctrl compatibles
  clk: berlin: drop direct of_iomap of nodes reg property
  ARM: berlin: move BG2Q clock node
  ARM: berlin: move BG2CD clock node
  ARM: berlin: move BG2 clock node
  clk: berlin: prepare simple-mfd conversion
  pinctrl: berlin: drop SoC stub provided regmap
  ARM: berlin: move pinctrl to simple-mfd nodes
  pinctrl: berlin: prepare to use regmap provided by syscon
  reset: berlin: drop arch_initcall initialization
  ...

1  2 
arch/arm/boot/dts/berlin2.dtsi
arch/arm/boot/dts/berlin2cd.dtsi
arch/arm/boot/dts/berlin2q.dtsi
arch/arm64/boot/dts/arm/juno-motherboard.dtsi
arch/arm64/configs/defconfig
drivers/iommu/Kconfig
drivers/pinctrl/berlin/berlin-bg2.c
drivers/pinctrl/berlin/berlin-bg2cd.c
drivers/pinctrl/berlin/berlin-bg2q.c
drivers/pinctrl/berlin/berlin.c

@@@ -6,37 -6,9 +6,37 @@@
   * based on GPL'ed 2.6 kernel sources
   *  (c) Marvell International Ltd.
   *
 - * This file is licensed under the terms of the GNU General Public
 - * License version 2.  This program is licensed "as is" without any
 - * warranty of any kind, whether express or implied.
 + * 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.
 + *
 + *  a) This file is licensed under the terms of the GNU General Public
 + *     License version 2. This program is licensed "as is" without any
 + *     warranty of any kind, whether express or implied.
 + *
 + * 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"
@@@ -84,7 -56,7 +84,7 @@@
                sdhci0: sdhci@ab0000 {
                        compatible = "mrvl,pxav3-mmc";
                        reg = <0xab0000 0x200>;
-                       clocks = <&chip CLKID_SDIO0XIN>, <&chip CLKID_SDIO0>;
+                       clocks = <&chip_clk CLKID_SDIO0XIN>, <&chip_clk CLKID_SDIO0>;
                        clock-names = "io", "core";
                        interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
@@@ -93,7 -65,7 +93,7 @@@
                sdhci1: sdhci@ab0800 {
                        compatible = "mrvl,pxav3-mmc";
                        reg = <0xab0800 0x200>;
-                       clocks = <&chip CLKID_SDIO1XIN>, <&chip CLKID_SDIO1>;
+                       clocks = <&chip_clk CLKID_SDIO1XIN>, <&chip_clk CLKID_SDIO1>;
                        clock-names = "io", "core";
                        interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
                        compatible = "mrvl,pxav3-mmc";
                        reg = <0xab1000 0x200>;
                        interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&chip CLKID_NFC_ECC>, <&chip CLKID_NFC>;
+                       clocks = <&chip_clk CLKID_NFC_ECC>, <&chip_clk CLKID_NFC>;
                        clock-names = "io", "core";
                        pinctrl-0 = <&emmc_pmux>;
                        pinctrl-names = "default";
                        compatible = "arm,cortex-a9-twd-timer";
                        reg = <0xad0600 0x20>;
                        interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_HIGH)>;
-                       clocks = <&chip CLKID_TWD>;
+                       clocks = <&chip_clk CLKID_TWD>;
                };
  
                eth1: ethernet@b90000 {
                        compatible = "marvell,pxa168-eth";
                        reg = <0xb90000 0x10000>;
-                       clocks = <&chip CLKID_GETH1>;
+                       clocks = <&chip_clk CLKID_GETH1>;
                        interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
                        /* set by bootloader */
                        local-mac-address = [00 00 00 00 00 00];
                eth0: ethernet@e50000 {
                        compatible = "marvell,pxa168-eth";
                        reg = <0xe50000 0x10000>;
-                       clocks = <&chip CLKID_GETH0>;
+                       clocks = <&chip_clk CLKID_GETH0>;
                        interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
                        /* set by bootloader */
                        local-mac-address = [00 00 00 00 00 00];
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c00 0x14>;
                                interrupts = <8>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "okay";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c14 0x14>;
                                interrupts = <9>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "okay";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c28 0x14>;
                                interrupts = <10>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c3c 0x14>;
                                interrupts = <11>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c50 0x14>;
                                interrupts = <12>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c64 0x14>;
                                interrupts = <13>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c78 0x14>;
                                interrupts = <14>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c8c 0x14>;
                                interrupts = <15>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                        compatible = "marvell,berlin2-ahci", "generic-ahci";
                        reg = <0xe90000 0x1000>;
                        interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&chip CLKID_SATA>;
+                       clocks = <&chip_clk CLKID_SATA>;
                        #address-cells = <1>;
                        #size-cells = <0>;
  
                sata_phy: phy@e900a0 {
                        compatible = "marvell,berlin2-sata-phy";
                        reg = <0xe900a0 0x200>;
-                       clocks = <&chip CLKID_SATA>;
+                       clocks = <&chip_clk CLKID_SATA>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        #phy-cells = <1>;
                };
  
                chip: chip-control@ea0000 {
-                       compatible = "marvell,berlin2-chip-ctrl";
-                       #clock-cells = <1>;
-                       #reset-cells = <2>;
+                       compatible = "simple-mfd", "syscon";
                        reg = <0xea0000 0x400>;
-                       clocks = <&refclk>;
-                       clock-names = "refclk";
  
-                       emmc_pmux: emmc-pmux {
-                               groups = "G26";
-                               function = "emmc";
+                       chip_clk: clock {
+                               compatible = "marvell,berlin2-clk";
+                               #clock-cells = <1>;
+                               clocks = <&refclk>;
+                               clock-names = "refclk";
+                       };
+                       soc_pinctrl: pin-controller {
+                               compatible = "marvell,berlin2-soc-pinctrl";
+                               emmc_pmux: emmc-pmux {
+                                       groups = "G26";
+                                       function = "emmc";
+                               };
+                       };
+                       chip_rst: reset {
+                               compatible = "marvell,berlin2-reset";
+                               #reset-cells = <2>;
                        };
                };
  
                        };
  
                        sysctrl: system-controller@d000 {
-                               compatible = "marvell,berlin2-system-ctrl";
+                               compatible = "simple-mfd", "syscon";
                                reg = <0xd000 0x100>;
  
-                               uart0_pmux: uart0-pmux {
-                                       groups = "GSM4";
-                                       function = "uart0";
-                               };
-                               uart1_pmux: uart1-pmux {
-                                       groups = "GSM5";
-                                       function = "uart1";
-                               };
-                               uart2_pmux: uart2-pmux {
-                                       groups = "GSM3";
-                                       function = "uart2";
+                               sys_pinctrl: pin-controller {
+                                       compatible = "marvell,berlin2-system-pinctrl";
+                                       uart0_pmux: uart0-pmux {
+                                               groups = "GSM4";
+                                               function = "uart0";
+                                       };
+                                       uart1_pmux: uart1-pmux {
+                                               groups = "GSM5";
+                                               function = "uart1";
+                                       };
+                                       uart2_pmux: uart2-pmux {
+                                               groups = "GSM3";
+                                               function = "uart2";
+                                       };
                                };
                        };
  
@@@ -6,37 -6,9 +6,37 @@@
   * based on GPL'ed 2.6 kernel sources
   *  (c) Marvell International Ltd.
   *
 - * This file is licensed under the terms of the GNU General Public
 - * License version 2.  This program is licensed "as is" without any
 - * warranty of any kind, whether express or implied.
 + * 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.
 + *
 + *  a) This file is licensed under the terms of the GNU General Public
 + *     License version 2. This program is licensed "as is" without any
 + *     warranty of any kind, whether express or implied.
 + *
 + * 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"
@@@ -81,7 -53,7 +81,7 @@@
                sdhci0: sdhci@ab0000 {
                        compatible = "mrvl,pxav3-mmc";
                        reg = <0xab0000 0x200>;
-                       clocks = <&chip CLKID_SDIO0XIN>, <&chip CLKID_SDIO0>;
+                       clocks = <&chip_clk CLKID_SDIO0XIN>, <&chip_clk CLKID_SDIO0>;
                        clock-names = "io", "core";
                        interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
                        compatible = "arm,cortex-a9-twd-timer";
                        reg = <0xad0600 0x20>;
                        interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_HIGH)>;
-                       clocks = <&chip CLKID_TWD>;
+                       clocks = <&chip_clk CLKID_TWD>;
                };
  
                usb_phy0: usb-phy@b74000 {
                        compatible = "marvell,berlin2cd-usb-phy";
                        reg = <0xb74000 0x128>;
                        #phy-cells = <0>;
-                       resets = <&chip 0x178 23>;
+                       resets = <&chip_rst 0x178 23>;
                        status = "disabled";
                };
  
                        compatible = "marvell,berlin2cd-usb-phy";
                        reg = <0xb78000 0x128>;
                        #phy-cells = <0>;
-                       resets = <&chip 0x178 24>;
+                       resets = <&chip_rst 0x178 24>;
                        status = "disabled";
                };
  
                eth1: ethernet@b90000 {
                        compatible = "marvell,pxa168-eth";
                        reg = <0xb90000 0x10000>;
-                       clocks = <&chip CLKID_GETH1>;
+                       clocks = <&chip_clk CLKID_GETH1>;
                        interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
                        /* set by bootloader */
                        local-mac-address = [00 00 00 00 00 00];
                eth0: ethernet@e50000 {
                        compatible = "marvell,pxa168-eth";
                        reg = <0xe50000 0x10000>;
-                       clocks = <&chip CLKID_GETH0>;
+                       clocks = <&chip_clk CLKID_GETH0>;
                        interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
                        /* set by bootloader */
                        local-mac-address = [00 00 00 00 00 00];
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c00 0x14>;
                                interrupts = <8>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "okay";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c14 0x14>;
                                interrupts = <9>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "okay";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c28 0x14>;
                                interrupts = <10>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c3c 0x14>;
                                interrupts = <11>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c50 0x14>;
                                interrupts = <12>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c64 0x14>;
                                interrupts = <13>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c78 0x14>;
                                interrupts = <14>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c8c 0x14>;
                                interrupts = <15>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                };
  
                chip: chip-control@ea0000 {
-                       compatible = "marvell,berlin2cd-chip-ctrl";
-                       #clock-cells = <1>;
-                       #reset-cells = <2>;
+                       compatible = "simple-mfd", "syscon";
                        reg = <0xea0000 0x400>;
-                       clocks = <&refclk>;
-                       clock-names = "refclk";
  
-                       uart0_pmux: uart0-pmux {
-                               groups = "G6";
-                               function = "uart0";
+                       chip_clk: clock {
+                               compatible = "marvell,berlin2-clk";
+                               #clock-cells = <1>;
+                               clocks = <&refclk>;
+                               clock-names = "refclk";
+                       };
+                       soc_pinctrl: pin-controller {
+                               compatible = "marvell,berlin2cd-soc-pinctrl";
+                               uart0_pmux: uart0-pmux {
+                                       groups = "G6";
+                                       function = "uart0";
+                               };
+                       };
+                       chip_rst: reset {
+                               compatible = "marvell,berlin2-reset";
+                               #reset-cells = <2>;
                        };
                };
  
                        compatible = "chipidea,usb2";
                        reg = <0xed0000 0x200>;
                        interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&chip CLKID_USB0>;
+                       clocks = <&chip_clk CLKID_USB0>;
                        phys = <&usb_phy0>;
                        phy-names = "usb-phy";
                        status = "disabled";
                        compatible = "chipidea,usb2";
                        reg = <0xee0000 0x200>;
                        interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&chip CLKID_USB1>;
+                       clocks = <&chip_clk CLKID_USB1>;
                        phys = <&usb_phy1>;
                        phy-names = "usb-phy";
                        status = "disabled";
                        };
  
                        sysctrl: system-controller@d000 {
-                               compatible = "marvell,berlin2cd-system-ctrl";
+                               compatible = "simple-mfd", "syscon";
                                reg = <0xd000 0x100>;
+                               sys_pinctrl: pin-controller {
+                                       compatible = "marvell,berlin2cd-system-pinctrl";
+                               };
                        };
  
                        sic: interrupt-controller@e000 {
@@@ -1,37 -1,9 +1,37 @@@
  /*
   * Copyright (C) 2014 Antoine Ténart <antoine.tenart@free-electrons.com>
   *
 - * This file is licensed under the terms of the GNU General Public
 - * License version 2. This program is licensed "as is" without any
 - * warranty of any kind, whether express or implied.
 + * 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.
 + *
 + *  a) This file is licensed under the terms of the GNU General Public
 + *     License version 2. This program is licensed "as is" without any
 + *     warranty of any kind, whether express or implied.
 + *
 + * 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 <dt-bindings/clock/berlin2q.h>
                sdhci0: sdhci@ab0000 {
                        compatible = "mrvl,pxav3-mmc";
                        reg = <0xab0000 0x200>;
-                       clocks = <&chip CLKID_SDIO1XIN>;
+                       clocks = <&chip_clk CLKID_SDIO1XIN>;
                        interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
                };
                sdhci1: sdhci@ab0800 {
                        compatible = "mrvl,pxav3-mmc";
                        reg = <0xab0800 0x200>;
-                       clocks = <&chip CLKID_SDIO1XIN>;
+                       clocks = <&chip_clk CLKID_SDIO1XIN>;
                        interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
                };
                        compatible = "mrvl,pxav3-mmc";
                        reg = <0xab1000 0x200>;
                        interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&chip CLKID_NFC_ECC>, <&chip CLKID_NFC>;
+                       clocks = <&chip_clk CLKID_NFC_ECC>, <&chip_clk CLKID_NFC>;
                        clock-names = "io", "core";
                        status = "disabled";
                };
                local-timer@ad0600 {
                        compatible = "arm,cortex-a9-twd-timer";
                        reg = <0xad0600 0x20>;
-                       clocks = <&chip CLKID_TWD>;
+                       clocks = <&chip_clk CLKID_TWD>;
                        interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
                };
  
                        compatible = "marvell,berlin2-usb-phy";
                        reg = <0xa2f400 0x128>;
                        #phy-cells = <0>;
-                       resets = <&chip 0x104 14>;
+                       resets = <&chip_rst 0x104 14>;
                        status = "disabled";
                };
  
                        compatible = "chipidea,usb2";
                        reg = <0xa30000 0x10000>;
                        interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&chip CLKID_USB2>;
+                       clocks = <&chip_clk CLKID_USB2>;
                        phys = <&usb_phy2>;
                        phy-names = "usb-phy";
                        status = "disabled";
                        compatible = "marvell,berlin2-usb-phy";
                        reg = <0xb74000 0x128>;
                        #phy-cells = <0>;
-                       resets = <&chip 0x104 12>;
+                       resets = <&chip_rst 0x104 12>;
                        status = "disabled";
                };
  
                        compatible = "marvell,berlin2-usb-phy";
                        reg = <0xb78000 0x128>;
                        #phy-cells = <0>;
-                       resets = <&chip 0x104 13>;
+                       resets = <&chip_rst 0x104 13>;
                        status = "disabled";
                };
  
                eth0: ethernet@b90000 {
                        compatible = "marvell,pxa168-eth";
                        reg = <0xb90000 0x10000>;
-                       clocks = <&chip CLKID_GETH0>;
+                       clocks = <&chip_clk CLKID_GETH0>;
                        interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
                        /* set by bootloader */
                        local-mac-address = [00 00 00 00 00 00];
                                reg = <0x1400 0x100>;
                                interrupt-parent = <&aic>;
                                interrupts = <4>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                pinctrl-0 = <&twsi0_pmux>;
                                pinctrl-names = "default";
                                status = "disabled";
                                reg = <0x1800 0x100>;
                                interrupt-parent = <&aic>;
                                interrupts = <5>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                pinctrl-0 = <&twsi1_pmux>;
                                pinctrl-names = "default";
                                status = "disabled";
                        timer0: timer@2c00 {
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c00 0x14>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                interrupts = <8>;
                        };
                        timer1: timer@2c14 {
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c14 0x14>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                        };
  
                        timer2: timer@2c28 {
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c28 0x14>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                        timer3: timer@2c3c {
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c3c 0x14>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                        timer4: timer@2c50 {
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c50 0x14>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                        timer5: timer@2c64 {
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c64 0x14>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                        timer6: timer@2c78 {
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c78 0x14>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                        timer7: timer@2c8c {
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c8c 0x14>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                };
  
                chip: chip-control@ea0000 {
-                       compatible = "marvell,berlin2q-chip-ctrl";
-                       #clock-cells = <1>;
-                       #reset-cells = <2>;
+                       compatible = "simple-mfd", "syscon";
                        reg = <0xea0000 0x400>, <0xdd0170 0x10>;
-                       clocks = <&refclk>;
-                       clock-names = "refclk";
  
-                       twsi0_pmux: twsi0-pmux {
-                               groups = "G6";
-                               function = "twsi0";
+                       chip_clk: clock {
+                               compatible = "marvell,berlin2q-clk";
+                               #clock-cells = <1>;
+                               clocks = <&refclk>;
+                               clock-names = "refclk";
                        };
  
-                       twsi1_pmux: twsi1-pmux {
-                               groups = "G7";
-                               function = "twsi1";
+                       soc_pinctrl: pin-controller {
+                               compatible = "marvell,berlin2q-soc-pinctrl";
+                               twsi0_pmux: twsi0-pmux {
+                                       groups = "G6";
+                                       function = "twsi0";
+                               };
+                               twsi1_pmux: twsi1-pmux {
+                                       groups = "G7";
+                                       function = "twsi1";
+                               };
+                       };
+                       chip_rst: reset {
+                               compatible = "marvell,berlin2-reset";
+                               #reset-cells = <2>;
                        };
                };
  
                        compatible = "marvell,berlin2q-ahci", "generic-ahci";
                        reg = <0xe90000 0x1000>;
                        interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&chip CLKID_SATA>;
+                       clocks = <&chip_clk CLKID_SATA>;
                        #address-cells = <1>;
                        #size-cells = <0>;
  
                sata_phy: phy@e900a0 {
                        compatible = "marvell,berlin2q-sata-phy";
                        reg = <0xe900a0 0x200>;
-                       clocks = <&chip CLKID_SATA>;
+                       clocks = <&chip_clk CLKID_SATA>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        #phy-cells = <1>;
                        compatible = "chipidea,usb2";
                        reg = <0xed0000 0x10000>;
                        interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&chip CLKID_USB0>;
+                       clocks = <&chip_clk CLKID_USB0>;
                        phys = <&usb_phy0>;
                        phy-names = "usb-phy";
                        status = "disabled";
                        compatible = "chipidea,usb2";
                        reg = <0xee0000 0x10000>;
                        interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&chip CLKID_USB1>;
+                       clocks = <&chip_clk CLKID_USB1>;
                        phys = <&usb_phy1>;
                        phy-names = "usb-phy";
                        status = "disabled";
                        };
  
                        sysctrl: pin-controller@d000 {
-                               compatible = "marvell,berlin2q-system-ctrl";
+                               compatible = "simple-mfd", "syscon";
                                reg = <0xd000 0x100>;
  
-                               uart0_pmux: uart0-pmux {
-                                       groups = "GSM12";
-                                       function = "uart0";
-                               };
+                               sys_pinctrl: pin-controller {
+                                       compatible = "marvell,berlin2q-system-pinctrl";
  
-                               uart1_pmux: uart1-pmux {
-                                       groups = "GSM14";
-                                       function = "uart1";
-                               };
+                                       uart0_pmux: uart0-pmux {
+                                               groups = "GSM12";
+                                               function = "uart0";
+                                       };
+                                       uart1_pmux: uart1-pmux {
+                                               groups = "GSM14";
+                                               function = "uart1";
+                                       };
+                                       twsi2_pmux: twsi2-pmux {
+                                               groups = "GSM13";
+                                               function = "twsi2";
+                                       };
  
-                               twsi2_pmux: twsi2-pmux {
-                                       groups = "GSM13";
-                                       function = "twsi2";
+                                       twsi3_pmux: twsi3-pmux {
+                                               groups = "GSM14";
+                                               function = "twsi3";
+                                       };
                                };
  
-                               twsi3_pmux: twsi3-pmux {
-                                       groups = "GSM14";
-                                       function = "twsi3";
+                               adc: adc {
+                                       compatible = "marvell,berlin2-adc";
+                                       interrupts = <12>, <14>;
+                                       interrupt-names = "adc", "tsen";
                                };
                        };
  
                        clock-output-names = "juno_mb:clk25mhz";
                };
  
 +              v2m_refclk1mhz: refclk1mhz {
 +                      compatible = "fixed-clock";
 +                      #clock-cells = <0>;
 +                      clock-frequency = <1000000>;
 +                      clock-output-names = "juno_mb:refclk1mhz";
 +              };
 +
 +              v2m_refclk32khz: refclk32khz {
 +                      compatible = "fixed-clock";
 +                      #clock-cells = <0>;
 +                      clock-frequency = <32768>;
 +                      clock-output-names = "juno_mb:refclk32khz";
 +              };
 +
                motherboard {
                        compatible = "arm,vexpress,v2p-p1", "simple-bus";
                        #address-cells = <2>;  /* SMB chipselect number and offset */
                                regulator-always-on;
                        };
  
 +                      gpio_keys {
 +                              compatible = "gpio-keys";
 +                              #address-cells = <1>;
 +                              #size-cells = <0>;
 +
 +                              button@1 {
 +                                      debounce_interval = <50>;
 +                                      wakeup = <1>;
 +                                      linux,code = <116>;
 +                                      label = "POWER";
 +                                      gpios = <&iofpga_gpio0 0 0x4>;
 +                              };
 +                              button@2 {
 +                                      debounce_interval = <50>;
 +                                      wakeup = <1>;
 +                                      linux,code = <102>;
 +                                      label = "HOME";
 +                                      gpios = <&iofpga_gpio0 1 0x4>;
 +                              };
 +                              button@3 {
 +                                      debounce_interval = <50>;
 +                                      wakeup = <1>;
 +                                      linux,code = <152>;
 +                                      label = "RLOCK";
 +                                      gpios = <&iofpga_gpio0 2 0x4>;
 +                              };
 +                              button@4 {
 +                                      debounce_interval = <50>;
 +                                      wakeup = <1>;
 +                                      linux,code = <115>;
 +                                      label = "VOL+";
 +                                      gpios = <&iofpga_gpio0 3 0x4>;
 +                              };
 +                              button@5 {
 +                                      debounce_interval = <50>;
 +                                      wakeup = <1>;
 +                                      linux,code = <114>;
 +                                      label = "VOL-";
 +                                      gpios = <&iofpga_gpio0 4 0x4>;
 +                              };
 +                              button@6 {
 +                                      debounce_interval = <50>;
 +                                      wakeup = <1>;
 +                                      linux,code = <99>;
 +                                      label = "NMI";
 +                                      gpios = <&iofpga_gpio0 5 0x4>;
 +                              };
 +                      };
 +
                        ethernet@2,00000000 {
                                compatible = "smsc,lan9118", "smsc,lan9115";
                                reg = <2 0x00000000 0x10000>;
                                #size-cells = <1>;
                                ranges = <0 3 0 0x200000>;
  
 +                              v2m_sysctl: sysctl@020000 {
 +                                      compatible = "arm,sp810", "arm,primecell";
 +                                      reg = <0x020000 0x1000>;
 +                                      clocks = <&v2m_refclk32khz>, <&v2m_refclk1mhz>, <&mb_clk24mhz>;
 +                                      clock-names = "refclk", "timclk", "apb_pclk";
 +                                      #clock-cells = <1>;
 +                                      clock-output-names = "timerclken0", "timerclken1", "timerclken2", "timerclken3";
 +                              };
++
+                               apbregs@010000 {
+                                       compatible = "syscon", "simple-mfd";
+                                       reg = <0x010000 0x1000>;
+                                       led@08.0 {
+                                               compatible = "register-bit-led";
+                                               offset = <0x08>;
+                                               mask = <0x01>;
+                                               label = "vexpress:0";
+                                               linux,default-trigger = "heartbeat";
+                                               default-state = "on";
+                                       };
+                                       led@08.1 {
+                                               compatible = "register-bit-led";
+                                               offset = <0x08>;
+                                               mask = <0x02>;
+                                               label = "vexpress:1";
+                                               linux,default-trigger = "mmc0";
+                                               default-state = "off";
+                                       };
+                                       led@08.2 {
+                                               compatible = "register-bit-led";
+                                               offset = <0x08>;
+                                               mask = <0x04>;
+                                               label = "vexpress:2";
+                                               linux,default-trigger = "cpu0";
+                                               default-state = "off";
+                                       };
+                                       led@08.3 {
+                                               compatible = "register-bit-led";
+                                               offset = <0x08>;
+                                               mask = <0x08>;
+                                               label = "vexpress:3";
+                                               linux,default-trigger = "cpu1";
+                                               default-state = "off";
+                                       };
+                                       led@08.4 {
+                                               compatible = "register-bit-led";
+                                               offset = <0x08>;
+                                               mask = <0x10>;
+                                               label = "vexpress:4";
+                                               linux,default-trigger = "cpu2";
+                                               default-state = "off";
+                                       };
+                                       led@08.5 {
+                                               compatible = "register-bit-led";
+                                               offset = <0x08>;
+                                               mask = <0x20>;
+                                               label = "vexpress:5";
+                                               linux,default-trigger = "cpu3";
+                                               default-state = "off";
+                                       };
+                                       led@08.6 {
+                                               compatible = "register-bit-led";
+                                               offset = <0x08>;
+                                               mask = <0x40>;
+                                               label = "vexpress:6";
+                                               default-state = "off";
+                                       };
+                                       led@08.7 {
+                                               compatible = "register-bit-led";
+                                               offset = <0x08>;
+                                               mask = <0x80>;
+                                               label = "vexpress:7";
+                                               default-state = "off";
+                                       };
+                               };
  
                                mmci@050000 {
                                        compatible = "arm,pl180", "arm,primecell";
                                        compatible = "arm,sp804", "arm,primecell";
                                        reg = <0x110000 0x10000>;
                                        interrupts = <9>;
 -                                      clocks = <&mb_clk24mhz>, <&soc_smc50mhz>;
 -                                      clock-names = "timclken1", "apb_pclk";
 +                                      clocks = <&v2m_sysctl 0>, <&v2m_sysctl 1>, <&mb_clk24mhz>;
 +                                      clock-names = "timclken1", "timclken2", "apb_pclk";
                                };
  
                                v2m_timer23: timer@120000 {
                                        compatible = "arm,sp804", "arm,primecell";
                                        reg = <0x120000 0x10000>;
                                        interrupts = <9>;
 -                                      clocks = <&mb_clk24mhz>, <&soc_smc50mhz>;
 -                                      clock-names = "timclken1", "apb_pclk";
 +                                      clocks = <&v2m_sysctl 2>, <&v2m_sysctl 3>, <&mb_clk24mhz>;
 +                                      clock-names = "timclken1", "timclken2", "apb_pclk";
                                };
  
                                rtc@170000 {
                                        clocks = <&soc_smc50mhz>;
                                        clock-names = "apb_pclk";
                                };
 +
 +                              iofpga_gpio0: gpio@1d0000 {
 +                                      compatible = "arm,pl061", "arm,primecell";
 +                                      reg = <0x1d0000 0x1000>;
 +                                      interrupts = <6>;
 +                                      clocks = <&soc_smc50mhz>;
 +                                      clock-names = "apb_pclk";
 +                                      gpio-controller;
 +                                      #gpio-cells = <2>;
 +                                      interrupt-controller;
 +                                      #interrupt-cells = <2>;
 +                              };
                        };
                };
@@@ -33,7 -33,6 +33,7 @@@ CONFIG_MODULE_UNLOAD=
  # CONFIG_IOSCHED_DEADLINE is not set
  CONFIG_ARCH_EXYNOS7=y
  CONFIG_ARCH_FSL_LS2085A=y
 +CONFIG_ARCH_HISI=y
  CONFIG_ARCH_MEDIATEK=y
  CONFIG_ARCH_SEATTLE=y
  CONFIG_ARCH_TEGRA=y
@@@ -139,6 -138,12 +139,12 @@@ CONFIG_MMC_ARMMMCI=
  CONFIG_MMC_SDHCI=y
  CONFIG_MMC_SDHCI_PLTFM=y
  CONFIG_MMC_SPI=y
+ CONFIG_NEW_LEDS=y
+ CONFIG_LEDS_CLASS=y
+ CONFIG_LEDS_SYSCON=y
+ CONFIG_LEDS_TRIGGERS=y
+ CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+ CONFIG_LEDS_TRIGGER_CPU=y
  CONFIG_RTC_CLASS=y
  CONFIG_RTC_DRV_EFI=y
  CONFIG_RTC_DRV_XGENE=y
@@@ -181,7 -186,6 +187,7 @@@ CONFIG_LOCKUP_DETECTOR=
  # CONFIG_SCHED_DEBUG is not set
  # CONFIG_DEBUG_PREEMPT is not set
  # CONFIG_FTRACE is not set
 +CONFIG_MEMTEST=y
  CONFIG_SECURITY=y
  CONFIG_CRYPTO_ANSI_CPRNG=y
  CONFIG_ARM64_CRYPTO=y
diff --combined drivers/iommu/Kconfig
@@@ -219,7 -219,7 +219,7 @@@ config TEGRA_IOMMU_SMM
        select IOMMU_API
        help
          This driver supports the IOMMU hardware (SMMU) found on NVIDIA Tegra
-         SoCs (Tegra30 up to Tegra124).
+         SoCs (Tegra30 up to Tegra132).
  
  config EXYNOS_IOMMU
        bool "Exynos IOMMU Support"
@@@ -339,7 -339,6 +339,7 @@@ config SPAPR_TCE_IOMM
          Enables bits of IOMMU API required by VFIO. The iommu_ops
          is not implemented as it is not necessary for VFIO.
  
 +# ARM IOMMU support
  config ARM_SMMU
        bool "ARM Ltd. System MMU (SMMU) Support"
        depends on (ARM64 || ARM) && MMU
          Say Y here if your SoC includes an IOMMU device implementing
          the ARM SMMU architecture.
  
 +config ARM_SMMU_V3
 +      bool "ARM Ltd. System MMU Version 3 (SMMUv3) Support"
 +      depends on ARM64 && PCI
 +      select IOMMU_API
 +      select IOMMU_IO_PGTABLE_LPAE
 +      help
 +        Support for implementations of the ARM System MMU architecture
 +        version 3 providing translation support to a PCIe root complex.
 +
 +        Say Y here if your system includes an IOMMU device implementing
 +        the ARM SMMUv3 architecture.
 +
  endif # IOMMU_SUPPORT
  static const struct berlin_desc_group berlin2_soc_pinctrl_groups[] = {
        /* G */
        BERLIN_PINCTRL_GROUP("G0", 0x00, 0x1, 0x00,
 -              BERLIN_PINCTRL_FUNCTION(0x0, "spi1"),
 +              BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), /* SS0n */
                BERLIN_PINCTRL_FUNCTION(0x1, "gpio")),
        BERLIN_PINCTRL_GROUP("G1", 0x00, 0x2, 0x01,
 -              BERLIN_PINCTRL_FUNCTION(0x0, "spi1"),
 +              BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), /* SS1n */
                BERLIN_PINCTRL_FUNCTION(0x1, "gpio"),
                BERLIN_PINCTRL_FUNCTION(0x2, "usb1")),
        BERLIN_PINCTRL_GROUP("G2", 0x00, 0x2, 0x02,
                BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
 -              BERLIN_PINCTRL_FUNCTION(0x1, "spi1"),
 +              BERLIN_PINCTRL_FUNCTION(0x1, "spi1"), /* SS2n */
                BERLIN_PINCTRL_FUNCTION(0x2, "pwm"),
                BERLIN_PINCTRL_FUNCTION(0x3, "i2s0")),
        BERLIN_PINCTRL_GROUP("G3", 0x00, 0x2, 0x04,
                BERLIN_PINCTRL_FUNCTION(0x0, "soc"),
 -              BERLIN_PINCTRL_FUNCTION(0x1, "spi1"),
 +              BERLIN_PINCTRL_FUNCTION(0x1, "spi1"), /* SS3n */
                BERLIN_PINCTRL_FUNCTION(0x2, "gpio"),
                BERLIN_PINCTRL_FUNCTION(0x3, "i2s1")),
        BERLIN_PINCTRL_GROUP("G4", 0x00, 0x2, 0x06,
 -              BERLIN_PINCTRL_FUNCTION(0x0, "spi1"),
 +              BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), /* CLK/SDI/SDO */
                BERLIN_PINCTRL_FUNCTION(0x1, "gpio"),
                BERLIN_PINCTRL_FUNCTION(0x2, "pwm")),
        BERLIN_PINCTRL_GROUP("G5", 0x00, 0x3, 0x08,
@@@ -163,15 -163,15 +163,15 @@@ static const struct berlin_desc_group b
        /* GSM */
        BERLIN_PINCTRL_GROUP("GSM0", 0x40, 0x2, 0x00,
                BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
 -              BERLIN_PINCTRL_FUNCTION(0x1, "spi2"),
 +              BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), /* SS0n */
                BERLIN_PINCTRL_FUNCTION(0x2, "eth1")),
        BERLIN_PINCTRL_GROUP("GSM1", 0x40, 0x2, 0x02,
                BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
 -              BERLIN_PINCTRL_FUNCTION(0x1, "spi2"),
 +              BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), /* SS1n */
                BERLIN_PINCTRL_FUNCTION(0x2, "eth1")),
        BERLIN_PINCTRL_GROUP("GSM2", 0x40, 0x2, 0x04,
                BERLIN_PINCTRL_FUNCTION(0x0, "twsi2"),
 -              BERLIN_PINCTRL_FUNCTION(0x1, "spi2")),
 +              BERLIN_PINCTRL_FUNCTION(0x1, "spi2")), /* SS2n/SS3n */
        BERLIN_PINCTRL_GROUP("GSM3", 0x40, 0x2, 0x06,
                BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
                BERLIN_PINCTRL_FUNCTION(0x1, "uart0"),  /* CTS/RTS */
                BERLIN_PINCTRL_FUNCTION(0x3, "twsi3")),
        BERLIN_PINCTRL_GROUP("GSM6", 0x40, 0x2, 0x0c,
                BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
 -              BERLIN_PINCTRL_FUNCTION(0x1, "spi2"),
 +              BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), /* CLK/SDO */
                BERLIN_PINCTRL_FUNCTION(0x1, "clki")),
        BERLIN_PINCTRL_GROUP("GSM7", 0x40, 0x1, 0x0e,
                BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
@@@ -218,11 -218,11 +218,11 @@@ static const struct berlin_pinctrl_des
  
  static const struct of_device_id berlin2_pinctrl_match[] = {
        {
-               .compatible = "marvell,berlin2-chip-ctrl",
+               .compatible = "marvell,berlin2-soc-pinctrl",
                .data = &berlin2_soc_pinctrl_data
        },
        {
-               .compatible = "marvell,berlin2-system-ctrl",
+               .compatible = "marvell,berlin2-system-pinctrl",
                .data = &berlin2_sysmgr_pinctrl_data
        },
        {}
@@@ -233,28 -233,6 +233,6 @@@ static int berlin2_pinctrl_probe(struc
  {
        const struct of_device_id *match =
                of_match_device(berlin2_pinctrl_match, &pdev->dev);
-       struct regmap_config *rmconfig;
-       struct regmap *regmap;
-       struct resource *res;
-       void __iomem *base;
-       rmconfig = devm_kzalloc(&pdev->dev, sizeof(*rmconfig), GFP_KERNEL);
-       if (!rmconfig)
-               return -ENOMEM;
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       base = devm_ioremap_resource(&pdev->dev, res);
-       if (IS_ERR(base))
-               return PTR_ERR(base);
-       rmconfig->reg_bits = 32,
-       rmconfig->val_bits = 32,
-       rmconfig->reg_stride = 4,
-       rmconfig->max_register = resource_size(res);
-       regmap = devm_regmap_init_mmio(&pdev->dev, base, rmconfig);
-       if (IS_ERR(regmap))
-               return PTR_ERR(regmap);
  
        return berlin_pinctrl_probe(pdev, match->data);
  }
@@@ -68,17 -68,17 +68,17 @@@ static const struct berlin_desc_group b
                BERLIN_PINCTRL_FUNCTION(0x1, "twsi1"),
                BERLIN_PINCTRL_FUNCTION(0x2, "gpio")),
        BERLIN_PINCTRL_GROUP("G8", 0x00, 0x3, 0x10,
 -              BERLIN_PINCTRL_FUNCTION(0x0, "ss0"),
 +              BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), /* SS0n */
                BERLIN_PINCTRL_FUNCTION(0x1, "gpio")),
        BERLIN_PINCTRL_GROUP("G9", 0x00, 0x3, 0x13,
                BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
 -              BERLIN_PINCTRL_FUNCTION(0x1, "spi1"),
 +              BERLIN_PINCTRL_FUNCTION(0x1, "spi1"), /* SS1n/SS2n */
                BERLIN_PINCTRL_FUNCTION(0x2, "twsi0")),
        BERLIN_PINCTRL_GROUP("G10", 0x00, 0x2, 0x16,
 -              BERLIN_PINCTRL_FUNCTION(0x0, "spi1"),
 +              BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), /* CLK */
                BERLIN_PINCTRL_FUNCTION(0x1, "gpio")),
        BERLIN_PINCTRL_GROUP("G11", 0x00, 0x2, 0x18,
 -              BERLIN_PINCTRL_FUNCTION(0x0, "spi1"),
 +              BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), /* SDI/SDO */
                BERLIN_PINCTRL_FUNCTION(0x1, "gpio")),
        BERLIN_PINCTRL_GROUP("G12", 0x00, 0x3, 0x1a,
                BERLIN_PINCTRL_FUNCTION(0x0, "usb1"),
@@@ -161,11 -161,11 +161,11 @@@ static const struct berlin_pinctrl_des
  
  static const struct of_device_id berlin2cd_pinctrl_match[] = {
        {
-               .compatible = "marvell,berlin2cd-chip-ctrl",
+               .compatible = "marvell,berlin2cd-soc-pinctrl",
                .data = &berlin2cd_soc_pinctrl_data
        },
        {
-               .compatible = "marvell,berlin2cd-system-ctrl",
+               .compatible = "marvell,berlin2cd-system-pinctrl",
                .data = &berlin2cd_sysmgr_pinctrl_data
        },
        {}
@@@ -176,28 -176,6 +176,6 @@@ static int berlin2cd_pinctrl_probe(stru
  {
        const struct of_device_id *match =
                of_match_device(berlin2cd_pinctrl_match, &pdev->dev);
-       struct regmap_config *rmconfig;
-       struct regmap *regmap;
-       struct resource *res;
-       void __iomem *base;
-       rmconfig = devm_kzalloc(&pdev->dev, sizeof(*rmconfig), GFP_KERNEL);
-       if (!rmconfig)
-               return -ENOMEM;
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       base = devm_ioremap_resource(&pdev->dev, res);
-       if (IS_ERR(base))
-               return PTR_ERR(base);
-       rmconfig->reg_bits = 32,
-       rmconfig->val_bits = 32,
-       rmconfig->reg_stride = 4,
-       rmconfig->max_register = resource_size(res);
-       regmap = devm_regmap_init_mmio(&pdev->dev, base, rmconfig);
-       if (IS_ERR(regmap))
-               return PTR_ERR(regmap);
  
        return berlin_pinctrl_probe(pdev, match->data);
  }
@@@ -59,21 -59,21 +59,21 @@@ static const struct berlin_desc_group b
                        BERLIN_PINCTRL_FUNCTION(0x2, "gpio"),
                        BERLIN_PINCTRL_FUNCTION(0x3, "eddc")),
        BERLIN_PINCTRL_GROUP("G8", 0x18, 0x3, 0x18,
 -                      BERLIN_PINCTRL_FUNCTION(0x0, "spi1"),
 +                      BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), /* CLK/SDI/SDO */
                        BERLIN_PINCTRL_FUNCTION(0x1, "gpio")),
        BERLIN_PINCTRL_GROUP("G9", 0x18, 0x3, 0x1b,
 -                      BERLIN_PINCTRL_FUNCTION(0x0, "spi1"),
 +                      BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), /* SS0n/SS1n */
                        BERLIN_PINCTRL_FUNCTION(0x1, "gpio"),
                        BERLIN_PINCTRL_FUNCTION(0x5, "sata")),
        BERLIN_PINCTRL_GROUP("G10", 0x1c, 0x3, 0x00,
                        BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
 -                      BERLIN_PINCTRL_FUNCTION(0x1, "spi1"),
 +                      BERLIN_PINCTRL_FUNCTION(0x1, "spi1"), /* SS2n */
                        BERLIN_PINCTRL_FUNCTION(0x3, "i2s0"),
                        BERLIN_PINCTRL_FUNCTION(0x4, "pwm"),
                        BERLIN_PINCTRL_FUNCTION(0x5, "sata")),
        BERLIN_PINCTRL_GROUP("G11", 0x1c, 0x3, 0x03,
                        BERLIN_PINCTRL_FUNCTION(0x0, "jtag"),
 -                      BERLIN_PINCTRL_FUNCTION(0x1, "spi1"),
 +                      BERLIN_PINCTRL_FUNCTION(0x1, "spi1"), /* SS3n */
                        BERLIN_PINCTRL_FUNCTION(0x2, "gpio"),
                        BERLIN_PINCTRL_FUNCTION(0x3, "i2s1"),
                        BERLIN_PINCTRL_FUNCTION(0x4, "pwm"),
@@@ -301,19 -301,19 +301,19 @@@ static const struct berlin_desc_group b
        /* GSM */
        BERLIN_PINCTRL_GROUP("GSM0", 0x40, 0x2, 0x00,
                        BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
 -                      BERLIN_PINCTRL_FUNCTION(0x1, "spi2"),
 +                      BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), /* SS0n */
                        BERLIN_PINCTRL_FUNCTION(0x2, "eth1")),
        BERLIN_PINCTRL_GROUP("GSM1", 0x40, 0x2, 0x02,
                        BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
 -                      BERLIN_PINCTRL_FUNCTION(0x1, "spi2"),
 +                      BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), /* SS1n */
                        BERLIN_PINCTRL_FUNCTION(0x2, "eth1")),
        BERLIN_PINCTRL_GROUP("GSM2", 0x40, 0x2, 0x04,
                        BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
 -                      BERLIN_PINCTRL_FUNCTION(0x1, "spi2"),
 +                      BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), /* SS2n/SS3n */
                        BERLIN_PINCTRL_FUNCTION(0x2, "eddc")),
        BERLIN_PINCTRL_GROUP("GSM3", 0x40, 0x2, 0x06,
                        BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
 -                      BERLIN_PINCTRL_FUNCTION(0x1, "spi2"),
 +                      BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), /* CLK/SDO */
                        BERLIN_PINCTRL_FUNCTION(0x2, "eddc")),
        BERLIN_PINCTRL_GROUP("GSM4", 0x40, 0x1, 0x08,
                        BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
@@@ -380,11 -380,11 +380,11 @@@ static const struct berlin_pinctrl_des
  
  static const struct of_device_id berlin2q_pinctrl_match[] = {
        {
-               .compatible = "marvell,berlin2q-chip-ctrl",
+               .compatible = "marvell,berlin2q-soc-pinctrl",
                .data = &berlin2q_soc_pinctrl_data,
        },
        {
-               .compatible = "marvell,berlin2q-system-ctrl",
+               .compatible = "marvell,berlin2q-system-pinctrl",
                .data = &berlin2q_sysmgr_pinctrl_data,
        },
        {}
@@@ -395,28 -395,6 +395,6 @@@ static int berlin2q_pinctrl_probe(struc
  {
        const struct of_device_id *match =
                of_match_device(berlin2q_pinctrl_match, &pdev->dev);
-       struct regmap_config *rmconfig;
-       struct regmap *regmap;
-       struct resource *res;
-       void __iomem *base;
-       rmconfig = devm_kzalloc(&pdev->dev, sizeof(*rmconfig), GFP_KERNEL);
-       if (!rmconfig)
-               return -ENOMEM;
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       base = devm_ioremap_resource(&pdev->dev, res);
-       if (IS_ERR(base))
-               return PTR_ERR(base);
-       rmconfig->reg_bits = 32,
-       rmconfig->val_bits = 32,
-       rmconfig->reg_stride = 4,
-       rmconfig->max_register = resource_size(res);
-       regmap = devm_regmap_init_mmio(&pdev->dev, base, rmconfig);
-       if (IS_ERR(regmap))
-               return PTR_ERR(regmap);
  
        return berlin_pinctrl_probe(pdev, match->data);
  }
@@@ -11,6 -11,7 +11,7 @@@
   */
  
  #include <linux/io.h>
+ #include <linux/mfd/syscon.h>
  #include <linux/module.h>
  #include <linux/of.h>
  #include <linux/of_address.h>
@@@ -295,13 -296,15 +296,15 @@@ int berlin_pinctrl_probe(struct platfor
                         const struct berlin_pinctrl_desc *desc)
  {
        struct device *dev = &pdev->dev;
+       struct device_node *parent_np = of_get_parent(dev->of_node);
        struct berlin_pinctrl *pctrl;
        struct regmap *regmap;
        int ret;
  
-       regmap = dev_get_regmap(&pdev->dev, NULL);
-       if (!regmap)
-               return -ENODEV;
+       regmap = syscon_node_to_regmap(parent_np);
+       of_node_put(parent_np);
+       if (IS_ERR(regmap))
+               return PTR_ERR(regmap);
  
        pctrl = devm_kzalloc(dev, sizeof(*pctrl), GFP_KERNEL);
        if (!pctrl)
        }
  
        pctrl->pctrl_dev = pinctrl_register(&berlin_pctrl_desc, dev, pctrl);
 -      if (!pctrl->pctrl_dev) {
 +      if (IS_ERR(pctrl->pctrl_dev)) {
                dev_err(dev, "failed to register pinctrl driver\n");
 -              return -EINVAL;
 +              return PTR_ERR(pctrl->pctrl_dev);
        }
  
        return 0;