// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * Copyright (C) 2016 Marvell Technology Group Ltd.
 *
 * Device Tree file for Marvell Armada CP110.
 */

#include <dt-bindings/interrupt-controller/mvebu-icu.h>
#include <dt-bindings/thermal/thermal.h>

#include "armada-common.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 { };

	/*
	 * CPs only have one sensor in the thermal IC.
	 *
	 * The cooling maps are empty as there are no cooling devices.
	 */
	thermal-zones {
		CP110_LABEL(thermal_ic): CP110_NODE_NAME(thermal-ic) {
			polling-delay-passive = <0>; /* Interrupt driven */
			polling-delay = <0>; /* Interrupt driven */

			thermal-sensors = <&CP110_LABEL(thermal) 0>;

			trips {
				CP110_LABEL(crit): crit {
					temperature = <100000>; /* mC degrees */
					hysteresis = <2000>; /* mC degrees */
					type = "critical";
				};
			};

			cooling-maps { };
		};
	};
};

&CP110_NAME {
	#address-cells = <2>;
	#size-cells = <2>;
	compatible = "simple-bus";
	interrupt-parent = <&CP110_LABEL(icu_nsr)>;
	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(clk) 1 3>, <&CP110_LABEL(clk) 1 9>,
				 <&CP110_LABEL(clk) 1 5>, <&CP110_LABEL(clk) 1 6>,
				 <&CP110_LABEL(clk) 1 18>;
			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 = <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";
			};

			CP110_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";
			};

			CP110_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";
			};
		};

		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(clk) 1 9>, <&CP110_LABEL(clk) 1 5>,
				 <&CP110_LABEL(clk) 1 6>, <&CP110_LABEL(clk) 1 18>;
			status = "disabled";
		};

		CP110_LABEL(xmdio): mdio@12a600 {
			#address-cells = <1>;
			#size-cells = <0>;
			compatible = "marvell,xmdio";
			reg = <0x12a600 0x10>;
			clocks = <&CP110_LABEL(clk) 1 5>,
				 <&CP110_LABEL(clk) 1 6>, <&CP110_LABEL(clk) 1 18>;
			status = "disabled";
		};

		CP110_LABEL(icu): interrupt-controller@1e0000 {
			compatible = "marvell,cp110-icu";
			reg = <0x1e0000 0x440>;
			#address-cells = <1>;
			#size-cells = <1>;

			CP110_LABEL(icu_nsr): interrupt-controller@10 {
				compatible = "marvell,cp110-icu-nsr";
				reg = <0x10 0x20>;
				#interrupt-cells = <2>;
				interrupt-controller;
				msi-parent = <&gicp>;
			};

			CP110_LABEL(icu_sei): interrupt-controller@50 {
				compatible = "marvell,cp110-icu-sei";
				reg = <0x50 0x10>;
				#interrupt-cells = <2>;
				interrupt-controller;
				msi-parent = <&sei>;
			};
		};

		CP110_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>;
		};

		CP110_LABEL(syscon0): system-controller@440000 {
			compatible = "syscon", "simple-mfd";
			reg = <0x440000 0x2000>;

			CP110_LABEL(clk): clock {
				compatible = "marvell,cp110-clock";
				#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 = <86 IRQ_TYPE_LEVEL_HIGH>,
					<85 IRQ_TYPE_LEVEL_HIGH>,
					<84 IRQ_TYPE_LEVEL_HIGH>,
					<83 IRQ_TYPE_LEVEL_HIGH>;
				#interrupt-cells = <2>;
				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 = <82 IRQ_TYPE_LEVEL_HIGH>,
					<81 IRQ_TYPE_LEVEL_HIGH>,
					<80 IRQ_TYPE_LEVEL_HIGH>,
					<79 IRQ_TYPE_LEVEL_HIGH>;
				#interrupt-cells = <2>;
				status = "disabled";
			};
		};

		CP110_LABEL(syscon1): system-controller@400000 {
			compatible = "syscon", "simple-mfd";
			reg = <0x400000 0x1000>;
			#address-cells = <1>;
			#size-cells = <1>;

			CP110_LABEL(thermal): thermal-sensor@70 {
				compatible = "marvell,armada-cp110-thermal";
				reg = <0x70 0x10>;
				interrupts-extended =
					<&CP110_LABEL(icu_sei) 116 IRQ_TYPE_LEVEL_HIGH>;
				#thermal-sensor-cells = <1>;
			};
		};

		CP110_LABEL(usb3_0): usb3@500000 {
			compatible = "marvell,armada-8k-xhci",
			"generic-xhci";
			reg = <0x500000 0x4000>;
			dma-coherent;
			interrupts = <106 IRQ_TYPE_LEVEL_HIGH>;
			clock-names = "core", "reg";
			clocks = <&CP110_LABEL(clk) 1 22>,
				 <&CP110_LABEL(clk) 1 16>;
			status = "disabled";
		};

		CP110_LABEL(usb3_1): usb3@510000 {
			compatible = "marvell,armada-8k-xhci",
			"generic-xhci";
			reg = <0x510000 0x4000>;
			dma-coherent;
			interrupts = <105 IRQ_TYPE_LEVEL_HIGH>;
			clock-names = "core", "reg";
			clocks = <&CP110_LABEL(clk) 1 23>,
				 <&CP110_LABEL(clk) 1 16>;
			status = "disabled";
		};

		CP110_LABEL(sata0): sata@540000 {
			compatible = "marvell,armada-8k-ahci",
			"generic-ahci";
			reg = <0x540000 0x30000>;
			dma-coherent;
			interrupts = <107 IRQ_TYPE_LEVEL_HIGH>;
			clocks = <&CP110_LABEL(clk) 1 15>,
				 <&CP110_LABEL(clk) 1 16>;
			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(clk) 1 8>,
				 <&CP110_LABEL(clk) 1 14>;
		};

		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(clk) 1 7>,
				 <&CP110_LABEL(clk) 1 14>;
		};

		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(clk) 1 21>,
				 <&CP110_LABEL(clk) 1 17>;
			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(clk) 1 21>,
				 <&CP110_LABEL(clk) 1 17>;
			status = "disabled";
		};

		CP110_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 = <&CP110_LABEL(clk) 1 21>,
				 <&CP110_LABEL(clk) 1 17>;
			status = "disabled";
		};

		CP110_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 = <&CP110_LABEL(clk) 1 21>,
				 <&CP110_LABEL(clk) 1 17>;
			status = "disabled";
		};

		CP110_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 = <&CP110_LABEL(clk) 1 21>,
				 <&CP110_LABEL(clk) 1 17>;
			status = "disabled";
		};

		CP110_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 = <&CP110_LABEL(clk) 1 21>,
				 <&CP110_LABEL(clk) 1 17>;
			status = "disabled";
		};

		CP110_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 = <&CP110_LABEL(clk) 1 21>,
				 <&CP110_LABEL(clk) 1 17>;
			status = "disabled";
		};

		CP110_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 = <&CP110_LABEL(clk) 1 21>,
				 <&CP110_LABEL(clk) 1 17>;
			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 = <115 IRQ_TYPE_LEVEL_HIGH>;
			clock-names = "core", "reg";
			clocks = <&CP110_LABEL(clk) 1 2>,
				 <&CP110_LABEL(clk) 1 17>;
			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 = <95 IRQ_TYPE_LEVEL_HIGH>;
			clock-names = "core", "reg";
			clocks = <&CP110_LABEL(clk) 1 25>,
				 <&CP110_LABEL(clk) 1 17>;
			status = "okay";
		};

		CP110_LABEL(sdhci0): sdhci@780000 {
			compatible = "marvell,armada-cp110-sdhci";
			reg = <0x780000 0x300>;
			interrupts = <27 IRQ_TYPE_LEVEL_HIGH>;
			clock-names = "core", "axi";
			clocks = <&CP110_LABEL(clk) 1 4>, <&CP110_LABEL(clk) 1 18>;
			dma-coherent;
			status = "disabled";
		};

		CP110_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 = <&CP110_LABEL(clk) 1 26>,
				 <&CP110_LABEL(clk) 1 17>;
			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_nsr) 22 IRQ_TYPE_LEVEL_HIGH>;
		interrupts = <22 IRQ_TYPE_LEVEL_HIGH>;
		num-lanes = <1>;
		clock-names = "core", "reg";
		clocks = <&CP110_LABEL(clk) 1 13>, <&CP110_LABEL(clk) 1 14>;
		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_nsr) 24 IRQ_TYPE_LEVEL_HIGH>;
		interrupts = <24 IRQ_TYPE_LEVEL_HIGH>;

		num-lanes = <1>;
		clock-names = "core", "reg";
		clocks = <&CP110_LABEL(clk) 1 11>, <&CP110_LABEL(clk) 1 14>;
		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_nsr) 23 IRQ_TYPE_LEVEL_HIGH>;
		interrupts = <23 IRQ_TYPE_LEVEL_HIGH>;

		num-lanes = <1>;
		clock-names = "core", "reg";
		clocks = <&CP110_LABEL(clk) 1 12>, <&CP110_LABEL(clk) 1 14>;
		status = "disabled";
	};
};
