public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Marcin Wojtas" <mw@semihalf.com>
To: devel@edk2.groups.io
Cc: leif@nuviainc.com, ard.biesheuvel@arm.com, mw@semihalf.com,
	jaz@semihalf.com, kostap@marvell.com, upstream@semihalf.com,
	jon@solid-run.com
Subject: [edk2-non-osi PATCH v2 3/4] Marvell/Armada7k8k: Update device trees
Date: Mon, 22 Mar 2021 02:32:30 +0100	[thread overview]
Message-ID: <20210322013231.3216058-4-mw@semihalf.com> (raw)
In-Reply-To: <20210322013231.3216058-1-mw@semihalf.com>

This patch updates the Armada7k8k device trees to the version
found in Linux v5.11. All previous modifications, compared
to vanilla files, are kept, i.e. disabled SPI flashes & RTC,
fixed clock tree and generic PCIE for MacchiatoBin board.
Keep AHCI node intact in order to avoid compatibility breakage.

Signed-off-by: Marcin Wojtas <mw@semihalf.com>
---
 Silicon/Marvell/Armada7k8k/DeviceTree/armada-7040-db.dts     |  72 ++-
 Silicon/Marvell/Armada7k8k/DeviceTree/armada-7040.dtsi       |  24 +
 Silicon/Marvell/Armada7k8k/DeviceTree/armada-70x0.dtsi       |  28 +-
 Silicon/Marvell/Armada7k8k/DeviceTree/armada-8040-db.dts     |  57 +-
 Silicon/Marvell/Armada7k8k/DeviceTree/armada-8040-mcbin.dts  | 344 +----------
 Silicon/Marvell/Armada7k8k/DeviceTree/armada-8040-mcbin.dtsi | 375 ++++++++++++
 Silicon/Marvell/Armada7k8k/DeviceTree/armada-8040.dtsi       |  36 ++
 Silicon/Marvell/Armada7k8k/DeviceTree/armada-80x0.dtsi       |  56 +-
 Silicon/Marvell/Armada7k8k/DeviceTree/armada-ap806-dual.dtsi |  38 +-
 Silicon/Marvell/Armada7k8k/DeviceTree/armada-ap806-quad.dtsi |  66 +-
 Silicon/Marvell/Armada7k8k/DeviceTree/armada-ap806.dtsi      | 262 +-------
 Silicon/Marvell/Armada7k8k/DeviceTree/armada-ap807-quad.dtsi |  93 +++
 Silicon/Marvell/Armada7k8k/DeviceTree/armada-ap80x.dtsi      | 473 +++++++++++++++
 Silicon/Marvell/Armada7k8k/DeviceTree/armada-common.dtsi     |   3 +-
 Silicon/Marvell/Armada7k8k/DeviceTree/armada-cp110.dtsi      | 556 +----------------
 Silicon/Marvell/Armada7k8k/DeviceTree/armada-cp115.dtsi      |  12 +
 Silicon/Marvell/Armada7k8k/DeviceTree/armada-cp11x.dtsi      | 632 ++++++++++++++++++++
 17 files changed, 1897 insertions(+), 1230 deletions(-)
 create mode 100644 Silicon/Marvell/Armada7k8k/DeviceTree/armada-8040-mcbin.dtsi
 create mode 100644 Silicon/Marvell/Armada7k8k/DeviceTree/armada-ap807-quad.dtsi
 create mode 100644 Silicon/Marvell/Armada7k8k/DeviceTree/armada-ap80x.dtsi
 create mode 100644 Silicon/Marvell/Armada7k8k/DeviceTree/armada-cp115.dtsi
 create mode 100644 Silicon/Marvell/Armada7k8k/DeviceTree/armada-cp11x.dtsi

diff --git a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-7040-db.dts b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-7040-db.dts
index f5878ef..a578b5a 100644
--- a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-7040-db.dts
+++ b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-7040-db.dts
@@ -7,9 +7,6 @@
 
 #include "armada-7040.dtsi"
 
-#define GPIO_ACTIVE_HIGH 0
-#define GPIO_ACTIVE_LOW  1
-
 / {
         model = "Marvell Armada 7040 DB board";
         compatible = "marvell,armada7040-db", "marvell,armada7040",
@@ -30,6 +27,32 @@
                 ethernet2 = &cp0_eth2;
         };
 
+        cp0_exp_usb3_0_current_regulator: gpio-regulator {
+                compatible = "regulator-gpio";
+                regulator-name = "cp0-usb3-0-current-regulator";
+                regulator-type = "current";
+                regulator-min-microamp = <500000>;
+                regulator-max-microamp = <900000>;
+                gpios = <&expander0 4 GPIO_ACTIVE_HIGH>;
+                states = <500000 0x0
+                          900000 0x1>;
+                enable-active-high;
+                gpios-states = <0>;
+        };
+
+        cp0_exp_usb3_1_current_regulator: gpio-regulator {
+                compatible = "regulator-gpio";
+                regulator-name = "cp0-usb3-1-current-regulator";
+                regulator-type = "current";
+                regulator-min-microamp = <500000>;
+                regulator-max-microamp = <900000>;
+                gpios = <&expander0 5 GPIO_ACTIVE_HIGH>;
+                states = <500000 0x0
+                          900000 0x1>;
+                enable-active-high;
+                gpios-states = <0>;
+        };
+
         cp0_reg_usb3_0_vbus: cp0-usb3-0-vbus {
                 compatible = "regulator-fixed";
                 regulator-name = "usb3h0-vbus";
@@ -37,6 +60,7 @@
                 regulator-max-microvolt = <5000000>;
                 enable-active-high;
                 gpio = <&expander0 0 GPIO_ACTIVE_HIGH>;
+                vin-supply = <&cp0_exp_usb3_0_current_regulator>;
         };
 
         cp0_reg_usb3_1_vbus: cp0-usb3-1-vbus {
@@ -46,16 +70,7 @@
                 regulator-max-microvolt = <5000000>;
                 enable-active-high;
                 gpio = <&expander0 1 GPIO_ACTIVE_HIGH>;
-        };
-
-        cp0_usb3_0_phy: cp0-usb3-0-phy {
-                compatible = "usb-nop-xceiv";
-                vcc-supply = <&cp0_reg_usb3_0_vbus>;
-        };
-
-        cp0_usb3_1_phy: cp0-usb3-1-phy {
-                compatible = "usb-nop-xceiv";
-                vcc-supply = <&cp0_reg_usb3_1_vbus>;
+                vin-supply = <&cp0_exp_usb3_1_current_regulator>;
         };
 };
 
