Merge tag 'armsoc-late' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 8 Oct 2016 04:34:49 +0000 (21:34 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 8 Oct 2016 04:34:49 +0000 (21:34 -0700)
Pull ARM SoC late DT updates from Arnd Bergmann:
 "These updates have been kept in a separate branch mostly because they
  rely on updates to the respective clk drivers to keep the shared
  header files in sync.

   - The Renesas r8a7796 (R-Car M3-W) platform gets added, this is an
     automotive SoC similar to the ⅹ8a7795 chip we already support, but
     the dts changes rely on a clock driver change that has been merged
     for v4.9 through the clk tree.

   - The Amlogic meson-gxbb (S905) platform gains support for a few
     drivers merged through our tree, in particular the network and usb
     driver changes are required and included here, and also the clk
     tree changes.

   - The Allwinner platforms have seen a large-scale change to their clk
     drivers and the dts file updates must come after that. This
     includes the newly added Nextthing GR8 platform, which is derived
     from sun5i/A13.

   - Some integrator (arm32) changes rely on clk driver changes.

   - A single patch for lpc32xx has no such dependency but wasn't added
     until just before the merge window"

* tag 'armsoc-late' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (99 commits)
  ARM: dts: lpc32xx: add device node for IRAM on-chip memory
  ARM: dts: sun8i: Add accelerometer to polaroid-mid2407pxe03
  ARM: dts: sun8i: enable UART1 for iNet D978 Rev2 board
  ARM: dts: sun8i: add pinmux for UART1 at PG
  dts: sun8i-h3: add I2C0-2 peripherals to H3 SOC
  dts: sun8i-h3: add pinmux definitions for I2C0-2
  dts: sun8i-h3: associate exposed UARTs on Orange Pi Boards
  dts: sun8i-h3: split off RTS/CTS for UART1 in seperate pinmux
  dts: sun8i-h3: add pinmux definitions for UART2-3
  ARM: dts: sun9i: a80-optimus: Disable EHCI1
  ARM: dts: sun9i: cubieboard4: Add AXP806 PMIC device node and regulators
  ARM: dts: sun9i: a80-optimus: Add AXP806 PMIC device node and regulators
  ARM: dts: sun9i: cubieboard4: Declare AXP809 SW regulator as unused
  ARM: dts: sun9i: a80-optimus: Declare AXP809 SW regulator as unused
  ARM: dts: sun8i: Add touchscreen node for sun8i-a33-ga10h
  ARM: dts: sun8i: Add touchscreen node for sun8i-a23-polaroid-mid2809pxe04
  ARM: dts: sun8i: Add touchscreen node for sun8i-a23-polaroid-mid2407pxe03
  ARM: dts: sun8i: Add touchscreen node for sun8i-a23-inet86dz
  ARM: dts: sun8i: Add touchscreen node for sun8i-a23-gt90h
  ARM64: dts: meson-gxbb-vega-s95: Enable USB Nodes
  ...

51 files changed:
Documentation/devicetree/bindings/arm/shmobile.txt
Documentation/devicetree/bindings/firmware/meson/meson_sm.txt [new file with mode: 0644]
Documentation/devicetree/bindings/media/meson-ir.txt
Documentation/devicetree/bindings/net/meson-dwmac.txt
Documentation/devicetree/bindings/nvmem/amlogic-efuse.txt [new file with mode: 0644]
Documentation/devicetree/bindings/phy/meson-usb2-phy.txt [new file with mode: 0644]
Documentation/devicetree/bindings/usb/dwc2.txt
arch/arm/boot/dts/Makefile
arch/arm/boot/dts/integratorap.dts
arch/arm/boot/dts/integratorcp.dts
arch/arm/boot/dts/lpc32xx.dtsi
arch/arm/boot/dts/ntc-gr8-evb.dts [new file with mode: 0644]
arch/arm/boot/dts/ntc-gr8.dtsi [new file with mode: 0644]
arch/arm/boot/dts/sun6i-a31.dtsi
arch/arm/boot/dts/sun8i-a23-a33.dtsi
arch/arm/boot/dts/sun8i-a23-gt90h-v4.dts
arch/arm/boot/dts/sun8i-a23-inet86dz.dts
arch/arm/boot/dts/sun8i-a23-polaroid-mid2407pxe03.dts
arch/arm/boot/dts/sun8i-a23-polaroid-mid2809pxe04.dts
arch/arm/boot/dts/sun8i-a23.dtsi
arch/arm/boot/dts/sun8i-a33-ga10h-v1.1.dts
arch/arm/boot/dts/sun8i-a33-inet-d978-rev2.dts
arch/arm/boot/dts/sun8i-a33.dtsi
arch/arm/boot/dts/sun8i-h3-bananapi-m2-plus.dts
arch/arm/boot/dts/sun8i-h3-orangepi-2.dts
arch/arm/boot/dts/sun8i-h3-orangepi-one.dts
arch/arm/boot/dts/sun8i-h3-orangepi-pc.dts
arch/arm/boot/dts/sun8i-h3.dtsi
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts
arch/arm/boot/dts/sun9i-a80-optimus.dts
arch/arm/mach-integrator/integrator_ap.c
arch/arm/mach-integrator/integrator_cp.c
arch/arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dts
arch/arm64/boot/dts/amlogic/meson-gxbb-p200.dts
arch/arm64/boot/dts/amlogic/meson-gxbb-p20x.dtsi
arch/arm64/boot/dts/amlogic/meson-gxbb-vega-s95.dtsi
arch/arm64/boot/dts/amlogic/meson-gxbb.dtsi
arch/arm64/boot/dts/renesas/Makefile
arch/arm64/boot/dts/renesas/r8a7795-h3ulcb.dts [new file with mode: 0644]
arch/arm64/boot/dts/renesas/r8a7795-salvator-x.dts
arch/arm64/boot/dts/renesas/r8a7795.dtsi
arch/arm64/boot/dts/renesas/r8a7796-salvator-x.dts
arch/arm64/boot/dts/renesas/r8a7796.dtsi
drivers/clk/meson/gxbb.h
drivers/net/ethernet/stmicro/stmmac/Kconfig
drivers/net/ethernet/stmicro/stmmac/Makefile
drivers/net/ethernet/stmicro/stmmac/dwmac-meson.c
drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c [new file with mode: 0644]
drivers/net/ethernet/stmicro/stmmac/stmmac_platform.h
drivers/usb/dwc2/platform.c
include/dt-bindings/clock/gxbb-clkc.h

index 5484c31..2f0b716 100644 (file)
@@ -49,6 +49,8 @@ Boards:
     compatible = "renesas,genmai", "renesas,r7s72100"
   - Gose
     compatible = "renesas,gose", "renesas,r8a7793"
+  - H3ULCB (RTP0RC7795SKB00010S)
+    compatible = "renesas,h3ulcb", "renesas,r8a7795";
   - Henninger
     compatible = "renesas,henninger", "renesas,r8a7791"
   - Koelsch (RTP0RC7791SEB00010S)
diff --git a/Documentation/devicetree/bindings/firmware/meson/meson_sm.txt b/Documentation/devicetree/bindings/firmware/meson/meson_sm.txt
new file mode 100644 (file)
index 0000000..c248cd4
--- /dev/null
@@ -0,0 +1,15 @@
+* Amlogic Secure Monitor
+
+In the Amlogic SoCs the Secure Monitor code is used to provide access to the
+NVMEM, enable JTAG, set USB boot, etc...
+
+Required properties for the secure monitor node:
+- compatible: Should be "amlogic,meson-gxbb-sm"
+
+Example:
+
+       firmware {
+               sm: secure-monitor {
+                       compatible = "amlogic,meson-gxbb-sm";
+               };
+       };
index 407848e..e7e3f3c 100644 (file)
@@ -1,7 +1,10 @@
 * Amlogic Meson IR remote control receiver
 
 Required properties:
- - compatible  : should be "amlogic,meson6-ir"
+ - compatible  : depending on the platform this should be one of:
+                 - "amlogic,meson6-ir"
+                 - "amlogic,meson8b-ir"
+                 - "amlogic,meson-gxbb-ir"
  - reg         : physical base address and length of the device registers
  - interrupts  : a single specifier for the interrupt from the device
 
index ec633d7..89e62dd 100644 (file)
@@ -1,18 +1,32 @@
 * Amlogic Meson DWMAC Ethernet controller
 
 The device inherits all the properties of the dwmac/stmmac devices
-described in the file net/stmmac.txt with the following changes.
+described in the file stmmac.txt in the current directory with the
+following changes.
 
-Required properties:
+Required properties on all platforms:
 
-- compatible: should be "amlogic,meson6-dwmac" along with "snps,dwmac"
-             and any applicable more detailed version number
-             described in net/stmmac.txt
+- compatible:  Depending on the platform this should be one of:
+                       - "amlogic,meson6-dwmac"
+                       - "amlogic,meson8b-dwmac"
+                       - "amlogic,meson-gxbb-dwmac"
+               Additionally "snps,dwmac" and any applicable more
+               detailed version number described in net/stmmac.txt
+               should be used.
 
-- reg: should contain a register range for the dwmac controller and
-       another one for the Amlogic specific configuration
+- reg: The first register range should be the one of the DWMAC
+       controller. The second range is is for the Amlogic specific
+       configuration (for example the PRG_ETHERNET register range
+       on Meson8b and newer)
 
-Example:
+Required properties on Meson8b and newer:
+- clock-names: Should contain the following:
+               - "stmmaceth" - see stmmac.txt
+               - "clkin0" - first parent clock of the internal mux
+               - "clkin1" - second parent clock of the internal mux
+
+
+Example for Meson6:
 
        ethmac: ethernet@c9410000 {
                compatible = "amlogic,meson6-dwmac", "snps,dwmac";
@@ -23,3 +37,18 @@ Example:
                clocks = <&clk81>;
                clock-names = "stmmaceth";
        }
+
+Example for GXBB:
+       ethmac: ethernet@c9410000 {
+               compatible = "amlogic,meson-gxbb-dwmac", "snps,dwmac";
+               reg = <0x0 0xc9410000 0x0 0x10000>,
+                       <0x0 0xc8834540 0x0 0x8>;
+               interrupts = <0 8 1>;
+               interrupt-names = "macirq";
+               clocks = <&clkc CLKID_ETH>,
+                               <&clkc CLKID_FCLK_DIV2>,
+                               <&clkc CLKID_MPLL2>;
+               clock-names = "stmmaceth", "clkin0", "clkin1";
+               phy-mode = "rgmii";
+               status = "disabled";
+       };
diff --git a/Documentation/devicetree/bindings/nvmem/amlogic-efuse.txt b/Documentation/devicetree/bindings/nvmem/amlogic-efuse.txt
new file mode 100644 (file)
index 0000000..fafd85b
--- /dev/null
@@ -0,0 +1,39 @@
+= Amlogic eFuse device tree bindings =
+
+Required properties:
+- compatible: should be "amlogic,meson-gxbb-efuse"
+
+= Data cells =
+Are child nodes of eFuse, bindings of which as described in
+bindings/nvmem/nvmem.txt
+
+Example:
+
+       efuse: efuse {
+               compatible = "amlogic,meson-gxbb-efuse";
+               #address-cells = <1>;
+               #size-cells = <1>;
+
+               sn: sn@14 {
+                       reg = <0x14 0x10>;
+               };
+
+               eth_mac: eth_mac@34 {
+                       reg = <0x34 0x10>;
+               };
+
+               bid: bid@46 {
+                       reg = <0x46 0x30>;
+               };
+       };
+
+= Data consumers =
+Are device nodes which consume nvmem data cells.
+
+For example:
+
+       eth_mac {
+               ...
+               nvmem-cells = <&eth_mac>;
+               nvmem-cell-names = "eth_mac";
+       };
diff --git a/Documentation/devicetree/bindings/phy/meson-usb2-phy.txt b/Documentation/devicetree/bindings/phy/meson-usb2-phy.txt
new file mode 100644 (file)
index 0000000..9da5ea2
--- /dev/null
@@ -0,0 +1,27 @@
+* Amlogic USB2 PHY
+
+Required properties:
+- compatible:  Depending on the platform this should be one of:
+       "amlogic,meson8b-usb2-phy"
+       "amlogic,meson-gxbb-usb2-phy"
+- reg:         The base address and length of the registers
+- #phys-cells: should be 0 (see phy-bindings.txt in this directory)
+- clocks:      phandle and clock identifier for the phy clocks
+- clock-names: "usb_general" and "usb"
+
+Optional properties:
+- resets:      reference to the reset controller
+- phy-supply:  see phy-bindings.txt in this directory
+
+
+Example:
+
+usb0_phy: usb_phy@0 {
+       compatible = "amlogic,meson-gxbb-usb2-phy";
+       #phy-cells = <0>;
+       reg = <0x0 0x0 0x0 0x20>;
+       resets = <&reset RESET_USB_OTG>;
+       clocks = <&clkc CLKID_USB>, <&clkc CLKID_USB0>;
+       clock-names = "usb_general", "usb";
+       phy-supply = <&usb_vbus>;
+};
index 7d16ebf..455f2c3 100644 (file)
@@ -10,6 +10,8 @@ Required properties:
   - "rockchip,rk3288-usb", "rockchip,rk3066-usb", "snps,dwc2": for rk3288 Soc;
   - "lantiq,arx100-usb": The DWC2 USB controller instance in Lantiq ARX SoCs;
   - "lantiq,xrx200-usb": The DWC2 USB controller instance in Lantiq XRX SoCs;
+  - "amlogic,meson8b-usb": The DWC2 USB controller instance in Amlogic Meson8b SoCs;
+  - "amlogic,meson-gxbb-usb": The DWC2 USB controller instance in Amlogic S905 SoCs;
   - snps,dwc2: A generic DWC2 USB controller with default parameters.
 - reg : Should contain 1 register range (address and length)
 - interrupts : Should contain 1 interrupt
index cf989f2..befcd26 100644 (file)
@@ -745,6 +745,7 @@ dtb-$(CONFIG_MACH_SUN4I) += \
        sun4i-a10-pcduino2.dtb \
        sun4i-a10-pov-protab2-ips9.dtb
 dtb-$(CONFIG_MACH_SUN5I) += \
+       ntc-gr8-evb.dtb \
        sun5i-a10s-auxtek-t003.dtb \
        sun5i-a10s-auxtek-t004.dtb \
        sun5i-a10s-mk802.dtb \
index 4b34b54..6f16d09 100644 (file)
@@ -19,7 +19,7 @@
                bootargs = "root=/dev/ram0 console=ttyAM0,38400n8 earlyprintk";
        };
 
-       /* 24 MHz chrystal on the core module */
+       /* 24 MHz chrystal on the Integrator/AP development board */
        xtal24mhz: xtal24mhz@24M {
                #clock-cells = <0>;
                compatible = "fixed-clock";
                #clock-cells = <0>;
                compatible = "fixed-clock";
                clock-frequency = <14745600>;
+               clocks = <&xtal24mhz>;
+       };
+
+       core-module@10000000 {
+               /* 24 MHz chrystal on the core module */
+               cm24mhz: cm24mhz@24M {
+                       #clock-cells = <0>;
+                       compatible = "fixed-clock";
+                       clock-frequency = <24000000>;
+               };
+
+               /* Oscillator on the core module, clocks the CPU core */
+               cmosc: cmosc@24M {
+                       compatible = "arm,syscon-icst525-integratorap-cm";
+                       #clock-cells = <0>;
+                       lock-offset = <0x14>;
+                       vco-offset = <0x08>;
+                       clocks = <&cm24mhz>;
+               };
+
+               /* Auxilary oscillator on the core module, 32.369MHz at boot */
+               auxosc: auxosc@24M {
+                       compatible = "arm,syscon-icst525";
+                       #clock-cells = <0>;
+                       lock-offset = <0x14>;
+                       vco-offset = <0x1c>;
+                       clocks = <&cm24mhz>;
+               };
        };
 
        syscon {
                interrupt-parent = <&pic>;
                /* These are the logical module IRQs */
                interrupts = <9>, <10>, <11>, <12>;
+
+               /*
+                * SYSCLK clocks PCIv3 bridge, system controller and the
+                * logic modules.
+                */
+               sysclk: apsys@24M {
+                       compatible = "arm,syscon-icst525-integratorap-sys";
+                       #clock-cells = <0>;
+                       lock-offset = <0x1c>;
+                       vco-offset = <0x04>;
+                       clocks = <&xtal24mhz>;
+               };
+
+               /* One-bit control for the PCI bus clock (33 or 25 MHz) */
+               pciclk: pciclk@24M {
+                       compatible = "arm,syscon-icst525-integratorap-pci";
+                       #clock-cells = <0>;
+                       lock-offset = <0x1c>;
+                       vco-offset = <0x04>;
+                       clocks = <&xtal24mhz>;
+               };
        };
 
        timer0: timer@13000000 {
index 79430fb..1b5e4b0 100644 (file)
 
        core-module@10000000 {
                /* 24 MHz chrystal on the core module */
-               xtal24mhz: xtal24mhz@24M {
+               cm24mhz: cm24mhz@24M {
                        #clock-cells = <0>;
                        compatible = "fixed-clock";
                        clock-frequency = <24000000>;
                };
 
-               /*
-                * External oscillator on the core module, usually used
-                * to drive video circuitry. Driven from the 24MHz clock.
-                */
-               auxosc: cm_aux_osc@25M {
+               /* Oscillator on the core module, clocks the CPU core */
+               cmcore: cmosc@24M {
+                       compatible = "arm,syscon-icst525-integratorcp-cm-core";
+                       #clock-cells = <0>;
+                       lock-offset = <0x14>;
+                       vco-offset = <0x08>;
+                       clocks = <&cm24mhz>;
+               };
+
+               /* Oscillator on the core module, clocks the memory bus */
+               cmmem: cmosc@24M {
+                       compatible = "arm,syscon-icst525-integratorcp-cm-mem";
+                       #clock-cells = <0>;
+                       lock-offset = <0x14>;
+                       vco-offset = <0x08>;
+                       clocks = <&cm24mhz>;
+               };
+
+               /* Auxilary oscillator on the core module, clocks the CLCD */
+               auxosc: auxosc@24M {
+                       compatible = "arm,syscon-icst525";
                        #clock-cells = <0>;
-                       compatible = "arm,integrator-cm-auxosc";
-                       clocks = <&xtal24mhz>;
+                       lock-offset = <0x14>;
+                       vco-offset = <0x1c>;
+                       clocks = <&cm24mhz>;
                };
 
                /* The KMI clock is the 24 MHz oscillator divided to 8MHz */
@@ -80,7 +97,7 @@
                        compatible = "fixed-factor-clock";
                        clock-div = <3>;
                        clock-mult = <1>;
-                       clocks = <&xtal24mhz>;
+                       clocks = <&cm24mhz>;
                };
 
                /* The timer clock is the 24 MHz oscillator divided to 1MHz */
                        compatible = "fixed-factor-clock";
                        clock-div = <24>;
                        clock-mult = <1>;
-                       clocks = <&xtal24mhz>;
+                       clocks = <&cm24mhz>;
                };
        };
 
                        reg = <0xC0000000 0x1000>;
                        interrupts = <22>;
                        clocks = <&auxosc>, <&pclk>;
-                       clock-names = "clcd", "apb_pclk";
+                       clock-names = "clcdclk", "apb_pclk";
+
+                       port {
+                               /*
+                                * The VGA connected is implemented with a
+                                * THS8134A triple DAC that can be run in 24bit
+                                * or 16bit RGB mode.
+                                */
+                               clcd_pads: endpoint {
+                                       remote-endpoint = <&clcd_panel>;
+                                       arm,pl11x,tft-r0g0b0-pads = <1 7 13>;
+                               };
+                       };
+
+                       panel {
+                               compatible = "panel-dpi";
+
+                               port {
+                                       clcd_panel: endpoint {
+                                               remote-endpoint = <&clcd_pads>;
+                                       };
+                               };
+
+                               /* Standard 640x480 VGA timings */
+                               panel-timing {
+                                       clock-frequency = <25175000>;
+                                       hactive = <640>;
+                                       hback-porch = <48>;
+                                       hfront-porch = <16>;
+                                       hsync-len = <96>;
+                                       vactive = <480>;
+                                       vback-porch = <33>;
+                                       vfront-porch = <10>;
+                                       vsync-len = <2>;
+                               };
+                       };
                };
        };
 };
index e295e1e..b5841fa 100644 (file)
                #address-cells = <1>;
                #size-cells = <1>;
                compatible = "simple-bus";
-               ranges = <0x20000000 0x20000000 0x30000000>,
+               ranges = <0x00000000 0x00000000 0x10000000>,
+                        <0x20000000 0x20000000 0x30000000>,
                         <0xe0000000 0xe0000000 0x04000000>;
 
+               iram: sram@08000000 {
+                       compatible = "mmio-sram";
+                       reg = <0x08000000 0x20000>;
+
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges = <0x00000000 0x08000000 0x20000>;
+               };
+
                /*
                 * Enable either SLC or MLC
                 */
diff --git a/arch/arm/boot/dts/ntc-gr8-evb.dts b/arch/arm/boot/dts/ntc-gr8-evb.dts
new file mode 100644 (file)
index 0000000..4b622f3
--- /dev/null
@@ -0,0 +1,342 @@
+/*
+ * Copyright 2016 Free Electrons
+ * Copyright 2016 NextThing Co
+ *
+ * Mylène Josserand <mylene.josserand@free-electrons.com>
+ *
+ * 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 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 file 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.
+ *
+ * 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.
+ */
+
+/dts-v1/;
+#include "ntc-gr8.dtsi"
+#include "sunxi-common-regulators.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+
+/ {
+       model = "NextThing GR8-EVB";
+       compatible = "nextthing,gr8-evb", "nextthing,gr8";
+
+       aliases {
+               i2c0 = &i2c0;
+               i2c1 = &i2c1;
+               i2c2 = &i2c2;
+               serial0 = &uart1;
+               serial1 = &uart2;
+       };
+
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+
+       backlight: backlight {
+               compatible = "pwm-backlight";
+               pwms = <&pwm 0 10000 0>;
+               enable-gpios = <&axp_gpio 1 GPIO_ACTIVE_HIGH>;
+
+               brightness-levels = <0 10 20 30 40 50 60 70 80 90 100>;
+               default-brightness-level = <8>;
+       };
+};
+
+&be0 {
+       status = "okay";
+};
+
+&codec {
+       status = "okay";
+};
+
+&ehci0 {
+       status = "okay";
+};
+
+&i2c0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&i2c0_pins_a>;
+       status = "okay";
+
+       axp209: pmic@34 {
+               reg = <0x34>;
+
+               /*
+               * The interrupt is routed through the "External Fast
+               * Interrupt Request" pin (ball G13 of the module)
+               * directly to the main interrupt controller, without
+               * any other controller interfering.
+               */
+               interrupts = <0>;
+       };
+};
+
+#include "axp209.dtsi"
+
+&i2c1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&i2c1_pins_a>;
+       status = "okay";
+
+       wm8978: codec@1a {
+               #sound-dai-cells = <0>;
+               compatible = "wlf,wm8978";
+               reg = <0x1a>;
+       };
+
+       pcf8563: rtc@51 {
+               compatible = "phg,pcf8563";
+               reg = <0x51>;
+       };
+};
+
+&i2c2 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&i2c2_pins_a>;
+       status = "okay";
+};
+
+&i2s0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&i2s0_mclk_pins_a>, <&i2s0_data_pins_a>;
+       status = "okay";
+};
+
+&ir0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&ir0_rx_pins_a>;
+       status = "okay";
+};
+
+&lradc {
+       vref-supply = <&reg_ldo2>;
+       status = "okay";
+
+       button@190 {
+               label = "Volume Up";
+               linux,code = <KEY_VOLUMEUP>;
+               channel = <0>;
+               voltage = <190000>;
+       };
+
+       button@390 {
+               label = "Volume Down";
+               linux,code = <KEY_VOLUMEDOWN>;
+               channel = <0>;
+               voltage = <390000>;
+       };
+
+       button@600 {
+               label = "Menu";
+               linux,code = <KEY_MENU>;
+               channel = <0>;
+               voltage = <600000>;
+       };
+
+       button@800 {
+               label = "Search";
+               linux,code = <KEY_SEARCH>;
+               channel = <0>;
+               voltage = <800000>;
+       };
+
+       button@980 {
+               label = "Home";
+               linux,code = <KEY_HOMEPAGE>;
+               channel = <0>;
+               voltage = <980000>;
+       };
+
+       button@1180 {
+               label = "Esc";
+               linux,code = <KEY_ESC>;
+               channel = <0>;
+               voltage = <1180000>;
+       };
+
+       button@1400 {
+               label = "Enter";
+               linux,code = <KEY_ENTER>;
+               channel = <0>;
+               voltage = <1400000>;
+       };
+};
+
+&mmc0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_gr8_evb>;
+       vmmc-supply = <&reg_vcc3v3>;
+       bus-width = <4>;
+       cd-gpios = <&pio 6 0 GPIO_ACTIVE_HIGH>; /* PG0 */
+       cd-inverted;
+       status = "okay";
+};
+
+&nfc {
+       pinctrl-names = "default";
+       pinctrl-0 = <&nand_pins_a &nand_cs0_pins_a &nand_rb0_pins_a>;
+
+       /* MLC Support sucks for now */
+       status = "disabled";
+};
+
+&ohci0 {
+       status = "okay";
+};
+
+&otg_sram {
+       status = "okay";
+};
+
+&pio {
+       mmc0_cd_pin_gr8_evb: mmc0-cd-pin@0 {
+               allwinner,pins = "PG0";
+               allwinner,function = "gpio_in";
+               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+       };
+
+       usb0_id_pin_gr8_evb: usb0-id-pin@0 {
+               allwinner,pins = "PG2";
+               allwinner,function = "gpio_in";
+               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+       };
+
+       usb0_vbus_det_pin_gr8_evb: usb0-vbus-det-pin@0 {
+               allwinner,pins = "PG1";
+               allwinner,function = "gpio_in";
+               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+       };
+
+       usb1_vbus_pin_gr8_evb: usb1-vbus-pin@0 {
+               allwinner,pins = "PG13";
+               allwinner,function = "gpio_out";
+               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+       };
+};
+
+&pwm {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pwm0_pins_a>;
+       status = "okay";
+};
+
+&reg_dcdc2 {
+       regulator-min-microvolt = <1000000>;
+       regulator-max-microvolt = <1400000>;
+       regulator-name = "vdd-cpu";
+       regulator-always-on;
+};
+
+&reg_dcdc3 {
+       regulator-min-microvolt = <1000000>;
+       regulator-max-microvolt = <1300000>;
+       regulator-name = "vdd-sys";
+       regulator-always-on;
+};
+
+&reg_ldo1 {
+       regulator-name = "vdd-rtc";
+};
+
+&reg_ldo2 {
+       regulator-min-microvolt = <2700000>;
+       regulator-max-microvolt = <3300000>;
+       regulator-name = "avcc";
+       regulator-always-on;
+};
+
+&reg_usb1_vbus {
+       pinctrl-0 = <&usb1_vbus_pin_gr8_evb>;
+       gpio = <&pio 6 13 GPIO_ACTIVE_HIGH>;
+       status = "okay";
+};
+
+&rtp {
+       allwinner,ts-attached;
+};
+
+&spdif {
+       pinctrl-names = "default";
+       pinctrl-0 = <&spdif_tx_pins_a>;
+       status = "okay";
+};
+
+&tve0 {
+       status = "okay";
+};
+
+&uart1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart1_pins_a>, <&uart1_cts_rts_pins_a>;
+       status = "okay";
+};
+
+&usb_otg {
+       /*
+        * The GR8-EVB has a somewhat interesting design. There's a
+        * pin supposed to control VBUS, an ID pin, a VBUS detect pin,
+        * so everything should work just fine.
+        *
+        * Except that the pin supposed to control VBUS is not
+        * connected to any controllable output, neither to the SoC
+        * through a GPIO or to the PMIC, and it is pulled down,
+        * meaning that we will never be able to enable VBUS on this
+        * board.
+        */
+       dr_mode = "otg";
+       status = "okay";
+};
+
+&usb_power_supply {
+       status = "okay";
+};
+
+&usbphy {
+       pinctrl-names = "default";
+       pinctrl-0 = <&usb0_id_pin_gr8_evb>, <&usb0_vbus_det_pin_gr8_evb>;
+       usb0_id_det-gpio = <&pio 6 2 GPIO_ACTIVE_HIGH>; /* PG2 */
+       usb0_vbus_det-gpio = <&pio 6 1 GPIO_ACTIVE_HIGH>; /* PG1 */
+       usb0_vbus_power-supply = <&usb_power_supply>;
+       usb1_vbus-supply = <&reg_usb1_vbus>;
+       status = "okay";
+};
diff --git a/arch/arm/boot/dts/ntc-gr8.dtsi b/arch/arm/boot/dts/ntc-gr8.dtsi
new file mode 100644 (file)
index 0000000..ca54e03
--- /dev/null
@@ -0,0 +1,1087 @@
+/*
+ * Copyright 2016 Mylène Josserand
+ *
+ * Mylène Josserand <mylene.josserand@free-electrons.com>
+ *
+ * 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 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.
+ *
+ * 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/sun4i-a10-pll2.h>
+#include <dt-bindings/dma/sun4i-a10.h>
+#include <dt-bindings/pinctrl/sun4i-a10.h>
+
+/ {
+       interrupt-parent = <&intc>;
+       #address-cells = <1>;
+       #size-cells = <1>;
+
+       cpus {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               cpu0: cpu@0 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a8";
+                       reg = <0x0>;
+                       clocks = <&cpu>;
+               };
+       };
+
+       clocks {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges;
+
+               /*
+                * This is a dummy clock, to be used as placeholder on
+                * other mux clocks when a specific parent clock is not
+                * yet implemented. It should be dropped when the driver
+                * is complete.
+                */
+               dummy: dummy {
+                       #clock-cells = <0>;
+                       compatible = "fixed-clock";
+                       clock-frequency = <0>;
+               };
+
+               osc24M: clk@01c20050 {
+                       #clock-cells = <0>;
+                       compatible = "allwinner,sun4i-a10-osc-clk";
+                       reg = <0x01c20050 0x4>;
+                       clock-frequency = <24000000>;
+                       clock-output-names = "osc24M";
+               };
+
+               osc3M: osc3M-clk {
+                       compatible = "fixed-factor-clock";
+                       #clock-cells = <0>;
+                       clock-div = <8>;
+                       clock-mult = <1>;
+                       clocks = <&osc24M>;
+                       clock-output-names = "osc3M";
+               };
+
+               osc32k: clk@0 {
+                       #clock-cells = <0>;
+                       compatible = "fixed-clock";
+                       clock-frequency = <32768>;
+                       clock-output-names = "osc32k";
+               };
+
+               pll1: clk@01c20000 {
+                       #clock-cells = <0>;
+                       compatible = "allwinner,sun4i-a10-pll1-clk";
+                       reg = <0x01c20000 0x4>;
+                       clocks = <&osc24M>;
+                       clock-output-names = "pll1";
+               };
+
+               pll2: clk@01c20008 {
+                       #clock-cells = <1>;
+                       compatible = "allwinner,sun5i-a13-pll2-clk";
+                       reg = <0x01c20008 0x8>;
+                       clocks = <&osc24M>;
+                       clock-output-names = "pll2-1x", "pll2-2x",
+                                            "pll2-4x", "pll2-8x";
+               };
+
+               pll3: clk@01c20010 {
+                       #clock-cells = <0>;
+                       compatible = "allwinner,sun4i-a10-pll3-clk";
+                       reg = <0x01c20010 0x4>;
+                       clocks = <&osc3M>;
+                       clock-output-names = "pll3";
+               };
+
+               pll3x2: pll3x2-clk {
+                       compatible = "allwinner,sun4i-a10-pll3-2x-clk";
+                       #clock-cells = <0>;
+                       clock-div = <1>;
+                       clock-mult = <2>;
+                       clocks = <&pll3>;
+                       clock-output-names = "pll3-2x";
+               };
+
+               pll4: clk@01c20018 {
+                       #clock-cells = <0>;
+                       compatible = "allwinner,sun4i-a10-pll1-clk";
+                       reg = <0x01c20018 0x4>;
+                       clocks = <&osc24M>;
+                       clock-output-names = "pll4";
+               };
+
+               pll5: clk@01c20020 {
+                       #clock-cells = <1>;
+                       compatible = "allwinner,sun4i-a10-pll5-clk";
+                       reg = <0x01c20020 0x4>;
+                       clocks = <&osc24M>;
+                       clock-output-names = "pll5_ddr", "pll5_other";
+               };
+
+               pll6: clk@01c20028 {
+                       #clock-cells = <1>;
+                       compatible = "allwinner,sun4i-a10-pll6-clk";
+                       reg = <0x01c20028 0x4>;
+                       clocks = <&osc24M>;
+                       clock-output-names = "pll6_sata", "pll6_other", "pll6";
+               };
+
+               pll7: clk@01c20030 {
+                       #clock-cells = <0>;
+                       compatible = "allwinner,sun4i-a10-pll3-clk";
+                       reg = <0x01c20030 0x4>;
+                       clocks = <&osc3M>;
+                       clock-output-names = "pll7";
+               };
+
+               pll7x2: pll7x2-clk {
+                       compatible = "allwinner,sun4i-a10-pll3-2x-clk";
+                       #clock-cells = <0>;
+                       clock-div = <1>;
+                       clock-mult = <2>;
+                       clocks = <&pll7>;
+                       clock-output-names = "pll7-2x";
+               };
+
+               /* dummy is 200M */
+               cpu: cpu@01c20054 {
+                       #clock-cells = <0>;
+                       compatible = "allwinner,sun4i-a10-cpu-clk";
+                       reg = <0x01c20054 0x4>;
+                       clocks = <&osc32k>, <&osc24M>, <&pll1>, <&dummy>;
+                       clock-output-names = "cpu";
+               };
+
+               axi: axi@01c20054 {
+                       #clock-cells = <0>;
+                       compatible = "allwinner,sun4i-a10-axi-clk";
+                       reg = <0x01c20054 0x4>;
+                       clocks = <&cpu>;
+                       clock-output-names = "axi";
+               };
+
+               ahb: ahb@01c20054 {
+                       #clock-cells = <0>;
+                       compatible = "allwinner,sun5i-a13-ahb-clk";
+                       reg = <0x01c20054 0x4>;
+                       clocks = <&axi>, <&cpu>, <&pll6 1>;
+                       clock-output-names = "ahb";
+                       /*
+                        * Use PLL6 as parent, instead of CPU/AXI
+                        * which has rate changes due to cpufreq
+                        */
+                       assigned-clocks = <&ahb>;
+                       assigned-clock-parents = <&pll6 1>;
+               };
+
+               apb0: apb0@01c20054 {
+                       #clock-cells = <0>;
+                       compatible = "allwinner,sun4i-a10-apb0-clk";
+                       reg = <0x01c20054 0x4>;
+                       clocks = <&ahb>;
+                       clock-output-names = "apb0";
+               };
+
+               apb1: clk@01c20058 {
+                       #clock-cells = <0>;
+                       compatible = "allwinner,sun4i-a10-apb1-clk";
+                       reg = <0x01c20058 0x4>;
+                       clocks = <&osc24M>, <&pll6 1>, <&osc32k>;
+                       clock-output-names = "apb1";
+               };
+
+               axi_gates: clk@01c2005c {
+                       #clock-cells = <1>;
+                       compatible = "allwinner,sun4i-a10-gates-clk";
+                       reg = <0x01c2005c 0x4>;
+                       clocks = <&axi>;
+                       clock-indices = <0>;
+                       clock-output-names = "axi_dram";
+               };
+
+               ahb_gates: clk@01c20060 {
+                       #clock-cells = <1>;
+                       compatible = "allwinner,sun5i-a13-ahb-gates-clk";
+                       reg = <0x01c20060 0x8>;
+                       clocks = <&ahb>;
+                       clock-indices = <0>, <1>,
+                                       <2>, <5>, <6>,
+                                       <7>, <8>, <9>,
+                                       <10>, <13>,
+                                       <14>, <17>, <20>,
+                                       <21>, <22>,
+                                       <28>, <32>, <34>,
+                                       <36>, <40>, <44>,
+                                       <46>, <51>,
+                                       <52>;
+                       clock-output-names = "ahb_usbotg", "ahb_ehci",
+                                            "ahb_ohci", "ahb_ss", "ahb_dma",
+                                            "ahb_bist", "ahb_mmc0", "ahb_mmc1",
+                                            "ahb_mmc2", "ahb_nand",
+                                            "ahb_sdram", "ahb_emac", "ahb_spi0",
+                                            "ahb_spi1", "ahb_spi2",
+                                            "ahb_hstimer", "ahb_ve", "ahb_tve",
+                                            "ahb_lcd", "ahb_csi", "ahb_de_be",
+                                            "ahb_de_fe", "ahb_iep",
+                                            "ahb_mali400";
+               };
+
+               apb0_gates: clk@01c20068 {
+                       #clock-cells = <1>;
+                       compatible = "allwinner,sun4i-a10-gates-clk";
+                       reg = <0x01c20068 0x4>;
+                       clocks = <&apb0>;
+                       clock-indices = <0>, <3>,
+                                       <5>, <6>;
+                       clock-output-names = "apb0_codec", "apb0_i2s0",
+                                            "apb0_pio", "apb0_ir";
+               };
+
+               apb1_gates: clk@01c2006c {
+                       #clock-cells = <1>;
+                       compatible = "allwinner,sun4i-a10-gates-clk";
+                       reg = <0x01c2006c 0x4>;
+                       clocks = <&apb1>;
+                       clock-indices = <0>, <1>,
+                                       <2>, <17>,
+                                       <18>, <19>;
+                       clock-output-names = "apb1_i2c0", "apb1_i2c1",
+                                            "apb1_i2c2", "apb1_uart1",
+                                            "apb1_uart2", "apb1_uart3";
+               };
+
+               nand_clk: clk@01c20080 {
+                       #clock-cells = <0>;
+                       compatible = "allwinner,sun4i-a10-mod0-clk";
+                       reg = <0x01c20080 0x4>;
+                       clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
+                       clock-output-names = "nand";
+               };
+
+               ms_clk: clk@01c20084 {
+                       #clock-cells = <0>;
+                       compatible = "allwinner,sun4i-a10-mod0-clk";
+                       reg = <0x01c20084 0x4>;
+                       clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
+                       clock-output-names = "ms";
+               };
+
+               mmc0_clk: clk@01c20088 {
+                       #clock-cells = <1>;
+                       compatible = "allwinner,sun4i-a10-mmc-clk";
+                       reg = <0x01c20088 0x4>;
+                       clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
+                       clock-output-names = "mmc0",
+                                            "mmc0_output",
+                                            "mmc0_sample";
+               };
+
+               mmc1_clk: clk@01c2008c {
+                       #clock-cells = <1>;
+                       compatible = "allwinner,sun4i-a10-mmc-clk";
+                       reg = <0x01c2008c 0x4>;
+                       clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
+                       clock-output-names = "mmc1",
+                                            "mmc1_output",
+                                            "mmc1_sample";
+               };
+
+               mmc2_clk: clk@01c20090 {
+                       #clock-cells = <1>;
+                       compatible = "allwinner,sun4i-a10-mmc-clk";
+                       reg = <0x01c20090 0x4>;
+                       clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
+                       clock-output-names = "mmc2",
+                                            "mmc2_output",
+                                            "mmc2_sample";
+               };
+
+               ts_clk: clk@01c20098 {
+                       #clock-cells = <0>;
+                       compatible = "allwinner,sun4i-a10-mod0-clk";
+                       reg = <0x01c20098 0x4>;
+                       clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
+                       clock-output-names = "ts";
+               };
+
+               ss_clk: clk@01c2009c {
+                       #clock-cells = <0>;
+                       compatible = "allwinner,sun4i-a10-mod0-clk";
+                       reg = <0x01c2009c 0x4>;
+                       clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
+                       clock-output-names = "ss";
+               };
+
+               spi0_clk: clk@01c200a0 {
+                       #clock-cells = <0>;
+                       compatible = "allwinner,sun4i-a10-mod0-clk";
+                       reg = <0x01c200a0 0x4>;
+                       clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
+                       clock-output-names = "spi0";
+               };
+
+               spi1_clk: clk@01c200a4 {
+                       #clock-cells = <0>;
+                       compatible = "allwinner,sun4i-a10-mod0-clk";
+                       reg = <0x01c200a4 0x4>;
+                       clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
+                       clock-output-names = "spi1";
+               };
+
+               spi2_clk: clk@01c200a8 {
+                       #clock-cells = <0>;
+                       compatible = "allwinner,sun4i-a10-mod0-clk";
+                       reg = <0x01c200a8 0x4>;
+                       clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
+                       clock-output-names = "spi2";
+               };
+
+               ir0_clk: clk@01c200b0 {
+                       #clock-cells = <0>;
+                       compatible = "allwinner,sun4i-a10-mod0-clk";
+                       reg = <0x01c200b0 0x4>;
+                       clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
+                       clock-output-names = "ir0";
+               };
+
+               i2s0_clk: clk@01c200b8 {
+                       #clock-cells = <0>;
+                       compatible = "allwinner,sun4i-a10-mod1-clk";
+                       reg = <0x01c200b8 0x4>;
+                       clocks = <&pll2 SUN4I_A10_PLL2_8X>,
+                                <&pll2 SUN4I_A10_PLL2_4X>,
+                                <&pll2 SUN4I_A10_PLL2_2X>,
+                                <&pll2 SUN4I_A10_PLL2_1X>;
+                       clock-output-names = "i2s0";
+               };
+
+               spdif_clk: clk@01c200c0 {
+                       #clock-cells = <0>;
+                       compatible = "allwinner,sun4i-a10-mod1-clk";
+                       reg = <0x01c200c0 0x4>;
+                       clocks = <&pll2 SUN4I_A10_PLL2_8X>,
+                                <&pll2 SUN4I_A10_PLL2_4X>,
+                                <&pll2 SUN4I_A10_PLL2_2X>,
+                                <&pll2 SUN4I_A10_PLL2_1X>;
+                       clock-output-names = "spdif";
+               };
+
+               usb_clk: clk@01c200cc {
+                       #clock-cells = <1>;
+                       #reset-cells = <1>;
+                       compatible = "allwinner,sun5i-a13-usb-clk";
+                       reg = <0x01c200cc 0x4>;
+                       clocks = <&pll6 1>;
+                       clock-output-names = "usb_ohci0", "usb_phy";
+               };
+
+               dram_gates: clk@01c20100 {
+                       #clock-cells = <1>;
+                       compatible = "nextthing,gr8-dram-gates-clk",
+                                    "allwinner,sun4i-a10-gates-clk";
+                       reg = <0x01c20100 0x4>;
+                       clocks = <&pll5 0>;
+                       clock-indices = <0>,
+                                       <1>,
+                                       <25>,
+                                       <26>,
+                                       <29>,
+                                       <31>;
+                       clock-output-names = "dram_ve",
+                                            "dram_csi",
+                                            "dram_de_fe",
+                                            "dram_de_be",
+                                            "dram_ace",
+                                            "dram_iep";
+               };
+
+               de_be_clk: clk@01c20104 {
+                       #clock-cells = <0>;
+                       #reset-cells = <0>;
+                       compatible = "allwinner,sun4i-a10-display-clk";
+                       reg = <0x01c20104 0x4>;
+                       clocks = <&pll3>, <&pll7>, <&pll5 1>;
+                       clock-output-names = "de-be";
+               };
+
+               de_fe_clk: clk@01c2010c {
+                       #clock-cells = <0>;
+                       #reset-cells = <0>;
+                       compatible = "allwinner,sun4i-a10-display-clk";
+                       reg = <0x01c2010c 0x4>;
+                       clocks = <&pll3>, <&pll7>, <&pll5 1>;
+                       clock-output-names = "de-fe";
+               };
+
+               tcon_ch0_clk: clk@01c20118 {
+                       #clock-cells = <0>;
+                       #reset-cells = <1>;
+                       compatible = "allwinner,sun4i-a10-tcon-ch0-clk";
+                       reg = <0x01c20118 0x4>;
+                       clocks = <&pll3>, <&pll7>, <&pll3x2>, <&pll7x2>;
+                       clock-output-names = "tcon-ch0-sclk";
+               };
+
+               tcon_ch1_clk: clk@01c2012c {
+                       #clock-cells = <0>;
+                       compatible = "allwinner,sun4i-a10-tcon-ch1-clk";
+                       reg = <0x01c2012c 0x4>;
+                       clocks = <&pll3>, <&pll7>, <&pll3x2>, <&pll7x2>;
+                       clock-output-names = "tcon-ch1-sclk";
+               };
+
+               codec_clk: clk@01c20140 {
+                       #clock-cells = <0>;
+                       compatible = "allwinner,sun4i-a10-codec-clk";
+                       reg = <0x01c20140 0x4>;
+                       clocks = <&pll2 SUN4I_A10_PLL2_1X>;
+                       clock-output-names = "codec";
+               };
+
+               mbus_clk: clk@01c2015c {
+                       #clock-cells = <0>;
+                       compatible = "allwinner,sun5i-a13-mbus-clk";
+                       reg = <0x01c2015c 0x4>;
+                       clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
+                       clock-output-names = "mbus";
+               };
+       };
+
+       display-engine {
+               compatible = "allwinner,sun5i-a13-display-engine";
+               allwinner,pipelines = <&fe0>;
+       };
+
+       soc@01c00000 {
+               compatible = "simple-bus";
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges;
+
+               sram-controller@01c00000 {
+                       compatible = "allwinner,sun4i-a10-sram-controller";
+                       reg = <0x01c00000 0x30>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges;
+
+                       sram_a: sram@00000000 {
+                               compatible = "mmio-sram";
+                               reg = <0x00000000 0xc000>;
+                               #address-cells = <1>;
+                               #size-cells = <1>;
+                               ranges = <0 0x00000000 0xc000>;
+                       };
+
+                       sram_d: sram@00010000 {
+                               compatible = "mmio-sram";
+                               reg = <0x00010000 0x1000>;
+                               #address-cells = <1>;
+                               #size-cells = <1>;
+                               ranges = <0 0x00010000 0x1000>;
+
+                               otg_sram: sram-section@0000 {
+                                       compatible = "allwinner,sun4i-a10-sram-d";
+                                       reg = <0x0000 0x1000>;
+                                       status = "disabled";
+                               };
+                       };
+               };
+
+               dma: dma-controller@01c02000 {
+                       compatible = "allwinner,sun4i-a10-dma";
+                       reg = <0x01c02000 0x1000>;
+                       interrupts = <27>;
+                       clocks = <&ahb_gates 6>;
+                       #dma-cells = <2>;
+               };
+
+               nfc: nand@01c03000 {
+                       compatible = "allwinner,sun4i-a10-nand";
+                       reg = <0x01c03000 0x1000>;
+                       interrupts = <37>;
+                       clocks = <&ahb_gates 13>, <&nand_clk>;
+                       clock-names = "ahb", "mod";
+                       dmas = <&dma SUN4I_DMA_DEDICATED 3>;
+                       dma-names = "rxtx";
+                       status = "disabled";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+               };
+
+               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 SUN4I_DMA_DEDICATED 27>,
+                              <&dma SUN4I_DMA_DEDICATED 26>;
+                       dma-names = "rx", "tx";
+                       status = "disabled";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+               };
+
+               spi1: spi@01c06000 {
+                       compatible = "allwinner,sun4i-a10-spi";
+                       reg = <0x01c06000 0x1000>;
+                       interrupts = <11>;
+                       clocks = <&ahb_gates 21>, <&spi1_clk>;
+                       clock-names = "ahb", "mod";
+                       dmas = <&dma SUN4I_DMA_DEDICATED 9>,
+                              <&dma SUN4I_DMA_DEDICATED 8>;
+                       dma-names = "rx", "tx";
+                       status = "disabled";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+               };
+
+               tve0: tv-encoder@01c0a000 {
+                       compatible = "allwinner,sun4i-a10-tv-encoder";
+                       reg = <0x01c0a000 0x1000>;
+                       clocks = <&ahb_gates 34>;
+                       resets = <&tcon_ch0_clk 0>;
+                       status = "disabled";
+
+                       port {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               tve0_in_tcon0: endpoint@0 {
+                                       reg = <0>;
+                                       remote-endpoint = <&tcon0_out_tve0>;
+                               };
+                       };
+               };
+
+               tcon0: lcd-controller@01c0c000 {
+                       compatible = "allwinner,sun5i-a13-tcon";
+                       reg = <0x01c0c000 0x1000>;
+                       interrupts = <44>;
+                       resets = <&tcon_ch0_clk 1>;
+                       reset-names = "lcd";
+                       clocks = <&ahb_gates 36>,
+                                <&tcon_ch0_clk>,
+                                <&tcon_ch1_clk>;
+                       clock-names = "ahb",
+                                     "tcon-ch0",
+                                     "tcon-ch1";
+                       clock-output-names = "tcon-pixel-clock";
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               tcon0_in: port@0 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+                                       reg = <0>;
+
+                                       tcon0_in_be0: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&be0_out_tcon0>;
+                                       };
+                               };
+
+                               tcon0_out: port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+                                       reg = <1>;
+
+                                       tcon0_out_tve0: endpoint@1 {
+                                               reg = <1>;
+                                               remote-endpoint = <&tve0_in_tcon0>;
+                                       };
+                               };
+                       };
+               };
+
+               mmc0: mmc@01c0f000 {
+                       compatible = "allwinner,sun5i-a13-mmc";
+                       reg = <0x01c0f000 0x1000>;
+                       clocks = <&ahb_gates 8>,
+                                <&mmc0_clk 0>,
+                                <&mmc0_clk 1>,
+                                <&mmc0_clk 2>;
+                       clock-names = "ahb",
+                                     "mmc",
+                                     "output",
+                                     "sample";
+                       interrupts = <32>;
+                       status = "disabled";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+               };
+
+               mmc1: mmc@01c10000 {
+                       compatible = "allwinner,sun5i-a13-mmc";
+                       reg = <0x01c10000 0x1000>;
+                       clocks = <&ahb_gates 9>,
+                                <&mmc1_clk 0>,
+                                <&mmc1_clk 1>,
+                                <&mmc1_clk 2>;
+                       clock-names = "ahb",
+                                     "mmc",
+                                     "output",
+                                     "sample";
+                       interrupts = <33>;
+                       status = "disabled";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+               };
+
+               mmc2: mmc@01c11000 {
+                       compatible = "allwinner,sun5i-a13-mmc";
+                       reg = <0x01c11000 0x1000>;
+                       clocks = <&ahb_gates 10>,
+                                <&mmc2_clk 0>,
+                                <&mmc2_clk 1>,
+                                <&mmc2_clk 2>;
+                       clock-names = "ahb",
+                                     "mmc",
+                                     "output",
+                                     "sample";
+                       interrupts = <34>;
+                       status = "disabled";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+               };
+
+               usb_otg: usb@01c13000 {
+                       compatible = "allwinner,sun4i-a10-musb";
+                       reg = <0x01c13000 0x0400>;
+                       clocks = <&ahb_gates 0>;
+                       interrupts = <38>;
+                       interrupt-names = "mc";
+                       phys = <&usbphy 0>;
+                       phy-names = "usb";
+                       extcon = <&usbphy 0>;
+                       allwinner,sram = <&otg_sram 1>;
+                       status = "disabled";
+
+                       dr_mode = "otg";
+               };
+
+               usbphy: phy@01c13400 {
+                       #phy-cells = <1>;
+                       compatible = "allwinner,sun5i-a13-usb-phy";
+                       reg = <0x01c13400 0x10 0x01c14800 0x4>;
+                       reg-names = "phy_ctrl", "pmu1";
+                       clocks = <&usb_clk 8>;
+                       clock-names = "usb_phy";
+                       resets = <&usb_clk 0>, <&usb_clk 1>;
+                       reset-names = "usb0_reset", "usb1_reset";
+                       status = "disabled";
+               };
+
+               ehci0: usb@01c14000 {
+                       compatible = "allwinner,sun5i-a13-ehci", "generic-ehci";
+                       reg = <0x01c14000 0x100>;
+                       interrupts = <39>;
+                       clocks = <&ahb_gates 1>;
+                       phys = <&usbphy 1>;
+                       phy-names = "usb";
+                       status = "disabled";
+               };
+
+               ohci0: usb@01c14400 {
+                       compatible = "allwinner,sun5i-a13-ohci", "generic-ohci";
+                       reg = <0x01c14400 0x100>;
+                       interrupts = <40>;
+                       clocks = <&usb_clk 6>, <&ahb_gates 2>;
+                       phys = <&usbphy 1>;
+                       phy-names = "usb";
+                       status = "disabled";
+               };
+
+               spi2: spi@01c17000 {
+                       compatible = "allwinner,sun4i-a10-spi";
+                       reg = <0x01c17000 0x1000>;
+                       interrupts = <12>;
+                       clocks = <&ahb_gates 22>, <&spi2_clk>;
+                       clock-names = "ahb", "mod";
+                       dmas = <&dma SUN4I_DMA_DEDICATED 29>,
+                              <&dma SUN4I_DMA_DEDICATED 28>;
+                       dma-names = "rx", "tx";
+                       status = "disabled";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+               };
+
+               intc: interrupt-controller@01c20400 {
+                       compatible = "allwinner,sun4i-a10-ic";
+                       reg = <0x01c20400 0x400>;
+                       interrupt-controller;
+                       #interrupt-cells = <1>;
+               };
+
+               pio: pinctrl@01c20800 {
+                       compatible = "nextthing,gr8-pinctrl";
+                       reg = <0x01c20800 0x400>;
+                       interrupts = <28>;
+                       clocks = <&apb0_gates 5>;
+                       gpio-controller;
+                       interrupt-controller;
+                       #interrupt-cells = <3>;
+                       #gpio-cells = <3>;
+
+                       i2c0_pins_a: i2c0@0 {
+                               allwinner,pins = "PB0", "PB1";
+                               allwinner,function = "i2c0";
+                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                       };
+
+                       i2c1_pins_a: i2c1@0 {
+                               allwinner,pins = "PB15", "PB16";
+                               allwinner,function = "i2c1";
+                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                       };
+
+                       i2c2_pins_a: i2c2@0 {
+                               allwinner,pins = "PB17", "PB18";
+                               allwinner,function = "i2c2";
+                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                       };
+
+                       i2s0_data_pins_a: i2s0-data@0 {
+                               allwinner,pins = "PB6", "PB7", "PB8", "PB9";
+                               allwinner,function = "i2s0";
+                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                       };
+
+                       i2s0_mclk_pins_a: i2s0-mclk@0 {
+                               allwinner,pins = "PB6", "PB7", "PB8", "PB9";
+                               allwinner,function = "i2s0";
+                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                       };
+
+                       ir0_rx_pins_a: ir0@0 {
+                               allwinner,pins = "PB4";
+                               allwinner,function = "ir0";
+                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                       };
+
+                       lcd_rgb666_pins: lcd-rgb666@0 {
+                               allwinner,pins = "PD2", "PD3", "PD4", "PD5", "PD6", "PD7",
+                                                "PD10", "PD11", "PD12", "PD13", "PD14", "PD15",
+                                                "PD18", "PD19", "PD20", "PD21", "PD22", "PD23",
+                                                "PD24", "PD25", "PD26", "PD27";
+                               allwinner,function = "lcd0";
+                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                       };
+
+                       mmc0_pins_a: mmc0@0 {
+                               allwinner,pins = "PF0", "PF1", "PF2", "PF3",
+                                                "PF4", "PF5";
+                               allwinner,function = "mmc0";
+                               allwinner,drive = <SUN4I_PINCTRL_30_MA>;
+                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                       };
+
+                       nand_pins_a: nand-base0@0 {
+                               allwinner,pins = "PC0", "PC1", "PC2",
+                                               "PC5", "PC8", "PC9", "PC10",
+                                               "PC11", "PC12", "PC13", "PC14",
+                                               "PC15";
+                               allwinner,function = "nand0";
+                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                       };
+
+                       nand_cs0_pins_a: nand-cs@0 {
+                               allwinner,pins = "PC4";
+                               allwinner,function = "nand0";
+                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                       };
+
+                       nand_rb0_pins_a: nand-rb@0 {
+                               allwinner,pins = "PC6";
+                               allwinner,function = "nand0";
+                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                       };
+
+                       pwm0_pins_a: pwm0@0 {
+                               allwinner,pins = "PB2";
+                               allwinner,function = "pwm0";
+                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                       };
+
+                       spdif_tx_pins_a: spdif@0 {
+                               allwinner,pins = "PB10";
+                               allwinner,function = "spdif";
+                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+                               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+                       };
+
+                       uart1_pins_a: uart1@1 {
+                               allwinner,pins = "PG3", "PG4";
+                               allwinner,function = "uart1";
+                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                       };
+
+                       uart1_cts_rts_pins_a: uart1-cts-rts@0 {
+                               allwinner,pins = "PG5", "PG6";
+                               allwinner,function = "uart1";
+                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                       };
+               };
+
+               pwm: pwm@01c20e00 {
+                       compatible = "allwinner,sun5i-a10s-pwm";
+                       reg = <0x01c20e00 0xc>;
+                       clocks = <&osc24M>;
+                       #pwm-cells = <3>;
+                       status = "disabled";
+               };
+
+               timer@01c20c00 {
+                       compatible = "allwinner,sun4i-a10-timer";
+                       reg = <0x01c20c00 0x90>;
+                       interrupts = <22>;
+                       clocks = <&osc24M>;
+               };
+
+               wdt: watchdog@01c20c90 {
+                       compatible = "allwinner,sun4i-a10-wdt";
+                       reg = <0x01c20c90 0x10>;
+               };
+
+               spdif: spdif@01c21000 {
+                       #sound-dai-cells = <0>;
+                       compatible = "allwinner,sun4i-a10-spdif";
+                       reg = <0x01c21000 0x400>;
+                       interrupts = <13>;
+                       clocks = <&apb0_gates 1>, <&spdif_clk>;
+                       clock-names = "apb", "spdif";
+                       dmas = <&dma SUN4I_DMA_NORMAL 2>,
+                              <&dma SUN4I_DMA_NORMAL 2>;
+                       dma-names = "rx", "tx";
+                       status = "disabled";
+               };
+
+               ir0: ir@01c21800 {
+                       compatible = "allwinner,sun4i-a10-ir";
+                       clocks = <&apb0_gates 6>, <&ir0_clk>;
+                       clock-names = "apb", "ir";
+                       interrupts = <5>;
+                       reg = <0x01c21800 0x40>;
+                       status = "disabled";
+               };
+
+               i2s0: i2s@01c22400 {
+                       #sound-dai-cells = <0>;
+                       compatible = "allwinner,sun4i-a10-i2s";
+                       reg = <0x01c22400 0x400>;
+                       interrupts = <16>;
+                       clocks = <&apb0_gates 3>, <&i2s0_clk>;
+                       clock-names = "apb", "mod";
+                       dmas = <&dma SUN4I_DMA_NORMAL 3>,
+                              <&dma SUN4I_DMA_NORMAL 3>;
+                       dma-names = "rx", "tx";
+                       status = "disabled";
+               };
+
+               lradc: lradc@01c22800 {
+                       compatible = "allwinner,sun4i-a10-lradc-keys";
+                       reg = <0x01c22800 0x100>;
+                       interrupts = <31>;
+                       status = "disabled";
+               };
+
+               codec: codec@01c22c00 {
+                       #sound-dai-cells = <0>;
+                       compatible = "allwinner,sun4i-a10-codec";
+                       reg = <0x01c22c00 0x40>;
+                       interrupts = <30>;
+                       clocks = <&apb0_gates 0>, <&codec_clk>;
+                       clock-names = "apb", "codec";
+                       dmas = <&dma SUN4I_DMA_NORMAL 19>,
+                              <&dma SUN4I_DMA_NORMAL 19>;
+                       dma-names = "rx", "tx";
+                       status = "disabled";
+               };
+
+               rtp: rtp@01c25000 {
+                       compatible = "allwinner,sun5i-a13-ts";
+                       reg = <0x01c25000 0x100>;
+                       interrupts = <29>;
+                       #thermal-sensor-cells = <0>;
+               };
+
+               uart1: serial@01c28400 {
+                       compatible = "snps,dw-apb-uart";
+                       reg = <0x01c28400 0x400>;
+                       interrupts = <2>;
+                       reg-shift = <2>;
+                       reg-io-width = <4>;
+                       clocks = <&apb1_gates 17>;
+                       status = "disabled";
+               };
+
+               uart2: serial@01c28800 {
+                       compatible = "snps,dw-apb-uart";
+                       reg = <0x01c28800 0x400>;
+                       interrupts = <3>;
+                       reg-shift = <2>;
+                       reg-io-width = <4>;
+                       clocks = <&apb1_gates 18>;
+                       status = "disabled";
+               };
+
+               i2c0: i2c@01c2ac00 {
+                       compatible = "allwinner,sun4i-a10-i2c";
+                       reg = <0x01c2ac00 0x400>;
+                       interrupts = <7>;
+                       clocks = <&apb1_gates 0>;
+                       status = "disabled";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+               };
+
+               i2c1: i2c@01c2b000 {
+                       compatible = "allwinner,sun4i-a10-i2c";
+                       reg = <0x01c2b000 0x400>;
+                       interrupts = <8>;
+                       clocks = <&apb1_gates 1>;
+                       status = "disabled";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+               };
+
+               i2c2: i2c@01c2b400 {
+                       compatible = "allwinner,sun4i-a10-i2c";
+                       reg = <0x01c2b400 0x400>;
+                       interrupts = <9>;
+                       clocks = <&apb1_gates 2>;
+                       status = "disabled";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+               };
+
+               timer@01c60000 {
+                       compatible = "allwinner,sun5i-a13-hstimer";
+                       reg = <0x01c60000 0x1000>;
+                       interrupts = <82>, <83>;
+                       clocks = <&ahb_gates 28>;
+               };
+
+               fe0: display-frontend@01e00000 {
+                       compatible = "allwinner,sun5i-a13-display-frontend";
+                       reg = <0x01e00000 0x20000>;
+                       interrupts = <47>;
+                       clocks = <&ahb_gates 46>, <&de_fe_clk>,
+                                <&dram_gates 25>;
+                       clock-names = "ahb", "mod",
+                                     "ram";
+                       resets = <&de_fe_clk>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               fe0_out: port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+                                       reg = <1>;
+
+                                       fe0_out_be0: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&be0_in_fe0>;
+                                       };
+                               };
+                       };
+               };
+
+               be0: display-backend@01e60000 {
+                       compatible = "allwinner,sun5i-a13-display-backend";
+                       reg = <0x01e60000 0x10000>;
+                       clocks = <&ahb_gates 44>, <&de_be_clk>,
+                                <&dram_gates 26>;
+                       clock-names = "ahb", "mod",
+                                     "ram";
+                       resets = <&de_be_clk>;
+                       status = "disabled";
+
+                       assigned-clocks = <&de_be_clk>;
+                       assigned-clock-rates = <300000000>;
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               be0_in: port@0 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+                                       reg = <0>;
+
+                                       be0_in_fe0: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&fe0_out_be0>;
+                                       };
+                               };
+
+                               be0_out: port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+                                       reg = <1>;
+
+                                       be0_out_tcon0: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&tcon0_in_be0>;
+                                       };
+                               };
+                       };
+               };
+       };
+};
index 0d24f10..ce19604 100644 (file)
@@ -47,7 +47,9 @@
 #include <dt-bindings/interrupt-controller/arm-gic.h>
 #include <dt-bindings/thermal/thermal.h>
 
+#include <dt-bindings/clock/sun6i-a31-ccu.h>
 #include <dt-bindings/pinctrl/sun4i-a10.h>
+#include <dt-bindings/reset/sun6i-a31-ccu.h>
 
 / {
        interrupt-parent = <&gic>;
                        compatible = "allwinner,simple-framebuffer",
                                     "simple-framebuffer";
                        allwinner,pipeline = "de_be0-lcd0-hdmi";
-                       clocks = <&pll6 0>;
+                       clocks = <&ccu CLK_AHB1_BE0>, <&ccu CLK_AHB1_LCD0>,
+                                <&ccu CLK_AHB1_HDMI>, <&ccu CLK_DRAM_BE0>,
+                                <&ccu CLK_IEP_DRC0>, <&ccu CLK_BE0>,
+                                <&ccu CLK_LCD0_CH1>, <&ccu CLK_HDMI>;
                        status = "disabled";
                };
 
@@ -73,7 +78,9 @@
                        compatible = "allwinner,simple-framebuffer",
                                     "simple-framebuffer";
                        allwinner,pipeline = "de_be0-lcd0";
-                       clocks = <&pll6 0>;
+                       clocks = <&ccu CLK_AHB1_BE0>, <&ccu CLK_AHB1_LCD0>,
+                                <&ccu CLK_DRAM_BE0>, <&ccu CLK_IEP_DRC0>,
+                                <&ccu CLK_BE0>, <&ccu CLK_LCD0_CH0>;
                        status = "disabled";
                };
        };
                        compatible = "arm,cortex-a7";
                        device_type = "cpu";
                        reg = <0>;
-                       clocks = <&cpu>;
+                       clocks = <&ccu CLK_CPU>;
                        clock-latency = <244144>; /* 8 32k periods */
                        operating-points = <
                                /* kHz    uV */
                        clock-output-names = "osc32k";
                };
 
-               pll1: clk@01c20000 {
-                       #clock-cells = <0>;
-                       compatible = "allwinner,sun6i-a31-pll1-clk";
-                       reg = <0x01c20000 0x4>;
-                       clocks = <&osc24M>;
-                       clock-output-names = "pll1";
-               };
-
-               pll6: clk@01c20028 {
-                       #clock-cells = <1>;
-                       compatible = "allwinner,sun6i-a31-pll6-clk";
-                       reg = <0x01c20028 0x4>;
-                       clocks = <&osc24M>;
-                       clock-output-names = "pll6", "pll6x2";
-               };
-
-               cpu: cpu@01c20050 {
-                       #clock-cells = <0>;
-                       compatible = "allwinner,sun4i-a10-cpu-clk";
-                       reg = <0x01c20050 0x4>;
-
-                       /*
-                        * PLL1 is listed twice here.
-                        * While it looks suspicious, it's actually documented
-                        * that way both in the datasheet and in the code from
-                        * Allwinner.
-                        */
-                       clocks = <&osc32k>, <&osc24M>, <&pll1>, <&pll1>;
-                       clock-output-names = "cpu";
-               };
-
-               axi: axi@01c20050 {
-                       #clock-cells = <0>;
-                       compatible = "allwinner,sun4i-a10-axi-clk";
-                       reg = <0x01c20050 0x4>;
-                       clocks = <&cpu>;
-                       clock-output-names = "axi";
-               };
-
-               ahb1: ahb1@01c20054 {
-                       #clock-cells = <0>;
-                       compatible = "allwinner,sun6i-a31-ahb1-clk";
-                       reg = <0x01c20054 0x4>;
-                       clocks = <&osc32k>, <&osc24M>, <&axi>, <&pll6 0>;
-                       clock-output-names = "ahb1";
-
-                       /*
-                        * Clock AHB1 from PLL6, instead of CPU/AXI which
-                        * has rate changes due to cpufreq. Also the DMA
-                        * controller requires AHB1 clocked from PLL6.
-                        */
-                       assigned-clocks = <&ahb1>;
-                       assigned-clock-parents = <&pll6 0>;
-               };
-
-               ahb1_gates: clk@01c20060 {
-                       #clock-cells = <1>;
-                       compatible = "allwinner,sun6i-a31-ahb1-gates-clk";
-                       reg = <0x01c20060 0x8>;
-                       clocks = <&ahb1>;
-                       clock-indices = <1>, <5>,
-                                       <6>, <8>, <9>,
-                                       <10>, <11>, <12>,
-                                       <13>, <14>,
-                                       <17>, <18>, <19>,
-                                       <20>, <21>, <22>,
-                                       <23>, <24>, <26>,
-                                       <27>, <29>,
-                                       <30>, <31>, <32>,
-                                       <36>, <37>, <40>,
-                                       <43>, <44>, <45>,
-                                       <46>, <47>, <50>,
-                                       <52>, <55>, <56>,
-                                       <57>, <58>;
-                       clock-output-names = "ahb1_mipidsi", "ahb1_ss",
-                                       "ahb1_dma", "ahb1_mmc0", "ahb1_mmc1",
-                                       "ahb1_mmc2", "ahb1_mmc3", "ahb1_nand1",
-                                       "ahb1_nand0", "ahb1_sdram",
-                                       "ahb1_gmac", "ahb1_ts", "ahb1_hstimer",
-                                       "ahb1_spi0", "ahb1_spi1", "ahb1_spi2",
-                                       "ahb1_spi3", "ahb1_otg", "ahb1_ehci0",
-                                       "ahb1_ehci1", "ahb1_ohci0",
-                                       "ahb1_ohci1", "ahb1_ohci2", "ahb1_ve",
-                                       "ahb1_lcd0", "ahb1_lcd1", "ahb1_csi",
-                                       "ahb1_hdmi", "ahb1_de0", "ahb1_de1",
-                                       "ahb1_fe0", "ahb1_fe1", "ahb1_mp",
-                                       "ahb1_gpu", "ahb1_deu0", "ahb1_deu1",
-                                       "ahb1_drc0", "ahb1_drc1";
-               };
-
-               apb1: apb1@01c20054 {
-                       #clock-cells = <0>;
-                       compatible = "allwinner,sun4i-a10-apb0-clk";
-                       reg = <0x01c20054 0x4>;
-                       clocks = <&ahb1>;
-                       clock-output-names = "apb1";
-               };
-
-               apb1_gates: clk@01c20068 {
-                       #clock-cells = <1>;
-                       compatible = "allwinner,sun6i-a31-apb1-gates-clk";
-                       reg = <0x01c20068 0x4>;
-                       clocks = <&apb1>;
-                       clock-indices = <0>, <4>,
-                                       <5>, <12>,
-                                       <13>;
-                       clock-output-names = "apb1_codec", "apb1_digital_mic",
-                                       "apb1_pio", "apb1_daudio0",
-                                       "apb1_daudio1";
-               };
-
-               apb2: clk@01c20058 {
-                       #clock-cells = <0>;
-                       compatible = "allwinner,sun4i-a10-apb1-clk";
-                       reg = <0x01c20058 0x4>;
-                       clocks = <&osc32k>, <&osc24M>, <&pll6 0>, <&pll6 0>;
-                       clock-output-names = "apb2";
-               };
-
-               apb2_gates: clk@01c2006c {
-                       #clock-cells = <1>;
-                       compatible = "allwinner,sun6i-a31-apb2-gates-clk";
-                       reg = <0x01c2006c 0x4>;
-                       clocks = <&apb2>;
-                       clock-indices = <0>, <1>,
-                                       <2>, <3>, <16>,
-                                       <17>, <18>, <19>,
-                                       <20>, <21>;
-                       clock-output-names = "apb2_i2c0", "apb2_i2c1",
-                                            "apb2_i2c2", "apb2_i2c3",
-                                            "apb2_uart0", "apb2_uart1",
-                                            "apb2_uart2", "apb2_uart3",
-                                            "apb2_uart4", "apb2_uart5";
-               };
-
-               mmc0_clk: clk@01c20088 {
-                       #clock-cells = <1>;
-                       compatible = "allwinner,sun4i-a10-mmc-clk";
-                       reg = <0x01c20088 0x4>;
-                       clocks = <&osc24M>, <&pll6 0>;
-                       clock-output-names = "mmc0",
-                                            "mmc0_output",
-                                            "mmc0_sample";
-               };
-
-               mmc1_clk: clk@01c2008c {
-                       #clock-cells = <1>;
-                       compatible = "allwinner,sun4i-a10-mmc-clk";
-                       reg = <0x01c2008c 0x4>;
-                       clocks = <&osc24M>, <&pll6 0>;
-                       clock-output-names = "mmc1",
-                                            "mmc1_output",
-                                            "mmc1_sample";
-               };
-
-               mmc2_clk: clk@01c20090 {
-                       #clock-cells = <1>;
-                       compatible = "allwinner,sun4i-a10-mmc-clk";
-                       reg = <0x01c20090 0x4>;
-                       clocks = <&osc24M>, <&pll6 0>;
-                       clock-output-names = "mmc2",
-                                            "mmc2_output",
-                                            "mmc2_sample";
-               };
-
-               mmc3_clk: clk@01c20094 {
-                       #clock-cells = <1>;
-                       compatible = "allwinner,sun4i-a10-mmc-clk";
-                       reg = <0x01c20094 0x4>;
-                       clocks = <&osc24M>, <&pll6 0>;
-                       clock-output-names = "mmc3",
-                                            "mmc3_output",
-                                            "mmc3_sample";
-               };
-
-               ss_clk: clk@01c2009c {
-                       #clock-cells = <0>;
-                       compatible = "allwinner,sun4i-a10-mod0-clk";
-                       reg = <0x01c2009c 0x4>;
-                       clocks = <&osc24M>, <&pll6 0>;
-                       clock-output-names = "ss";
-               };
-
-               spi0_clk: clk@01c200a0 {
-                       #clock-cells = <0>;
-                       compatible = "allwinner,sun4i-a10-mod0-clk";
-                       reg = <0x01c200a0 0x4>;
-                       clocks = <&osc24M>, <&pll6 0>;
-                       clock-output-names = "spi0";
-               };
-
-               spi1_clk: clk@01c200a4 {
-                       #clock-cells = <0>;
-                       compatible = "allwinner,sun4i-a10-mod0-clk";
-                       reg = <0x01c200a4 0x4>;
-                       clocks = <&osc24M>, <&pll6 0>;
-                       clock-output-names = "spi1";
-               };
-
-               spi2_clk: clk@01c200a8 {
-                       #clock-cells = <0>;
-                       compatible = "allwinner,sun4i-a10-mod0-clk";
-                       reg = <0x01c200a8 0x4>;
-                       clocks = <&osc24M>, <&pll6 0>;
-                       clock-output-names = "spi2";
-               };
-
-               spi3_clk: clk@01c200ac {
-                       #clock-cells = <0>;
-                       compatible = "allwinner,sun4i-a10-mod0-clk";
-                       reg = <0x01c200ac 0x4>;
-                       clocks = <&osc24M>, <&pll6 0>;
-                       clock-output-names = "spi3";
-               };
-
-               usb_clk: clk@01c200cc {
-                       #clock-cells = <1>;
-                       #reset-cells = <1>;
-                       compatible = "allwinner,sun6i-a31-usb-clk";
-                       reg = <0x01c200cc 0x4>;
-                       clocks = <&osc24M>;
-                       clock-indices = <8>, <9>, <10>,
-                                       <16>, <17>,
-                                       <18>;
-                       clock-output-names = "usb_phy0", "usb_phy1", "usb_phy2",
-                                            "usb_ohci0", "usb_ohci1",
-                                            "usb_ohci2";
-               };
-
                /*
                 * The following two are dummy clocks, placeholders
                 * used in the gmac_tx clock. The gmac driver will
                        compatible = "allwinner,sun6i-a31-dma";
                        reg = <0x01c02000 0x1000>;
                        interrupts = <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&ahb1_gates 6>;
-                       resets = <&ahb1_rst 6>;
+                       clocks = <&ccu CLK_AHB1_DMA>;
+                       resets = <&ccu RST_AHB1_DMA>;
                        #dma-cells = <1>;
                };
 
                mmc0: mmc@01c0f000 {
                        compatible = "allwinner,sun7i-a20-mmc";
                        reg = <0x01c0f000 0x1000>;
-                       clocks = <&ahb1_gates 8>,
-                                <&mmc0_clk 0>,
-                                <&mmc0_clk 1>,
-                                <&mmc0_clk 2>;
+                       clocks = <&ccu CLK_AHB1_MMC0>,
+                                <&ccu CLK_MMC0>,
+                                <&ccu CLK_MMC0_OUTPUT>,
+                                <&ccu CLK_MMC0_SAMPLE>;
                        clock-names = "ahb",
                                      "mmc",
                                      "output",
                                      "sample";
-                       resets = <&ahb1_rst 8>;
+                       resets = <&ccu RST_AHB1_MMC0>;
                        reset-names = "ahb";
                        interrupts = <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
                mmc1: mmc@01c10000 {
                        compatible = "allwinner,sun7i-a20-mmc";
                        reg = <0x01c10000 0x1000>;
-                       clocks = <&ahb1_gates 9>,
-                                <&mmc1_clk 0>,
-                                <&mmc1_clk 1>,
-                                <&mmc1_clk 2>;
+                       clocks = <&ccu CLK_AHB1_MMC1>,
+                                <&ccu CLK_MMC1>,
+                                <&ccu CLK_MMC1_OUTPUT>,
+                                <&ccu CLK_MMC1_SAMPLE>;
                        clock-names = "ahb",
                                      "mmc",
                                      "output",
                                      "sample";
-                       resets = <&ahb1_rst 9>;
+                       resets = <&ccu RST_AHB1_MMC1>;
                        reset-names = "ahb";
                        interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
                mmc2: mmc@01c11000 {
                        compatible = "allwinner,sun7i-a20-mmc";
                        reg = <0x01c11000 0x1000>;
-                       clocks = <&ahb1_gates 10>,
-                                <&mmc2_clk 0>,
-                                <&mmc2_clk 1>,
-                                <&mmc2_clk 2>;
+                       clocks = <&ccu CLK_AHB1_MMC2>,
+                                <&ccu CLK_MMC2>,
+                                <&ccu CLK_MMC2_OUTPUT>,
+                                <&ccu CLK_MMC2_SAMPLE>;
                        clock-names = "ahb",
                                      "mmc",
                                      "output",
                                      "sample";
-                       resets = <&ahb1_rst 10>;
+                       resets = <&ccu RST_AHB1_MMC2>;
                        reset-names = "ahb";
                        interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
                mmc3: mmc@01c12000 {
                        compatible = "allwinner,sun7i-a20-mmc";
                        reg = <0x01c12000 0x1000>;
-                       clocks = <&ahb1_gates 11>,
-                                <&mmc3_clk 0>,
-                                <&mmc3_clk 1>,
-                                <&mmc3_clk 2>;
+                       clocks = <&ccu CLK_AHB1_MMC3>,
+                                <&ccu CLK_MMC3>,
+                                <&ccu CLK_MMC3_OUTPUT>,
+                                <&ccu CLK_MMC3_SAMPLE>;
                        clock-names = "ahb",
                                      "mmc",
                                      "output",
                                      "sample";
-                       resets = <&ahb1_rst 11>;
+                       resets = <&ccu RST_AHB1_MMC3>;
                        reset-names = "ahb";
                        interrupts = <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
                usb_otg: usb@01c19000 {
                        compatible = "allwinner,sun6i-a31-musb";
                        reg = <0x01c19000 0x0400>;
-                       clocks = <&ahb1_gates 24>;
-                       resets = <&ahb1_rst 24>;
+                       clocks = <&ccu CLK_AHB1_OTG>;
+                       resets = <&ccu RST_AHB1_OTG>;
                        interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
                        interrupt-names = "mc";
                        phys = <&usbphy 0>;
                        reg-names = "phy_ctrl",
                                    "pmu1",
                                    "pmu2";
-                       clocks = <&usb_clk 8>,
-                                <&usb_clk 9>,
-                                <&usb_clk 10>;
+                       clocks = <&ccu CLK_USB_PHY0>,
+                                <&ccu CLK_USB_PHY1>,
+                                <&ccu CLK_USB_PHY2>;
                        clock-names = "usb0_phy",
                                      "usb1_phy",
                                      "usb2_phy";
-                       resets = <&usb_clk 0>,
-                                <&usb_clk 1>,
-                                <&usb_clk 2>;
+                       resets = <&ccu RST_USB_PHY0>,
+                                <&ccu RST_USB_PHY1>,
+                                <&ccu RST_USB_PHY2>;
                        reset-names = "usb0_reset",
                                      "usb1_reset",
                                      "usb2_reset";
                        compatible = "allwinner,sun6i-a31-ehci", "generic-ehci";
                        reg = <0x01c1a000 0x100>;
                        interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&ahb1_gates 26>;
-                       resets = <&ahb1_rst 26>;
+                       clocks = <&ccu CLK_AHB1_EHCI0>;
+                       resets = <&ccu RST_AHB1_EHCI0>;
                        phys = <&usbphy 1>;
                        phy-names = "usb";
                        status = "disabled";
                        compatible = "allwinner,sun6i-a31-ohci", "generic-ohci";
                        reg = <0x01c1a400 0x100>;
                        interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&ahb1_gates 29>, <&usb_clk 16>;
-                       resets = <&ahb1_rst 29>;
+                       clocks = <&ccu CLK_AHB1_OHCI0>, <&ccu CLK_USB_OHCI0>;
+                       resets = <&ccu RST_AHB1_OHCI0>;
                        phys = <&usbphy 1>;
                        phy-names = "usb";
                        status = "disabled";
                        compatible = "allwinner,sun6i-a31-ehci", "generic-ehci";
                        reg = <0x01c1b000 0x100>;
                        interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&ahb1_gates 27>;
-                       resets = <&ahb1_rst 27>;
+                       clocks = <&ccu CLK_AHB1_EHCI1>;
+                       resets = <&ccu RST_AHB1_EHCI1>;
                        phys = <&usbphy 2>;
                        phy-names = "usb";
                        status = "disabled";
                        compatible = "allwinner,sun6i-a31-ohci", "generic-ohci";
                        reg = <0x01c1b400 0x100>;
                        interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&ahb1_gates 30>, <&usb_clk 17>;
-                       resets = <&ahb1_rst 30>;
+                       clocks = <&ccu CLK_AHB1_OHCI1>, <&ccu CLK_USB_OHCI1>;
+                       resets = <&ccu RST_AHB1_OHCI1>;
                        phys = <&usbphy 2>;
                        phy-names = "usb";
                        status = "disabled";
                        compatible = "allwinner,sun6i-a31-ohci", "generic-ohci";
                        reg = <0x01c1c400 0x100>;
                        interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&ahb1_gates 31>, <&usb_clk 18>;
-                       resets = <&ahb1_rst 31>;
+                       clocks = <&ccu CLK_AHB1_OHCI2>, <&ccu CLK_USB_OHCI2>;
+                       resets = <&ccu RST_AHB1_OHCI2>;
                        status = "disabled";
                };
 
+               ccu: clock@01c20000 {
+                       compatible = "allwinner,sun6i-a31-ccu";
+                       reg = <0x01c20000 0x400>;
+                       clocks = <&osc24M>, <&osc32k>;
+                       clock-names = "hosc", "losc";
+                       #clock-cells = <1>;
+                       #reset-cells = <1>;
+               };
+
                pio: pinctrl@01c20800 {
                        compatible = "allwinner,sun6i-a31-pinctrl";
                        reg = <0x01c20800 0x400>;
                                     <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&apb1_gates 5>;
+                       clocks = <&ccu CLK_APB1_PIO>;
                        gpio-controller;
                        interrupt-controller;
                        #interrupt-cells = <3>;
                        };
                };
 
-               ahb1_rst: reset@01c202c0 {
-                       #reset-cells = <1>;
-                       compatible = "allwinner,sun6i-a31-ahb1-reset";
-                       reg = <0x01c202c0 0xc>;
-               };
-
-               apb1_rst: reset@01c202d0 {
-                       #reset-cells = <1>;
-                       compatible = "allwinner,sun6i-a31-clock-reset";
-                       reg = <0x01c202d0 0x4>;
-               };
-
-               apb2_rst: reset@01c202d8 {
-                       #reset-cells = <1>;
-                       compatible = "allwinner,sun6i-a31-clock-reset";
-                       reg = <0x01c202d8 0x4>;
-               };
-
                timer@01c20c00 {
                        compatible = "allwinner,sun4i-a10-timer";
                        reg = <0x01c20c00 0xa0>;
                        interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
                        reg-shift = <2>;
                        reg-io-width = <4>;
-                       clocks = <&apb2_gates 16>;
-                       resets = <&apb2_rst 16>;
+                       clocks = <&ccu CLK_APB2_UART0>;
+                       resets = <&ccu RST_APB2_UART0>;
                        dmas = <&dma 6>, <&dma 6>;
                        dma-names = "rx", "tx";
                        status = "disabled";
                        interrupts = <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
                        reg-shift = <2>;
                        reg-io-width = <4>;
-                       clocks = <&apb2_gates 17>;
-                       resets = <&apb2_rst 17>;
+                       clocks = <&ccu CLK_APB2_UART1>;
+                       resets = <&ccu RST_APB2_UART1>;
                        dmas = <&dma 7>, <&dma 7>;
                        dma-names = "rx", "tx";
                        status = "disabled";
                        interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
                        reg-shift = <2>;
                        reg-io-width = <4>;
-                       clocks = <&apb2_gates 18>;
-                       resets = <&apb2_rst 18>;
+                       clocks = <&ccu CLK_APB2_UART2>;
+                       resets = <&ccu RST_APB2_UART2>;
                        dmas = <&dma 8>, <&dma 8>;
                        dma-names = "rx", "tx";
                        status = "disabled";
                        interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
                        reg-shift = <2>;
                        reg-io-width = <4>;
-                       clocks = <&apb2_gates 19>;
-                       resets = <&apb2_rst 19>;
+                       clocks = <&ccu CLK_APB2_UART3>;
+                       resets = <&ccu RST_APB2_UART3>;
                        dmas = <&dma 9>, <&dma 9>;
                        dma-names = "rx", "tx";
                        status = "disabled";
                        interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
                        reg-shift = <2>;
                        reg-io-width = <4>;
-                       clocks = <&apb2_gates 20>;
-                       resets = <&apb2_rst 20>;
+                       clocks = <&ccu CLK_APB2_UART4>;
+                       resets = <&ccu RST_APB2_UART4>;
                        dmas = <&dma 10>, <&dma 10>;
                        dma-names = "rx", "tx";
                        status = "disabled";
                        interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
                        reg-shift = <2>;
                        reg-io-width = <4>;
-                       clocks = <&apb2_gates 21>;
-                       resets = <&apb2_rst 21>;
+                       clocks = <&ccu CLK_APB2_UART5>;
+                       resets = <&ccu RST_APB2_UART5>;
                        dmas = <&dma 22>, <&dma 22>;
                        dma-names = "rx", "tx";
                        status = "disabled";
                        compatible = "allwinner,sun6i-a31-i2c";
                        reg = <0x01c2ac00 0x400>;
                        interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&apb2_gates 0>;
-                       resets = <&apb2_rst 0>;
+                       clocks = <&ccu CLK_APB2_I2C0>;
+                       resets = <&ccu RST_APB2_I2C0>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        compatible = "allwinner,sun6i-a31-i2c";
                        reg = <0x01c2b000 0x400>;
                        interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&apb2_gates 1>;
-                       resets = <&apb2_rst 1>;
+                       clocks = <&ccu CLK_APB2_I2C1>;
+                       resets = <&ccu RST_APB2_I2C1>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        compatible = "allwinner,sun6i-a31-i2c";
                        reg = <0x01c2b400 0x400>;
                        interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&apb2_gates 2>;
-                       resets = <&apb2_rst 2>;
+                       clocks = <&ccu CLK_APB2_I2C2>;
+                       resets = <&ccu RST_APB2_I2C2>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        compatible = "allwinner,sun6i-a31-i2c";
                        reg = <0x01c2b800 0x400>;
                        interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&apb2_gates 3>;
-                       resets = <&apb2_rst 3>;
+                       clocks = <&ccu CLK_APB2_I2C3>;
+                       resets = <&ccu RST_APB2_I2C3>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        reg = <0x01c30000 0x1054>;
                        interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>;
                        interrupt-names = "macirq";
-                       clocks = <&ahb1_gates 17>, <&gmac_tx_clk>;
+                       clocks = <&ccu CLK_AHB1_EMAC>, <&gmac_tx_clk>;
                        clock-names = "stmmaceth", "allwinner_gmac_tx";
-                       resets = <&ahb1_rst 17>;
+                       resets = <&ccu RST_AHB1_EMAC>;
                        reset-names = "stmmaceth";
                        snps,pbl = <2>;
                        snps,fixed-burst;
                        compatible = "allwinner,sun4i-a10-crypto";
                        reg = <0x01c15000 0x1000>;
                        interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&ahb1_gates 5>, <&ss_clk>;
+                       clocks = <&ccu CLK_AHB1_SS>, <&ccu CLK_SS>;
                        clock-names = "ahb", "mod";
-                       resets = <&ahb1_rst 5>;
+                       resets = <&ccu RST_AHB1_SS>;
                        reset-names = "ahb";
                };
 
                                     <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&ahb1_gates 19>;
-                       resets = <&ahb1_rst 19>;
+                       clocks = <&ccu CLK_AHB1_HSTIMER>;
+                       resets = <&ccu RST_AHB1_HSTIMER>;
                };
 
                spi0: spi@01c68000 {
                        compatible = "allwinner,sun6i-a31-spi";
                        reg = <0x01c68000 0x1000>;
                        interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&ahb1_gates 20>, <&spi0_clk>;
+                       clocks = <&ccu CLK_AHB1_SPI0>, <&ccu CLK_SPI0>;
                        clock-names = "ahb", "mod";
                        dmas = <&dma 23>, <&dma 23>;
                        dma-names = "rx", "tx";
-                       resets = <&ahb1_rst 20>;
+                       resets = <&ccu RST_AHB1_SPI0>;
                        status = "disabled";
                };
 
                        compatible = "allwinner,sun6i-a31-spi";
                        reg = <0x01c69000 0x1000>;
                        interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&ahb1_gates 21>, <&spi1_clk>;
+                       clocks = <&ccu CLK_AHB1_SPI1>, <&ccu CLK_SPI1>;
                        clock-names = "ahb", "mod";
                        dmas = <&dma 24>, <&dma 24>;
                        dma-names = "rx", "tx";
-                       resets = <&ahb1_rst 21>;
+                       resets = <&ccu RST_AHB1_SPI1>;
                        status = "disabled";
                };
 
                        compatible = "allwinner,sun6i-a31-spi";
                        reg = <0x01c6a000 0x1000>;
                        interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&ahb1_gates 22>, <&spi2_clk>;
+                       clocks = <&ccu CLK_AHB1_SPI2>, <&ccu CLK_SPI2>;
                        clock-names = "ahb", "mod";
                        dmas = <&dma 25>, <&dma 25>;
                        dma-names = "rx", "tx";
-                       resets = <&ahb1_rst 22>;
+                       resets = <&ccu RST_AHB1_SPI2>;
                        status = "disabled";
                };
 
                        compatible = "allwinner,sun6i-a31-spi";
                        reg = <0x01c6b000 0x1000>;
                        interrupts = <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&ahb1_gates 23>, <&spi3_clk>;
+                       clocks = <&ccu CLK_AHB1_SPI3>, <&ccu CLK_SPI3>;
                        clock-names = "ahb", "mod";
                        dmas = <&dma 26>, <&dma 26>;
                        dma-names = "rx", "tx";
-                       resets = <&ahb1_rst 23>;
+                       resets = <&ccu RST_AHB1_SPI3>;
                        status = "disabled";
                };
 
                        ar100: ar100_clk {
                                compatible = "allwinner,sun6i-a31-ar100-clk";
                                #clock-cells = <0>;
-                               clocks = <&osc32k>, <&osc24M>, <&pll6 0>,
-                                        <&pll6 0>;
+                               clocks = <&osc32k>, <&osc24M>,
+                                        <&ccu CLK_PLL_PERIPH>,
+                                        <&ccu CLK_PLL_PERIPH>;
                                clock-output-names = "ar100";
                        };
 
index 826877b..48fc24f 100644 (file)
@@ -46,7 +46,9 @@
 
 #include <dt-bindings/interrupt-controller/arm-gic.h>
 
+#include <dt-bindings/clock/sun8i-a23-a33-ccu.h>
 #include <dt-bindings/pinctrl/sun4i-a10.h>
+#include <dt-bindings/reset/sun8i-a23-a33-ccu.h>
 
 / {
        interrupt-parent = <&gic>;
@@ -60,7 +62,9 @@
                        compatible = "allwinner,simple-framebuffer",
                                     "simple-framebuffer";
                        allwinner,pipeline = "de_be0-lcd0";
-                       clocks = <&pll6 0>;
+                       clocks = <&ccu CLK_BUS_LCD>, <&ccu CLK_BUS_DE_BE>,
+                                <&ccu CLK_LCD_CH0>, <&ccu CLK_DE_BE>,
+                                <&ccu CLK_DRAM_DE_BE>, <&ccu CLK_DRC>;
                        status = "disabled";
                };
        };
                        clock-frequency = <32768>;
                        clock-output-names = "osc32k";
                };
-
-               pll1: clk@01c20000 {
-                       #clock-cells = <0>;
-                       compatible = "allwinner,sun8i-a23-pll1-clk";
-                       reg = <0x01c20000 0x4>;
-                       clocks = <&osc24M>;
-                       clock-output-names = "pll1";
-               };
-
-               /* dummy clock until actually implemented */
-               pll5: pll5_clk {
-                       #clock-cells = <0>;
-                       compatible = "fixed-clock";
-                       clock-frequency = <0>;
-                       clock-output-names = "pll5";
-               };
-
-               pll6: clk@01c20028 {
-                       #clock-cells = <1>;
-                       compatible = "allwinner,sun6i-a31-pll6-clk";
-                       reg = <0x01c20028 0x4>;
-                       clocks = <&osc24M>;
-                       clock-output-names = "pll6", "pll6x2";
-               };
-
-               cpu: cpu_clk@01c20050 {
-                       #clock-cells = <0>;
-                       compatible = "allwinner,sun4i-a10-cpu-clk";
-                       reg = <0x01c20050 0x4>;
-
-                       /*
-                        * PLL1 is listed twice here.
-                        * While it looks suspicious, it's actually documented
-                        * that way both in the datasheet and in the code from
-                        * Allwinner.
-                        */
-                       clocks = <&osc32k>, <&osc24M>, <&pll1>, <&pll1>;
-                       clock-output-names = "cpu";
-               };
-
-               axi: axi_clk@01c20050 {
-                       #clock-cells = <0>;
-                       compatible = "allwinner,sun8i-a23-axi-clk";
-                       reg = <0x01c20050 0x4>;
-                       clocks = <&cpu>;
-                       clock-output-names = "axi";
-               };
-
-               ahb1: ahb1_clk@01c20054 {
-                       #clock-cells = <0>;
-                       compatible = "allwinner,sun6i-a31-ahb1-clk";
-                       reg = <0x01c20054 0x4>;
-                       clocks = <&osc32k>, <&osc24M>, <&axi>, <&pll6 0>;
-                       clock-output-names = "ahb1";
-               };
-
-               apb1: apb1_clk@01c20054 {
-                       #clock-cells = <0>;
-                       compatible = "allwinner,sun4i-a10-apb0-clk";
-                       reg = <0x01c20054 0x4>;
-                       clocks = <&ahb1>;
-                       clock-output-names = "apb1";
-               };
-
-               apb1_gates: clk@01c20068 {
-                       #clock-cells = <1>;
-                       compatible = "allwinner,sun8i-a23-apb1-gates-clk";
-                       reg = <0x01c20068 0x4>;
-                       clocks = <&apb1>;
-                       clock-indices = <0>, <5>,
-                                       <12>, <13>;
-                       clock-output-names = "apb1_codec", "apb1_pio",
-                                       "apb1_daudio0", "apb1_daudio1";
-               };
-
-               apb2: clk@01c20058 {
-                       #clock-cells = <0>;
-                       compatible = "allwinner,sun4i-a10-apb1-clk";
-                       reg = <0x01c20058 0x4>;
-                       clocks = <&osc32k>, <&osc24M>, <&pll6 0>, <&pll6 0>;
-                       clock-output-names = "apb2";
-               };
-
-               apb2_gates: clk@01c2006c {
-                       #clock-cells = <1>;
-                       compatible = "allwinner,sun8i-a23-apb2-gates-clk";
-                       reg = <0x01c2006c 0x4>;
-                       clocks = <&apb2>;
-                       clock-indices = <0>, <1>,
-                                       <2>, <16>,
-                                       <17>, <18>,
-                                       <19>, <20>;
-                       clock-output-names = "apb2_i2c0", "apb2_i2c1",
-                                       "apb2_i2c2", "apb2_uart0",
-                                       "apb2_uart1", "apb2_uart2",
-                                       "apb2_uart3", "apb2_uart4";
-               };
-
-               mmc0_clk: clk@01c20088 {
-                       #clock-cells = <1>;
-                       compatible = "allwinner,sun4i-a10-mmc-clk";
-                       reg = <0x01c20088 0x4>;
-                       clocks = <&osc24M>, <&pll6 0>;
-                       clock-output-names = "mmc0",
-                                            "mmc0_output",
-                                            "mmc0_sample";
-               };
-
-               mmc1_clk: clk@01c2008c {
-                       #clock-cells = <1>;
-                       compatible = "allwinner,sun4i-a10-mmc-clk";
-                       reg = <0x01c2008c 0x4>;
-                       clocks = <&osc24M>, <&pll6 0>;
-                       clock-output-names = "mmc1",
-                                            "mmc1_output",
-                                            "mmc1_sample";
-               };
-
-               mmc2_clk: clk@01c20090 {
-                       #clock-cells = <1>;
-                       compatible = "allwinner,sun4i-a10-mmc-clk";
-                       reg = <0x01c20090 0x4>;
-                       clocks = <&osc24M>, <&pll6 0>;
-                       clock-output-names = "mmc2",
-                                            "mmc2_output",
-                                            "mmc2_sample";
-               };
-
-               nand_clk: clk@01c20080 {
-                       #clock-cells = <0>;
-                       compatible = "allwinner,sun4i-a10-mod0-clk";
-                       reg = <0x01c20080 0x4>;
-                       clocks = <&osc24M>, <&pll6 1>;
-                       clock-output-names = "nand";
-               };
-
-               usb_clk: clk@01c200cc {
-                       #clock-cells = <1>;
-                       #reset-cells = <1>;
-                       compatible = "allwinner,sun8i-a23-usb-clk";
-                       reg = <0x01c200cc 0x4>;
-                       clocks = <&osc24M>;
-                       clock-output-names = "usb_phy0", "usb_phy1", "usb_hsic",
-                                            "usb_hsic_12M", "usb_ohci0";
-               };
        };
 
        soc@01c00000 {
                        compatible = "allwinner,sun8i-a23-dma";
                        reg = <0x01c02000 0x1000>;
                        interrupts = <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&ahb1_gates 6>;
-                       resets = <&ahb1_rst 6>;
+                       clocks = <&ccu CLK_BUS_DMA>;
+                       resets = <&ccu RST_BUS_DMA>;
                        #dma-cells = <1>;
                };
 
                mmc0: mmc@01c0f000 {
                        compatible = "allwinner,sun7i-a20-mmc";
                        reg = <0x01c0f000 0x1000>;
-                       clocks = <&ahb1_gates 8>,
-                                <&mmc0_clk 0>,
-                                <&mmc0_clk 1>,
-                                <&mmc0_clk 2>;
+                       clocks = <&ccu CLK_BUS_MMC0>,
+                                <&ccu CLK_MMC0>,
+                                <&ccu CLK_MMC0_OUTPUT>,
+                                <&ccu CLK_MMC0_SAMPLE>;
                        clock-names = "ahb",
                                      "mmc",
                                      "output",
                                      "sample";
-                       resets = <&ahb1_rst 8>;
+                       resets = <&ccu RST_BUS_MMC0>;
                        reset-names = "ahb";
                        interrupts = <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
                mmc1: mmc@01c10000 {
                        compatible = "allwinner,sun7i-a20-mmc";
                        reg = <0x01c10000 0x1000>;
-                       clocks = <&ahb1_gates 9>,
-                                <&mmc1_clk 0>,
-                                <&mmc1_clk 1>,
-                                <&mmc1_clk 2>;
+                       clocks = <&ccu CLK_BUS_MMC1>,
+                                <&ccu CLK_MMC1>,
+                                <&ccu CLK_MMC1_OUTPUT>,
+                                <&ccu CLK_MMC1_SAMPLE>;
                        clock-names = "ahb",
                                      "mmc",
                                      "output",
                                      "sample";
-                       resets = <&ahb1_rst 9>;
+                       resets = <&ccu RST_BUS_MMC1>;
                        reset-names = "ahb";
                        interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
                mmc2: mmc@01c11000 {
                        compatible = "allwinner,sun7i-a20-mmc";
                        reg = <0x01c11000 0x1000>;
-                       clocks = <&ahb1_gates 10>,
-                                <&mmc2_clk 0>,
-                                <&mmc2_clk 1>,
-                                <&mmc2_clk 2>;
+                       clocks = <&ccu CLK_BUS_MMC2>,
+                                <&ccu CLK_MMC2>,
+                                <&ccu CLK_MMC2_OUTPUT>,
+                                <&ccu CLK_MMC2_SAMPLE>;
                        clock-names = "ahb",
                                      "mmc",
                                      "output",
                                      "sample";
-                       resets = <&ahb1_rst 10>;
+                       resets = <&ccu RST_BUS_MMC2>;
                        reset-names = "ahb";
                        interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
                        compatible = "allwinner,sun4i-a10-nand";
                        reg = <0x01c03000 0x1000>;
                        interrupts = <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&ahb1_gates 13>, <&nand_clk>;
+                       clocks = <&ccu CLK_BUS_NAND>, <&ccu CLK_NAND>;
                        clock-names = "ahb", "mod";
-                       resets = <&ahb1_rst 13>;
+                       resets = <&ccu RST_BUS_NAND>;
                        reset-names = "ahb";
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                };
 
+               usb_otg: usb@01c19000 {
+                       /* compatible gets set in SoC specific dtsi file */
+                       reg = <0x01c19000 0x0400>;
+                       clocks = <&ccu CLK_BUS_OTG>;
+                       resets = <&ccu RST_BUS_OTG>;
+                       interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "mc";
+                       phys = <&usbphy 0>;
+                       phy-names = "usb";
+                       extcon = <&usbphy 0>;
+                       status = "disabled";
+               };
+
+               usbphy: phy@01c19400 {
+                       /*
+                        * compatible and address regions get set in
+                        * SoC specific dtsi file
+                        */
+                       clocks = <&ccu CLK_USB_PHY0>,
+                                <&ccu CLK_USB_PHY1>;
+                       clock-names = "usb0_phy",
+                                     "usb1_phy";
+                       resets = <&ccu RST_USB_PHY0>,
+                                <&ccu RST_USB_PHY1>;
+                       reset-names = "usb0_reset",
+                                     "usb1_reset";
+                       status = "disabled";
+                       #phy-cells = <1>;
+               };
+
                ehci0: usb@01c1a000 {
                        compatible = "allwinner,sun8i-a23-ehci", "generic-ehci";
                        reg = <0x01c1a000 0x100>;
                        interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&ahb1_gates 26>;
-                       resets = <&ahb1_rst 26>;
+                       clocks = <&ccu CLK_BUS_EHCI>;
+                       resets = <&ccu RST_BUS_EHCI>;
                        phys = <&usbphy 1>;
                        phy-names = "usb";
                        status = "disabled";
                        compatible = "allwinner,sun8i-a23-ohci", "generic-ohci";
                        reg = <0x01c1a400 0x100>;
                        interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&ahb1_gates 29>, <&usb_clk 16>;
-                       resets = <&ahb1_rst 29>;
+                       clocks = <&ccu CLK_BUS_OHCI>, <&ccu CLK_USB_OHCI>;
+                       resets = <&ccu RST_BUS_OHCI>;
                        phys = <&usbphy 1>;
                        phy-names = "usb";
                        status = "disabled";
                };
 
+               ccu: clock@01c20000 {
+                       reg = <0x01c20000 0x400>;
+                       clocks = <&osc24M>, <&osc32k>;
+                       clock-names = "hosc", "losc";
+                       #clock-cells = <1>;
+                       #reset-cells = <1>;
+               };
+
                pio: pinctrl@01c20800 {
                        /* compatible gets set in SoC specific dtsi file */
                        reg = <0x01c20800 0x400>;
                        /* interrupts get set in SoC specific dtsi file */
-                       clocks = <&apb1_gates 5>;
+                       clocks = <&ccu CLK_BUS_PIO>;
                        gpio-controller;
                        interrupt-controller;
                        #interrupt-cells = <3>;
                                allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
                        };
 
+                       uart1_pins_a: uart1@0 {
+                               allwinner,pins = "PG6", "PG7";
+                               allwinner,function = "uart1";
+                       };
+
+                       uart1_pins_cts_rts_a: uart1-cts-rts@0 {
+                               allwinner,pins = "PG8", "PG9";
+                               allwinner,function = "uart1";
+                       };
+
                        mmc0_pins_a: mmc0@0 {
                                allwinner,pins = "PF0", "PF1", "PF2",
                                                 "PF3", "PF4", "PF5";
                                allwinner,drive = <SUN4I_PINCTRL_10_MA>;
                                allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
                        };
-               };
 
-               ahb1_rst: reset@01c202c0 {
-                       #reset-cells = <1>;
-                       compatible = "allwinner,sun6i-a31-clock-reset";
-                       reg = <0x01c202c0 0xc>;
-               };
-
-               apb1_rst: reset@01c202d0 {
-                       #reset-cells = <1>;
-                       compatible = "allwinner,sun6i-a31-clock-reset";
-                       reg = <0x01c202d0 0x4>;
-               };
-
-               apb2_rst: reset@01c202d8 {
-                       #reset-cells = <1>;
-                       compatible = "allwinner,sun6i-a31-clock-reset";
-                       reg = <0x01c202d8 0x4>;
+                       lcd_rgb666_pins: lcd-rgb666@0 {
+                               allwinner,pins = "PD2", "PD3", "PD4", "PD5", "PD6", "PD7",
+                                                "PD10", "PD11", "PD12", "PD13", "PD14", "PD15",
+                                                "PD18", "PD19", "PD20", "PD21", "PD22", "PD23",
+                                                "PD24", "PD25", "PD26", "PD27";
+                               allwinner,function = "lcd0";
+                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                       };
                };
 
                timer@01c20c00 {
                        interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
                        reg-shift = <2>;
                        reg-io-width = <4>;
-                       clocks = <&apb2_gates 16>;
-                       resets = <&apb2_rst 16>;
+                       clocks = <&ccu CLK_BUS_UART0>;
+                       resets = <&ccu RST_BUS_UART0>;
                        dmas = <&dma 6>, <&dma 6>;
                        dma-names = "rx", "tx";
                        status = "disabled";
                        interrupts = <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
                        reg-shift = <2>;
                        reg-io-width = <4>;
-                       clocks = <&apb2_gates 17>;
-                       resets = <&apb2_rst 17>;
+                       clocks = <&ccu CLK_BUS_UART1>;
+                       resets = <&ccu RST_BUS_UART1>;
                        dmas = <&dma 7>, <&dma 7>;
                        dma-names = "rx", "tx";
                        status = "disabled";
                        interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
                        reg-shift = <2>;
                        reg-io-width = <4>;
-                       clocks = <&apb2_gates 18>;
-                       resets = <&apb2_rst 18>;
+                       clocks = <&ccu CLK_BUS_UART2>;
+                       resets = <&ccu RST_BUS_UART2>;
                        dmas = <&dma 8>, <&dma 8>;
                        dma-names = "rx", "tx";
                        status = "disabled";
                        interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
                        reg-shift = <2>;
                        reg-io-width = <4>;
-                       clocks = <&apb2_gates 19>;
-                       resets = <&apb2_rst 19>;
+                       clocks = <&ccu CLK_BUS_UART3>;
+                       resets = <&ccu RST_BUS_UART3>;
                        dmas = <&dma 9>, <&dma 9>;
                        dma-names = "rx", "tx";
                        status = "disabled";
                        interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
                        reg-shift = <2>;
                        reg-io-width = <4>;
-                       clocks = <&apb2_gates 20>;
-                       resets = <&apb2_rst 20>;
+                       clocks = <&ccu CLK_BUS_UART4>;
+                       resets = <&ccu RST_BUS_UART4>;
                        dmas = <&dma 10>, <&dma 10>;
                        dma-names = "rx", "tx";
                        status = "disabled";
                        compatible = "allwinner,sun6i-a31-i2c";
                        reg = <0x01c2ac00 0x400>;
                        interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&apb2_gates 0>;
-                       resets = <&apb2_rst 0>;
+                       clocks = <&ccu CLK_BUS_I2C0>;
+                       resets = <&ccu RST_BUS_I2C0>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        compatible = "allwinner,sun6i-a31-i2c";
                        reg = <0x01c2b000 0x400>;
                        interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&apb2_gates 1>;
-                       resets = <&apb2_rst 1>;
+                       clocks = <&ccu CLK_BUS_I2C1>;
+                       resets = <&ccu RST_BUS_I2C1>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        compatible = "allwinner,sun6i-a31-i2c";
                        reg = <0x01c2b400 0x400>;
                        interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&apb2_gates 2>;
-                       resets = <&apb2_rst 2>;
+                       clocks = <&ccu CLK_BUS_I2C2>;
+                       resets = <&ccu RST_BUS_I2C2>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
index f27ebbb..e3c7a25 100644 (file)
        status = "okay";
 };
 
+&touchscreen {
+       reg = <0x40>;
+       compatible = "silead,gsl3675";
+       firmware-name = "gsl3675-gt90h.fw";
+       touchscreen-size-x = <1792>;
+       touchscreen-size-y = <1024>;
+       status = "okay";
+};
+
 &lradc {
        button@600 {
                label = "Back";
index 0f9f71b..d440575 100644 (file)
        status = "okay";
 };
 
+&touchscreen {
+       reg = <0x40>;
+       compatible = "silead,gsl1680";
+       firmware-name = "gsl1680-inet86dz.fw";
+       touchscreen-size-x = <960>;
+       touchscreen-size-y = <640>;
+       status = "okay";
+};
+
 &usbphy {
        usb1_vbus-supply = <&reg_dldo1>;
 };
index 4789aac..a86cbed 100644 (file)
        };
 };
 
+&i2c1 {
+       mma7660: accelerometer@4c {
+               reg = <0x4c>;
+               compatible = "fsl,mma7660";
+       };
+};
+
 &mmc1 {
        pinctrl-names = "default";
        pinctrl-0 = <&mmc1_pins_a>;
                allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
        };
 };
+
+&reg_ldo_io1 {
+       regulator-min-microvolt = <3300000>;
+       regulator-max-microvolt = <3300000>;
+       regulator-name = "vcc-touchscreen";
+       status = "okay";
+};
+
+&touchscreen {
+       reg = <0x40>;
+       compatible = "silead,gsl1680";
+       firmware-name = "gsl1680-polaroid-mid2407pxe03.fw";
+       touchscreen-size-x = <960>;
+       touchscreen-size-y = <640>;
+       touchscreen-inverted-x;
+       touchscreen-inverted-y;
+       vddio-supply = <&reg_ldo_io1>;
+       status = "okay";
+};
index c9213ca..9955f85 100644 (file)
                allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
        };
 };
+
+&touchscreen {
+       reg = <0x40>;
+       compatible = "silead,gsl3670";
+       firmware-name = "gsl3670-polaroid-mid2809pxe04.fw";
+       touchscreen-size-x = <1660>;
+       touchscreen-size-y = <890>;
+       status = "okay";
+};
index 92e6616..54d045d 100644 (file)
        memory {
                reg = <0x40000000 0x40000000>;
        };
+};
 
-       clocks {
-               ahb1_gates: clk@01c20060 {
-                       #clock-cells = <1>;
-                       compatible = "allwinner,sun8i-a23-ahb1-gates-clk";
-                       reg = <0x01c20060 0x8>;
-                       clocks = <&ahb1>;
-                       clock-indices = <1>, <6>,
-                                       <8>, <9>, <10>,
-                                       <13>, <14>,
-                                       <19>, <20>,
-                                       <21>, <24>, <26>,
-                                       <29>, <32>, <36>,
-                                       <40>, <44>, <46>,
-                                       <52>, <53>,
-                                       <54>, <57>;
-                       clock-output-names = "ahb1_mipidsi", "ahb1_dma",
-                                       "ahb1_mmc0", "ahb1_mmc1", "ahb1_mmc2",
-                                       "ahb1_nand", "ahb1_sdram",
-                                       "ahb1_hstimer", "ahb1_spi0",
-                                       "ahb1_spi1", "ahb1_otg", "ahb1_ehci",
-                                       "ahb1_ohci", "ahb1_ve", "ahb1_lcd",
-                                       "ahb1_csi", "ahb1_be",  "ahb1_fe",
-                                       "ahb1_gpu", "ahb1_msgbox",
-                                       "ahb1_spinlock", "ahb1_drc";
-               };
-
-               mbus_clk: clk@01c2015c {
-                       #clock-cells = <0>;
-                       compatible = "allwinner,sun8i-a23-mbus-clk";
-                       reg = <0x01c2015c 0x4>;
-                       clocks = <&osc24M>, <&pll6 1>, <&pll5>;
-                       clock-output-names = "mbus";
-               };
-       };
-
-       soc@01c00000 {
-               usb_otg: usb@01c19000 {
-                       compatible = "allwinner,sun6i-a31-musb";
-                       reg = <0x01c19000 0x0400>;
-                       clocks = <&ahb1_gates 24>;
-                       resets = <&ahb1_rst 24>;
-                       interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
-                       interrupt-names = "mc";
-                       phys = <&usbphy 0>;
-                       phy-names = "usb";
-                       extcon = <&usbphy 0>;
-                       status = "disabled";
-               };
-
-               usbphy: phy@01c19400 {
-                       compatible = "allwinner,sun8i-a23-usb-phy";
-                       reg = <0x01c19400 0x10>,
-                             <0x01c1a800 0x4>;
-                       reg-names = "phy_ctrl",
-                                   "pmu1";
-                       clocks = <&usb_clk 8>,
-                                <&usb_clk 9>;
-                       clock-names = "usb0_phy",
-                                     "usb1_phy";
-                       resets = <&usb_clk 0>,
-                                <&usb_clk 1>;
-                       reset-names = "usb0_reset",
-                                     "usb1_reset";
-                       status = "disabled";
-                       #phy-cells = <1>;
-               };
-       };
+&ccu {
+       compatible = "allwinner,sun8i-a23-ccu";
 };
 
 &pio {
                     <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
 };
+
+&usb_otg {
+       compatible = "allwinner,sun6i-a31-musb";
+};
+
+&usbphy {
+       compatible = "allwinner,sun8i-a23-usb-phy";
+       reg = <0x01c19400 0x10>, <0x01c1a800 0x4>;
+       reg-names = "phy_ctrl", "pmu1";
+};
index de6269d..f711599 100644 (file)
        status = "okay";
 };
 
+&touchscreen {
+       reg = <0x40>;
+       compatible = "silead,gsl3675";
+       firmware-name = "gsl3675-ga10h.fw";
+       touchscreen-size-x = <1630>;
+       touchscreen-size-y = <990>;
+       touchscreen-inverted-y;
+       status = "okay";
+};
+
 &lradc {
        button@600 {
                label = "Back";
index 0f52cd9..fb46655 100644 (file)
        model = "INet-D978 Rev 02";
        compatible = "primux,inet-d978-rev2", "allwinner,sun8i-a33";
 
+       aliases {
+               serial0 = &uart1;
+       };
+
+       chosen {
+               /* Delete debug UART as serial0 is the UART for bluetooth */
+               /delete-property/stdout-path;
+       };
+
        leds {
                compatible = "gpio-leds";
                pinctrl-names = "default";
                allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
        };
 };
+
+&r_uart {
+       status = "disabled";
+};
+
+&uart1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart1_pins_a>,
+                   <&uart1_pins_cts_rts_a>;
+       status = "okay";
+};
index 001d840..fd1e1cd 100644 (file)
                };
        };
 
+       de: display-engine {
+               compatible = "allwinner,sun8i-a33-display-engine";
+               allwinner,pipelines = <&fe0>;
+               status = "disabled";
+       };
+
        memory {
                reg = <0x40000000 0x80000000>;
        };
 
-       clocks {
-               /* Dummy clock for pll11 (DDR1) until actually implemented */
-               pll11: pll11_clk {
-                       #clock-cells = <0>;
-                       compatible = "fixed-clock";
-                       clock-frequency = <0>;
-                       clock-output-names = "pll11";
-               };
+       soc@01c00000 {
+               tcon0: lcd-controller@01c0c000 {
+                       compatible = "allwinner,sun8i-a33-tcon";
+                       reg = <0x01c0c000 0x1000>;
+                       interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&ccu CLK_BUS_LCD>,
+                                <&ccu CLK_LCD_CH0>;
+                       clock-names = "ahb",
+                                     "tcon-ch0";
+                       clock-output-names = "tcon-pixel-clock";
+                       resets = <&ccu RST_BUS_LCD>;
+                       reset-names = "lcd";
+                       status = "disabled";
 
-               ahb1_gates: clk@01c20060 {
-                       #clock-cells = <1>;
-                       compatible = "allwinner,sun8i-a33-ahb1-gates-clk";
-                       reg = <0x01c20060 0x8>;
-                       clocks = <&ahb1>;
-                       clock-indices = <1>, <5>,
-                                       <6>, <8>, <9>,
-                                       <10>, <13>, <14>,
-                                       <19>, <20>,
-                                       <21>, <24>, <26>,
-                                       <29>, <32>, <36>,
-                                       <40>, <44>, <46>,
-                                       <52>, <53>,
-                                       <54>, <57>,
-                                       <58>;
-                       clock-output-names = "ahb1_mipidsi", "ahb1_ss",
-                                       "ahb1_dma","ahb1_mmc0", "ahb1_mmc1",
-                                       "ahb1_mmc2", "ahb1_nand", "ahb1_sdram",
-                                       "ahb1_hstimer", "ahb1_spi0",
-                                       "ahb1_spi1", "ahb1_otg", "ahb1_ehci",
-                                       "ahb1_ohci", "ahb1_ve", "ahb1_lcd",
-                                       "ahb1_csi", "ahb1_be",  "ahb1_fe",
-                                       "ahb1_gpu", "ahb1_msgbox",
-                                       "ahb1_spinlock", "ahb1_drc",
-                                       "ahb1_sat";
-               };
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
 
-               ss_clk: clk@01c2009c {
-                       #clock-cells = <0>;
-                       compatible = "allwinner,sun4i-a10-mod0-clk";
-                       reg = <0x01c2009c 0x4>;
-                       clocks = <&osc24M>, <&pll6 0>;
-                       clock-output-names = "ss";
-               };
+                               tcon0_in: port@0 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+                                       reg = <0>;
 
-               mbus_clk: clk@01c2015c {
-                       #clock-cells = <0>;
-                       compatible = "allwinner,sun8i-a23-mbus-clk";
-                       reg = <0x01c2015c 0x4>;
-                       clocks = <&osc24M>, <&pll6 1>, <&pll5>, <&pll11>;
-                       clock-output-names = "mbus";
+                                       tcon0_in_drc0: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&drc0_out_tcon0>;
+                                       };
+                               };
+
+                               tcon0_out: port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+                                       reg = <1>;
+                               };
+                       };
                };
-       };
 
-       soc@01c00000 {
                crypto: crypto-engine@01c15000 {
                        compatible = "allwinner,sun4i-a10-crypto";
                        reg = <0x01c15000 0x1000>;
                        interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&ahb1_gates 5>, <&ss_clk>;
+                       clocks = <&ccu CLK_BUS_SS>, <&ccu CLK_SS>;
                        clock-names = "ahb", "mod";
-                       resets = <&ahb1_rst 5>;
+                       resets = <&ccu RST_BUS_SS>;
                        reset-names = "ahb";
                };
 
-               usb_otg: usb@01c19000 {
-                       compatible = "allwinner,sun8i-a33-musb";
-                       reg = <0x01c19000 0x0400>;
-                       clocks = <&ahb1_gates 24>;
-                       resets = <&ahb1_rst 24>;
-                       interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
-                       interrupt-names = "mc";
-                       phys = <&usbphy 0>;
-                       phy-names = "usb";
-                       extcon = <&usbphy 0>;
+               fe0: display-frontend@01e00000 {
+                       compatible = "allwinner,sun8i-a33-display-frontend";
+                       reg = <0x01e00000 0x20000>;
+                       interrupts = <GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&ccu CLK_BUS_DE_FE>, <&ccu CLK_DE_FE>,
+                                <&ccu CLK_DRAM_DE_FE>;
+                       clock-names = "ahb", "mod",
+                                     "ram";
+                       resets = <&ccu RST_BUS_DE_FE>;
                        status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               fe0_out: port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+                                       reg = <1>;
+
+                                       fe0_out_be0: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&be0_in_fe0>;
+                                       };
+                               };
+                       };
                };
 
-               usbphy: phy@01c19400 {
-                       compatible = "allwinner,sun8i-a33-usb-phy";
-                       reg = <0x01c19400 0x14>,
-                             <0x01c1a800 0x4>;
-                       reg-names = "phy_ctrl",
-                                   "pmu1";
-                       clocks = <&usb_clk 8>,
-                                <&usb_clk 9>;
-                       clock-names = "usb0_phy",
-                                     "usb1_phy";
-                       resets = <&usb_clk 0>,
-                                <&usb_clk 1>;
-                       reset-names = "usb0_reset",
-                                     "usb1_reset";
-                       status = "disabled";
-                       #phy-cells = <1>;
+               be0: display-backend@01e60000 {
+                       compatible = "allwinner,sun8i-a33-display-backend";
+                       reg = <0x01e60000 0x10000>, <0x01e80000 0x1000>;
+                       reg-names = "be", "sat";
+                       interrupts = <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&ccu CLK_BUS_DE_BE>, <&ccu CLK_DE_BE>,
+                                <&ccu CLK_DRAM_DE_BE>, <&ccu CLK_BUS_SAT>;
+                       clock-names = "ahb", "mod",
+                                     "ram", "sat";
+                       resets = <&ccu RST_BUS_DE_BE>, <&ccu RST_BUS_SAT>;
+                       reset-names = "be", "sat";
+                       assigned-clocks = <&ccu CLK_DE_BE>;
+                       assigned-clock-rates = <300000000>;
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               be0_in: port@0 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+                                       reg = <0>;
+
+                                       be0_in_fe0: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&fe0_out_be0>;
+                                       };
+                               };
+
+                               be0_out: port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+                                       reg = <1>;
+
+                                       be0_out_drc0: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&drc0_in_be0>;
+                                       };
+                               };
+                       };
+               };
+
+               drc0: drc@01e70000 {
+                       compatible = "allwinner,sun8i-a33-drc";
+                       reg = <0x01e70000 0x10000>;
+                       interrupts = <GIC_SPI 91 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&ccu CLK_BUS_DRC>, <&ccu CLK_DRC>,
+                                <&ccu CLK_DRAM_DRC>;
+                       clock-names = "ahb", "mod", "ram";
+                       resets = <&ccu RST_BUS_DRC>;
+
+                       assigned-clocks = <&ccu CLK_DRC>;
+                       assigned-clock-rates = <300000000>;
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               drc0_in: port@0 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+                                       reg = <0>;
+
+                                       drc0_in_be0: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&be0_out_drc0>;
+                                       };
+                               };
+
+                               drc0_out: port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+                                       reg = <1>;
+
+                                       drc0_out_tcon0: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&tcon0_in_drc0>;
+                                       };
+                               };
+                       };
                };
        };
 };
 
+&ccu {
+       compatible = "allwinner,sun8i-a33-ccu";
+};
+
 &pio {
        compatible = "allwinner,sun8i-a33-pinctrl";
        interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
        };
 
 };
+
+&usb_otg {
+       compatible = "allwinner,sun8i-a33-musb";
+};
+
+&usbphy {
+       compatible = "allwinner,sun8i-a33-usb-phy";
+       reg = <0x01c19400 0x14>, <0x01c1a800 0x4>;
+       reg-names = "phy_ctrl", "pmu1";
+};
index f3b1d5f..06fddaa 100644 (file)
 
 &uart1 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart1_pins_a>;
+       pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>;
        status = "okay";
 };
 
index f89fe00..e5bcaba 100644 (file)
        status = "okay";
 };
 
+&uart1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart1_pins>;
+       status = "disabled";
+};
+
+&uart2 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart2_pins>;
+       status = "disabled";
+};
+
+&uart3 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart3_pins>;
+       status = "disabled";
+};
+
 &usb1_vbus_pin_a {
        allwinner,pins = "PG13";
 };
index 0adf932..5c9b5bf 100644 (file)
        status = "okay";
 };
 
+&uart1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart1_pins>;
+       status = "disabled";
+};
+
+&uart2 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart2_pins>;
+       status = "disabled";
+};
+
+&uart3 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart3_pins>;
+       status = "disabled";
+};
+
 &usbphy {
        /* USB VBUS is always on */
        status = "okay";
index daf50b9..3ec9712 100644 (file)
        status = "okay";
 };
 
+&uart1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart1_pins>;
+       status = "disabled";
+};
+
+&uart2 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart2_pins>;
+       status = "disabled";
+};
+
+&uart3 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart3_pins>;
+       status = "disabled";
+};
+
 &usbphy {
        /* USB VBUS is always on */
        status = "okay";
index 9ea313d..75a8654 100644 (file)
                        interrupt-controller;
                        #interrupt-cells = <3>;
 
+                       i2c0_pins: i2c0 {
+                               allwinner,pins = "PA11", "PA12";
+                               allwinner,function = "i2c0";
+                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                       };
+
+                       i2c1_pins: i2c1 {
+                               allwinner,pins = "PA18", "PA19";
+                               allwinner,function = "i2c1";
+                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                       };
+
+                       i2c2_pins: i2c2 {
+                               allwinner,pins = "PE12", "PE13";
+                               allwinner,function = "i2c2";
+                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                       };
+
                        mmc0_pins_a: mmc0@0 {
                                allwinner,pins = "PF0", "PF1", "PF2", "PF3",
                                                 "PF4", "PF5";
                                allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
                        };
 
-                       uart1_pins_a: uart1@0 {
-                               allwinner,pins = "PG6", "PG7", "PG8", "PG9";
+                       uart1_pins: uart1 {
+                               allwinner,pins = "PG6", "PG7";
+                               allwinner,function = "uart1";
+                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                       };
+
+                       uart1_rts_cts_pins: uart1_rts_cts {
+                               allwinner,pins = "PG8", "PG9";
                                allwinner,function = "uart1";
                                allwinner,drive = <SUN4I_PINCTRL_10_MA>;
                                allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
                        };
+
+                       uart2_pins: uart2 {
+                               allwinner,pins = "PA0", "PA1";
+                               allwinner,function = "uart2";
+                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                       };
+
+                       uart3_pins: uart3 {
+                               allwinner,pins = "PG13", "PG14";
+                               allwinner,function = "uart3";
+                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                       };
                };
 
                timer@01c20c00 {
                        status = "disabled";
                };
 
+               i2c0: i2c@01c2ac00 {
+                       compatible = "allwinner,sun6i-a31-i2c";
+                       reg = <0x01c2ac00 0x400>;
+                       interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&ccu CLK_BUS_I2C0>;
+                       resets = <&ccu RST_BUS_I2C0>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&i2c0_pins>;
+                       status = "disabled";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+               };
+
+               i2c1: i2c@01c2b000 {
+                       compatible = "allwinner,sun6i-a31-i2c";
+                       reg = <0x01c2b000 0x400>;
+                       interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&ccu CLK_BUS_I2C1>;
+                       resets = <&ccu RST_BUS_I2C1>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&i2c1_pins>;
+                       status = "disabled";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+               };
+
+               i2c2: i2c@01c2b400 {
+                       compatible = "allwinner,sun6i-a31-i2c";
+                       reg = <0x01c2b000 0x400>;
+                       interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&ccu CLK_BUS_I2C2>;
+                       resets = <&ccu RST_BUS_I2C2>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&i2c2_pins>;
+                       status = "disabled";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+               };
+
                gic: interrupt-controller@01c81000 {
                        compatible = "arm,cortex-a7-gic", "arm,cortex-a15-gic";
                        reg = <0x01c81000 0x1000>,
index 04b0146..439847a 100644 (file)
                        reg_rtc_ldo: rtc_ldo {
                                regulator-name = "vcc-rtc-vdd1v8-io";
                        };
+
+                       sw {
+                               /* unused */
+                       };
+               };
+       };
+
+       axp806: pmic@745 {
+               compatible = "x-powers,axp806";
+               reg = <0x745>;
+               interrupt-parent = <&nmi_intc>;
+               interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
+               interrupt-controller;
+               #interrupt-cells = <1>;
+               bldoin-supply = <&reg_dcdce>;
+
+               regulators {
+                       reg_s_aldo1: aldo1 {
+                               regulator-always-on;
+                               regulator-min-microvolt = <3000000>;
+                               regulator-max-microvolt = <3000000>;
+                               regulator-name = "avcc";
+                       };
+
+                       aldo2 {
+                               /*
+                                * unused, but use a different name to
+                                * avoid name clash with axp809's aldo's
+                                */
+                               regulator-name = "s_aldo2";
+                       };
+
+                       aldo3 {
+                               /*
+                                * unused, but use a different name to
+                                * avoid name clash with axp809's aldo's
+                                */
+                               regulator-name = "s_aldo3";
+                       };
+
+                       reg_bldo1: bldo1 {
+                               regulator-always-on;
+                               regulator-min-microvolt = <1700000>;
+                               regulator-max-microvolt = <1900000>;
+                               regulator-name = "vcc18-efuse-adc-display-csi";
+                       };
+
+                       reg_bldo2: bldo2 {
+                               regulator-always-on;
+                               regulator-min-microvolt = <1700000>;
+                               regulator-max-microvolt = <1900000>;
+                               regulator-name =
+                                       "vdd18-drampll-vcc18-pll-cpvdd";
+                       };
+
+                       bldo3 {
+                               /* unused */
+                       };
+
+                       reg_bldo4: bldo4 {
+                               regulator-min-microvolt = <1100000>;
+                               regulator-max-microvolt = <1300000>;
+                               regulator-name = "vcc12-hsic";
+                       };
+
+                       reg_cldo1: cldo1 {
+                               /*
+                                * This was 3V in the original design, but
+                                * 3.3V is the recommended supply voltage
+                                * for the Ethernet PHY.
+                                */
+                               regulator-min-microvolt = <3300000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-name = "vcc-gmac-phy";
+                       };
+
+                       reg_cldo2: cldo2 {
+                               regulator-min-microvolt = <2800000>;
+                               regulator-max-microvolt = <2800000>;
+                               regulator-name = "afvcc-cam";
+                       };
+
+                       reg_cldo3: cldo3 {
+                               regulator-min-microvolt = <3000000>;
+                               regulator-max-microvolt = <3000000>;
+                               regulator-name = "vcc-io-wifi-codec-io2";
+                       };
+
+                       reg_dcdca: dcdca {
+                               regulator-always-on;
+                               regulator-min-microvolt = <800000>;
+                               regulator-max-microvolt = <1100000>;
+                               regulator-name = "vdd-cpub";
+                       };
+
+                       reg_dcdcd: dcdcd {
+                               regulator-always-on;
+                               regulator-min-microvolt = <800000>;
+                               regulator-max-microvolt = <1100000>;
+                               regulator-name = "vdd-vpu";
+                       };
+
+                       reg_dcdce: dcdce {
+                               regulator-always-on;
+                               regulator-min-microvolt = <2100000>;
+                               regulator-max-microvolt = <2100000>;
+                               regulator-name = "vcc-bldo-codec-ldoin";
+                       };
+
+                       sw {
+                               /*
+                                * unused, but use a different name to
+                                * avoid name clash with axp809's sw
+                                */
+                               regulator-name = "s_sw";
+                       };
                };
        };
 
index fd874de..ceb6ef1 100644 (file)
 };
 
 &ehci1 {
-       status = "okay";
+       /* Enable if HSIC peripheral is connected */
+       status = "disabled";
 };
 
 &ehci2 {
                        reg_rtc_ldo: rtc_ldo {
                                regulator-name = "vcc-rtc-vdd1v8-io";
                        };
+
+                       sw {
+                               /* unused */
+                       };
+               };
+       };
+
+       axp806: pmic@745 {
+               compatible = "x-powers,axp806";
+               reg = <0x745>;
+               interrupt-parent = <&nmi_intc>;
+               interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
+               interrupt-controller;
+               #interrupt-cells = <1>;
+               bldoin-supply = <&reg_dcdce>;
+
+               regulators {
+                       reg_s_aldo1: aldo1 {
+                               regulator-always-on;
+                               regulator-min-microvolt = <3000000>;
+                               regulator-max-microvolt = <3000000>;
+                               regulator-name = "avcc";
+                       };
+
+                       aldo2 {
+                               /*
+                                * unused, but use a different name to
+                                * avoid name clash with axp809's aldo's
+                                */
+                               regulator-name = "s_aldo2";
+                       };
+
+                       aldo3 {
+                               /*
+                                * unused, but use a different name to
+                                * avoid name clash with axp809's aldo's
+                                */
+                               regulator-name = "s_aldo3";
+                       };
+
+                       reg_bldo1: bldo1 {
+                               regulator-always-on;
+                               regulator-min-microvolt = <1700000>;
+                               regulator-max-microvolt = <1900000>;
+                               regulator-name = "vcc18-efuse-adc-display-csi";
+                       };
+
+                       reg_bldo2: bldo2 {
+                               regulator-always-on;
+                               regulator-min-microvolt = <1700000>;
+                               regulator-max-microvolt = <1900000>;
+                               regulator-name =
+                                       "vdd18-drampll-vcc18-pll-cpvdd";
+                       };
+
+                       bldo3 {
+                               /* unused */
+                       };
+
+                       reg_bldo4: bldo4 {
+                               regulator-min-microvolt = <1100000>;
+                               regulator-max-microvolt = <1300000>;
+                               regulator-name = "vcc12-hsic";
+                       };
+
+                       reg_cldo1: cldo1 {
+                               /*
+                                * This was 3V in the original design, but
+                                * 3.3V is the recommended supply voltage
+                                * for the Ethernet PHY.
+                                */
+                               regulator-min-microvolt = <3300000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-name = "vcc-gmac-phy";
+                       };
+
+                       reg_cldo2: cldo2 {
+                               regulator-min-microvolt = <2800000>;
+                               regulator-max-microvolt = <2800000>;
+                               regulator-name = "afvcc-cam";
+                       };
+
+                       reg_cldo3: cldo3 {
+                               regulator-min-microvolt = <3000000>;
+                               regulator-max-microvolt = <3000000>;
+                               regulator-name = "vcc-io-wifi-codec-io2";
+                       };
+
+                       reg_dcdca: dcdca {
+                               regulator-always-on;
+                               regulator-min-microvolt = <800000>;
+                               regulator-max-microvolt = <1100000>;
+                               regulator-name = "vdd-cpub";
+                       };
+
+                       reg_dcdcd: dcdcd {
+                               regulator-always-on;
+                               regulator-min-microvolt = <800000>;
+                               regulator-max-microvolt = <1100000>;
+                               regulator-name = "vdd-vpu";
+                       };
+
+                       reg_dcdce: dcdce {
+                               regulator-always-on;
+                               regulator-min-microvolt = <2100000>;
+                               regulator-max-microvolt = <2100000>;
+                               regulator-name = "vcc-bldo-codec-ldoin";
+                       };
+
+                       sw {
+                               /*
+                                * unused, but use a different name to
+                                * avoid name clash with axp809's sw
+                                */
+                               regulator-name = "s_sw";
+                       };
                };
        };
 
 };
 
 &usbphy2 {
-       status = "okay";
+       phy-supply = <&reg_bldo4>;
+       /* Enable if HSIC peripheral is connected */
+       status = "disabled";
 };
 
 &usbphy3 {
index c7bb832..23b98fd 100644 (file)
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
-#include <linux/types.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
-#include <linux/list.h>
-#include <linux/platform_device.h>
-#include <linux/slab.h>
-#include <linux/string.h>
 #include <linux/syscore_ops.h>
 #include <linux/amba/bus.h>
-#include <linux/amba/kmi.h>
 #include <linux/io.h>
 #include <linux/irqchip.h>
-#include <linux/platform_data/clk-integrator.h>
 #include <linux/of_irq.h>
 #include <linux/of_address.h>
 #include <linux/of_platform.h>
-#include <linux/stat.h>
 #include <linux/termios.h>
 
-#include <asm/setup.h>
-#include <asm/param.h>         /* HZ */
-#include <asm/mach-types.h>
-
 #include <asm/mach/arch.h>
-#include <asm/mach/irq.h>
 #include <asm/mach/map.h>
-#include <asm/mach/time.h>
 
 #include "hardware.h"
 #include "cm.h"
@@ -68,14 +54,8 @@ static void __iomem *ebi_base;
 
 /*
  * Logical      Physical
- * ef000000                    Cache flush
- * f1100000    11000000        System controller registers
- * f1300000    13000000        Counter/Timer
  * f1400000    14000000        Interrupt controller
  * f1600000    16000000        UART 0
- * f1700000    17000000        UART 1
- * f1a00000    1a000000        Debug LEDs
- * f1b00000    1b000000        GPIO
  */
 
 static struct map_desc ap_io_desc[] __initdata __maybe_unused = {
@@ -89,16 +69,6 @@ static struct map_desc ap_io_desc[] __initdata __maybe_unused = {
                .pfn            = __phys_to_pfn(INTEGRATOR_UART0_BASE),
                .length         = SZ_4K,
                .type           = MT_DEVICE
-       }, {
-               .virtual        = IO_ADDRESS(INTEGRATOR_DBG_BASE),
-               .pfn            = __phys_to_pfn(INTEGRATOR_DBG_BASE),
-               .length         = SZ_4K,
-               .type           = MT_DEVICE
-       }, {
-               .virtual        = IO_ADDRESS(INTEGRATOR_AP_GPIO_BASE),
-               .pfn            = __phys_to_pfn(INTEGRATOR_AP_GPIO_BASE),
-               .length         = SZ_4K,
-               .type           = MT_DEVICE
        }
 };
 
@@ -196,16 +166,10 @@ static void __init ap_init_irq_of(void)
 
 /* For the Device Tree, add in the UART callbacks as AUXDATA */
 static struct of_dev_auxdata ap_auxdata_lookup[] __initdata = {
-       OF_DEV_AUXDATA("arm,primecell", INTEGRATOR_RTC_BASE,
-               "rtc", NULL),
        OF_DEV_AUXDATA("arm,primecell", INTEGRATOR_UART0_BASE,
                "uart0", &ap_uart_data),
        OF_DEV_AUXDATA("arm,primecell", INTEGRATOR_UART1_BASE,
                "uart1", &ap_uart_data),
-       OF_DEV_AUXDATA("arm,primecell", KMI0_BASE,
-               "kmi0", NULL),
-       OF_DEV_AUXDATA("arm,primecell", KMI1_BASE,
-               "kmi1", NULL),
        { /* sentinel */ },
 };
 
index 8252983..772a7cf 100644 (file)
@@ -7,67 +7,40 @@
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License.
  */
-#include <linux/types.h>
 #include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/list.h>
-#include <linux/platform_device.h>
-#include <linux/dma-mapping.h>
-#include <linux/string.h>
-#include <linux/device.h>
-#include <linux/amba/bus.h>
-#include <linux/amba/kmi.h>
-#include <linux/amba/clcd.h>
-#include <linux/platform_data/video-clcd-versatile.h>
 #include <linux/amba/mmci.h>
 #include <linux/io.h>
 #include <linux/irqchip.h>
-#include <linux/gfp.h>
 #include <linux/of_irq.h>
 #include <linux/of_address.h>
 #include <linux/of_platform.h>
 #include <linux/sched_clock.h>
+#include <linux/regmap.h>
+#include <linux/mfd/syscon.h>
 
-#include <asm/setup.h>
-#include <asm/mach-types.h>
 #include <asm/mach/arch.h>
-#include <asm/mach/irq.h>
 #include <asm/mach/map.h>
-#include <asm/mach/time.h>
 
 #include "hardware.h"
 #include "cm.h"
 #include "common.h"
 
+/* Base address to the core module header */
+static struct regmap *cm_map;
 /* Base address to the CP controller */
 static void __iomem *intcp_con_base;
 
-#define INTCP_PA_CLCD_BASE             0xc0000000
+#define CM_COUNTER_OFFSET 0x28
 
 /*
  * Logical      Physical
- * f1000000    10000000        Core module registers
- * f1300000    13000000        Counter/Timer
  * f1400000    14000000        Interrupt controller
  * f1600000    16000000        UART 0
- * f1700000    17000000        UART 1
- * f1a00000    1a000000        Debug LEDs
- * fc900000    c9000000        GPIO
  * fca00000    ca000000        SIC
  */
 
 static struct map_desc intcp_io_desc[] __initdata __maybe_unused = {
        {
-               .virtual        = IO_ADDRESS(INTEGRATOR_HDR_BASE),
-               .pfn            = __phys_to_pfn(INTEGRATOR_HDR_BASE),
-               .length         = SZ_4K,
-               .type           = MT_DEVICE
-       }, {
-               .virtual        = IO_ADDRESS(INTEGRATOR_CT_BASE),
-               .pfn            = __phys_to_pfn(INTEGRATOR_CT_BASE),
-               .length         = SZ_4K,
-               .type           = MT_DEVICE
-       }, {
                .virtual        = IO_ADDRESS(INTEGRATOR_IC_BASE),
                .pfn            = __phys_to_pfn(INTEGRATOR_IC_BASE),
                .length         = SZ_4K,
@@ -77,16 +50,6 @@ static struct map_desc intcp_io_desc[] __initdata __maybe_unused = {
                .pfn            = __phys_to_pfn(INTEGRATOR_UART0_BASE),
                .length         = SZ_4K,
                .type           = MT_DEVICE
-       }, {
-               .virtual        = IO_ADDRESS(INTEGRATOR_DBG_BASE),
-               .pfn            = __phys_to_pfn(INTEGRATOR_DBG_BASE),
-               .length         = SZ_4K,
-               .type           = MT_DEVICE
-       }, {
-               .virtual        = IO_ADDRESS(INTEGRATOR_CP_GPIO_BASE),
-               .pfn            = __phys_to_pfn(INTEGRATOR_CP_GPIO_BASE),
-               .length         = SZ_4K,
-               .type           = MT_DEVICE
        }, {
                .virtual        = IO_ADDRESS(INTEGRATOR_CP_SIC_BASE),
                .pfn            = __phys_to_pfn(INTEGRATOR_CP_SIC_BASE),
@@ -121,66 +84,20 @@ static struct mmci_platform_data mmc_data = {
        .gpio_cd        = -1,
 };
 
-/*
- * CLCD support
- */
-/*
- * Ensure VGA is selected.
- */
-static void cp_clcd_enable(struct clcd_fb *fb)
-{
-       struct fb_var_screeninfo *var = &fb->fb.var;
-       u32 val = CM_CTRL_STATIC1 | CM_CTRL_STATIC2
-                       | CM_CTRL_LCDEN0 | CM_CTRL_LCDEN1;
-
-       if (var->bits_per_pixel <= 8 ||
-           (var->bits_per_pixel == 16 && var->green.length == 5))
-               /* Pseudocolor, RGB555, BGR555 */
-               val |= CM_CTRL_LCDMUXSEL_VGA555_TFT555;
-       else if (fb->fb.var.bits_per_pixel <= 16)
-               /* truecolor RGB565 */
-               val |= CM_CTRL_LCDMUXSEL_VGA565_TFT555;
-       else
-               val = 0; /* no idea for this, don't trust the docs */
-
-       cm_control(CM_CTRL_LCDMUXSEL_MASK|
-                  CM_CTRL_LCDEN0|
-                  CM_CTRL_LCDEN1|
-                  CM_CTRL_STATIC1|
-                  CM_CTRL_STATIC2|
-                  CM_CTRL_STATIC|
-                  CM_CTRL_n24BITEN, val);
-}
-
-static int cp_clcd_setup(struct clcd_fb *fb)
-{
-       fb->panel = versatile_clcd_get_panel("VGA");
-       if (!fb->panel)
-               return -EINVAL;
-
-       return versatile_clcd_setup_dma(fb, SZ_1M);
-}
-
-static struct clcd_board clcd_data = {
-       .name           = "Integrator/CP",
-       .caps           = CLCD_CAP_5551 | CLCD_CAP_RGB565 | CLCD_CAP_888,
-       .check          = clcdfb_check,
-       .decode         = clcdfb_decode,
-       .enable         = cp_clcd_enable,
-       .setup          = cp_clcd_setup,
-       .mmap           = versatile_clcd_mmap_dma,
-       .remove         = versatile_clcd_remove_dma,
-};
-
-#define REFCOUNTER (__io_address(INTEGRATOR_HDR_BASE) + 0x28)
-
 static u64 notrace intcp_read_sched_clock(void)
 {
-       return readl(REFCOUNTER);
+       unsigned int val;
+
+       /* MMIO so discard return code */
+       regmap_read(cm_map, CM_COUNTER_OFFSET, &val);
+       return val;
 }
 
 static void __init intcp_init_early(void)
 {
+       cm_map = syscon_regmap_lookup_by_compatible("arm,core-module-integrator");
+       if (IS_ERR(cm_map))
+               return;
        sched_clock_register(intcp_read_sched_clock, 32, 24000000);
 }
 
@@ -195,22 +112,8 @@ static void __init intcp_init_irq_of(void)
  * and enforce the bus names since these are used for clock lookups.
  */
 static struct of_dev_auxdata intcp_auxdata_lookup[] __initdata = {
-       OF_DEV_AUXDATA("arm,primecell", INTEGRATOR_RTC_BASE,
-               "rtc", NULL),
-       OF_DEV_AUXDATA("arm,primecell", INTEGRATOR_UART0_BASE,
-               "uart0", NULL),
-       OF_DEV_AUXDATA("arm,primecell", INTEGRATOR_UART1_BASE,
-               "uart1", NULL),
-       OF_DEV_AUXDATA("arm,primecell", KMI0_BASE,
-               "kmi0", NULL),
-       OF_DEV_AUXDATA("arm,primecell", KMI1_BASE,
-               "kmi1", NULL),
        OF_DEV_AUXDATA("arm,primecell", INTEGRATOR_CP_MMC_BASE,
                "mmci", &mmc_data),
-       OF_DEV_AUXDATA("arm,primecell", INTEGRATOR_CP_AACI_BASE,
-               "aaci", &mmc_data),
-       OF_DEV_AUXDATA("arm,primecell", INTCP_PA_CLCD_BASE,
-               "clcd", &clcd_data),
        { /* sentinel */ },
 };
 
index 90a84c5..e6e3491 100644 (file)
        pinctrl-names = "default";
 };
 
+&ir {
+       status = "okay";
+       pinctrl-0 = <&remote_input_ao_pins>;
+       pinctrl-names = "default";
+};
+
+&i2c_A {
+       status = "okay";
+       pinctrl-0 = <&i2c_a_pins>;
+       pinctrl-names = "default";
+};
index 6297907..03e3d76 100644 (file)
@@ -50,3 +50,9 @@
        compatible = "amlogic,p200", "amlogic,meson-gxbb";
        model = "Amlogic Meson GXBB P200 Development Board";
 };
+
+&i2c_B {
+       status = "okay";
+       pinctrl-0 = <&i2c_b_pins>;
+       pinctrl-names = "default";
+};
index f4f30f6..06a34dc 100644 (file)
                device_type = "memory";
                reg = <0x0 0x0 0x0 0x40000000>;
        };
+
+       usb_pwr: regulator-usb-pwrs {
+               compatible = "regulator-fixed";
+
+               regulator-name = "USB_PWR";
+
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+
+               /* signal name in schematic: USB_PWR_EN */
+               gpio = <&gpio GPIODV_24 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
 };
 
 /* This UART is brought out to the DB9 connector */
        pinctrl-names = "default";
 };
 
+&ir {
+       status = "okay";
+       pinctrl-0 = <&remote_input_ao_pins>;
+       pinctrl-names = "default";
+};
+
+&usb0_phy {
+       status = "okay";
+       phy-supply = <&usb_pwr>;
+};
+
+&usb1_phy {
+       status = "okay";
+};
+
+&usb0 {
+       status = "okay";
+};
+
+&usb1 {
+       status = "okay";
+};
index 54bb7c7..73f1593 100644 (file)
        chosen {
                stdout-path = "serial0:115200n8";
        };
+
+       usb_vbus: regulator-usb0-vbus {
+               compatible = "regulator-fixed";
+
+               regulator-name = "USB0_VBUS";
+
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+
+               gpio = <&gpio GPIODV_24 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
+
 };
 
 &uart_AO {
        pinctrl-names = "default";
 
 };
+
+&ir {
+       status = "okay";
+       pinctrl-0 = <&remote_input_ao_pins>;
+       pinctrl-names = "default";
+};
+
+&ethmac {
+       status = "okay";
+       pinctrl-0 = <&eth_pins>;
+       pinctrl-names = "default";
+};
+
+&usb0_phy {
+       status = "okay";
+       phy-supply = <&usb_vbus>;
+};
+
+&usb1_phy {
+       status = "okay";
+};
+
+&usb0 {
+       status = "okay";
+};
+
+&usb1 {
+       status = "okay";
+};
index bf6c8d0..610e0e1 100644 (file)
@@ -45,6 +45,9 @@
 #include <dt-bindings/interrupt-controller/arm-gic.h>
 #include <dt-bindings/gpio/meson-gxbb-gpio.h>
 #include <dt-bindings/reset/amlogic,meson-gxbb-reset.h>
+#include <dt-bindings/clock/gxbb-clkc.h>
+#include <dt-bindings/clock/gxbb-aoclkc.h>
+#include <dt-bindings/reset/gxbb-aoclkc.h>
 
 / {
        compatible = "amlogic,meson-gxbb";
                method = "smc";
        };
 
+       firmware {
+               sm: secure-monitor {
+                       compatible = "amlogic,meson-gxbb-sm";
+               };
+       };
+
+       efuse: efuse {
+               compatible = "amlogic,meson-gxbb-efuse";
+               #address-cells = <1>;
+               #size-cells = <1>;
+
+               sn: sn@14 {
+                       reg = <0x14 0x10>;
+               };
+
+               eth_mac: eth_mac@34 {
+                       reg = <0x34 0x10>;
+               };
+
+               bid: bid@46 {
+                       reg = <0x46 0x30>;
+               };
+       };
+
        timer {
                compatible = "arm,armv8-timer";
                interrupts = <GIC_PPI 13
                #size-cells = <2>;
                ranges;
 
+               usb0_phy: phy@c0000000 {
+                       compatible = "amlogic,meson-gxbb-usb2-phy";
+                       #phy-cells = <0>;
+                       reg = <0x0 0xc0000000 0x0 0x20>;
+                       resets = <&reset RESET_USB_OTG>;
+                       clocks = <&clkc CLKID_USB>, <&clkc CLKID_USB0>;
+                       clock-names = "usb_general", "usb";
+                       status = "disabled";
+               };
+
+               usb1_phy: phy@c0000020 {
+                       compatible = "amlogic,meson-gxbb-usb2-phy";
+                       #phy-cells = <0>;
+                       reg = <0x0 0xc0000020 0x0 0x20>;
+                       clocks = <&clkc CLKID_USB>, <&clkc CLKID_USB1>;
+                       clock-names = "usb_general", "usb";
+                       status = "disabled";
+               };
+
                cbus: cbus@c1100000 {
                        compatible = "simple-bus";
                        reg = <0x0 0xc1100000 0x0 0x100000>;
                                status = "disabled";
                        };
 
+                       pwm_ab: pwm@8550 {
+                               compatible = "amlogic,meson-gxbb-pwm";
+                               reg = <0x0 0x08550 0x0 0x10>;
+                               #pwm-cells = <3>;
+                               status = "disabled";
+                       };
+
+                       pwm_cd: pwm@8650 {
+                               compatible = "amlogic,meson-gxbb-pwm";
+                               reg = <0x0 0x08650 0x0 0x10>;
+                               #pwm-cells = <3>;
+                               status = "disabled";
+                       };
+
+                       pwm_ef: pwm@86c0 {
+                               compatible = "amlogic,meson-gxbb-pwm";
+                               reg = <0x0 0x086c0 0x0 0x10>;
+                               #pwm-cells = <3>;
+                               status = "disabled";
+                       };
+
                        uart_C: serial@8700 {
                                compatible = "amlogic,meson-uart";
                                reg = <0x0 0x8700 0x0 0x14>;
                                clocks = <&xtal>;
                                status = "disabled";
                        };
+
+                       watchdog@98d0 {
+                               compatible = "amlogic,meson-gxbb-wdt";
+                               reg = <0x0 0x098d0 0x0 0x10>;
+                               clocks = <&xtal>;
+                       };
+
+                       spifc: spi@8c80 {
+                               compatible = "amlogic,meson-gxbb-spifc";
+                               reg = <0x0 0x08c80 0x0 0x80>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               clocks = <&clkc CLKID_SPI>;
+                               status = "disabled";
+                       };
+
+                       i2c_A: i2c@8500 {
+                               compatible = "amlogic,meson-gxbb-i2c";
+                               reg = <0x0 0x08500 0x0 0x20>;
+                               interrupts = <GIC_SPI 21 IRQ_TYPE_EDGE_RISING>;
+                               clocks = <&clkc CLKID_I2C>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       i2c_B: i2c@87c0 {
+                               compatible = "amlogic,meson-gxbb-i2c";
+                               reg = <0x0 0x087c0 0x0 0x20>;
+                               interrupts = <GIC_SPI 214 IRQ_TYPE_EDGE_RISING>;
+                               clocks = <&clkc CLKID_I2C>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       i2c_C: i2c@87e0 {
+                               compatible = "amlogic,meson-gxbb-i2c";
+                               reg = <0x0 0x087e0 0x0 0x20>;
+                               interrupts = <GIC_SPI 215 IRQ_TYPE_EDGE_RISING>;
+                               clocks = <&clkc CLKID_I2C>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
                };
 
                gic: interrupt-controller@c4301000 {
                                                function = "uart_ao";
                                        };
                                };
+
+                               remote_input_ao_pins: remote_input_ao {
+                                       mux {
+                                               groups = "remote_input_ao";
+                                               function = "remote_input_ao";
+                                       };
+                               };
+
+                               i2c_ao_pins: i2c_ao {
+                                       mux {
+                                               groups = "i2c_sck_ao",
+                                                      "i2c_sda_ao";
+                                               function = "i2c_ao";
+                                       };
+                               };
+
+                               pwm_ao_a_3_pins: pwm_ao_a_3 {
+                                       mux {
+                                               groups = "pwm_ao_a_3";
+                                               function = "pwm_ao_a_3";
+                                       };
+                               };
+
+                               pwm_ao_a_6_pins: pwm_ao_a_6 {
+                                       mux {
+                                               groups = "pwm_ao_a_6";
+                                               function = "pwm_ao_a_6";
+                                       };
+                               };
+
+                               pwm_ao_a_12_pins: pwm_ao_a_12 {
+                                       mux {
+                                               groups = "pwm_ao_a_12";
+                                               function = "pwm_ao_a_12";
+                                       };
+                               };
+
+                               pwm_ao_b_pins: pwm_ao_b {
+                                       mux {
+                                               groups = "pwm_ao_b";
+                                               function = "pwm_ao_b";
+                                       };
+                               };
+                       };
+
+                       clkc_AO: clock-controller@040 {
+                               compatible = "amlogic,gxbb-aoclkc";
+                               reg = <0x0 0x00040 0x0 0x4>;
+                               #clock-cells = <1>;
+                               #reset-cells = <1>;
                        };
 
                        uart_AO: serial@4c0 {
                                clocks = <&xtal>;
                                status = "disabled";
                        };
+
+                       ir: ir@580 {
+                               compatible = "amlogic,meson-gxbb-ir";
+                               reg = <0x0 0x00580 0x0 0x40>;
+                               interrupts = <GIC_SPI 196 IRQ_TYPE_EDGE_RISING>;
+                               status = "disabled";
+                       };
+
+                       pwm_ab_AO: pwm@550 {
+                               compatible = "amlogic,meson-gxbb-pwm";
+                               reg = <0x0 0x0550 0x0 0x10>;
+                               #pwm-cells = <3>;
+                               status = "disabled";
+                       };
+
+                       i2c_AO: i2c@500 {
+                               compatible = "amlogic,meson-gxbb-i2c";
+                               reg = <0x0 0x500 0x0 0x20>;
+                               interrupts = <GIC_SPI 195 IRQ_TYPE_EDGE_RISING>;
+                               clocks = <&clkc CLKID_AO_I2C>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
                };
 
                periphs: periphs@c8834000 {
                                        };
                                };
 
+                               nor_pins: nor {
+                                       mux {
+                                               groups = "nor_d",
+                                                      "nor_q",
+                                                      "nor_c",
+                                                      "nor_cs";
+                                               function = "nor";
+                                       };
+                               };
+
                                sdcard_pins: sdcard {
                                        mux {
                                                groups = "sdcard_d0",
                                        };
                                };
 
+                               sdio_pins: sdio {
+                                       mux {
+                                               groups = "sdio_d0",
+                                                      "sdio_d1",
+                                                      "sdio_d2",
+                                                      "sdio_d3",
+                                                      "sdio_cmd",
+                                                      "sdio_clk";
+                                               function = "sdio";
+                                       };
+                               };
+
+                               sdio_irq_pins: sdio_irq {
+                                       mux {
+                                               groups = "sdio_irq";
+                                               function = "sdio";
+                                       };
+                               };
+
                                uart_a_pins: uart_a {
                                        mux {
                                                groups = "uart_tx_a",
                                        };
                                };
 
+                               i2c_a_pins: i2c_a {
+                                       mux {
+                                               groups = "i2c_sck_a",
+                                                      "i2c_sda_a";
+                                               function = "i2c_a";
+                                       };
+                               };
+
+                               i2c_b_pins: i2c_b {
+                                       mux {
+                                               groups = "i2c_sck_b",
+                                                      "i2c_sda_b";
+                                               function = "i2c_b";
+                                       };
+                               };
+
+                               i2c_c_pins: i2c_c {
+                                       mux {
+                                               groups = "i2c_sck_c",
+                                                      "i2c_sda_c";
+                                               function = "i2c_c";
+                                       };
+                               };
+
                                eth_pins: eth_c {
                                        mux {
                                                groups = "eth_mdio",
                                                function = "eth";
                                        };
                                };
+
+                               pwm_a_x_pins: pwm_a_x {
+                                       mux {
+                                               groups = "pwm_a_x";
+                                               function = "pwm_a_x";
+                                       };
+                               };
+
+                               pwm_a_y_pins: pwm_a_y {
+                                       mux {
+                                               groups = "pwm_a_y";
+                                               function = "pwm_a_y";
+                                       };
+                               };
+
+                               pwm_b_pins: pwm_b {
+                                       mux {
+                                               groups = "pwm_b";
+                                               function = "pwm_b";
+                                       };
+                               };
+
+                               pwm_d_pins: pwm_d {
+                                       mux {
+                                               groups = "pwm_d";
+                                               function = "pwm_d";
+                                       };
+                               };
+
+                               pwm_e_pins: pwm_e {
+                                       mux {
+                                               groups = "pwm_e";
+                                               function = "pwm_e";
+                                       };
+                               };
+
+                               pwm_f_x_pins: pwm_f_x {
+                                       mux {
+                                               groups = "pwm_f_x";
+                                               function = "pwm_f_x";
+                                       };
+                               };
+
+                               pwm_f_y_pins: pwm_f_y {
+                                       mux {
+                                               groups = "pwm_f_y";
+                                               function = "pwm_f_y";
+                                       };
+                               };
                        };
                };
 
                                #clock-cells = <1>;
                                reg = <0x0 0x0 0x0 0x3db>;
                        };
+
+                       mailbox: mailbox@404 {
+                               compatible = "amlogic,meson-gxbb-mhu";
+                               reg = <0 0x404 0 0x4c>;
+                               interrupts = <0 208 IRQ_TYPE_EDGE_RISING>,
+                                            <0 209 IRQ_TYPE_EDGE_RISING>,
+                                            <0 210 IRQ_TYPE_EDGE_RISING>;
+                               #mbox-cells = <1>;
+                       };
                };
 
                apb: apb@d0000000 {
                        ranges = <0x0 0x0 0x0 0xd0000000 0x0 0x200000>;
                };
 
+               usb0: usb@c9000000 {
+                       compatible = "amlogic,meson-gxbb-usb", "snps,dwc2";
+                       reg = <0x0 0xc9000000 0x0 0x40000>;
+                       interrupts = <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clkc CLKID_USB0_DDR_BRIDGE>;
+                       clock-names = "otg";
+                       phys = <&usb0_phy>;
+                       phy-names = "usb2-phy";
+                       dr_mode = "host";
+                       status = "disabled";
+               };
+
+               usb1: usb@c9100000 {
+                       compatible = "amlogic,meson-gxbb-usb", "snps,dwc2";
+                       reg = <0x0 0xc9100000 0x0 0x40000>;
+                       interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clkc CLKID_USB1_DDR_BRIDGE>;
+                       clock-names = "otg";
+                       phys = <&usb1_phy>;
+                       phy-names = "usb2-phy";
+                       dr_mode = "host";
+                       status = "disabled";
+               };
+
                ethmac: ethernet@c9410000 {
-                       compatible = "amlogic,meson6-dwmac", "snps,dwmac";
+                       compatible = "amlogic,meson-gxbb-dwmac", "snps,dwmac";
                        reg = <0x0 0xc9410000 0x0 0x10000
                               0x0 0xc8834540 0x0 0x4>;
                        interrupts = <0 8 1>;
                        interrupt-names = "macirq";
-                       clocks = <&xtal>;
-                       clock-names = "stmmaceth";
+                       clocks = <&clkc CLKID_ETH>,
+                                <&clkc CLKID_FCLK_DIV2>,
+                                <&clkc CLKID_MPLL2>;
+                       clock-names = "stmmaceth", "clkin0", "clkin1";
                        phy-mode = "rgmii";
                        status = "disabled";
                };
index 17139f7..eb72830 100644 (file)
@@ -1,4 +1,4 @@
-dtb-$(CONFIG_ARCH_R8A7795) += r8a7795-salvator-x.dtb
+dtb-$(CONFIG_ARCH_R8A7795) += r8a7795-salvator-x.dtb r8a7795-h3ulcb.dtb
 dtb-$(CONFIG_ARCH_R8A7796) += r8a7796-salvator-x.dtb
 
 always         := $(dtb-y)
diff --git a/arch/arm64/boot/dts/renesas/r8a7795-h3ulcb.dts b/arch/arm64/boot/dts/renesas/r8a7795-h3ulcb.dts
new file mode 100644 (file)
index 0000000..bcb11a8
--- /dev/null
@@ -0,0 +1,328 @@
+/*
+ * Device Tree Source for the H3ULCB board
+ *
+ * Copyright (C) 2016 Renesas Electronics Corp.
+ * Copyright (C) 2016 Cogent Embedded, Inc.
+ *
+ * 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.
+ */
+
+/dts-v1/;
+#include "r8a7795.dtsi"
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+       model = "Renesas H3ULCB board based on r8a7795";
+       compatible = "renesas,h3ulcb", "renesas,r8a7795";
+
+       aliases {
+               serial0 = &scif2;
+               ethernet0 = &avb;
+       };
+
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+
+       memory@48000000 {
+               device_type = "memory";
+               /* first 128MB is reserved for secure area. */
+               reg = <0x0 0x48000000 0x0 0x38000000>;
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               led5 {
+                       gpios = <&gpio6 12 GPIO_ACTIVE_HIGH>;
+               };
+               led6 {
+                       gpios = <&gpio6 13 GPIO_ACTIVE_HIGH>;
+               };
+       };
+
+       keyboard {
+               compatible = "gpio-keys";
+
+               key-1 {
+                       linux,code = <KEY_1>;
+                       label = "SW3";
+                       wakeup-source;
+                       debounce-interval = <20>;
+                       gpios = <&gpio6 11 GPIO_ACTIVE_LOW>;
+               };
+       };
+
+       x12_clk: x12 {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <24576000>;
+       };
+
+       vcc_sdhi0: regulator-vcc-sdhi0 {
+               compatible = "regulator-fixed";
+
+               regulator-name = "SDHI0 Vcc";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+
+               gpio = <&gpio5 2 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
+
+       vccq_sdhi0: regulator-vccq-sdhi0 {
+               compatible = "regulator-gpio";
+
+               regulator-name = "SDHI0 VccQ";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <3300000>;
+
+               gpios = <&gpio5 1 GPIO_ACTIVE_HIGH>;
+               gpios-states = <1>;
+               states = <3300000 1
+                         1800000 0>;
+       };
+
+       audio_clkout: audio-clkout {
+               /*
+                * This is same as <&rcar_sound 0>
+                * but needed to avoid cs2000/rcar_sound probe dead-lock
+                */
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <11289600>;
+       };
+
+       rsnd_ak4613: sound {
+               compatible = "simple-audio-card";
+
+               simple-audio-card,format = "left_j";
+               simple-audio-card,bitclock-master = <&sndcpu>;
+               simple-audio-card,frame-master = <&sndcpu>;
+
+               sndcpu: simple-audio-card,cpu {
+                       sound-dai = <&rcar_sound>;
+               };
+
+               sndcodec: simple-audio-card,codec {
+                       sound-dai = <&ak4613>;
+               };
+       };
+};
+
+&extal_clk {
+       clock-frequency = <16666666>;
+};
+
+&extalr_clk {
+       clock-frequency = <32768>;
+};
+
+&pfc {
+       pinctrl-0 = <&scif_clk_pins>;
+       pinctrl-names = "default";
+
+       scif2_pins: scif2 {
+               groups = "scif2_data_a";
+               function = "scif2";
+       };
+
+       scif_clk_pins: scif_clk {
+               groups = "scif_clk_a";
+               function = "scif_clk";
+       };
+
+       i2c2_pins: i2c2 {
+               groups = "i2c2_a";
+               function = "i2c2";
+       };
+
+       avb_pins: avb {
+               groups = "avb_mdc";
+               function = "avb";
+       };
+
+       sdhi0_pins_3v3: sd0_3v3 {
+               groups = "sdhi0_data4", "sdhi0_ctrl";
+               function = "sdhi0";
+               power-source = <3300>;
+       };
+
+       sdhi0_pins_1v8: sd0_1v8 {
+               groups = "sdhi0_data4", "sdhi0_ctrl";
+               function = "sdhi0";
+               power-source = <1800>;
+       };
+
+       sound_pins: sound {
+               groups = "ssi01239_ctrl", "ssi0_data", "ssi1_data_a";
+               function = "ssi";
+       };
+
+       sound_clk_pins: sound-clk {
+               groups = "audio_clk_a_a", "audio_clk_b_a", "audio_clk_c_a",
+                        "audio_clkout_a", "audio_clkout3_a";
+               function = "audio_clk";
+       };
+
+       usb1_pins: usb1 {
+               groups = "usb1";
+               function = "usb1";
+       };
+};
+
+&scif2 {
+       pinctrl-0 = <&scif2_pins>;
+       pinctrl-names = "default";
+
+       status = "okay";
+};
+
+&scif_clk {
+       clock-frequency = <14745600>;
+       status = "okay";
+};
+
+&i2c2 {
+       pinctrl-0 = <&i2c2_pins>;
+       pinctrl-names = "default";
+
+       status = "okay";
+
+       clock-frequency = <100000>;
+
+       ak4613: codec@10 {
+               compatible = "asahi-kasei,ak4613";
+               #sound-dai-cells = <0>;
+               reg = <0x10>;
+               clocks = <&rcar_sound 3>;
+
+               asahi-kasei,in1-single-end;
+               asahi-kasei,in2-single-end;
+               asahi-kasei,out1-single-end;
+               asahi-kasei,out2-single-end;
+               asahi-kasei,out3-single-end;
+               asahi-kasei,out4-single-end;
+               asahi-kasei,out5-single-end;
+               asahi-kasei,out6-single-end;
+       };
+
+       cs2000: clk-multiplier@4f {
+               #clock-cells = <0>;
+               compatible = "cirrus,cs2000-cp";
+               reg = <0x4f>;
+               clocks = <&audio_clkout>, <&x12_clk>;
+               clock-names = "clk_in", "ref_clk";
+
+               assigned-clocks = <&cs2000>;
+               assigned-clock-rates = <24576000>; /* 1/1 divide */
+       };
+};
+
+&rcar_sound {
+       pinctrl-0 = <&sound_pins &sound_clk_pins>;
+       pinctrl-names = "default";
+
+       /* Single DAI */
+       #sound-dai-cells = <0>;
+
+       /* audio_clkout0/1/2/3 */
+       #clock-cells = <1>;
+       clock-frequency = <11289600>;
+
+       status = "okay";
+
+       /* update <audio_clk_b> to <cs2000> */
+       clocks = <&cpg CPG_MOD 1005>,
+                <&cpg CPG_MOD 1006>, <&cpg CPG_MOD 1007>,
+                <&cpg CPG_MOD 1008>, <&cpg CPG_MOD 1009>,
+                <&cpg CPG_MOD 1010>, <&cpg CPG_MOD 1011>,
+                <&cpg CPG_MOD 1012>, <&cpg CPG_MOD 1013>,
+                <&cpg CPG_MOD 1014>, <&cpg CPG_MOD 1015>,
+                <&cpg CPG_MOD 1022>, <&cpg CPG_MOD 1023>,
+                <&cpg CPG_MOD 1024>, <&cpg CPG_MOD 1025>,
+                <&cpg CPG_MOD 1026>, <&cpg CPG_MOD 1027>,
+                <&cpg CPG_MOD 1028>, <&cpg CPG_MOD 1029>,
+                <&cpg CPG_MOD 1030>, <&cpg CPG_MOD 1031>,
+                <&cpg CPG_MOD 1019>, <&cpg CPG_MOD 1018>,
+                <&audio_clk_a>, <&cs2000>,
+                <&audio_clk_c>,
+                <&cpg CPG_CORE R8A7795_CLK_S0D4>;
+
+       rcar_sound,dai {
+               dai0 {
+                       playback = <&ssi0 &src0 &dvc0>;
+                       capture  = <&ssi1 &src1 &dvc1>;
+               };
+       };
+};
+
+&sdhi0 {
+       pinctrl-0 = <&sdhi0_pins_3v3>;
+       pinctrl-1 = <&sdhi0_pins_1v8>;
+       pinctrl-names = "default", "state_uhs";
+
+       vmmc-supply = <&vcc_sdhi0>;
+       vqmmc-supply = <&vccq_sdhi0>;
+       cd-gpios = <&gpio3 12 GPIO_ACTIVE_LOW>;
+       bus-width = <4>;
+       sd-uhs-sdr50;
+       status = "okay";
+};
+
+&ssi1 {
+       shared-pin;
+};
+
+&wdt0 {
+       timeout-sec = <60>;
+       status = "okay";
+};
+
+&audio_clk_a {
+       clock-frequency = <22579200>;
+};
+
+&avb {
+       pinctrl-0 = <&avb_pins>;
+       pinctrl-names = "default";
+       renesas,no-ether-link;
+       phy-handle = <&phy0>;
+       status = "okay";
+
+       phy0: ethernet-phy@0 {
+               rxc-skew-ps = <900>;
+               rxdv-skew-ps = <0>;
+               rxd0-skew-ps = <0>;
+               rxd1-skew-ps = <0>;
+               rxd2-skew-ps = <0>;
+               rxd3-skew-ps = <0>;
+               txc-skew-ps = <900>;
+               txen-skew-ps = <0>;
+               txd0-skew-ps = <0>;
+               txd1-skew-ps = <0>;
+               txd2-skew-ps = <0>;
+               txd3-skew-ps = <0>;
+               reg = <0>;
+               interrupt-parent = <&gpio2>;
+               interrupts = <11 IRQ_TYPE_LEVEL_LOW>;
+       };
+};
+
+&usb2_phy1 {
+       pinctrl-0 = <&usb1_pins>;
+       pinctrl-names = "default";
+
+       status = "okay";
+};
+
+&ehci1 {
+       status = "okay";
+};
+
+&ohci1 {
+       status = "okay";
+};
index 98f0263..b1eab68 100644 (file)
                          1800000 0>;
        };
 
+       vbus0_usb2: regulator-vbus0-usb2 {
+               compatible = "regulator-fixed";
+
+               regulator-name = "USB20_VBUS0";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+
+               gpio = <&gpio6 16 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
+
        audio_clkout: audio_clkout {
                /*
                 * This is same as <&rcar_sound 0>
                        sound-dai = <&ak4613>;
                };
        };
+
+       vga-encoder {
+               compatible = "adi,adv7123";
+
+               ports {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       port@0 {
+                               reg = <0>;
+                               adv7123_in: endpoint {
+                                       remote-endpoint = <&du_out_rgb>;
+                               };
+                       };
+                       port@1 {
+                               reg = <1>;
+                               adv7123_out: endpoint {
+                                       remote-endpoint = <&vga_in>;
+                               };
+                       };
+               };
+       };
+
+       vga {
+               compatible = "vga-connector";
+
+               port {
+                       vga_in: endpoint {
+                               remote-endpoint = <&adv7123_out>;
+                       };
+               };
+       };
+};
+
+&du {
+       pinctrl-0 = <&du_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+
+       ports {
+               port@0 {
+                       endpoint {
+                               remote-endpoint = <&adv7123_in>;
+                       };
+               };
+       };
 };
 
 &extal_clk {
                function = "avb";
        };
 
+       du_pins: du {
+               groups = "du_rgb888", "du_sync", "du_oddf", "du_clk_out_0";
+               function = "du";
+       };
+
        sdhi0_pins: sd0 {
                groups = "sdhi0_data4", "sdhi0_ctrl";
                function = "sdhi0";
                function = "audio_clk";
        };
 
+       usb0_pins: usb0 {
+               groups = "usb0";
+               function = "usb0";
+       };
+
        usb1_pins: usb1 {
                groups = "usb1";
                function = "usb1";
        status = "okay";
 };
 
+&usb2_phy0 {
+       pinctrl-0 = <&usb0_pins>;
+       pinctrl-names = "default";
+
+       vbus-supply = <&vbus0_usb2>;
+       status = "okay";
+};
+
 &usb2_phy1 {
        pinctrl-0 = <&usb1_pins>;
        pinctrl-names = "default";
        status = "okay";
 };
 
+&ehci0 {
+       status = "okay";
+};
+
 &ehci1 {
        status = "okay";
 };
        status = "okay";
 };
 
+&ohci0 {
+       status = "okay";
+};
+
 &ohci1 {
        status = "okay";
 };
        status = "okay";
 };
 
+&hsusb {
+       status = "okay";
+};
+
 &pcie_bus_clk {
        clock-frequency = <100000000>;
        status = "okay";
index b902356..8c15040 100644 (file)
                };
 
                audma0: dma-controller@ec700000 {
-                       compatible = "renesas,rcar-dmac";
+                       compatible = "renesas,dmac-r8a7795",
+                                    "renesas,rcar-dmac";
                        reg = <0 0xec700000 0 0x10000>;
                        interrupts = <GIC_SPI 350 IRQ_TYPE_LEVEL_HIGH
                                      GIC_SPI 320 IRQ_TYPE_LEVEL_HIGH
                };
 
                audma1: dma-controller@ec720000 {
-                       compatible = "renesas,rcar-dmac";
+                       compatible = "renesas,dmac-r8a7795",
+                                    "renesas,rcar-dmac";
                        reg = <0 0xec720000 0 0x10000>;
                        interrupts = <GIC_SPI 351 IRQ_TYPE_LEVEL_HIGH
                                      GIC_SPI 336 IRQ_TYPE_LEVEL_HIGH
                        reg = <0 0xee100000 0 0x2000>;
                        interrupts = <GIC_SPI 165 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 314>;
+                       max-frequency = <200000000>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
                        status = "disabled";
                };
                        reg = <0 0xee120000 0 0x2000>;
                        interrupts = <GIC_SPI 166 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 313>;
+                       max-frequency = <200000000>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
                        status = "disabled";
                };
                        reg = <0 0xee140000 0 0x2000>;
                        interrupts = <GIC_SPI 167 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 312>;
+                       max-frequency = <200000000>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       cap-mmc-highspeed;
                        status = "disabled";
                };
 
                        reg = <0 0xee160000 0 0x2000>;
                        interrupts = <GIC_SPI 168 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 311>;
+                       max-frequency = <200000000>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       cap-mmc-highspeed;
                        status = "disabled";
                };
 
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
                        status = "disabled";
                };
+
+               hsusb: usb@e6590000 {
+                       compatible = "renesas,usbhs-r8a7795",
+                                    "renesas,rcar-gen3-usbhs";
+                       reg = <0 0xe6590000 0 0x100>;
+                       interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 704>;
+                       dmas = <&usb_dmac0 0>, <&usb_dmac0 1>,
+                              <&usb_dmac1 0>, <&usb_dmac1 1>;
+                       dma-names = "ch0", "ch1", "ch2", "ch3";
+                       renesas,buswait = <11>;
+                       phys = <&usb2_phy0>;
+                       phy-names = "usb";
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       status = "disabled";
+               };
+
                pciec0: pcie@fe000000 {
                        compatible = "renesas,pcie-r8a7795";
                        reg = <0 0xfe000000 0 0x80000>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
                        status = "disabled";
                };
+
+               vspbc: vsp@fe920000 {
+                       compatible = "renesas,vsp2";
+                       reg = <0 0xfe920000 0 0x8000>;
+                       interrupts = <GIC_SPI 465 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 624>;
+                       power-domains = <&sysc R8A7795_PD_A3VP>;
+
+                       renesas,fcp = <&fcpvb1>;
+               };
+
+               fcpvb1: fcp@fe92f000 {
+                       compatible = "renesas,r8a7795-fcpv", "renesas,fcpv";
+                       reg = <0 0xfe92f000 0 0x200>;
+                       clocks = <&cpg CPG_MOD 606>;
+                       power-domains = <&sysc R8A7795_PD_A3VP>;
+               };
+
+               fcpf0: fcp@fe950000 {
+                       compatible = "renesas,r8a7795-fcpf", "renesas,fcpf";
+                       reg = <0 0xfe950000 0 0x200>;
+                       clocks = <&cpg CPG_MOD 615>;
+                       power-domains = <&sysc R8A7795_PD_A3VP>;
+               };
+
+               fcpf1: fcp@fe951000 {
+                       compatible = "renesas,r8a7795-fcpf", "renesas,fcpf";
+                       reg = <0 0xfe951000 0 0x200>;
+                       clocks = <&cpg CPG_MOD 614>;
+                       power-domains = <&sysc R8A7795_PD_A3VP>;
+               };
+
+               fcpf2: fcp@fe952000 {
+                       compatible = "renesas,r8a7795-fcpf", "renesas,fcpf";
+                       reg = <0 0xfe952000 0 0x200>;
+                       clocks = <&cpg CPG_MOD 613>;
+                       power-domains = <&sysc R8A7795_PD_A3VP>;
+               };
+
+               vspbd: vsp@fe960000 {
+                       compatible = "renesas,vsp2";
+                       reg = <0 0xfe960000 0 0x8000>;
+                       interrupts = <GIC_SPI 266 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 626>;
+                       power-domains = <&sysc R8A7795_PD_A3VP>;
+
+                       renesas,fcp = <&fcpvb0>;
+               };
+
+               fcpvb0: fcp@fe96f000 {
+                       compatible = "renesas,r8a7795-fcpv", "renesas,fcpv";
+                       reg = <0 0xfe96f000 0 0x200>;
+                       clocks = <&cpg CPG_MOD 607>;
+                       power-domains = <&sysc R8A7795_PD_A3VP>;
+               };
+
+               vspi0: vsp@fe9a0000 {
+                       compatible = "renesas,vsp2";
+                       reg = <0 0xfe9a0000 0 0x8000>;
+                       interrupts = <GIC_SPI 444 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 631>;
+                       power-domains = <&sysc R8A7795_PD_A3VP>;
+
+                       renesas,fcp = <&fcpvi0>;
+               };
+
+               fcpvi0: fcp@fe9af000 {
+                       compatible = "renesas,r8a7795-fcpv", "renesas,fcpv";
+                       reg = <0 0xfe9af000 0 0x200>;
+                       clocks = <&cpg CPG_MOD 611>;
+                       power-domains = <&sysc R8A7795_PD_A3VP>;
+               };
+
+               vspi1: vsp@fe9b0000 {
+                       compatible = "renesas,vsp2";
+                       reg = <0 0xfe9b0000 0 0x8000>;
+                       interrupts = <GIC_SPI 445 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 630>;
+                       power-domains = <&sysc R8A7795_PD_A3VP>;
+
+                       renesas,fcp = <&fcpvi1>;
+               };
+
+               fcpvi1: fcp@fe9bf000 {
+                       compatible = "renesas,r8a7795-fcpv", "renesas,fcpv";
+                       reg = <0 0xfe9bf000 0 0x200>;
+                       clocks = <&cpg CPG_MOD 610>;
+                       power-domains = <&sysc R8A7795_PD_A3VP>;
+               };
+
+               vspi2: vsp@fe9c0000 {
+                       compatible = "renesas,vsp2";
+                       reg = <0 0xfe9c0000 0 0x8000>;
+                       interrupts = <GIC_SPI 446 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 629>;
+                       power-domains = <&sysc R8A7795_PD_A3VP>;
+
+                       renesas,fcp = <&fcpvi2>;
+               };
+
+               fcpvi2: fcp@fe9cf000 {
+                       compatible = "renesas,r8a7795-fcpv", "renesas,fcpv";
+                       reg = <0 0xfe9cf000 0 0x200>;
+                       clocks = <&cpg CPG_MOD 609>;
+                       power-domains = <&sysc R8A7795_PD_A3VP>;
+               };
+
+               vspd0: vsp@fea20000 {
+                       compatible = "renesas,vsp2";
+                       reg = <0 0xfea20000 0 0x4000>;
+                       interrupts = <GIC_SPI 466 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 623>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+
+                       renesas,fcp = <&fcpvd0>;
+               };
+
+               fcpvd0: fcp@fea27000 {
+                       compatible = "renesas,r8a7795-fcpv", "renesas,fcpv";
+                       reg = <0 0xfea27000 0 0x200>;
+                       clocks = <&cpg CPG_MOD 603>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+               };
+
+               vspd1: vsp@fea28000 {
+                       compatible = "renesas,vsp2";
+                       reg = <0 0xfea28000 0 0x4000>;
+                       interrupts = <GIC_SPI 467 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 622>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+
+                       renesas,fcp = <&fcpvd1>;
+               };
+
+               fcpvd1: fcp@fea2f000 {
+                       compatible = "renesas,r8a7795-fcpv", "renesas,fcpv";
+                       reg = <0 0xfea2f000 0 0x200>;
+                       clocks = <&cpg CPG_MOD 602>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+               };
+
+               vspd2: vsp@fea30000 {
+                       compatible = "renesas,vsp2";
+                       reg = <0 0xfea30000 0 0x4000>;
+                       interrupts = <GIC_SPI 468 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 621>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+
+                       renesas,fcp = <&fcpvd2>;
+               };
+
+               fcpvd2: fcp@fea37000 {
+                       compatible = "renesas,r8a7795-fcpv", "renesas,fcpv";
+                       reg = <0 0xfea37000 0 0x200>;
+                       clocks = <&cpg CPG_MOD 601>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+               };
+
+               vspd3: vsp@fea38000 {
+                       compatible = "renesas,vsp2";
+                       reg = <0 0xfea38000 0 0x4000>;
+                       interrupts = <GIC_SPI 469 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 620>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+
+                       renesas,fcp = <&fcpvd3>;
+               };
+
+               fcpvd3: fcp@fea3f000 {
+                       compatible = "renesas,r8a7795-fcpv", "renesas,fcpv";
+                       reg = <0 0xfea3f000 0 0x200>;
+                       clocks = <&cpg CPG_MOD 600>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+               };
+
+               fdp1@fe940000 {
+                       compatible = "renesas,fdp1";
+                       reg = <0 0xfe940000 0 0x2400>;
+                       interrupts = <GIC_SPI 262 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 119>;
+                       power-domains = <&sysc R8A7795_PD_A3VP>;
+                       renesas,fcp = <&fcpf0>;
+               };
+
+               fdp1@fe944000 {
+                       compatible = "renesas,fdp1";
+                       reg = <0 0xfe944000 0 0x2400>;
+                       interrupts = <GIC_SPI 263 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 118>;
+                       power-domains = <&sysc R8A7795_PD_A3VP>;
+                       renesas,fcp = <&fcpf1>;
+               };
+
+               fdp1@fe948000 {
+                       compatible = "renesas,fdp1";
+                       reg = <0 0xfe948000 0 0x2400>;
+                       interrupts = <GIC_SPI 264 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 117>;
+                       power-domains = <&sysc R8A7795_PD_A3VP>;
+                       renesas,fcp = <&fcpf2>;
+               };
+
+               du: display@feb00000 {
+                       compatible = "renesas,du-r8a7795";
+                       reg = <0 0xfeb00000 0 0x80000>,
+                             <0 0xfeb90000 0 0x14>;
+                       reg-names = "du", "lvds.0";
+                       interrupts = <GIC_SPI 256 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 268 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 269 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 270 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 724>,
+                                <&cpg CPG_MOD 723>,
+                                <&cpg CPG_MOD 722>,
+                                <&cpg CPG_MOD 721>,
+                                <&cpg CPG_MOD 727>;
+                       clock-names = "du.0", "du.1", "du.2", "du.3", "lvds.0";
+                       status = "disabled";
+
+                       vsps = <&vspd0 &vspd1 &vspd2 &vspd3>;
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@0 {
+                                       reg = <0>;
+                                       du_out_rgb: endpoint {
+                                       };
+                               };
+                               port@1 {
+                                       reg = <1>;
+                                       du_out_hdmi0: endpoint {
+                                       };
+                               };
+                               port@2 {
+                                       reg = <2>;
+                                       du_out_hdmi1: endpoint {
+                                       };
+                               };
+                               port@3 {
+                                       reg = <3>;
+                                       du_out_lvds0: endpoint {
+                                       };
+                               };
+                       };
+               };
        };
 };
index e72be38..13db7d6 100644 (file)
        };
 };
 
+&pfc {
+       pinctrl-0 = <&scif_clk_pins>;
+       pinctrl-names = "default";
+
+       scif2_pins: scif2 {
+               groups = "scif2_data_a";
+               function = "scif2";
+       };
+       scif_clk_pins: scif_clk {
+               groups = "scif_clk_a";
+               function = "scif_clk";
+       };
+};
+
 &extal_clk {
        clock-frequency = <16666666>;
 };
 
 &scif2 {
+       pinctrl-0 = <&scif2_pins>;
+       pinctrl-names = "default";
        status = "okay";
 };
 
index 1edf824..9217da9 100644 (file)
                        status = "disabled";
                };
 
+               gpio0: gpio@e6050000 {
+                       compatible = "renesas,gpio-r8a7796",
+                                    "renesas,gpio-rcar";
+                       reg = <0 0xe6050000 0 0x50>;
+                       interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
+                       #gpio-cells = <2>;
+                       gpio-controller;
+                       gpio-ranges = <&pfc 0 0 16>;
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+                       clocks = <&cpg CPG_MOD 912>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+               };
+
+               gpio1: gpio@e6051000 {
+                       compatible = "renesas,gpio-r8a7796",
+                                    "renesas,gpio-rcar";
+                       reg = <0 0xe6051000 0 0x50>;
+                       interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
+                       #gpio-cells = <2>;
+                       gpio-controller;
+                       gpio-ranges = <&pfc 0 32 29>;
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+                       clocks = <&cpg CPG_MOD 911>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+               };
+
+               gpio2: gpio@e6052000 {
+                       compatible = "renesas,gpio-r8a7796",
+                                    "renesas,gpio-rcar";
+                       reg = <0 0xe6052000 0 0x50>;
+                       interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
+                       #gpio-cells = <2>;
+                       gpio-controller;
+                       gpio-ranges = <&pfc 0 64 15>;
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+                       clocks = <&cpg CPG_MOD 910>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+               };
+
+               gpio3: gpio@e6053000 {
+                       compatible = "renesas,gpio-r8a7796",
+                                    "renesas,gpio-rcar";
+                       reg = <0 0xe6053000 0 0x50>;
+                       interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
+                       #gpio-cells = <2>;
+                       gpio-controller;
+                       gpio-ranges = <&pfc 0 96 16>;
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+                       clocks = <&cpg CPG_MOD 909>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+               };
+
+               gpio4: gpio@e6054000 {
+                       compatible = "renesas,gpio-r8a7796",
+                                    "renesas,gpio-rcar";
+                       reg = <0 0xe6054000 0 0x50>;
+                       interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
+                       #gpio-cells = <2>;
+                       gpio-controller;
+                       gpio-ranges = <&pfc 0 128 18>;
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+                       clocks = <&cpg CPG_MOD 908>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+               };
+
+               gpio5: gpio@e6055000 {
+                       compatible = "renesas,gpio-r8a7796",
+                                    "renesas,gpio-rcar";
+                       reg = <0 0xe6055000 0 0x50>;
+                       interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>;
+                       #gpio-cells = <2>;
+                       gpio-controller;
+                       gpio-ranges = <&pfc 0 160 26>;
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+                       clocks = <&cpg CPG_MOD 907>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+               };
+
+               gpio6: gpio@e6055400 {
+                       compatible = "renesas,gpio-r8a7796",
+                                    "renesas,gpio-rcar";
+                       reg = <0 0xe6055400 0 0x50>;
+                       interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
+                       #gpio-cells = <2>;
+                       gpio-controller;
+                       gpio-ranges = <&pfc 0 192 32>;
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+                       clocks = <&cpg CPG_MOD 906>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+               };
+
+               gpio7: gpio@e6055800 {
+                       compatible = "renesas,gpio-r8a7796",
+                                    "renesas,gpio-rcar";
+                       reg = <0 0xe6055800 0 0x50>;
+                       interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
+                       #gpio-cells = <2>;
+                       gpio-controller;
+                       gpio-ranges = <&pfc 0 224 4>;
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+                       clocks = <&cpg CPG_MOD 905>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+               };
+
+               pfc: pin-controller@e6060000 {
+                       compatible = "renesas,pfc-r8a7796";
+                       reg = <0 0xe6060000 0 0x50c>;
+               };
+
                cpg: clock-controller@e6150000 {
                        compatible = "renesas,r8a7796-cpg-mssr";
                        reg = <0 0xe6150000 0 0x1000>;
index ae461b1..0252939 100644 (file)
 /* CLKID_CLK81 */
 #define CLKID_MPLL0              13
 #define CLKID_MPLL1              14
-#define CLKID_MPLL2              15
+/* CLKID_MPLL2 */
 #define CLKID_DDR                16
 #define CLKID_DOS                17
 #define CLKID_ISA                18
 #define CLKID_PL301              19
 #define CLKID_PERIPHS            20
 #define CLKID_SPICC              21
-#define CLKID_I2C                22
+/* CLKID_I2C */
 #define CLKID_SAR_ADC            23
 #define CLKID_SMART_CARD         24
 #define CLKID_RNG0               25
 #define CLKID_ABUF               31
 #define CLKID_HIU_IFACE                  32
 #define CLKID_ASSIST_MISC        33
-#define CLKID_SPI                34
+/* CLKID_SPI */
 #define CLKID_I2S_SPDIF                  35
 #define CLKID_ETH                36
 #define CLKID_DEMUX              37
 #define CLKID_AIU                47
 #define CLKID_UART1              48
 #define CLKID_G2D                49
-#define CLKID_USB0               50
-#define CLKID_USB1               51
+/* CLKID_USB0 */
+/* CLKID_USB1 */
 #define CLKID_RESET              52
 #define CLKID_NAND               53
 #define CLKID_DOS_PARSER         54
-#define CLKID_USB                55
+/* CLKID_USB */
 #define CLKID_VDIN1              56
 #define CLKID_AHB_ARB0           57
 #define CLKID_EFUSE              58
 #define CLKID_AHB_CTRL_BUS       61
 #define CLKID_HDMI_INTR_SYNC     62
 #define CLKID_HDMI_PCLK                  63
-#define CLKID_USB1_DDR_BRIDGE    64
-#define CLKID_USB0_DDR_BRIDGE    65
+/* CLKID_USB1_DDR_BRIDGE */
+/* CLKID_USB0_DDR_BRIDGE */
 #define CLKID_MMC_PCLK           66
 #define CLKID_DVIN               67
 #define CLKID_UART2              68
 #define CLKID_AO_AHB_SRAM        90
 #define CLKID_AO_AHB_BUS         91
 #define CLKID_AO_IFACE           92
-#define CLKID_AO_I2C             93
+/* CLKID_AO_I2C */
 /* CLKID_SD_EMMC_A */
 /* CLKID_SD_EMMC_B */
 /* CLKID_SD_EMMC_C */
index c732b8c..3818c5e 100644 (file)
@@ -61,13 +61,13 @@ config DWMAC_LPC18XX
 config DWMAC_MESON
        tristate "Amlogic Meson dwmac support"
        default ARCH_MESON
-       depends on OF && (ARCH_MESON || COMPILE_TEST)
+       depends on OF && COMMON_CLK && (ARCH_MESON || COMPILE_TEST)
        help
          Support for Ethernet controller on Amlogic Meson SoCs.
 
          This selects the Amlogic Meson SoC glue layer support for
-         the stmmac device driver. This driver is used for Meson6 and
-         Meson8 SoCs.
+         the stmmac device driver. This driver is used for Meson6,
+         Meson8, Meson8b and GXBB SoCs.
 
 config DWMAC_ROCKCHIP
        tristate "Rockchip dwmac support"
index f0c9396..5d6ece5 100644 (file)
@@ -9,7 +9,7 @@ stmmac-objs:= stmmac_main.o stmmac_ethtool.o stmmac_mdio.o ring_mode.o  \
 obj-$(CONFIG_STMMAC_PLATFORM)  += stmmac-platform.o
 obj-$(CONFIG_DWMAC_IPQ806X)    += dwmac-ipq806x.o
 obj-$(CONFIG_DWMAC_LPC18XX)    += dwmac-lpc18xx.o
-obj-$(CONFIG_DWMAC_MESON)      += dwmac-meson.o
+obj-$(CONFIG_DWMAC_MESON)      += dwmac-meson.o dwmac-meson8b.o
 obj-$(CONFIG_DWMAC_ROCKCHIP)   += dwmac-rk.o
 obj-$(CONFIG_DWMAC_SOCFPGA)    += dwmac-altr-socfpga.o
 obj-$(CONFIG_DWMAC_STI)                += dwmac-sti.o
index c1bac19..309d995 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Amlogic Meson DWMAC glue layer
+ * Amlogic Meson6 and Meson8 DWMAC glue layer
  *
  * Copyright (C) 2014 Beniamino Galvani <b.galvani@gmail.com>
  *
@@ -96,5 +96,5 @@ static struct platform_driver meson6_dwmac_driver = {
 module_platform_driver(meson6_dwmac_driver);
 
 MODULE_AUTHOR("Beniamino Galvani <b.galvani@gmail.com>");
-MODULE_DESCRIPTION("Amlogic Meson DWMAC glue layer");
+MODULE_DESCRIPTION("Amlogic Meson6 and Meson8 DWMAC glue layer");
 MODULE_LICENSE("GPL v2");
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c
new file mode 100644 (file)
index 0000000..250e4ce
--- /dev/null
@@ -0,0 +1,324 @@
+/*
+ * Amlogic Meson8b and GXBB DWMAC glue layer
+ *
+ * Copyright (C) 2016 Martin Blumenstingl <martin.blumenstingl@googlemail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <linux/clk.h>
+#include <linux/clk-provider.h>
+#include <linux/device.h>
+#include <linux/ethtool.h>
+#include <linux/io.h>
+#include <linux/ioport.h>
+#include <linux/module.h>
+#include <linux/of_net.h>
+#include <linux/mfd/syscon.h>
+#include <linux/platform_device.h>
+#include <linux/stmmac.h>
+
+#include "stmmac_platform.h"
+
+#define PRG_ETH0                       0x0
+
+#define PRG_ETH0_RGMII_MODE            BIT(0)
+
+/* mux to choose between fclk_div2 (bit unset) and mpll2 (bit set) */
+#define PRG_ETH0_CLK_M250_SEL_SHIFT    4
+#define PRG_ETH0_CLK_M250_SEL_MASK     GENMASK(4, 4)
+
+#define PRG_ETH0_TXDLY_SHIFT           5
+#define PRG_ETH0_TXDLY_MASK            GENMASK(6, 5)
+#define PRG_ETH0_TXDLY_OFF             (0x0 << PRG_ETH0_TXDLY_SHIFT)
+#define PRG_ETH0_TXDLY_QUARTER         (0x1 << PRG_ETH0_TXDLY_SHIFT)
+#define PRG_ETH0_TXDLY_HALF            (0x2 << PRG_ETH0_TXDLY_SHIFT)
+#define PRG_ETH0_TXDLY_THREE_QUARTERS  (0x3 << PRG_ETH0_TXDLY_SHIFT)
+
+/* divider for the result of m250_sel */
+#define PRG_ETH0_CLK_M250_DIV_SHIFT    7
+#define PRG_ETH0_CLK_M250_DIV_WIDTH    3
+
+/* divides the result of m25_sel by either 5 (bit unset) or 10 (bit set) */
+#define PRG_ETH0_CLK_M25_DIV_SHIFT     10
+#define PRG_ETH0_CLK_M25_DIV_WIDTH     1
+
+#define PRG_ETH0_INVERTED_RMII_CLK     BIT(11)
+#define PRG_ETH0_TX_AND_PHY_REF_CLK    BIT(12)
+
+#define MUX_CLK_NUM_PARENTS            2
+
+struct meson8b_dwmac {
+       struct platform_device  *pdev;
+
+       void __iomem            *regs;
+
+       phy_interface_t         phy_mode;
+
+       struct clk_mux          m250_mux;
+       struct clk              *m250_mux_clk;
+       struct clk              *m250_mux_parent[MUX_CLK_NUM_PARENTS];
+
+       struct clk_divider      m250_div;
+       struct clk              *m250_div_clk;
+
+       struct clk_divider      m25_div;
+       struct clk              *m25_div_clk;
+};
+
+static void meson8b_dwmac_mask_bits(struct meson8b_dwmac *dwmac, u32 reg,
+                                   u32 mask, u32 value)
+{
+       u32 data;
+
+       data = readl(dwmac->regs + reg);
+       data &= ~mask;
+       data |= (value & mask);
+
+       writel(data, dwmac->regs + reg);
+}
+
+static int meson8b_init_clk(struct meson8b_dwmac *dwmac)
+{
+       struct clk_init_data init;
+       int i, ret;
+       struct device *dev = &dwmac->pdev->dev;
+       char clk_name[32];
+       const char *clk_div_parents[1];
+       const char *mux_parent_names[MUX_CLK_NUM_PARENTS];
+       static struct clk_div_table clk_25m_div_table[] = {
+               { .val = 0, .div = 5 },
+               { .val = 1, .div = 10 },
+               { /* sentinel */ },
+       };
+
+       /* get the mux parents from DT */
+       for (i = 0; i < MUX_CLK_NUM_PARENTS; i++) {
+               char name[16];
+
+               snprintf(name, sizeof(name), "clkin%d", i);
+               dwmac->m250_mux_parent[i] = devm_clk_get(dev, name);
+               if (IS_ERR(dwmac->m250_mux_parent[i])) {
+                       ret = PTR_ERR(dwmac->m250_mux_parent[i]);
+                       if (ret != -EPROBE_DEFER)
+                               dev_err(dev, "Missing clock %s\n", name);
+                       return ret;
+               }
+
+               mux_parent_names[i] =
+                       __clk_get_name(dwmac->m250_mux_parent[i]);
+       }
+
+       /* create the m250_mux */
+       snprintf(clk_name, sizeof(clk_name), "%s#m250_sel", dev_name(dev));
+       init.name = clk_name;
+       init.ops = &clk_mux_ops;
+       init.flags = 0;
+       init.parent_names = mux_parent_names;
+       init.num_parents = MUX_CLK_NUM_PARENTS;
+
+       dwmac->m250_mux.reg = dwmac->regs + PRG_ETH0;
+       dwmac->m250_mux.shift = PRG_ETH0_CLK_M250_SEL_SHIFT;
+       dwmac->m250_mux.mask = PRG_ETH0_CLK_M250_SEL_MASK;
+       dwmac->m250_mux.flags = 0;
+       dwmac->m250_mux.table = NULL;
+       dwmac->m250_mux.hw.init = &init;
+
+       dwmac->m250_mux_clk = devm_clk_register(dev, &dwmac->m250_mux.hw);
+       if (WARN_ON(IS_ERR(dwmac->m250_mux_clk)))
+               return PTR_ERR(dwmac->m250_mux_clk);
+
+       /* create the m250_div */
+       snprintf(clk_name, sizeof(clk_name), "%s#m250_div", dev_name(dev));
+       init.name = devm_kstrdup(dev, clk_name, GFP_KERNEL);
+       init.ops = &clk_divider_ops;
+       init.flags = CLK_SET_RATE_PARENT;
+       clk_div_parents[0] = __clk_get_name(dwmac->m250_mux_clk);
+       init.parent_names = clk_div_parents;
+       init.num_parents = ARRAY_SIZE(clk_div_parents);
+
+       dwmac->m250_div.reg = dwmac->regs + PRG_ETH0;
+       dwmac->m250_div.shift = PRG_ETH0_CLK_M250_DIV_SHIFT;
+       dwmac->m250_div.width = PRG_ETH0_CLK_M250_DIV_WIDTH;
+       dwmac->m250_div.hw.init = &init;
+       dwmac->m250_div.flags = CLK_DIVIDER_ONE_BASED | CLK_DIVIDER_ALLOW_ZERO;
+
+       dwmac->m250_div_clk = devm_clk_register(dev, &dwmac->m250_div.hw);
+       if (WARN_ON(IS_ERR(dwmac->m250_div_clk)))
+               return PTR_ERR(dwmac->m250_div_clk);
+
+       /* create the m25_div */
+       snprintf(clk_name, sizeof(clk_name), "%s#m25_div", dev_name(dev));
+       init.name = devm_kstrdup(dev, clk_name, GFP_KERNEL);
+       init.ops = &clk_divider_ops;
+       init.flags = CLK_IS_BASIC | CLK_SET_RATE_PARENT;
+       clk_div_parents[0] = __clk_get_name(dwmac->m250_div_clk);
+       init.parent_names = clk_div_parents;
+       init.num_parents = ARRAY_SIZE(clk_div_parents);
+
+       dwmac->m25_div.reg = dwmac->regs + PRG_ETH0;
+       dwmac->m25_div.shift = PRG_ETH0_CLK_M25_DIV_SHIFT;
+       dwmac->m25_div.width = PRG_ETH0_CLK_M25_DIV_WIDTH;
+       dwmac->m25_div.table = clk_25m_div_table;
+       dwmac->m25_div.hw.init = &init;
+       dwmac->m25_div.flags = CLK_DIVIDER_ALLOW_ZERO;
+
+       dwmac->m25_div_clk = devm_clk_register(dev, &dwmac->m25_div.hw);
+       if (WARN_ON(IS_ERR(dwmac->m25_div_clk)))
+               return PTR_ERR(dwmac->m25_div_clk);
+
+       return 0;
+}
+
+static int meson8b_init_prg_eth(struct meson8b_dwmac *dwmac)
+{
+       int ret;
+       unsigned long clk_rate;
+
+       switch (dwmac->phy_mode) {
+       case PHY_INTERFACE_MODE_RGMII:
+       case PHY_INTERFACE_MODE_RGMII_ID:
+       case PHY_INTERFACE_MODE_RGMII_RXID:
+       case PHY_INTERFACE_MODE_RGMII_TXID:
+               /* Generate a 25MHz clock for the PHY */
+               clk_rate = 25 * 1000 * 1000;
+
+               /* enable RGMII mode */
+               meson8b_dwmac_mask_bits(dwmac, PRG_ETH0, PRG_ETH0_RGMII_MODE,
+                                       PRG_ETH0_RGMII_MODE);
+
+               /* only relevant for RMII mode -> disable in RGMII mode */
+               meson8b_dwmac_mask_bits(dwmac, PRG_ETH0,
+                                       PRG_ETH0_INVERTED_RMII_CLK, 0);
+
+               /* TX clock delay - all known boards use a 1/4 cycle delay */
+               meson8b_dwmac_mask_bits(dwmac, PRG_ETH0, PRG_ETH0_TXDLY_MASK,
+                                       PRG_ETH0_TXDLY_QUARTER);
+               break;
+
+       case PHY_INTERFACE_MODE_RMII:
+               /* Use the rate of the mux clock for the internal RMII PHY */
+               clk_rate = clk_get_rate(dwmac->m250_mux_clk);
+
+               /* disable RGMII mode -> enables RMII mode */
+               meson8b_dwmac_mask_bits(dwmac, PRG_ETH0, PRG_ETH0_RGMII_MODE,
+                                       0);
+
+               /* invert internal clk_rmii_i to generate 25/2.5 tx_rx_clk */
+               meson8b_dwmac_mask_bits(dwmac, PRG_ETH0,
+                                       PRG_ETH0_INVERTED_RMII_CLK,
+                                       PRG_ETH0_INVERTED_RMII_CLK);
+
+               /* TX clock delay cannot be configured in RMII mode */
+               meson8b_dwmac_mask_bits(dwmac, PRG_ETH0, PRG_ETH0_TXDLY_MASK,
+                                       0);
+
+               break;
+
+       default:
+               dev_err(&dwmac->pdev->dev, "unsupported phy-mode %s\n",
+                       phy_modes(dwmac->phy_mode));
+               return -EINVAL;
+       }
+
+       ret = clk_prepare_enable(dwmac->m25_div_clk);
+       if (ret) {
+               dev_err(&dwmac->pdev->dev, "failed to enable the PHY clock\n");
+               return ret;
+       }
+
+       ret = clk_set_rate(dwmac->m25_div_clk, clk_rate);
+       if (ret) {
+               clk_disable_unprepare(dwmac->m25_div_clk);
+
+               dev_err(&dwmac->pdev->dev, "failed to set PHY clock\n");
+               return ret;
+       }
+
+       /* enable TX_CLK and PHY_REF_CLK generator */
+       meson8b_dwmac_mask_bits(dwmac, PRG_ETH0, PRG_ETH0_TX_AND_PHY_REF_CLK,
+                               PRG_ETH0_TX_AND_PHY_REF_CLK);
+
+       return 0;
+}
+
+static int meson8b_dwmac_probe(struct platform_device *pdev)
+{
+       struct plat_stmmacenet_data *plat_dat;
+       struct stmmac_resources stmmac_res;
+       struct resource *res;
+       struct meson8b_dwmac *dwmac;
+       int ret;
+
+       ret = stmmac_get_platform_resources(pdev, &stmmac_res);
+       if (ret)
+               return ret;
+
+       plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
+       if (IS_ERR(plat_dat))
+               return PTR_ERR(plat_dat);
+
+       dwmac = devm_kzalloc(&pdev->dev, sizeof(*dwmac), GFP_KERNEL);
+       if (!dwmac)
+               return -ENOMEM;
+
+       res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
+       dwmac->regs = devm_ioremap_resource(&pdev->dev, res);
+       if (IS_ERR(dwmac->regs))
+               return PTR_ERR(dwmac->regs);
+
+       dwmac->pdev = pdev;
+       dwmac->phy_mode = of_get_phy_mode(pdev->dev.of_node);
+       if (dwmac->phy_mode < 0) {
+               dev_err(&pdev->dev, "missing phy-mode property\n");
+               return -EINVAL;
+       }
+
+       ret = meson8b_init_clk(dwmac);
+       if (ret)
+               return ret;
+
+       ret = meson8b_init_prg_eth(dwmac);
+       if (ret)
+               return ret;
+
+       plat_dat->bsp_priv = dwmac;
+
+       return stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res);
+}
+
+static int meson8b_dwmac_remove(struct platform_device *pdev)
+{
+       struct meson8b_dwmac *dwmac = get_stmmac_bsp_priv(&pdev->dev);
+
+       clk_disable_unprepare(dwmac->m25_div_clk);
+
+       return stmmac_pltfr_remove(pdev);
+}
+
+static const struct of_device_id meson8b_dwmac_match[] = {
+       { .compatible = "amlogic,meson8b-dwmac" },
+       { .compatible = "amlogic,meson-gxbb-dwmac" },
+       { }
+};
+MODULE_DEVICE_TABLE(of, meson8b_dwmac_match);
+
+static struct platform_driver meson8b_dwmac_driver = {
+       .probe  = meson8b_dwmac_probe,
+       .remove = meson8b_dwmac_remove,
+       .driver = {
+               .name           = "meson8b-dwmac",
+               .pm             = &stmmac_pltfr_pm_ops,
+               .of_match_table = meson8b_dwmac_match,
+       },
+};
+module_platform_driver(meson8b_dwmac_driver);
+
+MODULE_AUTHOR("Martin Blumenstingl <martin.blumenstingl@googlemail.com>");
+MODULE_DESCRIPTION("Amlogic Meson8b and GXBB DWMAC glue layer");
+MODULE_LICENSE("GPL v2");
index ffeb8d9..64e147f 100644 (file)
@@ -30,4 +30,12 @@ int stmmac_get_platform_resources(struct platform_device *pdev,
 int stmmac_pltfr_remove(struct platform_device *pdev);
 extern const struct dev_pm_ops stmmac_pltfr_pm_ops;
 
+static inline void *get_stmmac_bsp_priv(struct device *dev)
+{
+       struct net_device *ndev = dev_get_drvdata(dev);
+       struct stmmac_priv *priv = netdev_priv(ndev);
+
+       return priv->plat->bsp_priv;
+}
+
 #endif /* __STMMAC_PLATFORM_H__ */
index 530959a..8e1728b 100644 (file)
@@ -182,6 +182,38 @@ static const struct dwc2_core_params params_ltq = {
        .hibernation                    = -1,
 };
 
+static const struct dwc2_core_params params_amlogic = {
+       .otg_cap                        = DWC2_CAP_PARAM_NO_HNP_SRP_CAPABLE,
+       .otg_ver                        = -1,
+       .dma_enable                     = 1,
+       .dma_desc_enable                = 0,
+       .dma_desc_fs_enable             = 0,
+       .speed                          = DWC2_SPEED_PARAM_HIGH,
+       .enable_dynamic_fifo            = 1,
+       .en_multiple_tx_fifo            = -1,
+       .host_rx_fifo_size              = 512,
+       .host_nperio_tx_fifo_size       = 500,
+       .host_perio_tx_fifo_size        = 500,
+       .max_transfer_size              = -1,
+       .max_packet_count               = -1,
+       .host_channels                  = 16,
+       .phy_type                       = DWC2_PHY_TYPE_PARAM_UTMI,
+       .phy_utmi_width                 = -1,
+       .phy_ulpi_ddr                   = -1,
+       .phy_ulpi_ext_vbus              = -1,
+       .i2c_enable                     = -1,
+       .ulpi_fs_ls                     = -1,
+       .host_support_fs_ls_low_power   = -1,
+       .host_ls_low_power_phy_clk      = -1,
+       .ts_dline                       = -1,
+       .reload_ctl                     = 1,
+       .ahbcfg                         = GAHBCFG_HBSTLEN_INCR8 <<
+                                         GAHBCFG_HBSTLEN_SHIFT,
+       .uframe_sched                   = 0,
+       .external_id_pin_ctl            = -1,
+       .hibernation                    = -1,
+};
+
 /*
  * Check the dr_mode against the module configuration and hardware
  * capabilities.
@@ -486,6 +518,8 @@ static const struct of_device_id dwc2_of_match_table[] = {
        { .compatible = "lantiq,xrx200-usb", .data = &params_ltq },
        { .compatible = "snps,dwc2", .data = NULL },
        { .compatible = "samsung,s3c6400-hsotg", .data = NULL},
+       { .compatible = "amlogic,meson8b-usb", .data = &params_amlogic },
+       { .compatible = "amlogic,meson-gxbb-usb", .data = &params_amlogic },
        {},
 };
 MODULE_DEVICE_TABLE(of, dwc2_of_match_table);
index ce4ad63..baade6f 100644 (file)
 #define CLKID_FCLK_DIV3                5
 #define CLKID_FCLK_DIV4                6
 #define CLKID_CLK81            12
+#define CLKID_MPLL2            15
+#define CLKID_SPI              34
+#define CLKID_I2C              22
 #define CLKID_ETH              36
+#define CLKID_USB0             50
+#define CLKID_USB1             51
+#define CLKID_USB              55
+#define CLKID_USB1_DDR_BRIDGE  64
+#define CLKID_USB0_DDR_BRIDGE  65
+#define CLKID_AO_I2C           93
 #define CLKID_SD_EMMC_A                94
 #define CLKID_SD_EMMC_B                95
 #define CLKID_SD_EMMC_C                96