@@ -68,8 +83,6 @@
         status = "okay";
 
         spi-flash@0 {
-                #address-cells = <1>;
-                #size-cells = <1>;
                 compatible = "jedec,spi-nor";
                 reg = <0>;
                 spi-max-frequency = <10000000>;
@@ -100,6 +113,8 @@
 
 &cp0_pcie2 {
         status = "okay";
+        phys = <&cp0_comphy5 2>;
+        phy-names = "cp0-pcie2-x1-phy";
 };
 
 &cp0_i2c0 {
@@ -171,8 +186,6 @@
         status = "disabled";
 
         spi-flash@0 {
-                #address-cells = <0x1>;
-                #size-cells = <0x1>;
                 compatible = "jedec,spi-nor";
                 reg = <0x0>;
                 spi-max-frequency = <20000000>;
@@ -197,15 +210,36 @@
 
 &cp0_sata0 {
         status = "okay";
+
+        sata-port@1 {
+                phys = <&cp0_comphy3 1>;
+                phy-names = "cp0-sata0-1-phy";
+        };
+};
+
+&cp0_comphy1 {
+        cp0_usbh0_con: connector {
+                compatible = "usb-a-connector";
+                phy-supply = <&cp0_reg_usb3_0_vbus>;
+        };
 };
 
 &cp0_usb3_0 {
-        usb-phy = <&cp0_usb3_0_phy>;
+        phys = <&cp0_comphy1 0>;
+        phy-names = "cp0-usb3h0-comphy";
         status = "okay";
 };
 
+&cp0_comphy4 {
+        cp0_usbh1_con: connector {
+                compatible = "usb-a-connector";
+                phy-supply = <&cp0_reg_usb3_1_vbus>;
+        };
+};
+
 &cp0_usb3_1 {
-        usb-phy = <&cp0_usb3_1_phy>;
+        phys = <&cp0_comphy4 1>;
+        phy-names = "cp0-usb3h1-comphy";
         status = "okay";
 };
 
diff --git a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-7040.dtsi b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-7040.dtsi
index 03109b2..30c2e4e 100644
--- a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-7040.dtsi
+++ b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-7040.dtsi
@@ -14,3 +14,27 @@
         compatible = "marvell,armada7040", "marvell,armada-ap806-quad",
                      "marvell,armada-ap806";
 };
+
+&cp0_pcie0 {
+        iommu-map =
+                <0x0   &smmu 0x480 0x20>,
+                <0x100 &smmu 0x4a0 0x20>,
+                <0x200 &smmu 0x4c0 0x20>;
+        iommu-map-mask = <0x031f>;
+};
+
+&cp0_sata0 {
+        iommus = <&smmu 0x444>;
+};
+
+&cp0_sdhci0 {
+        iommus = <&smmu 0x445>;
+};
+
+&cp0_usb3_0 {
+        iommus = <&smmu 0x440>;
+};
+
+&cp0_usb3_1 {
+        iommus = <&smmu 0x441>;
+};
diff --git a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-70x0.dtsi b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-70x0.dtsi
index 78f9d87..0fdcb35 100644
--- a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-70x0.dtsi
+++ b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-70x0.dtsi
@@ -17,23 +17,23 @@
 /*
  * Instantiate the CP110
  */
-#define CP110_NAME                cp0
-#define CP110_BASE                f2000000
-#define CP110_PCIE_IO_BASE        0xf9000000
-#define CP110_PCIE_MEM_BASE        0xf6000000
-#define CP110_PCIE0_BASE        f2600000
-#define CP110_PCIE1_BASE        f2620000
-#define CP110_PCIE2_BASE        f2640000
+#define CP11X_NAME                cp0
+#define CP11X_BASE                f2000000
+#define CP11X_PCIEx_MEM_BASE(iface) (0xf6000000 + (iface * 0x1000000))
+#define CP11X_PCIEx_MEM_SIZE(iface) 0xf00000
+#define CP11X_PCIE0_BASE        f2600000
+#define CP11X_PCIE1_BASE        f2620000
+#define CP11X_PCIE2_BASE        f2640000
 
 #include "armada-cp110.dtsi"
 
-#undef CP110_NAME
-#undef CP110_BASE
-#undef CP110_PCIE_IO_BASE
-#undef CP110_PCIE_MEM_BASE
-#undef CP110_PCIE0_BASE
-#undef CP110_PCIE1_BASE
-#undef CP110_PCIE2_BASE
+#undef CP11X_NAME
+#undef CP11X_BASE
+#undef CP11X_PCIEx_MEM_BASE
+#undef CP11X_PCIEx_MEM_SIZE
+#undef CP11X_PCIE0_BASE
+#undef CP11X_PCIE1_BASE
+#undef CP11X_PCIE2_BASE
 
 &cp0_gpio1 {
         status = "okay";
diff --git a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-8040-db.dts b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-8040-db.dts
index e813922..9fea84f 100644
--- a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-8040-db.dts
+++ b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-8040-db.dts
@@ -7,9 +7,6 @@
 
 #include "armada-8040.dtsi"
 
-#define GPIO_ACTIVE_HIGH 0
-#define GPIO_ACTIVE_LOW  1
-
 / {
         model = "Marvell Armada 8040 DB board";
         compatible = "marvell,armada8040-db", "marvell,armada8040",
@@ -29,6 +26,8 @@
                 ethernet1 = &cp0_eth2;
                 ethernet2 = &cp1_eth0;
                 ethernet3 = &cp1_eth1;
+                i2c1 = &cp0_i2c0;
+                i2c2 = &cp1_i2c0;
         };
 
         cp0_reg_usb3_0_vbus: cp0-usb3-0-vbus {
@@ -54,11 +53,6 @@
                 vcc-supply = <&cp0_reg_usb3_0_vbus>;
         };
 
-        cp0_usb3_1_phy: cp0-usb3-1-phy {
-                compatible = "usb-nop-xceiv";
-                vcc-supply = <&cp0_reg_usb3_1_vbus>;
-        };
-
         cp1_reg_usb3_0_vbus: cp1-usb3-0-vbus {
                 compatible = "regulator-fixed";
                 regulator-name = "cp1-usb3h0-vbus";
@@ -74,17 +68,10 @@
         };
 };
 
-&i2c0 {
-        status = "okay";
-        clock-frequency = <100000>;
-};
-
 &spi0 {
         status = "okay";
 
         spi-flash@0 {
-                #address-cells = <1>;
-                #size-cells = <1>;
                 compatible = "jedec,spi-nor";
                 reg = <0>;
                 spi-max-frequency = <10000000>;
@@ -115,11 +102,15 @@
 
 /* CON6 on CP0 expansion */
 &cp0_pcie0 {
+        phys = <&cp0_comphy0 0>;
+        phy-names = "cp0-pcie0-x1-phy";
         status = "okay";
 };
 
 /* CON5 on CP0 expansion */
 &cp0_pcie2 {
+        phys = <&cp0_comphy5 2>;
+        phy-names = "cp0-pcie2-x1-phy";
         status = "okay";
 };
 
@@ -150,6 +141,15 @@
 /* CON4 on CP0 expansion */
 &cp0_sata0 {
         status = "okay";
+
+        sata-port@0 {
+                phys = <&cp0_comphy1 0>;
+                phy-names = "cp0-sata0-0-phy";
+        };
+        sata-port@1 {
+                phys = <&cp0_comphy3 1>;
+                phy-names = "cp0-sata0-1-phy";
+        };
 };
 
 /* CON9 on CP0 expansion */
@@ -158,9 +158,17 @@
         status = "okay";
 };
 
+&cp0_comphy4 {
+        cp0_usbh1_con: connector {
+                compatible = "usb-a-connector";
+                phy-supply = <&cp0_reg_usb3_1_vbus>;
+        };
+};
+
 /* CON10 on CP0 expansion */
 &cp0_usb3_1 {
-        usb-phy = <&cp0_usb3_1_phy>;
+        phys = <&cp0_comphy4 1>;
+        phy-names = "cp0-usb3h1-comphy";
         status = "okay";
 };
 
@@ -194,16 +202,22 @@
 
 /* CON6 on CP1 expansion */
 &cp1_pcie0 {
+        phys = <&cp1_comphy0 0>;
+        phy-names = "cp1-pcie0-x1-phy";
         status = "okay";
 };
 
 /* CON7 on CP1 expansion */
 &cp1_pcie1 {
+        phys = <&cp1_comphy4 1>;
+        phy-names = "cp1-pcie1-x1-phy";
         status = "okay";
 };
 
 /* CON5 on CP1 expansion */
 &cp1_pcie2 {
+        phys = <&cp1_comphy5 2>;
+        phy-names = "cp1-pcie2-x1-phy";
         status = "okay";
 };
 
@@ -216,8 +230,6 @@
         status = "disabled";
 
         spi-flash@0 {
-                #address-cells = <0x1>;
-                #size-cells = <0x1>;
                 compatible = "jedec,spi-nor";
                 reg = <0x0>;
                 spi-max-frequency = <20000000>;
@@ -282,6 +294,15 @@
 /* CON4 on CP1 expansion */
 &cp1_sata0 {
         status = "okay";
+
+        sata-port@0 {
+                phys = <&cp1_comphy1 0>;
+                phy-names = "cp1-sata0-0-phy";
+        };
+        sata-port@1 {
+                phys = <&cp1_comphy3 1>;
+                phy-names = "cp1-sata0-1-phy";
+        };
 };
 
 /* CON9 on CP1 expansion */
diff --git a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-8040-mcbin.dts b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-8040-mcbin.dts
index d9c9348..740bdaf 100644
--- a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-8040-mcbin.dts
+++ b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-8040-mcbin.dts
@@ -5,233 +5,13 @@
  * Device Tree file for MACCHIATOBin Armada 8040 community board platform
  */
 
-#include "armada-8040.dtsi"
-
-#define GPIO_ACTIVE_HIGH 0
-#define GPIO_ACTIVE_LOW  1
+#include "armada-8040-mcbin.dtsi"
 
 / {
-        model = "Marvell 8040 MACCHIATOBin";
-        compatible = "marvell,armada8040-mcbin", "marvell,armada8040",
+        model = "Marvell 8040 MACCHIATOBin Double-shot";
+        compatible = "marvell,armada8040-mcbin-doubleshot",
+                        "marvell,armada8040-mcbin", "marvell,armada8040",
                         "marvell,armada-ap806-quad", "marvell,armada-ap806";
-
-        chosen {
-                stdout-path = "serial0:115200n8";
-        };
-
-        memory@0 {
-                device_type = "memory";
-                reg = <0x0 0x0 0x0 0x80000000>;
-        };
-
-        aliases {
-                ethernet0 = &cp0_eth0;
-                ethernet1 = &cp1_eth0;
-                ethernet2 = &cp1_eth1;
-                ethernet3 = &cp1_eth2;
-        };
-
-        /* Regulator labels correspond with schematics */
-        v_3_3: regulator-3-3v {
-                compatible = "regulator-fixed";
-                regulator-name = "v_3_3";
-                regulator-min-microvolt = <3300000>;
-                regulator-max-microvolt = <3300000>;
-                regulator-always-on;
-                status = "okay";
-        };
-
-        v_vddo_h: regulator-1-8v {
-                compatible = "regulator-fixed";
-                regulator-name = "v_vddo_h";
-                regulator-min-microvolt = <1800000>;
-                regulator-max-microvolt = <1800000>;
-                regulator-always-on;
-                status = "okay";
-        };
-
-        v_5v0_usb3_hst_vbus: regulator-usb3-vbus0 {
-                compatible = "regulator-fixed";
-                enable-active-high;
-                gpio = <&cp0_gpio2 15 GPIO_ACTIVE_HIGH>;
-                pinctrl-names = "default";
-                pinctrl-0 = <&cp0_xhci_vbus_pins>;
-                regulator-name = "v_5v0_usb3_hst_vbus";
-                regulator-min-microvolt = <5000000>;
-                regulator-max-microvolt = <5000000>;
-                status = "okay";
-        };
-
-        usb3h0_phy: usb3_phy0 {
-                compatible = "usb-nop-xceiv";
-                vcc-supply = <&v_5v0_usb3_hst_vbus>;
-        };
-
-        sfp_eth0: sfp-eth0 {
-                /* CON15,16 - CPM lane 4 */
-                compatible = "sff,sfp";
-                i2c-bus = <&sfpp0_i2c>;
-                los-gpio = <&cp1_gpio1 28 GPIO_ACTIVE_HIGH>;
-                mod-def0-gpio = <&cp1_gpio1 27 GPIO_ACTIVE_LOW>;
-                tx-disable-gpio = <&cp1_gpio1 29 GPIO_ACTIVE_HIGH>;
-                tx-fault-gpio  = <&cp1_gpio1 26 GPIO_ACTIVE_HIGH>;
-                pinctrl-names = "default";
-                pinctrl-0 = <&cp1_sfpp0_pins>;
-        };
-
-        sfp_eth1: sfp-eth1 {
-                /* CON17,18 - CPS lane 4 */
-                compatible = "sff,sfp";
-                i2c-bus = <&sfpp1_i2c>;
-                los-gpio = <&cp1_gpio1 8 GPIO_ACTIVE_HIGH>;
-                mod-def0-gpio = <&cp1_gpio1 11 GPIO_ACTIVE_LOW>;
-                tx-disable-gpio = <&cp1_gpio1 10 GPIO_ACTIVE_HIGH>;
-                tx-fault-gpio = <&cp0_gpio2 30 GPIO_ACTIVE_HIGH>;
-                pinctrl-names = "default";
-                pinctrl-0 = <&cp1_sfpp1_pins &cp0_sfpp1_pins>;
-        };
-
-        sfp_eth3: sfp-eth3 {
-                /* CON3,4 - CPS lane 5 */
-                compatible = "sff,sfp";
-                i2c-bus = <&sfp_1g_i2c>;
-                los-gpio = <&cp0_gpio2 22 GPIO_ACTIVE_HIGH>;
-                mod-def0-gpio = <&cp0_gpio2 21 GPIO_ACTIVE_LOW>;
-                tx-disable-gpio = <&cp1_gpio1 24 GPIO_ACTIVE_HIGH>;
-                tx-fault-gpio = <&cp0_gpio2 19 GPIO_ACTIVE_HIGH>;
-                pinctrl-names = "default";
-                pinctrl-0 = <&cp0_sfp_1g_pins &cp1_sfp_1g_pins>;
-        };
-};
-
-&uart0 {
-        status = "okay";
-        pinctrl-0 = <&uart0_pins>;
-        pinctrl-names = "default";
-};
-
-&ap_sdhci0 {
-        bus-width = <8>;
-        /*
-         * Not stable in HS modes - phy needs "more calibration", so add
-         * the "slow-mode" and disable SDR104, SDR50 and DDR50 modes.
-         */
-        marvell,xenon-phy-slow-mode;
-        no-1-8-v;
-        no-sd;
-        no-sdio;
-        non-removable;
-        status = "okay";
-        vqmmc-supply = <&v_vddo_h>;
-};
-
-&cp0_i2c0 {
-        clock-frequency = <100000>;
-        pinctrl-names = "default";
-        pinctrl-0 = <&cp0_i2c0_pins>;
-        status = "okay";
-};
-
-&cp0_i2c1 {
-        clock-frequency = <100000>;
-        pinctrl-names = "default";
-        pinctrl-0 = <&cp0_i2c1_pins>;
-        status = "okay";
-
-        i2c-switch@70 {
-                compatible = "nxp,pca9548";
-                #address-cells = <1>;
-                #size-cells = <0>;
-                reg = <0x70>;
-
-                sfpp0_i2c: i2c@0 {
-                        #address-cells = <1>;
-                        #size-cells = <0>;
-                        reg = <0>;
-                };
-                sfpp1_i2c: i2c@1 {
-                        #address-cells = <1>;
-                        #size-cells = <0>;
-                        reg = <1>;
-                };
-                sfp_1g_i2c: i2c@2 {
-                        #address-cells = <1>;
-                        #size-cells = <0>;
-                        reg = <2>;
-                };
-        };
-};
-
-/* J25 UART header */
-&cp0_uart1 {
-        pinctrl-names = "default";
-        pinctrl-0 = <&cp0_uart1_pins>;
-        status = "okay";
-};
-
-&cp0_mdio {
-        pinctrl-names = "default";
-        pinctrl-0 = <&cp0_ge_mdio_pins>;
-        status = "okay";
-
-        ge_phy: ethernet-phy@0 {
-                reg = <0>;
-        };
-};
-
-&cp0_pcie0 {
-        compatible = "marvell,armada8k-pcie-ecam", "snps,dw-pcie-ecam";
-        reg = <0 0xe0000000 0 0xff00000>;
-        bus-range = <0 0xfe>;
-        pinctrl-names = "default";
-        pinctrl-0 = <&cp0_pcie_pins>;
-        num-lanes = <4>;
-        num-viewport = <8>;
-        reset-gpio = <&cp0_gpio1 20 GPIO_ACTIVE_LOW>;
-        ranges = <0x1000000 0x0 0x00000000 0x0 0xeff00000 0x0 0x00010000>,
-                 <0x2000000 0x0 0xc0000000 0x0 0xc0000000 0x0 0x20000000>,
-                 <0x3000000 0x8 0x00000000 0x8 0x00000000 0x1 0x00000000>;
-        status = "okay";
-};
-
-&cp0_pinctrl {
-        cp0_ge_mdio_pins: ge-mdio-pins {
-                marvell,pins = "mpp32", "mpp34";
-                marvell,function = "ge";
-        };
-        cp0_i2c1_pins: i2c1-pins {
-                marvell,pins = "mpp35", "mpp36";
-                marvell,function = "i2c1";
-        };
-        cp0_i2c0_pins: i2c0-pins {
-                marvell,pins = "mpp37", "mpp38";
-                marvell,function = "i2c0";
-        };
-        cp0_uart1_pins: uart1-pins {
-                marvell,pins = "mpp40", "mpp41";
-                marvell,function = "uart1";
-        };
-        cp0_xhci_vbus_pins: xhci0-vbus-pins {
-                marvell,pins = "mpp47";
-                marvell,function = "gpio";
-        };
-        cp0_sfp_1g_pins: sfp-1g-pins {
-                marvell,pins = "mpp51", "mpp53", "mpp54";
-                marvell,function = "gpio";
-        };
-        cp0_pcie_pins: pcie-pins {
-                marvell,pins = "mpp52";
-                marvell,function = "gpio";
-        };
-        cp0_sdhci_pins: sdhci-pins {
-                marvell,pins = "mpp55", "mpp56", "mpp57", "mpp58", "mpp59",
-                               "mpp60", "mpp61";
-                marvell,function = "sdio";
-        };
-        cp0_sfpp1_pins: sfpp1-pins {
-                marvell,pins = "mpp62";
-                marvell,function = "gpio";
-        };
 };
 
 &cp0_xmdio {
@@ -250,128 +30,16 @@
         };
 };
 
-&cp0_ethernet {
-        status = "okay";
-};
-
 &cp0_eth0 {
         status = "okay";
         /* Network PHY */
         phy = <&phy0>;
-        phy-mode = "10gbase-kr";
-        /* Generic PHY, providing serdes lanes */
-        phys = <&cp0_comphy4 0>;
-};
-
-&cp0_sata0 {
-        /* CPM Lane 0 - U29 */
-        status = "okay";
-};
-
-&cp0_sdhci0 {
-        /* U6 */
-        broken-cd;
-        bus-width = <4>;
-        pinctrl-names = "default";
-        pinctrl-0 = <&cp0_sdhci_pins>;
-        status = "okay";
-        vqmmc-supply = <&v_3_3>;
-};
-
-&cp0_usb3_0 {
-        /* J38? - USB2.0 only */
-        status = "okay";
-};
-
-&cp0_usb3_1 {
-        /* J38? - USB2.0 only */
-        status = "okay";
-};
-
-&cp1_ethernet {
-        status = "okay";
+        phy-mode = "10gbase-r";
 };
 
 &cp1_eth0 {
         status = "okay";
         /* Network PHY */
         phy = <&phy8>;
-        phy-mode = "10gbase-kr";
-        /* Generic PHY, providing serdes lanes */
-        phys = <&cp1_comphy4 0>;
-};
-
-&cp1_eth1 {
-        /* CPS Lane 0 - J5 (Gigabit RJ45) */
-        status = "okay";
-        /* Network PHY */
-        phy = <&ge_phy>;
-        phy-mode = "sgmii";
-        /* Generic PHY, providing serdes lanes */
-        phys = <&cp1_comphy0 1>;
-};
-
-&cp1_eth2 {
-        /* CPS Lane 5 */
-        status = "okay";
-        /* Network PHY */
-        phy-mode = "2500base-x";
-        managed = "in-band-status";
-        /* Generic PHY, providing serdes lanes */
-        phys = <&cp1_comphy5 2>;
-        sfp = <&sfp_eth3>;
-};
-
-&cp1_pinctrl {
-        cp1_sfpp1_pins: sfpp1-pins {
-                marvell,pins = "mpp8", "mpp10", "mpp11";
-                marvell,function = "gpio";
-        };
-        cp1_spi1_pins: spi1-pins {
-                marvell,pins = "mpp12", "mpp13", "mpp14", "mpp15", "mpp16";
-                marvell,function = "spi1";
-        };
-        cp1_uart0_pins: uart0-pins {
-                marvell,pins = "mpp6", "mpp7";
-                marvell,function = "uart0";
-        };
-        cp1_sfp_1g_pins: sfp-1g-pins {
-                marvell,pins = "mpp24";
-                marvell,function = "gpio";
-        };
-        cp1_sfpp0_pins: sfpp0-pins {
-                marvell,pins = "mpp26", "mpp27", "mpp28", "mpp29";
-                marvell,function = "gpio";
-        };
-};
-
-/* J27 UART header */
-&cp1_uart0 {
-        pinctrl-names = "default";
-        pinctrl-0 = <&cp1_uart0_pins>;
-        status = "okay";
-};
-
-&cp1_sata0 {
-        /* CPS Lane 1 - U32 */
-        /* CPS Lane 3 - U31 */
-        status = "okay";
-};
-
-&cp1_spi1 {
-        pinctrl-names = "default";
-        pinctrl-0 = <&cp1_spi1_pins>;
-        status = "disabled";
-
-        spi-flash@0 {
-                compatible = "st,w25q32";
-                spi-max-frequency = <50000000>;
-                reg = <0>;
-        };
-};
-
-&cp1_usb3_0 {
-        /* CPS Lane 2 - CON7 */
-        usb-phy = <&usb3h0_phy>;
-        status = "okay";
+        phy-mode = "10gbase-r";
 };
diff --git a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-8040-mcbin.dtsi b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-8040-mcbin.dtsi
new file mode 100644
index 0000000..4935e05
--- /dev/null
+++ b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-8040-mcbin.dtsi
@@ -0,0 +1,375 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (C) 2016 Marvell Technology Group Ltd.
+ *
+ * Device Tree file for MACCHIATOBin Armada 8040 community board platform
+ */
+
+#include "armada-8040.dtsi"
+
+/ {
+        model = "Marvell 8040 MACCHIATOBin";
+        compatible = "marvell,armada8040-mcbin", "marvell,armada8040",
+                        "marvell,armada-ap806-quad", "marvell,armada-ap806";
+
+        chosen {
+                stdout-path = "serial0:115200n8";
+        };
+
+        memory@0 {
+                device_type = "memory";
+                reg = <0x0 0x0 0x0 0x80000000>;
+        };
+
+        aliases {
+                ethernet0 = &cp0_eth0;
+                ethernet1 = &cp1_eth0;
+                ethernet2 = &cp1_eth1;
+                ethernet3 = &cp1_eth2;
+        };
+
+        /* Regulator labels correspond with schematics */
+        v_3_3: regulator-3-3v {
+                compatible = "regulator-fixed";
+                regulator-name = "v_3_3";
+                regulator-min-microvolt = <3300000>;
+                regulator-max-microvolt = <3300000>;
+                regulator-always-on;
+                status = "okay";
+        };
+
+        v_vddo_h: regulator-1-8v {
+                compatible = "regulator-fixed";
+                regulator-name = "v_vddo_h";
+                regulator-min-microvolt = <1800000>;
+                regulator-max-microvolt = <1800000>;
+                regulator-always-on;
+                status = "okay";
+        };
+
+        v_5v0_usb3_hst_vbus: regulator-usb3-vbus0 {
+                compatible = "regulator-fixed";
+                enable-active-high;
+                gpio = <&cp0_gpio2 15 GPIO_ACTIVE_HIGH>;
+                pinctrl-names = "default";
+                pinctrl-0 = <&cp0_xhci_vbus_pins>;
+                regulator-name = "v_5v0_usb3_hst_vbus";
+                regulator-min-microvolt = <5000000>;
+                regulator-max-microvolt = <5000000>;
+                status = "okay";
+        };
+
+        sfp_eth0: sfp-eth0 {
+                /* CON15,16 - CPM lane 4 */
+                compatible = "sff,sfp";
+                i2c-bus = <&sfpp0_i2c>;
+                los-gpio = <&cp1_gpio1 28 GPIO_ACTIVE_HIGH>;
+                mod-def0-gpio = <&cp1_gpio1 27 GPIO_ACTIVE_LOW>;
+                tx-disable-gpio = <&cp1_gpio1 29 GPIO_ACTIVE_HIGH>;
+                tx-fault-gpio  = <&cp1_gpio1 26 GPIO_ACTIVE_HIGH>;
+                pinctrl-names = "default";
+                pinctrl-0 = <&cp1_sfpp0_pins>;
+                maximum-power-milliwatt = <2000>;
+        };
+
+        sfp_eth1: sfp-eth1 {
+                /* CON17,18 - CPS lane 4 */
+                compatible = "sff,sfp";
+                i2c-bus = <&sfpp1_i2c>;
+                los-gpio = <&cp1_gpio1 8 GPIO_ACTIVE_HIGH>;
+                mod-def0-gpio = <&cp1_gpio1 11 GPIO_ACTIVE_LOW>;
+                tx-disable-gpio = <&cp1_gpio1 10 GPIO_ACTIVE_HIGH>;
+                tx-fault-gpio = <&cp0_gpio2 30 GPIO_ACTIVE_HIGH>;
+                pinctrl-names = "default";
+                pinctrl-0 = <&cp1_sfpp1_pins &cp0_sfpp1_pins>;
+                maximum-power-milliwatt = <2000>;
+        };
+
+        sfp_eth3: sfp-eth3 {
+                /* CON13,14 - CPS lane 5 */
+                compatible = "sff,sfp";
+                i2c-bus = <&sfp_1g_i2c>;
+                los-gpio = <&cp0_gpio2 22 GPIO_ACTIVE_HIGH>;
+                mod-def0-gpio = <&cp0_gpio2 21 GPIO_ACTIVE_LOW>;
+                tx-disable-gpio = <&cp1_gpio1 24 GPIO_ACTIVE_HIGH>;
+                tx-fault-gpio = <&cp0_gpio2 19 GPIO_ACTIVE_HIGH>;
+                pinctrl-names = "default";
+                pinctrl-0 = <&cp0_sfp_1g_pins &cp1_sfp_1g_pins>;
+                maximum-power-milliwatt = <2000>;
+        };
+};
+
+&uart0 {
+        status = "okay";
+        pinctrl-0 = <&uart0_pins>;
+        pinctrl-names = "default";
+};
+
+&ap_sdhci0 {
+        bus-width = <8>;
+        /*
+         * Not stable in HS modes - phy needs "more calibration", so add
+         * the "slow-mode" and disable SDR104, SDR50 and DDR50 modes.
+         */
+        marvell,xenon-phy-slow-mode;
+        no-1-8-v;
+        no-sd;
+        no-sdio;
+        non-removable;
+        status = "okay";
+        vqmmc-supply = <&v_vddo_h>;
+};
+
+&cp0_i2c0 {
+        clock-frequency = <100000>;
+        pinctrl-names = "default";
+        pinctrl-0 = <&cp0_i2c0_pins>;
+        status = "okay";
+};
+
+&cp0_i2c1 {
+        clock-frequency = <100000>;
+        pinctrl-names = "default";
+        pinctrl-0 = <&cp0_i2c1_pins>;
+        status = "okay";
+
+        i2c-switch@70 {
+                compatible = "nxp,pca9548";
+                #address-cells = <1>;
+                #size-cells = <0>;
+                reg = <0x70>;
+
+                sfpp0_i2c: i2c@0 {
+                        #address-cells = <1>;
+                        #size-cells = <0>;
+                        reg = <0>;
+                };
+                sfpp1_i2c: i2c@1 {
+                        #address-cells = <1>;
+                        #size-cells = <0>;
+                        reg = <1>;
+                };
+                sfp_1g_i2c: i2c@2 {
+                        #address-cells = <1>;
+                        #size-cells = <0>;
+                        reg = <2>;
+                };
+        };
+};
+
+/* J25 UART header */
+&cp0_uart1 {
+        pinctrl-names = "default";
+        pinctrl-0 = <&cp0_uart1_pins>;
+        status = "okay";
+};
+
+&cp0_mdio {
+        pinctrl-names = "default";
+        pinctrl-0 = <&cp0_ge_mdio_pins>;
+        status = "okay";
+
+        ge_phy: ethernet-phy@0 {
+                reg = <0>;
+        };
+};
+
+&cp0_pcie0 {
+        compatible = "marvell,armada8k-pcie-ecam", "snps,dw-pcie-ecam",
+                     "pci-host-ecam-generic";
+        reg = <0 0xe0000000 0 0xff00000>;
+        bus-range = <0 0xfe>;
+        pinctrl-names = "default";
+        pinctrl-0 = <&cp0_pcie_pins>;
+        num-lanes = <4>;
+        num-viewport = <8>;
+        reset-gpios = <&cp0_gpio2 20 GPIO_ACTIVE_LOW>;
+        ranges = <0x1000000 0x0 0x00000000 0x0 0xeff00000 0x0 0x00010000>,
+                 <0x2000000 0x0 0xc0000000 0x0 0xc0000000 0x0 0x20000000>,
+                 <0x3000000 0x8 0x00000000 0x8 0x00000000 0x1 0x00000000>;
+        phys = <&cp0_comphy0 0>, <&cp0_comphy1 0>,
+               <&cp0_comphy2 0>, <&cp0_comphy3 0>;
+        phy-names = "cp0-pcie0-x4-lane0-phy", "cp0-pcie0-x4-lane1-phy",
+                    "cp0-pcie0-x4-lane2-phy", "cp0-pcie0-x4-lane3-phy";
+        status = "okay";
+};
+
+&cp0_pinctrl {
+        cp0_ge_mdio_pins: ge-mdio-pins {
+                marvell,pins = "mpp32", "mpp34";
+                marvell,function = "ge";
+        };
+        cp0_i2c1_pins: i2c1-pins {
+                marvell,pins = "mpp35", "mpp36";
+                marvell,function = "i2c1";
+        };
+        cp0_i2c0_pins: i2c0-pins {
+                marvell,pins = "mpp37", "mpp38";
+                marvell,function = "i2c0";
+        };
+        cp0_uart1_pins: uart1-pins {
+                marvell,pins = "mpp40", "mpp41";
+                marvell,function = "uart1";
+        };
+        cp0_xhci_vbus_pins: xhci0-vbus-pins {
+                marvell,pins = "mpp47";
+                marvell,function = "gpio";
+        };
+        cp0_sfp_1g_pins: sfp-1g-pins {
+                marvell,pins = "mpp51", "mpp53", "mpp54";
+                marvell,function = "gpio";
+        };
+        cp0_pcie_pins: pcie-pins {
+                marvell,pins = "mpp52";
+                marvell,function = "gpio";
+        };
+        cp0_sdhci_pins: sdhci-pins {
+                marvell,pins = "mpp55", "mpp56", "mpp57", "mpp58", "mpp59",
+                               "mpp60", "mpp61";
+                marvell,function = "sdio";
+        };
+        cp0_sfpp1_pins: sfpp1-pins {
+                marvell,pins = "mpp62";
+                marvell,function = "gpio";
+        };
+};
+
+&cp0_ethernet {
+        status = "okay";
+};
+
+&cp0_eth0 {
+        /* Generic PHY, providing serdes lanes */
+        phys = <&cp0_comphy4 0>;
+};
+
+&cp0_sata0 {
+        status = "okay";
+
+        /* CPM Lane 5 - U29 */
+        sata-port@1 {
+                phys = <&cp0_comphy5 1>;
+                phy-names = "cp0-sata0-1-phy";
+        };
+};
+
+&cp0_sdhci0 {
+        /* U6 */
+        broken-cd;
+        bus-width = <4>;
+        pinctrl-names = "default";
+        pinctrl-0 = <&cp0_sdhci_pins>;
+        status = "okay";
+        vqmmc-supply = <&v_3_3>;
+};
+
+&cp0_usb3_0 {
+        /* J38? - USB2.0 only */
+        status = "okay";
+};
+
+&cp0_usb3_1 {
+        /* J38? - USB2.0 only */
+        status = "okay";
+};
+
+&cp1_ethernet {
+        status = "okay";
+};
+
+&cp1_eth0 {
+        /* Generic PHY, providing serdes lanes */
+        phys = <&cp1_comphy4 0>;
+};
+
+&cp1_eth1 {
+        /* CPS Lane 0 - J5 (Gigabit RJ45) */
+        status = "okay";
+        /* Network PHY */
+        phy = <&ge_phy>;
+        phy-mode = "sgmii";
+        /* Generic PHY, providing serdes lanes */
+        phys = <&cp1_comphy0 1>;
+};
+
+&cp1_eth2 {
+        /* CPS Lane 5 */
+        status = "okay";
+        /* Network PHY */
+        phy-mode = "2500base-x";
+        managed = "in-band-status";
+        /* Generic PHY, providing serdes lanes */
+        phys = <&cp1_comphy5 2>;
+        sfp = <&sfp_eth3>;
+};
+
+&cp1_pinctrl {
+        cp1_sfpp1_pins: sfpp1-pins {
+                marvell,pins = "mpp8", "mpp10", "mpp11";
+                marvell,function = "gpio";
+        };
+        cp1_spi1_pins: spi1-pins {
+                marvell,pins = "mpp12", "mpp13", "mpp14", "mpp15", "mpp16";
+                marvell,function = "spi1";
+        };
+        cp1_uart0_pins: uart0-pins {
+                marvell,pins = "mpp6", "mpp7";
+                marvell,function = "uart0";
+        };
+        cp1_sfp_1g_pins: sfp-1g-pins {
+                marvell,pins = "mpp24";
+                marvell,function = "gpio";
+        };
+        cp1_sfpp0_pins: sfpp0-pins {
+                marvell,pins = "mpp26", "mpp27", "mpp28", "mpp29";
+                marvell,function = "gpio";
+        };
+};
+
+/* J27 UART header */
+&cp1_uart0 {
+        pinctrl-names = "default";
+        pinctrl-0 = <&cp1_uart0_pins>;
+        status = "okay";
+};
+
+&cp1_sata0 {
+        status = "okay";
+
+        /* CPS Lane 1 - U32 */
+        sata-port@0 {
+                phys = <&cp1_comphy1 0>;
+                phy-names = "cp1-sata0-0-phy";
+        };
+
+        /* CPS Lane 3 - U31 */
+        sata-port@1 {
+                phys = <&cp1_comphy3 1>;
+                phy-names = "cp1-sata0-1-phy";
+        };
+};
+
+&cp1_spi1 {
+        pinctrl-names = "default";
+        pinctrl-0 = <&cp1_spi1_pins>;
+
+        spi-flash@0 {
+                compatible = "st,w25q32";
+                spi-max-frequency = <50000000>;
+                reg = <0>;
+        };
+};
+
+&cp1_comphy2 {
+        cp1_usbh0_con: connector {
+                compatible = "usb-a-connector";
+                phy-supply = <&v_5v0_usb3_hst_vbus>;
+        };
+};
+
+&cp1_usb3_0 {
+        /* CPS Lane 2 - CON7 */
+        phys = <&cp1_comphy2 0>;
+        phy-names = "cp1-usb3h0-comphy";
+        status = "okay";
+};
diff --git a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-8040.dtsi b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-8040.dtsi
index 784ef3f..0a676df 100644
--- a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-8040.dtsi
+++ b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-8040.dtsi
@@ -15,6 +15,14 @@
                      "marvell,armada-ap806";
 };
 
+&cp0_pcie0 {
+        iommu-map =
+                <0x0   &smmu 0x480 0x20>,
+                <0x100 &smmu 0x4a0 0x20>,
+                <0x200 &smmu 0x4c0 0x20>;
+        iommu-map-mask = <0x031f>;
+};
+
 /* The RTC requires external oscillator. But on Aramda 80x0, the RTC clock
  * in CP master is not connected (by package) to the oscillator. So
  * disable it. However, the RTC clock in CP slave is connected to the
@@ -23,3 +31,31 @@
 &cp0_rtc {
         status = "disabled";
 };
+
+&cp0_sata0 {
+        iommus = <&smmu 0x444>;
+};
+
+&cp0_sdhci0 {
+        iommus = <&smmu 0x445>;
+};
+
+&cp0_usb3_0 {
+        iommus = <&smmu 0x440>;
+};
+
+&cp0_usb3_1 {
+        iommus = <&smmu 0x441>;
+};
+
+&cp1_sata0 {
+        iommus = <&smmu 0x454>;
+};
+
+&cp1_usb3_0 {
+        iommus = <&smmu 0x450>;
+};
+
+&cp1_usb3_1 {
+        iommus = <&smmu 0x451>;
+};
diff --git a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-80x0.dtsi b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-80x0.dtsi
index 81967e2..2ee35fa 100644
--- a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-80x0.dtsi
+++ b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-80x0.dtsi
@@ -19,44 +19,44 @@
 /*
  * Instantiate the master CP110
  */
-#define CP110_NAME                cp0
-#define CP110_BASE                f2000000
-#define CP110_PCIE_IO_BASE        0xf9000000
-#define CP110_PCIE_MEM_BASE        0xf6000000
-#define CP110_PCIE0_BASE        f2600000
-#define CP110_PCIE1_BASE        f2620000
-#define CP110_PCIE2_BASE        f2640000
+#define CP11X_NAME                cp0
+#define CP11X_BASE                f2000000
+#define CP11X_PCIEx_MEM_BASE(iface) (0xf6000000 + (iface * 0x1000000))
+#define CP11X_PCIEx_MEM_SIZE(iface) 0xf00000
+#define CP11X_PCIE0_BASE        f2600000
+#define CP11X_PCIE1_BASE        f2620000
+#define CP11X_PCIE2_BASE        f2640000
 
 #include "armada-cp110.dtsi"
 
-#undef CP110_NAME
-#undef CP110_BASE
-#undef CP110_PCIE_IO_BASE
-#undef CP110_PCIE_MEM_BASE
-#undef CP110_PCIE0_BASE
-#undef CP110_PCIE1_BASE
-#undef CP110_PCIE2_BASE
+#undef CP11X_NAME
+#undef CP11X_BASE
+#undef CP11X_PCIEx_MEM_BASE
+#undef CP11X_PCIEx_MEM_SIZE
+#undef CP11X_PCIE0_BASE
+#undef CP11X_PCIE1_BASE
+#undef CP11X_PCIE2_BASE
 
 /*
  * Instantiate the slave CP110
  */
-#define CP110_NAME                cp1
-#define CP110_BASE                f4000000
-#define CP110_PCIE_IO_BASE        0xfd000000
-#define CP110_PCIE_MEM_BASE        0xfa000000
-#define CP110_PCIE0_BASE        f4600000
-#define CP110_PCIE1_BASE        f4620000
-#define CP110_PCIE2_BASE        f4640000
+#define CP11X_NAME                cp1
+#define CP11X_BASE                f4000000
+#define CP11X_PCIEx_MEM_BASE(iface) (0xfa000000 + (iface * 0x1000000))
+#define CP11X_PCIEx_MEM_SIZE(iface) 0xf00000
+#define CP11X_PCIE0_BASE        f4600000
+#define CP11X_PCIE1_BASE        f4620000
+#define CP11X_PCIE2_BASE        f4640000
 
 #include "armada-cp110.dtsi"
 
-#undef CP110_NAME
-#undef CP110_BASE
-#undef CP110_PCIE_IO_BASE
-#undef CP110_PCIE_MEM_BASE
-#undef CP110_PCIE0_BASE
-#undef CP110_PCIE1_BASE
-#undef CP110_PCIE2_BASE
+#undef CP11X_NAME
+#undef CP11X_BASE
+#undef CP11X_PCIEx_MEM_BASE
+#undef CP11X_PCIEx_MEM_SIZE
+#undef CP11X_PCIE0_BASE
+#undef CP11X_PCIE1_BASE
+#undef CP11X_PCIE2_BASE
 
 /* The 80x0 has two CP blocks, but uses only one block from each. */
 &cp1_gpio1 {
diff --git a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-ap806-dual.dtsi b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-ap806-dual.dtsi
index 5985843..0cd8e7e 100644
--- a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-ap806-dual.dtsi
+++ b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-ap806-dual.dtsi
@@ -15,17 +15,47 @@
                 #address-cells = <1>;
                 #size-cells = <0>;
 
-                cpu@0 {
+                cpu0: cpu@0 {
                         device_type = "cpu";
-                        compatible = "arm,cortex-a72", "arm,armv8";
+                        compatible = "arm,cortex-a72";
                         reg = <0x000>;
                         enable-method = "psci";
+                        #cooling-cells = <2>;
+                        clocks = <&cpu_clk 0>;
+                        i-cache-size = <0xc000>;
+                        i-cache-line-size = <64>;
+                        i-cache-sets = <256>;
+                        d-cache-size = <0x8000>;
+                        d-cache-line-size = <64>;
+                        d-cache-sets = <256>;
+                        next-level-cache = <&l2>;
                 };
-                cpu@1 {
+                cpu1: cpu@1 {
                         device_type = "cpu";
-                        compatible = "arm,cortex-a72", "arm,armv8";
+                        compatible = "arm,cortex-a72";
                         reg = <0x001>;
                         enable-method = "psci";
+                        #cooling-cells = <2>;
+                        clocks = <&cpu_clk 0>;
+                        i-cache-size = <0xc000>;
+                        i-cache-line-size = <64>;
+                        i-cache-sets = <256>;
+                        d-cache-size = <0x8000>;
+                        d-cache-line-size = <64>;
+                        d-cache-sets = <256>;
+                        next-level-cache = <&l2>;
                 };
+
+                l2: l2-cache {
+                        compatible = "cache";
+                        cache-size = <0x80000>;
+                        cache-line-size = <64>;
+                        cache-sets = <512>;
+                };
+        };
+
+        thermal-zones {
+                /delete-node/ ap-thermal-cpu2;
+                /delete-node/ ap-thermal-cpu3;
         };
 };
diff --git a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-ap806-quad.dtsi b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-ap806-quad.dtsi
index bae0ed9..3b48a13 100644
--- a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-ap806-quad.dtsi
+++ b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-ap806-quad.dtsi
@@ -15,29 +15,79 @@
                 #address-cells = <1>;
                 #size-cells = <0>;
 
-                cpu@0 {
+                cpu0: cpu@0 {
                         device_type = "cpu";
-                        compatible = "arm,cortex-a72", "arm,armv8";
+                        compatible = "arm,cortex-a72";
                         reg = <0x000>;
                         enable-method = "psci";
+                        #cooling-cells = <2>;
+                        clocks = <&cpu_clk 0>;
+                        i-cache-size = <0xc000>;
+                        i-cache-line-size = <64>;
+                        i-cache-sets = <256>;
+                        d-cache-size = <0x8000>;
+                        d-cache-line-size = <64>;
+                        d-cache-sets = <256>;
+                        next-level-cache = <&l2_0>;
                 };
-                cpu@1 {
+                cpu1: cpu@1 {
                         device_type = "cpu";
-                        compatible = "arm,cortex-a72", "arm,armv8";
+                        compatible = "arm,cortex-a72";
                         reg = <0x001>;
                         enable-method = "psci";
+                        #cooling-cells = <2>;
+                        clocks = <&cpu_clk 0>;
+                        i-cache-size = <0xc000>;
+                        i-cache-line-size = <64>;
+                        i-cache-sets = <256>;
+                        d-cache-size = <0x8000>;
+                        d-cache-line-size = <64>;
+                        d-cache-sets = <256>;
+                        next-level-cache = <&l2_0>;
                 };
-                cpu@100 {
+                cpu2: cpu@100 {
                         device_type = "cpu";
-                        compatible = "arm,cortex-a72", "arm,armv8";
+                        compatible = "arm,cortex-a72";
                         reg = <0x100>;
                         enable-method = "psci";
+                        #cooling-cells = <2>;
+                        clocks = <&cpu_clk 1>;
+                        i-cache-size = <0xc000>;
+                        i-cache-line-size = <64>;
+                        i-cache-sets = <256>;
+                        d-cache-size = <0x8000>;
+                        d-cache-line-size = <64>;
+                        d-cache-sets = <256>;
+                        next-level-cache = <&l2_1>;
                 };
-                cpu@101 {
+                cpu3: cpu@101 {
                         device_type = "cpu";
-                        compatible = "arm,cortex-a72", "arm,armv8";
+                        compatible = "arm,cortex-a72";
                         reg = <0x101>;
                         enable-method = "psci";
+                        #cooling-cells = <2>;
+                        clocks = <&cpu_clk 1>;
+                        i-cache-size = <0xc000>;
+                        i-cache-line-size = <64>;
+                        i-cache-sets = <256>;
+                        d-cache-size = <0x8000>;
+                        d-cache-line-size = <64>;
+                        d-cache-sets = <256>;
+                        next-level-cache = <&l2_1>;
+                };
+
+                l2_0: l2-cache0 {
+                        compatible = "cache";
+                        cache-size = <0x80000>;
+                        cache-line-size = <64>;
+                        cache-sets = <512>;
+                };
+
+                l2_1: l2-cache1 {
+                        compatible = "cache";
+                        cache-size = <0x80000>;
+                        cache-line-size = <64>;
+                        cache-sets = <512>;
                 };
         };
 };
diff --git a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-ap806.dtsi b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-ap806.dtsi
index 66124bf..59641de 100644
--- a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-ap806.dtsi
+++ b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-ap806.dtsi
@@ -5,260 +5,26 @@
  * Device Tree file for Marvell Armada AP806.
  */
 
-#define IRQ_TYPE_LEVEL_HIGH      (1 << 2)
-#define IRQ_TYPE_LEVEL_LOW       (1 << 3)
-
-#define GIC_SPI                  0
-#define GIC_PPI                  1
-
-#define GIC_CPU_MASK_RAW(x)      ((x) << 8)
-#define GIC_CPU_MASK_SIMPLE(num) GIC_CPU_MASK_RAW((1 << (num)) - 1)
-
-/dts-v1/;
+#define AP_NAME                ap806
+#include "armada-ap80x.dtsi"
 
 / {
         model = "Marvell Armada AP806";
         compatible = "marvell,armada-ap806";
-        #address-cells = <2>;
-        #size-cells = <2>;
-
-        aliases {
-                serial0 = &uart0;
-                serial1 = &uart1;
-                gpio0 = &ap_gpio;
-                spi0 = &spi0;
-        };
+};
 
-        psci {
-                compatible = "arm,psci-0.2";
-                method = "smc";
+&ap_syscon0 {
+        ap_clk: clock {
+                compatible = "marvell,ap806-clock";
+                #clock-cells = <1>;
         };
+};
 
-        ap806 {
-                #address-cells = <2>;
-                #size-cells = <2>;
-                compatible = "simple-bus";
-                interrupt-parent = <&gic>;
-                ranges;
-
-                config-space@f0000000 {
-                        #address-cells = <1>;
-                        #size-cells = <1>;
-                        compatible = "simple-bus";
-                        ranges = <0x0 0x0 0xf0000000 0x1000000>;
-
-                        gic: interrupt-controller@210000 {
-                                compatible = "arm,gic-400";
-                                #interrupt-cells = <3>;
-                                #address-cells = <1>;
-                                #size-cells = <1>;
-                                ranges;
-                                interrupt-controller;
-                                interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
-                                reg = <0x210000 0x10000>,
-                                      <0x220000 0x20000>,
-                                      <0x240000 0x20000>,
-                                      <0x260000 0x20000>;
-
-                                gic_v2m0: v2m@280000 {
-                                        compatible = "arm,gic-v2m-frame";
-                                        msi-controller;
-                                        reg = <0x280000 0x1000>;
-                                        arm,msi-base-spi = <160>;
-                                        arm,msi-num-spis = <32>;
-                                };
-                                gic_v2m1: v2m@290000 {
-                                        compatible = "arm,gic-v2m-frame";
-                                        msi-controller;
-                                        reg = <0x290000 0x1000>;
-                                        arm,msi-base-spi = <192>;
-                                        arm,msi-num-spis = <32>;
-                                };
-                                gic_v2m2: v2m@2a0000 {
-                                        compatible = "arm,gic-v2m-frame";
-                                        msi-controller;
-                                        reg = <0x2a0000 0x1000>;
-                                        arm,msi-base-spi = <224>;
-                                        arm,msi-num-spis = <32>;
-                                };
-                                gic_v2m3: v2m@2b0000 {
-                                        compatible = "arm,gic-v2m-frame";
-                                        msi-controller;
-                                        reg = <0x2b0000 0x1000>;
-                                        arm,msi-base-spi = <256>;
-                                        arm,msi-num-spis = <32>;
-                                };
-                        };
-
-                        timer {
-                                compatible = "arm,armv8-timer";
-                                interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
-                                             <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
-                                             <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
-                                             <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>;
-                        };
-
-                        pmu {
-                                compatible = "arm,cortex-a72-pmu";
-                                interrupt-parent = <&pic>;
-                                interrupts = <17>;
-                        };
-
-                        odmi: odmi@300000 {
-                                compatible = "marvell,odmi-controller";
-                                interrupt-controller;
-                                msi-controller;
-                                marvell,odmi-frames = <4>;
-                                reg = <0x300000 0x4000>,
-                                      <0x304000 0x4000>,
-                                      <0x308000 0x4000>,
-                                      <0x30C000 0x4000>;
-                                marvell,spi-base = <128>, <136>, <144>, <152>;
-                        };
-
-                        gicp: gicp@3f0040 {
-                                compatible = "marvell,ap806-gicp";
-                                reg = <0x3f0040 0x10>;
-                                marvell,spi-ranges = <64 64>, <288 64>;
-                                msi-controller;
-                        };
-
-                        pic: interrupt-controller@3f0100 {
-                                compatible = "marvell,armada-8k-pic";
-                                reg = <0x3f0100 0x10>;
-                                #interrupt-cells = <1>;
-                                interrupt-controller;
-                                interrupts = <GIC_PPI 15 IRQ_TYPE_LEVEL_HIGH>;
-                        };
-
-                        xor@400000 {
-                                compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
-                                reg = <0x400000 0x1000>,
-                                      <0x410000 0x1000>;
-                                msi-parent = <&gic_v2m0>;
-                                clocks = <&ap_clk 3>;
-                                dma-coherent;
-                        };
-
-                        xor@420000 {
-                                compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
-                                reg = <0x420000 0x1000>,
-                                      <0x430000 0x1000>;
-                                msi-parent = <&gic_v2m0>;
-                                clocks = <&ap_clk 3>;
-                                dma-coherent;
-                        };
-
-                        xor@440000 {
-                                compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
-                                reg = <0x440000 0x1000>,
-                                      <0x450000 0x1000>;
-                                msi-parent = <&gic_v2m0>;
-                                clocks = <&ap_clk 3>;
-                                dma-coherent;
-                        };
-
-                        xor@460000 {
-                                compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
-                                reg = <0x460000 0x1000>,
-                                      <0x470000 0x1000>;
-                                msi-parent = <&gic_v2m0>;
-                                clocks = <&ap_clk 3>;
-                                dma-coherent;
-                        };
-
-                        spi0: spi@510600 {
-                                compatible = "marvell,armada-380-spi";
-                                reg = <0x510600 0x50>;
-                                #address-cells = <1>;
-                                #size-cells = <0>;
-                                interrupts = <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>;
-                                clocks = <&ap_clk 3>;
-                                status = "disabled";
-                        };
-
-                        i2c0: i2c@511000 {
-                                compatible = "marvell,mv78230-i2c";
-                                reg = <0x511000 0x20>;
-                                #address-cells = <1>;
-                                #size-cells = <0>;
-                                interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
-                                timeout-ms = <1000>;
-                                clocks = <&ap_clk 3>;
-                                status = "disabled";
-                        };
-
-                        uart0: serial@512000 {
-                                compatible = "snps,dw-apb-uart";
-                                reg = <0x512000 0x100>;
-                                reg-shift = <2>;
-                                interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
-                                reg-io-width = <1>;
-                                clocks = <&ap_clk 3>;
-                                status = "disabled";
-                        };
-
-                        uart1: serial@512100 {
-                                compatible = "snps,dw-apb-uart";
-                                reg = <0x512100 0x100>;
-                                reg-shift = <2>;
-                                interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>;
-                                reg-io-width = <1>;
-                                clocks = <&ap_clk 3>;
-                                status = "disabled";
-
-                        };
-
-                        watchdog: watchdog@610000 {
-                                compatible = "arm,sbsa-gwdt";
-                                reg = <0x610000 0x1000>, <0x600000 0x1000>;
-                                interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
-                        };
-
-                        ap_sdhci0: sdhci@6e0000 {
-                                compatible = "marvell,armada-ap806-sdhci";
-                                reg = <0x6e0000 0x300>;
-                                interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>;
-                                clock-names = "core";
-                                clocks = <&ap_clk 4>;
-                                dma-coherent;
-                                marvell,xenon-phy-slow-mode;
-                                status = "disabled";
-                        };
-
-                        ap_syscon: system-controller@6f4000 {
-                                compatible = "syscon", "simple-mfd";
-                                reg = <0x6f4000 0x2000>;
-
-                                ap_clk: clock {
-                                        compatible = "marvell,ap806-clock";
-                                        #clock-cells = <1>;
-                                };
-
-                                ap_pinctrl: pinctrl {
-                                        compatible = "marvell,ap806-pinctrl";
-
-                                        uart0_pins: uart0-pins {
-                                                marvell,pins = "mpp11", "mpp19";
-                                                marvell,function = "uart0";
-                                        };
-                                };
-
-                                ap_gpio: gpio@1040 {
-                                        compatible = "marvell,armada-8k-gpio";
-                                        offset = <0x1040>;
-                                        ngpios = <20>;
-                                        gpio-controller;
-                                        #gpio-cells = <2>;
-                                        gpio-ranges = <&ap_pinctrl 0 0 20>;
-                                };
-                        };
-
-                        ap_thermal: thermal@6f808c {
-                                compatible = "marvell,armada-ap806-thermal";
-                                reg = <0x6f808c 0x4>,
-                                      <0x6f8084 0x8>;
-                        };
-                };
+&ap_syscon1 {
+        cpu_clk: clock-cpu@278 {
+                compatible = "marvell,ap806-cpu-clock";
+                clocks = <&ap_clk 0>, <&ap_clk 1>;
+                #clock-cells = <1>;
+                reg = <0x278 0xa30>;
         };
 };
diff --git a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-ap807-quad.dtsi b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-ap807-quad.dtsi
new file mode 100644
index 0000000..6222569
--- /dev/null
+++ b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-ap807-quad.dtsi
@@ -0,0 +1,93 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Device Tree file for Marvell Armada AP807 Quad
+ *
+ * Copyright (C) 2019 Marvell Technology Group Ltd.
+ */
+
+#include "armada-ap807.dtsi"
+
+/ {
+        model = "Marvell Armada AP807 Quad";
+        compatible = "marvell,armada-ap807-quad", "marvell,armada-ap807";
+
+        cpus {
+                #address-cells = <1>;
+                #size-cells = <0>;
+
+                cpu0: cpu@0 {
+                        device_type = "cpu";
+                        compatible = "arm,cortex-a72";
+                        reg = <0x000>;
+                        enable-method = "psci";
+                        #cooling-cells = <2>;
+                        clocks = <&cpu_clk 0>;
+                        i-cache-size = <0xc000>;
+                        i-cache-line-size = <64>;
+                        i-cache-sets = <256>;
+                        d-cache-size = <0x8000>;
+                        d-cache-line-size = <64>;
+                        d-cache-sets = <256>;
+                        next-level-cache = <&l2_0>;
+                };
+                cpu1: cpu@1 {
+                        device_type = "cpu";
+                        compatible = "arm,cortex-a72";
+                        reg = <0x001>;
+                        enable-method = "psci";
+                        #cooling-cells = <2>;
+                        clocks = <&cpu_clk 0>;
+                        i-cache-size = <0xc000>;
+                        i-cache-line-size = <64>;
+                        i-cache-sets = <256>;
+                        d-cache-size = <0x8000>;
+                        d-cache-line-size = <64>;
+                        d-cache-sets = <256>;
+                        next-level-cache = <&l2_0>;
+                };
+                cpu2: cpu@100 {
+                        device_type = "cpu";
+                        compatible = "arm,cortex-a72";
+                        reg = <0x100>;
+                        enable-method = "psci";
+                        #cooling-cells = <2>;
+                        clocks = <&cpu_clk 1>;
+                        i-cache-size = <0xc000>;
+                        i-cache-line-size = <64>;
+                        i-cache-sets = <256>;
+                        d-cache-size = <0x8000>;
+                        d-cache-line-size = <64>;
+                        d-cache-sets = <256>;
+                        next-level-cache = <&l2_1>;
+                };
+                cpu3: cpu@101 {
+                        device_type = "cpu";
+                        compatible = "arm,cortex-a72";
+                        reg = <0x101>;
+                        enable-method = "psci";
+                        #cooling-cells = <2>;
+                        clocks = <&cpu_clk 1>;
+                        i-cache-size = <0xc000>;
+                        i-cache-line-size = <64>;
+                        i-cache-sets = <256>;
+                        d-cache-size = <0x8000>;
+                        d-cache-line-size = <64>;
+                        d-cache-sets = <256>;
+                        next-level-cache = <&l2_1>;
+                };
+
+                l2_0: l2-cache0 {
+                        compatible = "cache";
+                        cache-size = <0x80000>;
+                        cache-line-size = <64>;
+                        cache-sets = <512>;
+                };
+
+                l2_1: l2-cache1 {
+                        compatible = "cache";
+                        cache-size = <0x80000>;
+                        cache-line-size = <64>;
+                        cache-sets = <512>;
+                };
+        };
+};
diff --git a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-ap80x.dtsi b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-ap80x.dtsi
new file mode 100644
index 0000000..805d782
--- /dev/null
+++ b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-ap80x.dtsi
@@ -0,0 +1,473 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (C) 2019 Marvell Technology Group Ltd.
+ *
+ * Device Tree file for Marvell Armada AP80x.
+ */
+
+#define IRQ_TYPE_LEVEL_HIGH      (1 << 2)
+#define IRQ_TYPE_LEVEL_LOW       (1 << 3)
+
+#define GIC_SPI                  0
+#define GIC_PPI                  1
+
+#define GIC_CPU_MASK_RAW(x)      ((x) << 8)
+#define GIC_CPU_MASK_SIMPLE(num) GIC_CPU_MASK_RAW((1 << (num)) - 1)
+
+#define GPIO_ACTIVE_HIGH 0
+#define GPIO_ACTIVE_LOW  1
+
+/dts-v1/;
+
+/ {
+        #address-cells = <2>;
+        #size-cells = <2>;
+
+        aliases {
+                serial0 = &uart0;
+                serial1 = &uart1;
+                gpio0 = &ap_gpio;
+                spi0 = &spi0;
+        };
+
+        psci {
+                compatible = "arm,psci-0.2";
+                method = "smc";
+        };
+
+        reserved-memory {
+                #address-cells = <2>;
+                #size-cells = <2>;
+                ranges;
+
+                /*
+                 * This area matches the mapping done with a
+                 * mainline U-Boot, and should be updated by the
+                 * bootloader.
+                 */
+
+                psci-area@4000000 {
+                        reg = <0x0 0x4000000 0x0 0x200000>;
+                        no-map;
+                };
+        };
+
+        AP_NAME {
+                #address-cells = <2>;
+                #size-cells = <2>;
+                compatible = "simple-bus";
+                interrupt-parent = <&gic>;
+                ranges;
+
+                config-space@f0000000 {
+                        #address-cells = <1>;
+                        #size-cells = <1>;
+                        compatible = "simple-bus";
+                        ranges = <0x0 0x0 0xf0000000 0x1000000>;
+
+                        smmu: iommu@5000000 {
+                                compatible = "marvell,ap806-smmu-500", "arm,mmu-500";
+                                reg = <0x100000 0x100000>;
+                                dma-coherent;
+                                #iommu-cells = <1>;
+                                #global-interrupts = <1>;
+                                interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
+                                             <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
+                                             <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
+                                             <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
+                                             <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
+                                             <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
+                                             <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
+                                             <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
+                                             <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
+                                status = "disabled";
+                        };
+
+                        gic: interrupt-controller@210000 {
+                                compatible = "arm,gic-400";
+                                #interrupt-cells = <3>;
+                                #address-cells = <1>;
+                                #size-cells = <1>;
+                                ranges;
+                                interrupt-controller;
+                                interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
+                                reg = <0x210000 0x10000>,
+                                      <0x220000 0x20000>,
+                                      <0x240000 0x20000>,
+                                      <0x260000 0x20000>;
+
+                                gic_v2m0: v2m@280000 {
+                                        compatible = "arm,gic-v2m-frame";
+                                        msi-controller;
+                                        reg = <0x280000 0x1000>;
+                                        arm,msi-base-spi = <160>;
+                                        arm,msi-num-spis = <32>;
+                                };
+                                gic_v2m1: v2m@290000 {
+                                        compatible = "arm,gic-v2m-frame";
+                                        msi-controller;
+                                        reg = <0x290000 0x1000>;
+                                        arm,msi-base-spi = <192>;
+                                        arm,msi-num-spis = <32>;
+                                };
+                                gic_v2m2: v2m@2a0000 {
+                                        compatible = "arm,gic-v2m-frame";
+                                        msi-controller;
+                                        reg = <0x2a0000 0x1000>;
+                                        arm,msi-base-spi = <224>;
+                                        arm,msi-num-spis = <32>;
+                                };
+                                gic_v2m3: v2m@2b0000 {
+                                        compatible = "arm,gic-v2m-frame";
+                                        msi-controller;
+                                        reg = <0x2b0000 0x1000>;
+                                        arm,msi-base-spi = <256>;
+                                        arm,msi-num-spis = <32>;
+                                };
+                        };
+
+                        timer {
+                                compatible = "arm,armv8-timer";
+                                interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
+                                             <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
+                                             <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
+                                             <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>;
+                        };
+
+                        pmu {
+                                compatible = "arm,cortex-a72-pmu";
+                                interrupt-parent = <&pic>;
+                                interrupts = <17>;
+                        };
+
+                        odmi: odmi@300000 {
+                                compatible = "marvell,odmi-controller";
+                                interrupt-controller;
+                                msi-controller;
+                                marvell,odmi-frames = <4>;
+                                reg = <0x300000 0x4000>,
+                                      <0x304000 0x4000>,
+                                      <0x308000 0x4000>,
+                                      <0x30C000 0x4000>;
+                                marvell,spi-base = <128>, <136>, <144>, <152>;
+                        };
+
+                        gicp: gicp@3f0040 {
+                                compatible = "marvell,ap806-gicp";
+                                reg = <0x3f0040 0x10>;
+                                marvell,spi-ranges = <64 64>, <288 64>;
+                                msi-controller;
+                        };
+
+                        pic: interrupt-controller@3f0100 {
+                                compatible = "marvell,armada-8k-pic";
+                                reg = <0x3f0100 0x10>;
+                                #interrupt-cells = <1>;
+                                interrupt-controller;
+                                interrupts = <GIC_PPI 15 IRQ_TYPE_LEVEL_HIGH>;
+                        };
+
+                        sei: interrupt-controller@3f0200 {
+                                compatible = "marvell,ap806-sei";
+                                reg = <0x3f0200 0x40>;
+                                interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
+                                #interrupt-cells = <1>;
+                                interrupt-controller;
+                                msi-controller;
+                        };
+
+                        xor@400000 {
+                                compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
+                                reg = <0x400000 0x1000>,
+                                      <0x410000 0x1000>;
+                                msi-parent = <&gic_v2m0>;
+                                clocks = <&ap_clk 3>;
+                                dma-coherent;
+                        };
+
+                        xor@420000 {
+                                compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
+                                reg = <0x420000 0x1000>,
+                                      <0x430000 0x1000>;
+                                msi-parent = <&gic_v2m0>;
+                                clocks = <&ap_clk 3>;
+                                dma-coherent;
+                        };
+
+                        xor@440000 {
+                                compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
+                                reg = <0x440000 0x1000>,
+                                      <0x450000 0x1000>;
+                                msi-parent = <&gic_v2m0>;
+                                clocks = <&ap_clk 3>;
+                                dma-coherent;
+                        };
+
+                        xor@460000 {
+                                compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
+                                reg = <0x460000 0x1000>,
+                                      <0x470000 0x1000>;
+                                msi-parent = <&gic_v2m0>;
+                                clocks = <&ap_clk 3>;
+                                dma-coherent;
+                        };
+
+                        spi0: spi@510600 {
+                                compatible = "marvell,armada-380-spi";
+                                reg = <0x510600 0x50>;
+                                #address-cells = <1>;
+                                #size-cells = <0>;
+                                interrupts = <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>;
+                                clocks = <&ap_clk 3>;
+                                status = "disabled";
+                        };
+
+                        i2c0: i2c@511000 {
+                                compatible = "marvell,mv78230-i2c";
+                                reg = <0x511000 0x20>;
+                                #address-cells = <1>;
+                                #size-cells = <0>;
+                                interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
+                                clocks = <&ap_clk 3>;
+                                status = "disabled";
+                        };
+
+                        uart0: serial@512000 {
+                                compatible = "snps,dw-apb-uart";
+                                reg = <0x512000 0x100>;
+                                reg-shift = <2>;
+                                interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
+                                reg-io-width = <1>;
+                                clocks = <&ap_clk 3>;
+                                status = "disabled";
+                        };
+
+                        uart1: serial@512100 {
+                                compatible = "snps,dw-apb-uart";
+                                reg = <0x512100 0x100>;
+                                reg-shift = <2>;
+                                interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>;
+                                reg-io-width = <1>;
+                                clocks = <&ap_clk 3>;
+                                status = "disabled";
+
+                        };
+
+                        watchdog: watchdog@610000 {
+                                compatible = "arm,sbsa-gwdt";
+                                reg = <0x610000 0x1000>, <0x600000 0x1000>;
+                                interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
+                        };
+
+                        ap_sdhci0: sdhci@6e0000 {
+                                compatible = "marvell,armada-ap806-sdhci";
+                                reg = <0x6e0000 0x300>;
+                                interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>;
+                                clock-names = "core";
+                                clocks = <&ap_clk 4>;
+                                dma-coherent;
+                                marvell,xenon-phy-slow-mode;
+                                status = "disabled";
+                        };
+
+                        ap_syscon0: system-controller@6f4000 {
+                                compatible = "syscon", "simple-mfd";
+                                reg = <0x6f4000 0x2000>;
+
+                                ap_pinctrl: pinctrl {
+                                        compatible = "marvell,ap806-pinctrl";
+
+                                        uart0_pins: uart0-pins {
+                                                marvell,pins = "mpp11", "mpp19";
+                                                marvell,function = "uart0";
+                                        };
+                                };
+
+                                ap_gpio: gpio@1040 {
+                                        compatible = "marvell,armada-8k-gpio";
+                                        offset = <0x1040>;
+                                        ngpios = <20>;
+                                        gpio-controller;
+                                        #gpio-cells = <2>;
+                                        gpio-ranges = <&ap_pinctrl 0 0 20>;
+                                        marvell,pwm-offset = <0x10c0>;
+                                        #pwm-cells = <2>;
+                                        clocks = <&ap_clk 3>;
+                                };
+                        };
+
+                        ap_syscon1: system-controller@6f8000 {
+                                compatible = "syscon", "simple-mfd";
+                                reg = <0x6f8000 0x1000>;
+                                #address-cells = <1>;
+                                #size-cells = <1>;
+
+                                ap_thermal: thermal-sensor@80 {
+                                        compatible = "marvell,armada-ap806-thermal";
+                                        reg = <0x80 0x10>;
+                                        interrupt-parent = <&sei>;
+                                        interrupts = <18>;
+                                        #thermal-sensor-cells = <1>;
+                                };
+                        };
+                };
+        };
+
+        /*
+         * The thermal IP features one internal sensor plus, if applicable, one
+         * remote channel wired to one sensor per CPU.
+         *
+         * Only one thermal zone per AP/CP may trigger interrupts at a time, the
+         * first one that will have a critical trip point will be chosen.
+         */
+        thermal-zones {
+                ap_thermal_ic: ap-thermal-ic {
+                        polling-delay-passive = <0>; /* Interrupt driven */
+                        polling-delay = <0>; /* Interrupt driven */
+
+                        thermal-sensors = <&ap_thermal 0>;
+
+                        trips {
+                                ap_crit: ap-crit {
+                                        temperature = <100000>; /* mC degrees */
+                                        hysteresis = <2000>; /* mC degrees */
+                                        type = "critical";
+                                };
+                        };
+
+                        cooling-maps { };
+                };
+
+                ap_thermal_cpu0: ap-thermal-cpu0 {
+                        polling-delay-passive = <1000>;
+                        polling-delay = <1000>;
+
+                        thermal-sensors = <&ap_thermal 1>;
+
+                        trips {
+                                cpu0_hot: cpu0-hot {
+                                        temperature = <85000>;
+                                        hysteresis = <2000>;
+                                        type = "passive";
+                                };
+                                cpu0_emerg: cpu0-emerg {
+                                        temperature = <95000>;
+                                        hysteresis = <2000>;
+                                        type = "passive";
+                                };
+                        };
+
+                        cooling-maps {
+                                map0_hot: map0-hot {
+                                        trip = <&cpu0_hot>;
+                                        cooling-device = <&cpu0 1 2>,
+                                                <&cpu1 1 2>;
+                                };
+                                map0_emerg: map0-ermerg {
+                                        trip = <&cpu0_emerg>;
+                                        cooling-device = <&cpu0 3 3>,
+                                                <&cpu1 3 3>;
+                                };
+                        };
+                };
+
+                ap_thermal_cpu1: ap-thermal-cpu1 {
+                        polling-delay-passive = <1000>;
+                        polling-delay = <1000>;
+
+                        thermal-sensors = <&ap_thermal 2>;
+
+                        trips {
+                                cpu1_hot: cpu1-hot {
+                                        temperature = <85000>;
+                                        hysteresis = <2000>;
+                                        type = "passive";
+                                };
+                                cpu1_emerg: cpu1-emerg {
+                                        temperature = <95000>;
+                                        hysteresis = <2000>;
+                                        type = "passive";
+                                };
+                        };
+
+                        cooling-maps {
+                                map1_hot: map1-hot {
+                                        trip = <&cpu1_hot>;
+                                        cooling-device = <&cpu0 1 2>,
+                                                <&cpu1 1 2>;
+                                };
+                                map1_emerg: map1-emerg {
+                                        trip = <&cpu1_emerg>;
+                                        cooling-device = <&cpu0 3 3>,
+                                                <&cpu1 3 3>;
+                                };
+                        };
+                };
+
+                ap_thermal_cpu2: ap-thermal-cpu2 {
+                        polling-delay-passive = <1000>;
+                        polling-delay = <1000>;
+
+                        thermal-sensors = <&ap_thermal 3>;
+
+                        trips {
+                                cpu2_hot: cpu2-hot {
+                                        temperature = <85000>;
+                                        hysteresis = <2000>;
+                                        type = "passive";
+                                };
+                                cpu2_emerg: cpu2-emerg {
+                                        temperature = <95000>;
+                                        hysteresis = <2000>;
+                                        type = "passive";
+                                };
+                        };
+
+                        cooling-maps {
+                                map2_hot: map2-hot {
+                                        trip = <&cpu2_hot>;
+                                        cooling-device = <&cpu2 1 2>,
+                                                <&cpu3 1 2>;
+                                };
+                                map2_emerg: map2-emerg {
+                                        trip = <&cpu2_emerg>;
+                                        cooling-device = <&cpu2 3 3>,
+                                                <&cpu3 3 3>;
+                                };
+                        };
+                };
+
+                ap_thermal_cpu3: ap-thermal-cpu3 {
+                        polling-delay-passive = <1000>;
+                        polling-delay = <1000>;
+
+                        thermal-sensors = <&ap_thermal 4>;
+
+                        trips {
+                                cpu3_hot: cpu3-hot {
+                                        temperature = <85000>;
+                                        hysteresis = <2000>;
+                                        type = "passive";
+                                };
+                                cpu3_emerg: cpu3-emerg {
+                                        temperature = <95000>;
+                                        hysteresis = <2000>;
+                                        type = "passive";
+                                };
+                        };
+
+                        cooling-maps {
+                                map3_hot: map3-bhot {
+                                        trip = <&cpu3_hot>;
+                                        cooling-device = <&cpu2 1 2>,
+                                                <&cpu3 1 2>;
+                                };
+                                map3_emerg: map3-emerg {
+                                        trip = <&cpu3_emerg>;
+                                        cooling-device = <&cpu2 3 3>,
+                                                <&cpu3 3 3>;
+                                };
+                        };
+                };
+        };
+};
diff --git a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-common.dtsi b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-common.dtsi
index 8b610fd..f002499 100644
--- a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-common.dtsi
+++ b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-common.dtsi
@@ -6,5 +6,6 @@
 /* Common definitions used by Armada 7K/8K DTs */
 #define PASTER(x, y) x ## y
 #define EVALUATOR(x, y) PASTER(x, y)
-#define CP110_LABEL(name) EVALUATOR(CP110_NAME, EVALUATOR(_, name))
+#define CP11X_LABEL(name) EVALUATOR(CP11X_NAME, EVALUATOR(_, name))
+#define CP11X_NODE_NAME(name) EVALUATOR(CP11X_NAME, EVALUATOR(-, name))
 #define ADDRESSIFY(addr) EVALUATOR(0x, addr)
diff --git a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-cp110.dtsi b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-cp110.dtsi
index 5e8e524..5799e98 100644
--- a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-cp110.dtsi
+++ b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-cp110.dtsi
@@ -1,560 +1,12 @@
 // SPDX-License-Identifier: (GPL-2.0+ OR MIT)
 /*
- * Copyright (C) 2016 Marvell Technology Group Ltd.
+ * Copyright (C) 2019 Marvell Technology Group Ltd.
  *
  * Device Tree file for Marvell Armada CP110.
  */
 
-#include "armada-common.dtsi"
+#define CP11X_TYPE cp110
 
-#define ICU_GRP_NSR             0x0
-#define ICU_GRP_SR              0x1
-#define ICU_GRP_SEI             0x4
-#define ICU_GRP_REI             0x5
+#include "armada-cp11x.dtsi"
 
-#define CP110_PCIEx_IO_BASE(iface)        (CP110_PCIE_IO_BASE + (iface *  0x10000))
-#define CP110_PCIEx_MEM_BASE(iface)        (CP110_PCIE_MEM_BASE + (iface *  0x1000000))
-#define CP110_PCIEx_CONF_BASE(iface)        (CP110_PCIEx_MEM_BASE(iface) + 0xf00000)
-
-/ {
-        /*
-         * The contents of the node are defined below, in order to
-         * save one indentation level
-         */
-        CP110_NAME: CP110_NAME { };
-};
-
-&CP110_NAME {
-        #address-cells = <2>;
-        #size-cells = <2>;
-        compatible = "simple-bus";
-        interrupt-parent = <&CP110_LABEL(icu)>;
-        ranges;
-
-        config-space@CP110_BASE {
-                #address-cells = <1>;
-                #size-cells = <1>;
-                compatible = "simple-bus";
-                ranges = <0x0 0x0 ADDRESSIFY(CP110_BASE) 0x2000000>;
-
-                CP110_LABEL(ethernet): ethernet@0 {
-                        compatible = "marvell,armada-7k-pp22";
-                        reg = <0x0 0x100000>, <0x129000 0xb000>;
-                        clocks = <&CP110_LABEL(ppv2_clk)>, <&CP110_LABEL(ppv2_clk)>,
-                                 <&CP110_LABEL(ppv2_clk)>, <&CP110_LABEL(core_clk)>,
-                                 <&CP110_LABEL(core_clk)>;
-                        clock-names = "pp_clk", "gop_clk",
-                                      "mg_clk", "mg_core_clk", "axi_clk";
-                        marvell,system-controller = <&CP110_LABEL(syscon0)>;
-                        status = "disabled";
-                        dma-coherent;
-
-                        CP110_LABEL(eth0): eth0 {
-                                interrupts = <ICU_GRP_NSR 39 IRQ_TYPE_LEVEL_HIGH>,
-                                        <ICU_GRP_NSR 43 IRQ_TYPE_LEVEL_HIGH>,
-                                        <ICU_GRP_NSR 47 IRQ_TYPE_LEVEL_HIGH>,
-                                        <ICU_GRP_NSR 51 IRQ_TYPE_LEVEL_HIGH>,
-                                        <ICU_GRP_NSR 55 IRQ_TYPE_LEVEL_HIGH>,
-                                        <ICU_GRP_NSR 129 IRQ_TYPE_LEVEL_HIGH>;
-                                interrupt-names = "tx-cpu0", "tx-cpu1", "tx-cpu2",
-                                        "tx-cpu3", "rx-shared", "link";
-                                port-id = <0>;
-                                gop-port-id = <0>;
-                                status = "disabled";
-                        };
-
-                        CP110_LABEL(eth1): eth1 {
-                                interrupts = <ICU_GRP_NSR 40 IRQ_TYPE_LEVEL_HIGH>,
-                                        <ICU_GRP_NSR 44 IRQ_TYPE_LEVEL_HIGH>,
-                                        <ICU_GRP_NSR 48 IRQ_TYPE_LEVEL_HIGH>,
-                                        <ICU_GRP_NSR 52 IRQ_TYPE_LEVEL_HIGH>,
-                                        <ICU_GRP_NSR 56 IRQ_TYPE_LEVEL_HIGH>,
-                                        <ICU_GRP_NSR 128 IRQ_TYPE_LEVEL_HIGH>;
-                                interrupt-names = "tx-cpu0", "tx-cpu1", "tx-cpu2",
-                                        "tx-cpu3", "rx-shared", "link";
-                                port-id = <1>;
-                                gop-port-id = <2>;
-                                status = "disabled";
-                        };
-
-                        CP110_LABEL(eth2): eth2 {
-                                interrupts = <ICU_GRP_NSR 41 IRQ_TYPE_LEVEL_HIGH>,
-                                        <ICU_GRP_NSR 45 IRQ_TYPE_LEVEL_HIGH>,
-                                        <ICU_GRP_NSR 49 IRQ_TYPE_LEVEL_HIGH>,
-                                        <ICU_GRP_NSR 53 IRQ_TYPE_LEVEL_HIGH>,
-                                        <ICU_GRP_NSR 57 IRQ_TYPE_LEVEL_HIGH>,
-                                        <ICU_GRP_NSR 127 IRQ_TYPE_LEVEL_HIGH>;
-                                interrupt-names = "tx-cpu0", "tx-cpu1", "tx-cpu2",
-                                        "tx-cpu3", "rx-shared", "link";
-                                port-id = <2>;
-                                gop-port-id = <3>;
-                                status = "disabled";
-                        };
-                };
-
-                CP110_LABEL(comphy): phy@120000 {
-                        compatible = "marvell,comphy-cp110";
-                        reg = <0x120000 0x6000>;
-                        marvell,system-controller = <&CP110_LABEL(syscon0)>;
-                        #address-cells = <1>;
-                        #size-cells = <0>;
-
-                        CP110_LABEL(comphy0): phy@0 {
-                                reg = <0>;
-                                #phy-cells = <1>;
-                        };
-
-                        CP110_LABEL(comphy1): phy@1 {
-                                reg = <1>;
-                                #phy-cells = <1>;
-                        };
-
-                        CP110_LABEL(comphy2): phy@2 {
-                                reg = <2>;
-                                #phy-cells = <1>;
-                        };
-
-                        CP110_LABEL(comphy3): phy@3 {
-                                reg = <3>;
-                                #phy-cells = <1>;
-                        };
-
-                        CP110_LABEL(comphy4): phy@4 {
-                                reg = <4>;
-                                #phy-cells = <1>;
-                        };
-
-                        CP110_LABEL(comphy5): phy@5 {
-                                reg = <5>;
-                                #phy-cells = <1>;
-                        };
-                };
-
-                CP110_LABEL(mdio): mdio@12a200 {
-                        #address-cells = <1>;
-                        #size-cells = <0>;
-                        compatible = "marvell,orion-mdio";
-                        reg = <0x12a200 0x10>;
-                        clocks = <&CP110_LABEL(ppv2_clk)>, <&CP110_LABEL(ppv2_clk)>,
-                                 <&CP110_LABEL(core_clk)>, <&CP110_LABEL(core_clk)>;
-                        status = "disabled";
-                };
-
-                CP110_LABEL(xmdio): mdio@12a600 {
-                        #address-cells = <1>;
-                        #size-cells = <0>;
-                        compatible = "marvell,xmdio";
-                        reg = <0x12a600 0x10>;
-                        clocks = <&CP110_LABEL(ppv2_clk)>, <&CP110_LABEL(ppv2_clk)>,
-                                 <&CP110_LABEL(core_clk)>;
-                        status = "disabled";
-                };
-
-                CP110_LABEL(icu): interrupt-controller@1e0000 {
-                        compatible = "marvell,cp110-icu";
-                        reg = <0x1e0000 0x440>;
-                        #interrupt-cells = <3>;
-                        interrupt-controller;
-                        msi-parent = <&gicp>;
-                };
-
-                CP110_LABEL(rtc): rtc@284000 {
-                        compatible = "marvell,armada-8k-rtc";
-                        reg = <0x284000 0x20>, <0x284080 0x24>;
-                        reg-names = "rtc", "rtc-soc";
-                        interrupts = <ICU_GRP_NSR 77 IRQ_TYPE_LEVEL_HIGH>;
-                        status = "disabled";
-                };
-
-                CP110_LABEL(thermal): thermal@400078 {
-                        compatible = "marvell,armada-cp110-thermal";
-                        reg = <0x400078 0x4>,
-                        <0x400070 0x8>;
-                };
-
-                CP110_LABEL(syscon0): system-controller@440000 {
-                        compatible = "syscon", "simple-mfd";
-                        reg = <0x440000 0x2000>;
-
-                        CP110_LABEL(clk): clock {
-                                compatible = "marvell,cp110-clock";
-                                status = "disabled";
-                                #clock-cells = <2>;
-                        };
-
-                        CP110_LABEL(gpio1): gpio@100 {
-                                compatible = "marvell,armada-8k-gpio";
-                                offset = <0x100>;
-                                ngpios = <32>;
-                                gpio-controller;
-                                #gpio-cells = <2>;
-                                gpio-ranges = <&CP110_LABEL(pinctrl) 0 0 32>;
-                                interrupt-controller;
-                                interrupts = <ICU_GRP_NSR 86 IRQ_TYPE_LEVEL_HIGH>,
-                                        <ICU_GRP_NSR 85 IRQ_TYPE_LEVEL_HIGH>,
-                                        <ICU_GRP_NSR 84 IRQ_TYPE_LEVEL_HIGH>,
-                                        <ICU_GRP_NSR 83 IRQ_TYPE_LEVEL_HIGH>;
-                                status = "disabled";
-                        };
-
-                        CP110_LABEL(gpio2): gpio@140 {
-                                compatible = "marvell,armada-8k-gpio";
-                                offset = <0x140>;
-                                ngpios = <31>;
-                                gpio-controller;
-                                #gpio-cells = <2>;
-                                gpio-ranges = <&CP110_LABEL(pinctrl) 0 32 31>;
-                                interrupt-controller;
-                                interrupts = <ICU_GRP_NSR 82 IRQ_TYPE_LEVEL_HIGH>,
-                                        <ICU_GRP_NSR 81 IRQ_TYPE_LEVEL_HIGH>,
-                                        <ICU_GRP_NSR 80 IRQ_TYPE_LEVEL_HIGH>,
-                                        <ICU_GRP_NSR 79 IRQ_TYPE_LEVEL_HIGH>;
-                                status = "disabled";
-                        };
-                };
-
-                CP110_LABEL(usb3_0): usb3@500000 {
-                        compatible = "marvell,armada-8k-xhci",
-                        "generic-xhci";
-                        reg = <0x500000 0x4000>;
-                        dma-coherent;
-                        interrupts = <ICU_GRP_NSR 106 IRQ_TYPE_LEVEL_HIGH>;
-                        clock-names = "core", "reg";
-                        clocks = <&CP110_LABEL(core_clk)>,
-                                 <&CP110_LABEL(core_clk)>;
-                        status = "disabled";
-                };
-
-                CP110_LABEL(usb3_1): usb3@510000 {
-                        compatible = "marvell,armada-8k-xhci",
-                        "generic-xhci";
-                        reg = <0x510000 0x4000>;
-                        dma-coherent;
-                        interrupts = <ICU_GRP_NSR 105 IRQ_TYPE_LEVEL_HIGH>;
-                        clock-names = "core", "reg";
-                        clocks = <&CP110_LABEL(core_clk)>,
-                                 <&CP110_LABEL(core_clk)>;
-                        status = "disabled";
-                };
-
-                CP110_LABEL(sata0): sata@540000 {
-                        compatible = "marvell,armada-8k-ahci",
-                        "generic-ahci";
-                        reg = <0x540000 0x30000>;
-                        dma-coherent;
-                        interrupts = <ICU_GRP_NSR 107 IRQ_TYPE_LEVEL_HIGH>;
-                        clocks = <&CP110_LABEL(core_clk)>,
-                                 <&CP110_LABEL(core_clk)>;
-                        status = "disabled";
-                };
-
-                CP110_LABEL(xor0): xor@6a0000 {
-                        compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
-                        reg = <0x6a0000 0x1000>, <0x6b0000 0x1000>;
-                        dma-coherent;
-                        msi-parent = <&gic_v2m0>;
-                        clock-names = "core", "reg";
-                        clocks = <&CP110_LABEL(core_clk)>,
-                                 <&CP110_LABEL(x2core_clk)>;
-                };
-
-                CP110_LABEL(xor1): xor@6c0000 {
-                        compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
-                        reg = <0x6c0000 0x1000>, <0x6d0000 0x1000>;
-                        dma-coherent;
-                        msi-parent = <&gic_v2m0>;
-                        clock-names = "core", "reg";
-                        clocks = <&CP110_LABEL(core_clk)>,
-                                 <&CP110_LABEL(x2core_clk)>;
-                };
-
-                CP110_LABEL(spi0): spi@700600 {
-                        compatible = "marvell,armada-380-spi";
-                        reg = <0x700600 0x50>;
-                        #address-cells = <0x1>;
-                        #size-cells = <0x0>;
-                        clock-names = "core", "axi";
-                        clocks = <&CP110_LABEL(slow_io_clk)>,
-                                 <&CP110_LABEL(x2core_clk)>;
-                        status = "disabled";
-                };
-
-                CP110_LABEL(spi1): spi@700680 {
-                        compatible = "marvell,armada-380-spi";
-                        reg = <0x700680 0x50>;
-                        #address-cells = <1>;
-                        #size-cells = <0>;
-                        clock-names = "core", "axi";
-                        clocks = <&CP110_LABEL(slow_io_clk)>,
-                                 <&CP110_LABEL(x2core_clk)>;
-                        status = "disabled";
-                };
-
-                CP110_LABEL(i2c0): i2c@701000 {
-                        compatible = "marvell,mv78230-i2c";
-                        reg = <0x701000 0x20>;
-                        #address-cells = <1>;
-                        #size-cells = <0>;
-                        interrupts = <ICU_GRP_NSR 120 IRQ_TYPE_LEVEL_HIGH>;
-                        clock-names = "core", "reg";
-                        clocks = <&CP110_LABEL(slow_io_clk)>,
-                                 <&CP110_LABEL(x2core_clk)>;
-                        status = "disabled";
-                };
-
-                CP110_LABEL(i2c1): i2c@701100 {
-                        compatible = "marvell,mv78230-i2c";
-                        reg = <0x701100 0x20>;
-                        #address-cells = <1>;
-                        #size-cells = <0>;
-                        interrupts = <ICU_GRP_NSR 121 IRQ_TYPE_LEVEL_HIGH>;
-                        clock-names = "core", "reg";
-                        clocks = <&CP110_LABEL(slow_io_clk)>,
-                                 <&CP110_LABEL(x2core_clk)>;
-                        status = "disabled";
-                };
-
-                CP110_LABEL(uart0): serial@702000 {
-                        compatible = "snps,dw-apb-uart";
-                        reg = <0x702000 0x100>;
-                        reg-shift = <2>;
-                        interrupts = <ICU_GRP_NSR 122 IRQ_TYPE_LEVEL_HIGH>;
-                        reg-io-width = <1>;
-                        clock-names = "baudclk", "apb_pclk";
-                        clocks = <&CP110_LABEL(slow_io_clk)>,
-                                 <&CP110_LABEL(x2core_clk)>;
-                        status = "disabled";
-                };
-
-                CP110_LABEL(uart1): serial@702100 {
-                        compatible = "snps,dw-apb-uart";
-                        reg = <0x702100 0x100>;
-                        reg-shift = <2>;
-                        interrupts = <ICU_GRP_NSR 123 IRQ_TYPE_LEVEL_HIGH>;
-                        reg-io-width = <1>;
-                        clock-names = "baudclk", "apb_pclk";
-                        clocks = <&CP110_LABEL(slow_io_clk)>,
-                                 <&CP110_LABEL(x2core_clk)>;
-                        status = "disabled";
-                };
-
-                CP110_LABEL(uart2): serial@702200 {
-                        compatible = "snps,dw-apb-uart";
-                        reg = <0x702200 0x100>;
-                        reg-shift = <2>;
-                        interrupts = <ICU_GRP_NSR 124 IRQ_TYPE_LEVEL_HIGH>;
-                        reg-io-width = <1>;
-                        clock-names = "baudclk", "apb_pclk";
-                        clocks = <&CP110_LABEL(slow_io_clk)>,
-                                 <&CP110_LABEL(x2core_clk)>;
-                        status = "disabled";
-                };
-
-                CP110_LABEL(uart3): serial@702300 {
-                        compatible = "snps,dw-apb-uart";
-                        reg = <0x702300 0x100>;
-                        reg-shift = <2>;
-                        interrupts = <ICU_GRP_NSR 125 IRQ_TYPE_LEVEL_HIGH>;
-                        reg-io-width = <1>;
-                        clock-names = "baudclk", "apb_pclk";
-                        clocks = <&CP110_LABEL(slow_io_clk)>,
-                                 <&CP110_LABEL(x2core_clk)>;
-                        status = "disabled";
-                };
-
-                CP110_LABEL(nand_controller): nand@720000 {
-                        /*
-                        * Due to the limitation of the pins available
-                        * this controller is only usable on the CPM
-                        * for A7K and on the CPS for A8K.
-                        */
-                        compatible = "marvell,armada-8k-nand-controller",
-                                "marvell,armada370-nand-controller";
-                        reg = <0x720000 0x54>;
-                        #address-cells = <1>;
-                        #size-cells = <0>;
-                        interrupts = <ICU_GRP_NSR 115 IRQ_TYPE_LEVEL_HIGH>;
-                        clock-names = "core", "reg";
-                        clocks = <&CP110_LABEL(nand_clk)>,
-                                 <&CP110_LABEL(x2core_clk)>;
-                        marvell,system-controller = <&CP110_LABEL(syscon0)>;
-                        status = "disabled";
-                };
-
-                CP110_LABEL(trng): trng@760000 {
-                        compatible = "marvell,armada-8k-rng",
-                        "inside-secure,safexcel-eip76";
-                        reg = <0x760000 0x7d>;
-                        interrupts = <ICU_GRP_NSR 95 IRQ_TYPE_LEVEL_HIGH>;
-                        clock-names = "core", "reg";
-                        clocks = <&CP110_LABEL(x2core_clk)>,
-                                 <&CP110_LABEL(x2core_clk)>;
-                        status = "okay";
-                };
-
-                CP110_LABEL(sdhci0): sdhci@780000 {
-                        compatible = "marvell,armada-cp110-sdhci";
-                        reg = <0x780000 0x300>;
-                        interrupts = <ICU_GRP_NSR 27 IRQ_TYPE_LEVEL_HIGH>;
-                        clock-names = "core", "axi";
-                        clocks = <&CP110_LABEL(sdio_clk)>, <&CP110_LABEL(core_clk)>;
-                        dma-coherent;
-                        status = "disabled";
-                };
-
-                CP110_LABEL(crypto): crypto@800000 {
-                        compatible = "inside-secure,safexcel-eip197";
-                        reg = <0x800000 0x200000>;
-                        interrupts = <ICU_GRP_NSR 87 IRQ_TYPE_LEVEL_HIGH>,
-                                <ICU_GRP_NSR 88 IRQ_TYPE_LEVEL_HIGH>,
-                                <ICU_GRP_NSR 89 IRQ_TYPE_LEVEL_HIGH>,
-                                <ICU_GRP_NSR 90 IRQ_TYPE_LEVEL_HIGH>,
-                                <ICU_GRP_NSR 91 IRQ_TYPE_LEVEL_HIGH>,
-                                <ICU_GRP_NSR 92 IRQ_TYPE_LEVEL_HIGH>;
-                        interrupt-names = "mem", "ring0", "ring1",
-                                "ring2", "ring3", "eip";
-                        clock-names = "core", "reg";
-                        clocks = <&CP110_LABEL(x2core_clk)>,
-                                 <&CP110_LABEL(x2core_clk)>;
-                        dma-coherent;
-                };
-        };
-
-        CP110_LABEL(pcie0): pcie@CP110_PCIE0_BASE {
-                compatible = "marvell,armada8k-pcie", "snps,dw-pcie";
-                reg = <0 ADDRESSIFY(CP110_PCIE0_BASE) 0 0x10000>,
-                      <0 CP110_PCIEx_CONF_BASE(0) 0 0x80000>;
-                reg-names = "ctrl", "config";
-                #address-cells = <3>;
-                #size-cells = <2>;
-                #interrupt-cells = <1>;
-                device_type = "pci";
-                dma-coherent;
-                msi-parent = <&gic_v2m0>;
-
-                bus-range = <0 0xff>;
-                ranges =
-                /* downstream I/O */
-                <0x81000000 0 CP110_PCIEx_IO_BASE(0) 0  CP110_PCIEx_IO_BASE(0) 0 0x10000
-                /* non-prefetchable memory */
-                0x82000000 0 CP110_PCIEx_MEM_BASE(0) 0  CP110_PCIEx_MEM_BASE(0) 0 0xf00000>;
-                interrupt-map-mask = <0 0 0 0>;
-                interrupt-map = <0 0 0 0 &CP110_LABEL(icu) ICU_GRP_NSR 22 IRQ_TYPE_LEVEL_HIGH>;
-                interrupts = <ICU_GRP_NSR 22 IRQ_TYPE_LEVEL_HIGH>;
-                num-lanes = <1>;
-                clock-names = "core", "reg";
-                clocks = <&CP110_LABEL(core_clk)>, <&CP110_LABEL(x2core_clk)>;
-                status = "disabled";
-        };
-
-        CP110_LABEL(pcie1): pcie@CP110_PCIE1_BASE {
-                compatible = "marvell,armada8k-pcie", "snps,dw-pcie";
-                reg = <0 ADDRESSIFY(CP110_PCIE1_BASE) 0 0x10000>,
-                      <0 CP110_PCIEx_CONF_BASE(1) 0 0x80000>;
-                reg-names = "ctrl", "config";
-                #address-cells = <3>;
-                #size-cells = <2>;
-                #interrupt-cells = <1>;
-                device_type = "pci";
-                dma-coherent;
-                msi-parent = <&gic_v2m0>;
-
-                bus-range = <0 0xff>;
-                ranges =
-                /* downstream I/O */
-                <0x81000000 0 CP110_PCIEx_IO_BASE(1) 0  CP110_PCIEx_IO_BASE(1) 0 0x10000
-                /* non-prefetchable memory */
-                0x82000000 0 CP110_PCIEx_MEM_BASE(1) 0  CP110_PCIEx_MEM_BASE(1) 0 0xf00000>;
-                interrupt-map-mask = <0 0 0 0>;
-                interrupt-map = <0 0 0 0 &CP110_LABEL(icu) ICU_GRP_NSR 24 IRQ_TYPE_LEVEL_HIGH>;
-                interrupts = <ICU_GRP_NSR 24 IRQ_TYPE_LEVEL_HIGH>;
-
-                num-lanes = <1>;
-                clock-names = "core", "reg";
-                clocks = <&CP110_LABEL(core_clk)>, <&CP110_LABEL(x2core_clk)>;
-                status = "disabled";
-        };
-
-        CP110_LABEL(pcie2): pcie@CP110_PCIE2_BASE {
-                compatible = "marvell,armada8k-pcie", "snps,dw-pcie";
-                reg = <0 ADDRESSIFY(CP110_PCIE2_BASE) 0 0x10000>,
-                      <0 CP110_PCIEx_CONF_BASE(2) 0 0x80000>;
-                reg-names = "ctrl", "config";
-                #address-cells = <3>;
-                #size-cells = <2>;
-                #interrupt-cells = <1>;
-                device_type = "pci";
-                dma-coherent;
-                msi-parent = <&gic_v2m0>;
-
-                bus-range = <0 0xff>;
-                ranges =
-                /* downstream I/O */
-                <0x81000000 0 CP110_PCIEx_IO_BASE(2) 0  CP110_PCIEx_IO_BASE(2) 0 0x10000
-                /* non-prefetchable memory */
-                0x82000000 0 CP110_PCIEx_MEM_BASE(2) 0  CP110_PCIEx_MEM_BASE(2) 0 0xf00000>;
-                interrupt-map-mask = <0 0 0 0>;
-                interrupt-map = <0 0 0 0 &CP110_LABEL(icu) ICU_GRP_NSR 23 IRQ_TYPE_LEVEL_HIGH>;
-                interrupts = <ICU_GRP_NSR 23 IRQ_TYPE_LEVEL_HIGH>;
-
-                num-lanes = <1>;
-                clock-names = "core", "reg";
-                clocks = <&CP110_LABEL(core_clk)>, <&CP110_LABEL(x2core_clk)>;
-                status = "disabled";
-        };
-
-        /* 1 GHz fixed main PLL */
-        CP110_LABEL(mainpll): CP110_LABEL(mainpll) {
-                compatible = "fixed-clock";
-                #clock-cells = <0>;
-                clock-frequency = <1000000000>;
-        };
-
-        CP110_LABEL(x2core_clk): CP110_LABEL(x2core_clk) {
-                compatible = "fixed-factor-clock";
-                clocks = <&CP110_LABEL(mainpll)>;
-                #clock-cells = <0>;
-                clock-mult = <1>;
-                clock-div = <2>;
-        };
-
-        CP110_LABEL(core_clk): CP110_LABEL(core_clk) {
-                compatible = "fixed-factor-clock";
-                clocks = <&CP110_LABEL(mainpll)>;
-                #clock-cells = <0>;
-                clock-mult = <1>;
-                clock-div = <2>;
-        };
-
-        CP110_LABEL(sdio_clk): CP110_LABEL(sdio_clk) {
-                compatible = "fixed-factor-clock";
-                clocks = <&CP110_LABEL(mainpll)>;
-                #clock-cells = <0>;
-                clock-mult = <2>;
-                clock-div = <5>;
-        };
-
-        CP110_LABEL(nand_clk): CP110_LABEL(nand_clk) {
-                compatible = "fixed-factor-clock";
-                clocks = <&CP110_LABEL(mainpll)>;
-                #clock-cells = <0>;
-                clock-mult = <2>;
-                clock-div = <5>;
-        };
-
-        CP110_LABEL(ppv2_clk): CP110_LABEL(ppv2_clk) {
-                compatible = "fixed-factor-clock";
-                clocks = <&CP110_LABEL(mainpll)>;
-                #clock-cells = <0>;
-                clock-mult = <1>;
-                clock-div = <3>;
-        };
-
-        CP110_LABEL(slow_io_clk): CP110_LABEL(slow_io_clk) {
-                compatible = "fixed-factor-clock";
-                clocks = <&CP110_LABEL(mainpll)>;
-                #clock-cells = <0>;
-                clock-mult = <1>;
-                clock-div = <4>;
-        };
-};
+#undef CP11X_TYPE
diff --git a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-cp115.dtsi b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-cp115.dtsi
new file mode 100644
index 0000000..f57860f
--- /dev/null
+++ b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-cp115.dtsi
@@ -0,0 +1,12 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (C) 2019 Marvell Technology Group Ltd.
+ *
+ * Device Tree file for Marvell Armada CP115.
+ */
+
+#define CP11X_TYPE cp115
+
+#include "armada-cp11x.dtsi"
+
+#undef CP11X_TYPE
diff --git a/Silicon/Marvell/Armada7k8k/DeviceTree/armada-cp11x.dtsi b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-cp11x.dtsi
new file mode 100644
index 0000000..c309aaa
--- /dev/null
+++ b/Silicon/Marvell/Armada7k8k/DeviceTree/armada-cp11x.dtsi
@@ -0,0 +1,632 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (C) 2016 Marvell Technology Group Ltd.
+ *
+ * Device Tree file for Marvell Armada CP11x.
+ */
+
+#include "armada-common.dtsi"
+
+#define CP11X_PCIEx_CONF_BASE(iface)        (CP11X_PCIEx_MEM_BASE(iface) + CP11X_PCIEx_MEM_SIZE(iface))
+
+/ {
+        /*
+         * The contents of the node are defined below, in order to
+         * save one indentation level
+         */
+        CP11X_NAME: CP11X_NAME { };
+
+        /*
+         * CPs only have one sensor in the thermal IC.
+         *
+         * The cooling maps are empty as there are no cooling devices.
+         */
+        thermal-zones {
+                CP11X_LABEL(thermal_ic): CP11X_NODE_NAME(thermal-ic) {
+                        polling-delay-passive = <0>; /* Interrupt driven */
+                        polling-delay = <0>; /* Interrupt driven */
+
+                        thermal-sensors = <&CP11X_LABEL(thermal) 0>;
+
+                        trips {
+                                CP11X_LABEL(crit): crit {
+                                        temperature = <100000>; /* mC degrees */
+                                        hysteresis = <2000>; /* mC degrees */
+                                        type = "critical";
+                                };
+                        };
+
+                        cooling-maps { };
+                };
+        };
+};
+
+&CP11X_NAME {
+        #address-cells = <2>;
+        #size-cells = <2>;
+        compatible = "simple-bus";
+        interrupt-parent = <&CP11X_LABEL(icu_nsr)>;
+        ranges;
+
+        config-space@CP11X_BASE {
+                #address-cells = <1>;
+                #size-cells = <1>;
+                compatible = "simple-bus";
+                ranges = <0x0 0x0 ADDRESSIFY(CP11X_BASE) 0x2000000>;
+
+                CP11X_LABEL(ethernet): ethernet@0 {
+                        compatible = "marvell,armada-7k-pp22";
+                        reg = <0x0 0x100000>, <0x129000 0xb000>, <0x220000 0x800>;
+                        clocks = <&CP11X_LABEL(ppv2_clk)>, <&CP11X_LABEL(ppv2_clk)>,
+                                 <&CP11X_LABEL(ppv2_clk)>, <&CP11X_LABEL(core_clk)>,
+                                 <&CP11X_LABEL(core_clk)>;
+                        clock-names = "pp_clk", "gop_clk",
+                                      "mg_clk", "mg_core_clk", "axi_clk";
+                        marvell,system-controller = <&CP11X_LABEL(syscon0)>;
+                        status = "disabled";
+                        dma-coherent;
+
+                        CP11X_LABEL(eth0): eth0 {
+                                interrupts = <39 IRQ_TYPE_LEVEL_HIGH>,
+                                        <43 IRQ_TYPE_LEVEL_HIGH>,
+                                        <47 IRQ_TYPE_LEVEL_HIGH>,
+                                        <51 IRQ_TYPE_LEVEL_HIGH>,
+                                        <55 IRQ_TYPE_LEVEL_HIGH>,
+                                        <59 IRQ_TYPE_LEVEL_HIGH>,
+                                        <63 IRQ_TYPE_LEVEL_HIGH>,
+                                        <67 IRQ_TYPE_LEVEL_HIGH>,
+                                        <71 IRQ_TYPE_LEVEL_HIGH>,
+                                        <129 IRQ_TYPE_LEVEL_HIGH>;
+                                interrupt-names = "hif0", "hif1", "hif2",
+                                        "hif3", "hif4", "hif5", "hif6", "hif7",
+                                        "hif8", "link";
+                                port-id = <0>;
+                                gop-port-id = <0>;
+                                status = "disabled";
+                        };
+
+                        CP11X_LABEL(eth1): eth1 {
+                                interrupts = <40 IRQ_TYPE_LEVEL_HIGH>,
+                                        <44 IRQ_TYPE_LEVEL_HIGH>,
+                                        <48 IRQ_TYPE_LEVEL_HIGH>,
+                                        <52 IRQ_TYPE_LEVEL_HIGH>,
+                                        <56 IRQ_TYPE_LEVEL_HIGH>,
+                                        <60 IRQ_TYPE_LEVEL_HIGH>,
+                                        <64 IRQ_TYPE_LEVEL_HIGH>,
+                                        <68 IRQ_TYPE_LEVEL_HIGH>,
+                                        <72 IRQ_TYPE_LEVEL_HIGH>,
+                                        <128 IRQ_TYPE_LEVEL_HIGH>;
+                                interrupt-names = "hif0", "hif1", "hif2",
+                                        "hif3", "hif4", "hif5", "hif6", "hif7",
+                                        "hif8", "link";
+                                port-id = <1>;
+                                gop-port-id = <2>;
+                                status = "disabled";
+                        };
+
+                        CP11X_LABEL(eth2): eth2 {
+                                interrupts = <41 IRQ_TYPE_LEVEL_HIGH>,
+                                        <45 IRQ_TYPE_LEVEL_HIGH>,
+                                        <49 IRQ_TYPE_LEVEL_HIGH>,
+                                        <53 IRQ_TYPE_LEVEL_HIGH>,
+                                        <57 IRQ_TYPE_LEVEL_HIGH>,
+                                        <61 IRQ_TYPE_LEVEL_HIGH>,
+                                        <65 IRQ_TYPE_LEVEL_HIGH>,
+                                        <69 IRQ_TYPE_LEVEL_HIGH>,
+                                        <73 IRQ_TYPE_LEVEL_HIGH>,
+                                        <127 IRQ_TYPE_LEVEL_HIGH>;
+                                interrupt-names = "hif0", "hif1", "hif2",
+                                        "hif3", "hif4", "hif5", "hif6", "hif7",
+                                        "hif8", "link";
+                                port-id = <2>;
+                                gop-port-id = <3>;
+                                status = "disabled";
+                        };
+                };
+
+                CP11X_LABEL(comphy): phy@120000 {
+                        compatible = "marvell,comphy-cp110";
+                        reg = <0x120000 0x6000>;
+                        marvell,system-controller = <&CP11X_LABEL(syscon0)>;
+                        clocks = <&CP11X_LABEL(ppv2_clk)>, <&CP11X_LABEL(core_clk)>,
+                                 <&CP11X_LABEL(core_clk)>;
+                        clock-names = "mg_clk", "mg_core_clk", "axi_clk";
+                        #address-cells = <1>;
+                        #size-cells = <0>;
+
+                        CP11X_LABEL(comphy0): phy@0 {
+                                reg = <0>;
+                                #phy-cells = <1>;
+                        };
+
+                        CP11X_LABEL(comphy1): phy@1 {
+                                reg = <1>;
+                                #phy-cells = <1>;
+                        };
+
+                        CP11X_LABEL(comphy2): phy@2 {
+                                reg = <2>;
+                                #phy-cells = <1>;
+                        };
+
+                        CP11X_LABEL(comphy3): phy@3 {
+                                reg = <3>;
+                                #phy-cells = <1>;
+                        };
+
+                        CP11X_LABEL(comphy4): phy@4 {
+                                reg = <4>;
+                                #phy-cells = <1>;
+                        };
+
+                        CP11X_LABEL(comphy5): phy@5 {
+                                reg = <5>;
+                                #phy-cells = <1>;
+                        };
+                };
+
+                CP11X_LABEL(mdio): mdio@12a200 {
+                        #address-cells = <1>;
+                        #size-cells = <0>;
+                        compatible = "marvell,orion-mdio";
+                        reg = <0x12a200 0x10>;
+                        clocks = <&CP11X_LABEL(ppv2_clk)>, <&CP11X_LABEL(ppv2_clk)>,
+                                 <&CP11X_LABEL(core_clk)>, <&CP11X_LABEL(core_clk)>;
+                        status = "disabled";
+                };
+
+                CP11X_LABEL(xmdio): mdio@12a600 {
+                        #address-cells = <1>;
+                        #size-cells = <0>;
+                        compatible = "marvell,xmdio";
+                        reg = <0x12a600 0x10>;
+                        clocks = <&CP11X_LABEL(ppv2_clk)>, <&CP11X_LABEL(ppv2_clk)>,
+                                 <&CP11X_LABEL(core_clk)>;
+                        status = "disabled";
+                };
+
+                CP11X_LABEL(icu): interrupt-controller@1e0000 {
+                        compatible = "marvell,cp110-icu";
+                        reg = <0x1e0000 0x440>;
+                        #address-cells = <1>;
+                        #size-cells = <1>;
+
+                        CP11X_LABEL(icu_nsr): interrupt-controller@10 {
+                                compatible = "marvell,cp110-icu-nsr";
+                                reg = <0x10 0x20>;
+                                #interrupt-cells = <2>;
+                                interrupt-controller;
+                                msi-parent = <&gicp>;
+                        };
+
+                        CP11X_LABEL(icu_sei): interrupt-controller@50 {
+                                compatible = "marvell,cp110-icu-sei";
+                                reg = <0x50 0x10>;
+                                #interrupt-cells = <2>;
+                                interrupt-controller;
+                                msi-parent = <&sei>;
+                        };
+                };
+
+                CP11X_LABEL(rtc): rtc@284000 {
+                        compatible = "marvell,armada-8k-rtc";
+                        reg = <0x284000 0x20>, <0x284080 0x24>;
+                        reg-names = "rtc", "rtc-soc";
+                        interrupts = <77 IRQ_TYPE_LEVEL_HIGH>;
+                        status = "disabled";
+                };
+
+                CP11X_LABEL(syscon0): system-controller@440000 {
+                        compatible = "syscon", "simple-mfd";
+                        reg = <0x440000 0x2000>;
+
+                        CP11X_LABEL(clk): clock {
+                                compatible = "marvell,cp110-clock";
+                                status = "disabled";
+                                #clock-cells = <2>;
+                        };
+
+                        CP11X_LABEL(gpio1): gpio@100 {
+                                compatible = "marvell,armada-8k-gpio";
+                                offset = <0x100>;
+                                ngpios = <32>;
+                                gpio-controller;
+                                #gpio-cells = <2>;
+                                gpio-ranges = <&CP11X_LABEL(pinctrl) 0 0 32>;
+                                marvell,pwm-offset = <0x1f0>;
+                                #pwm-cells = <2>;
+                                interrupt-controller;
+                                interrupts = <86 IRQ_TYPE_LEVEL_HIGH>,
+                                        <85 IRQ_TYPE_LEVEL_HIGH>,
+                                        <84 IRQ_TYPE_LEVEL_HIGH>,
+                                        <83 IRQ_TYPE_LEVEL_HIGH>;
+                                #interrupt-cells = <2>;
+                                clock-names = "core", "axi";
+                                clocks = <&CP11X_LABEL(slow_io_clk)>,
+                                         <&CP11X_LABEL(x2core_clk)>;
+                                status = "disabled";
+                        };
+
+                        CP11X_LABEL(gpio2): gpio@140 {
+                                compatible = "marvell,armada-8k-gpio";
+                                offset = <0x140>;
+                                ngpios = <31>;
+                                gpio-controller;
+                                #gpio-cells = <2>;
+                                gpio-ranges = <&CP11X_LABEL(pinctrl) 0 32 31>;
+                                marvell,pwm-offset = <0x1f0>;
+                                #pwm-cells = <2>;
+                                interrupt-controller;
+                                interrupts = <82 IRQ_TYPE_LEVEL_HIGH>,
+                                        <81 IRQ_TYPE_LEVEL_HIGH>,
+                                        <80 IRQ_TYPE_LEVEL_HIGH>,
+                                        <79 IRQ_TYPE_LEVEL_HIGH>;
+                                #interrupt-cells = <2>;
+                                clock-names = "core", "axi";
+                                clocks = <&CP11X_LABEL(slow_io_clk)>,
+                                         <&CP11X_LABEL(x2core_clk)>;
+                                status = "disabled";
+                        };
+                };
+
+                CP11X_LABEL(syscon1): system-controller@400000 {
+                        compatible = "syscon", "simple-mfd";
+                        reg = <0x400000 0x1000>;
+                        #address-cells = <1>;
+                        #size-cells = <1>;
+
+                        CP11X_LABEL(thermal): thermal-sensor@70 {
+                                compatible = "marvell,armada-cp110-thermal";
+                                reg = <0x70 0x10>;
+                                interrupts-extended =
+                                        <&CP11X_LABEL(icu_sei) 116 IRQ_TYPE_LEVEL_HIGH>;
+                                #thermal-sensor-cells = <1>;
+                        };
+                };
+
+                CP11X_LABEL(usb3_0): usb@500000 {
+                        compatible = "marvell,armada-8k-xhci",
+                        "generic-xhci";
+                        reg = <0x500000 0x4000>;
+                        dma-coherent;
+                        interrupts = <106 IRQ_TYPE_LEVEL_HIGH>;
+                        clock-names = "core", "reg";
+                        clocks = <&CP11X_LABEL(core_clk)>,
+                                 <&CP11X_LABEL(core_clk)>;
+                        status = "disabled";
+                };
+
+                CP11X_LABEL(usb3_1): usb@510000 {
+                        compatible = "marvell,armada-8k-xhci",
+                        "generic-xhci";
+                        reg = <0x510000 0x4000>;
+                        dma-coherent;
+                        interrupts = <105 IRQ_TYPE_LEVEL_HIGH>;
+                        clock-names = "core", "reg";
+                        clocks = <&CP11X_LABEL(core_clk)>,
+                                 <&CP11X_LABEL(core_clk)>;
+                        status = "disabled";
+                };
+
+                CP11X_LABEL(sata0): sata@540000 {
+                        compatible = "marvell,armada-8k-ahci",
+                        "generic-ahci";
+                        reg = <0x540000 0x30000>;
+                        dma-coherent;
+                        interrupts = <107 IRQ_TYPE_LEVEL_HIGH>;
+                        clocks = <&CP11X_LABEL(core_clk)>,
+                                 <&CP11X_LABEL(core_clk)>;
+                        #address-cells = <1>;
+                        #size-cells = <0>;
+                        status = "disabled";
+
+                        sata-port@0 {
+                                reg = <0>;
+                        };
+
+                        sata-port@1 {
+                                reg = <1>;
+                        };
+                };
+
+                CP11X_LABEL(xor0): xor@6a0000 {
+                        compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
+                        reg = <0x6a0000 0x1000>, <0x6b0000 0x1000>;
+                        dma-coherent;
+                        msi-parent = <&gic_v2m0>;
+                        clock-names = "core", "reg";
+                        clocks = <&CP11X_LABEL(core_clk)>,
+                                 <&CP11X_LABEL(x2core_clk)>;
+                };
+
+                CP11X_LABEL(xor1): xor@6c0000 {
+                        compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
+                        reg = <0x6c0000 0x1000>, <0x6d0000 0x1000>;
+                        dma-coherent;
+                        msi-parent = <&gic_v2m0>;
+                        clock-names = "core", "reg";
+                        clocks = <&CP11X_LABEL(core_clk)>,
+                                 <&CP11X_LABEL(x2core_clk)>;
+                };
+
+                CP11X_LABEL(spi0): spi@700600 {
+                        compatible = "marvell,armada-380-spi";
+                        reg = <0x700600 0x50>;
+                        #address-cells = <0x1>;
+                        #size-cells = <0x0>;
+                        clock-names = "core", "axi";
+                        clocks = <&CP11X_LABEL(slow_io_clk)>,
+                                 <&CP11X_LABEL(x2core_clk)>;
+                        status = "disabled";
+                };
+
+                CP11X_LABEL(spi1): spi@700680 {
+                        compatible = "marvell,armada-380-spi";
+                        reg = <0x700680 0x50>;
+                        #address-cells = <1>;
+                        #size-cells = <0>;
+                        clock-names = "core", "axi";
+                        clocks = <&CP11X_LABEL(slow_io_clk)>,
+                                 <&CP11X_LABEL(x2core_clk)>;
+                        status = "disabled";
+                };
+
+                CP11X_LABEL(i2c0): i2c@701000 {
+                        compatible = "marvell,mv78230-i2c";
+                        reg = <0x701000 0x20>;
+                        #address-cells = <1>;
+                        #size-cells = <0>;
+                        interrupts = <120 IRQ_TYPE_LEVEL_HIGH>;
+                        clock-names = "core", "reg";
+                        clocks = <&CP11X_LABEL(slow_io_clk)>,
+                                 <&CP11X_LABEL(x2core_clk)>;
+                        status = "disabled";
+                };
+
+                CP11X_LABEL(i2c1): i2c@701100 {
+                        compatible = "marvell,mv78230-i2c";
+                        reg = <0x701100 0x20>;
+                        #address-cells = <1>;
+                        #size-cells = <0>;
+                        interrupts = <121 IRQ_TYPE_LEVEL_HIGH>;
+                        clock-names = "core", "reg";
+                        clocks = <&CP11X_LABEL(slow_io_clk)>,
+                                 <&CP11X_LABEL(x2core_clk)>;
+                        status = "disabled";
+                };
+
+                CP11X_LABEL(uart0): serial@702000 {
+                        compatible = "snps,dw-apb-uart";
+                        reg = <0x702000 0x100>;
+                        reg-shift = <2>;
+                        interrupts = <122 IRQ_TYPE_LEVEL_HIGH>;
+                        reg-io-width = <1>;
+                        clock-names = "baudclk", "apb_pclk";
+                        clocks = <&CP11X_LABEL(slow_io_clk)>,
+                                 <&CP11X_LABEL(x2core_clk)>;
+                        status = "disabled";
+                };
+
+                CP11X_LABEL(uart1): serial@702100 {
+                        compatible = "snps,dw-apb-uart";
+                        reg = <0x702100 0x100>;
+                        reg-shift = <2>;
+                        interrupts = <123 IRQ_TYPE_LEVEL_HIGH>;
+                        reg-io-width = <1>;
+                        clock-names = "baudclk", "apb_pclk";
+                        clocks = <&CP11X_LABEL(slow_io_clk)>,
+                                 <&CP11X_LABEL(x2core_clk)>;
+                        status = "disabled";
+                };
+
+                CP11X_LABEL(uart2): serial@702200 {
+                        compatible = "snps,dw-apb-uart";
+                        reg = <0x702200 0x100>;
+                        reg-shift = <2>;
+                        interrupts = <124 IRQ_TYPE_LEVEL_HIGH>;
+                        reg-io-width = <1>;
+                        clock-names = "baudclk", "apb_pclk";
+                        clocks = <&CP11X_LABEL(slow_io_clk)>,
+                                 <&CP11X_LABEL(x2core_clk)>;
+                        status = "disabled";
+                };
+
+                CP11X_LABEL(uart3): serial@702300 {
+                        compatible = "snps,dw-apb-uart";
+                        reg = <0x702300 0x100>;
+                        reg-shift = <2>;
+                        interrupts = <125 IRQ_TYPE_LEVEL_HIGH>;
+                        reg-io-width = <1>;
+                        clock-names = "baudclk", "apb_pclk";
+                        clocks = <&CP11X_LABEL(slow_io_clk)>,
+                                 <&CP11X_LABEL(x2core_clk)>;
+                        status = "disabled";
+                };
+
+                CP11X_LABEL(nand_controller): nand@720000 {
+                        /*
+                         * Due to the limitation of the pins available
+                         * this controller is only usable on the CPM
+                         * for A7K and on the CPS for A8K.
+                         */
+                        compatible = "marvell,armada-8k-nand-controller",
+                                "marvell,armada370-nand-controller";
+                        reg = <0x720000 0x54>;
+                        #address-cells = <1>;
+                        #size-cells = <0>;
+                        interrupts = <115 IRQ_TYPE_LEVEL_HIGH>;
+                        clock-names = "core", "reg";
+                        clocks = <&CP11X_LABEL(nand_clk)>,
+                                 <&CP11X_LABEL(x2core_clk)>;
+                        marvell,system-controller = <&CP11X_LABEL(syscon0)>;
+                        status = "disabled";
+                };
+
+                CP11X_LABEL(trng): trng@760000 {
+                        compatible = "marvell,armada-8k-rng",
+                        "inside-secure,safexcel-eip76";
+                        reg = <0x760000 0x7d>;
+                        interrupts = <95 IRQ_TYPE_LEVEL_HIGH>;
+                        clock-names = "core", "reg";
+                        clocks = <&CP11X_LABEL(x2core_clk)>,
+                                 <&CP11X_LABEL(x2core_clk)>;
+                        status = "okay";
+                };
+
+                CP11X_LABEL(sdhci0): sdhci@780000 {
+                        compatible = "marvell,armada-cp110-sdhci";
+                        reg = <0x780000 0x300>;
+                        interrupts = <27 IRQ_TYPE_LEVEL_HIGH>;
+                        clock-names = "core", "axi";
+                        clocks = <&CP11X_LABEL(sdio_clk)>, <&CP11X_LABEL(core_clk)>;
+                        dma-coherent;
+                        status = "disabled";
+                };
+
+                CP11X_LABEL(crypto): crypto@800000 {
+                        compatible = "inside-secure,safexcel-eip197b";
+                        reg = <0x800000 0x200000>;
+                        interrupts = <87 IRQ_TYPE_LEVEL_HIGH>,
+                                <88 IRQ_TYPE_LEVEL_HIGH>,
+                                <89 IRQ_TYPE_LEVEL_HIGH>,
+                                <90 IRQ_TYPE_LEVEL_HIGH>,
+                                <91 IRQ_TYPE_LEVEL_HIGH>,
+                                <92 IRQ_TYPE_LEVEL_HIGH>;
+                        interrupt-names = "mem", "ring0", "ring1",
+                                "ring2", "ring3", "eip";
+                        clock-names = "core", "reg";
+                        clocks = <&CP11X_LABEL(x2core_clk)>,
+                                 <&CP11X_LABEL(x2core_clk)>;
+                        dma-coherent;
+                };
+        };
+
+        CP11X_LABEL(pcie0): pcie@CP11X_PCIE0_BASE {
+                compatible = "marvell,armada8k-pcie", "snps,dw-pcie";
+                reg = <0 ADDRESSIFY(CP11X_PCIE0_BASE) 0 0x10000>,
+                      <0 CP11X_PCIEx_CONF_BASE(0) 0 0x80000>;
+                reg-names = "ctrl", "config";
+                #address-cells = <3>;
+                #size-cells = <2>;
+                #interrupt-cells = <1>;
+                device_type = "pci";
+                dma-coherent;
+                msi-parent = <&gic_v2m0>;
+
+                bus-range = <0 0xff>;
+                /* non-prefetchable memory */
+                ranges = <0x82000000 0 CP11X_PCIEx_MEM_BASE(0) 0  CP11X_PCIEx_MEM_BASE(0) 0 CP11X_PCIEx_MEM_SIZE(0)>;
+                interrupt-map-mask = <0 0 0 0>;
+                interrupt-map = <0 0 0 0 &CP11X_LABEL(icu_nsr) 22 IRQ_TYPE_LEVEL_HIGH>;
+                interrupts = <22 IRQ_TYPE_LEVEL_HIGH>;
+                num-lanes = <1>;
+                clock-names = "core", "reg";
+                clocks = <&CP11X_LABEL(core_clk)>, <&CP11X_LABEL(x2core_clk)>;
+                status = "disabled";
+        };
+
+        CP11X_LABEL(pcie1): pcie@CP11X_PCIE1_BASE {
+                compatible = "marvell,armada8k-pcie", "snps,dw-pcie";
+                reg = <0 ADDRESSIFY(CP11X_PCIE1_BASE) 0 0x10000>,
+                      <0 CP11X_PCIEx_CONF_BASE(1) 0 0x80000>;
+                reg-names = "ctrl", "config";
+                #address-cells = <3>;
+                #size-cells = <2>;
+                #interrupt-cells = <1>;
+                device_type = "pci";
+                dma-coherent;
+                msi-parent = <&gic_v2m0>;
+
+                bus-range = <0 0xff>;
+                /* non-prefetchable memory */
+                ranges = <0x82000000 0 CP11X_PCIEx_MEM_BASE(1) 0  CP11X_PCIEx_MEM_BASE(1) 0 CP11X_PCIEx_MEM_SIZE(1)>;
+                interrupt-map-mask = <0 0 0 0>;
+                interrupt-map = <0 0 0 0 &CP11X_LABEL(icu_nsr) 24 IRQ_TYPE_LEVEL_HIGH>;
+                interrupts = <24 IRQ_TYPE_LEVEL_HIGH>;
+
+                num-lanes = <1>;
+                clock-names = "core", "reg";
+                clocks = <&CP11X_LABEL(core_clk)>, <&CP11X_LABEL(x2core_clk)>;
+                status = "disabled";
+        };
+
+        CP11X_LABEL(pcie2): pcie@CP11X_PCIE2_BASE {
+                compatible = "marvell,armada8k-pcie", "snps,dw-pcie";
+                reg = <0 ADDRESSIFY(CP11X_PCIE2_BASE) 0 0x10000>,
+                      <0 CP11X_PCIEx_CONF_BASE(2) 0 0x80000>;
+                reg-names = "ctrl", "config";
+                #address-cells = <3>;
+                #size-cells = <2>;
+                #interrupt-cells = <1>;
+                device_type = "pci";
+                dma-coherent;
+                msi-parent = <&gic_v2m0>;
+
+                bus-range = <0 0xff>;
+                /* non-prefetchable memory */
+                ranges = <0x82000000 0 CP11X_PCIEx_MEM_BASE(2) 0  CP11X_PCIEx_MEM_BASE(2) 0 CP11X_PCIEx_MEM_SIZE(2)>;
+                interrupt-map-mask = <0 0 0 0>;
+                interrupt-map = <0 0 0 0 &CP11X_LABEL(icu_nsr) 23 IRQ_TYPE_LEVEL_HIGH>;
+                interrupts = <23 IRQ_TYPE_LEVEL_HIGH>;
+
+                num-lanes = <1>;
+                clock-names = "core", "reg";
+                clocks = <&CP11X_LABEL(core_clk)>, <&CP11X_LABEL(x2core_clk)>;
+                status = "disabled";
+        };
+
+        /* 1 GHz fixed main PLL */
+        CP11X_LABEL(mainpll): CP11X_LABEL(mainpll) {
+                compatible = "fixed-clock";
+                #clock-cells = <0>;
+                clock-frequency = <1000000000>;
+        };
+
+        CP11X_LABEL(x2core_clk): CP11X_LABEL(x2core_clk) {
+                compatible = "fixed-factor-clock";
+                clocks = <&CP11X_LABEL(mainpll)>;
+                #clock-cells = <0>;
+                clock-mult = <1>;
+                clock-div = <2>;
+        };
+
+        CP11X_LABEL(core_clk): CP11X_LABEL(core_clk) {
+                compatible = "fixed-factor-clock";
+                clocks = <&CP11X_LABEL(mainpll)>;
+                #clock-cells = <0>;
+                clock-mult = <1>;
+                clock-div = <2>;
+        };
+
+        CP11X_LABEL(sdio_clk): CP11X_LABEL(sdio_clk) {
+                compatible = "fixed-factor-clock";
+                clocks = <&CP11X_LABEL(mainpll)>;
+                #clock-cells = <0>;
+                clock-mult = <2>;
+                clock-div = <5>;
+        };
+
+        CP11X_LABEL(nand_clk): CP11X_LABEL(nand_clk) {
+                compatible = "fixed-factor-clock";
+                clocks = <&CP11X_LABEL(mainpll)>;
+                #clock-cells = <0>;
+                clock-mult = <2>;
+                clock-div = <5>;
+        };
+
+        CP11X_LABEL(ppv2_clk): CP11X_LABEL(ppv2_clk) {
+                compatible = "fixed-factor-clock";
+                clocks = <&CP11X_LABEL(mainpll)>;
+                #clock-cells = <0>;
+                clock-mult = <1>;
+                clock-div = <3>;
+        };
+
+        CP11X_LABEL(slow_io_clk): CP11X_LABEL(slow_io_clk) {
+                compatible = "fixed-factor-clock";
+                clocks = <&CP11X_LABEL(mainpll)>;
+                #clock-cells = <0>;
+                clock-mult = <1>;
+                clock-div = <4>;
+        };
+};
-- 
2.29.0


  parent reply	other threads:[~2021-03-22  1:32 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-22  1:32 [edk2-non-osi/edk2-platforms PATCH v2 0/4] Marvell SoCs device tree update Marcin Wojtas
2021-03-22  1:32 ` [edk2-non-osi PATCH v2 2/4] Marvell/Armada7k8k: Import device tree sources from edk2-platforms Marcin Wojtas
2021-03-22  1:32 ` [edk2-platforms PATCH v2 1/4] Marvell/Armada7k8k: Remove " Marcin Wojtas
2021-03-22  1:32 ` Marcin Wojtas [this message]
2021-03-22  1:32 ` [edk2-non-osi PATCH v2 4/4] Marvell/OcteonTx: Update device trees Marcin Wojtas
2021-03-28  9:45 ` [edk2-non-osi/edk2-platforms PATCH v2 0/4] Marvell SoCs device tree update Marcin Wojtas
2021-04-10  8:34   ` Ard Biesheuvel
2021-04-16 20:29     ` Marcin Wojtas

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210322013231.3216058-4-mw@semihalf.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox