Skip to content
rk3399.dtsi 64 KiB
Newer Older
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * Copyright (c) 2016 Fuzhou Rockchip Electronics Co., Ltd
 */

#include <dt-bindings/clock/rk3399-cru.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/pinctrl/rockchip.h>
#include <dt-bindings/power/rk3399-power.h>
#include <dt-bindings/thermal/thermal.h>

/ {
	compatible = "rockchip,rk3399";

	interrupt-parent = <&gic>;
	#address-cells = <2>;
	#size-cells = <2>;

	aliases {
		i2c0 = &i2c0;
		i2c1 = &i2c1;
		i2c2 = &i2c2;
		i2c3 = &i2c3;
		i2c4 = &i2c4;
		i2c5 = &i2c5;
		i2c6 = &i2c6;
		i2c7 = &i2c7;
		i2c8 = &i2c8;
		mmc0 = &sdio0;
		mmc1 = &sdmmc;
		mmc2 = &sdhci;
		serial0 = &uart0;
		serial1 = &uart1;
		serial2 = &uart2;
		serial3 = &uart3;
		serial4 = &uart4;
	};

	cpus {
		#address-cells = <2>;
		#size-cells = <0>;

		cpu-map {
			cluster0 {
				core0 {
					cpu = <&cpu_l0>;
				};
				core1 {
					cpu = <&cpu_l1>;
				};
				core2 {
					cpu = <&cpu_l2>;
				};
				core3 {
					cpu = <&cpu_l3>;
				};
			};

			cluster1 {
				core0 {
					cpu = <&cpu_b0>;
				};
				core1 {
					cpu = <&cpu_b1>;
				};
			};
		};

		cpu_l0: cpu@0 {
			device_type = "cpu";
			compatible = "arm,cortex-a53";
			reg = <0x0 0x0>;
			enable-method = "psci";
			clocks = <&cru ARMCLKL>;
			#cooling-cells = <2>; /* min followed by max */
			dynamic-power-coefficient = <100>;
			cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>;
		};

		cpu_l1: cpu@1 {
			device_type = "cpu";
			compatible = "arm,cortex-a53";
			reg = <0x0 0x1>;
			enable-method = "psci";
			clocks = <&cru ARMCLKL>;
			#cooling-cells = <2>; /* min followed by max */
			dynamic-power-coefficient = <100>;
			cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>;
		};

		cpu_l2: cpu@2 {
			device_type = "cpu";
			compatible = "arm,cortex-a53";
			reg = <0x0 0x2>;
			enable-method = "psci";
			clocks = <&cru ARMCLKL>;
			#cooling-cells = <2>; /* min followed by max */
			dynamic-power-coefficient = <100>;
			cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>;
		};

		cpu_l3: cpu@3 {
			device_type = "cpu";
			reg = <0x0 0x3>;
			enable-method = "psci";
			clocks = <&cru ARMCLKL>;
			#cooling-cells = <2>; /* min followed by max */
			dynamic-power-coefficient = <100>;
			cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>;
		};

		cpu_b0: cpu@100 {
			device_type = "cpu";
			reg = <0x0 0x100>;
			enable-method = "psci";
			clocks = <&cru ARMCLKB>;
			#cooling-cells = <2>; /* min followed by max */
			dynamic-power-coefficient = <436>;
			cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>;
		};

		cpu_b1: cpu@101 {
			device_type = "cpu";
			reg = <0x0 0x101>;
			enable-method = "psci";
			clocks = <&cru ARMCLKB>;
			#cooling-cells = <2>; /* min followed by max */
			dynamic-power-coefficient = <436>;
			cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>;
		};

		idle-states {
			entry-method = "psci";

			CPU_SLEEP: cpu-sleep {
				compatible = "arm,idle-state";
				local-timer-stop;
				arm,psci-suspend-param = <0x0010000>;
				entry-latency-us = <120>;
				exit-latency-us = <250>;
				min-residency-us = <900>;
			};

			CLUSTER_SLEEP: cluster-sleep {
				compatible = "arm,idle-state";
				local-timer-stop;
				arm,psci-suspend-param = <0x1010000>;
				entry-latency-us = <400>;
				exit-latency-us = <500>;
				min-residency-us = <2000>;
			};
	display-subsystem {
		compatible = "rockchip,display-subsystem";
		ports = <&vopl_out>, <&vopb_out>;
	};

	pmu_a53 {
		compatible = "arm,cortex-a53-pmu";
		interrupts = <GIC_PPI 7 IRQ_TYPE_LEVEL_LOW &ppi_cluster0>;
	};

	pmu_a72 {
		compatible = "arm,cortex-a72-pmu";
		interrupts = <GIC_PPI 7 IRQ_TYPE_LEVEL_LOW &ppi_cluster1>;
	};

	psci {
		compatible = "arm,psci-1.0";
		method = "smc";
	};

	timer {
		compatible = "arm,armv8-timer";
		interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_LOW 0>,
			     <GIC_PPI 14 IRQ_TYPE_LEVEL_LOW 0>,
			     <GIC_PPI 11 IRQ_TYPE_LEVEL_LOW 0>,
			     <GIC_PPI 10 IRQ_TYPE_LEVEL_LOW 0>;
	};

	xin24m: xin24m {
		compatible = "fixed-clock";
		clock-frequency = <24000000>;
		clock-output-names = "xin24m";
		#clock-cells = <0>;
	};

		#address-cells = <2>;
		#size-cells = <2>;
		ranges;

		dmac_bus: dma-controller@ff6d0000 {
			compatible = "arm,pl330", "arm,primecell";
			reg = <0x0 0xff6d0000 0x0 0x4000>;
			interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH 0>,
				     <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH 0>;
			clocks = <&cru ACLK_DMAC0_PERILP>;
			clock-names = "apb_pclk";
		};

		dmac_peri: dma-controller@ff6e0000 {
			compatible = "arm,pl330", "arm,primecell";
			reg = <0x0 0xff6e0000 0x0 0x4000>;
			interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH 0>,
				     <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH 0>;
			clocks = <&cru ACLK_DMAC1_PERILP>;
			clock-names = "apb_pclk";
		};
	};

	pcie0: pcie@f8000000 {
		compatible = "rockchip,rk3399-pcie";
		reg = <0x0 0xf8000000 0x0 0x2000000>,
		      <0x0 0xfd000000 0x0 0x1000000>;
		reg-names = "axi-base", "apb-base";
		#address-cells = <3>;
		#size-cells = <2>;
		#interrupt-cells = <1>;
		aspm-no-l0s;
		bus-range = <0x0 0x1f>;
		clocks = <&cru ACLK_PCIE>, <&cru ACLK_PERF_PCIE>,
			 <&cru PCLK_PCIE>, <&cru SCLK_PCIE_PM>;
		clock-names = "aclk", "aclk-perf",
			      "hclk", "pm";
		interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH 0>,
			     <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH 0>,
			     <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH 0>;
		interrupt-names = "sys", "legacy", "client";
		interrupt-map-mask = <0 0 0 7>;
		interrupt-map = <0 0 0 1 &pcie0_intc 0>,
				<0 0 0 2 &pcie0_intc 1>,
				<0 0 0 3 &pcie0_intc 2>,
				<0 0 0 4 &pcie0_intc 3>;
		max-link-speed = <1>;
		msi-map = <0x0 &its 0x0 0x1000>;
		phys = <&pcie_phy 0>, <&pcie_phy 1>,
		       <&pcie_phy 2>, <&pcie_phy 3>;
		phy-names = "pcie-phy-0", "pcie-phy-1",
			    "pcie-phy-2", "pcie-phy-3";
		ranges = <0x83000000 0x0 0xfa000000 0x0 0xfa000000 0x0 0x1e00000
			  0x81000000 0x0 0xfbe00000 0x0 0xfbe00000 0x0 0x100000>;
		resets = <&cru SRST_PCIE_CORE>, <&cru SRST_PCIE_MGMT>,
			 <&cru SRST_PCIE_MGMT_STICKY>, <&cru SRST_PCIE_PIPE>,
			 <&cru SRST_PCIE_PM>, <&cru SRST_P_PCIE>,
			 <&cru SRST_A_PCIE>;
		reset-names = "core", "mgmt", "mgmt-sticky", "pipe",
			      "pm", "pclk", "aclk";
		status = "disabled";

		pcie0_intc: interrupt-controller {
			interrupt-controller;
			#address-cells = <0>;
			#interrupt-cells = <1>;
		};
	};

	gmac: ethernet@fe300000 {
		compatible = "rockchip,rk3399-gmac";
		reg = <0x0 0xfe300000 0x0 0x10000>;
		interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH 0>;
		interrupt-names = "macirq";
		clocks = <&cru SCLK_MAC>, <&cru SCLK_MAC_RX>,
			 <&cru SCLK_MAC_TX>, <&cru SCLK_MACREF>,
			 <&cru SCLK_MACREF_OUT>, <&cru ACLK_GMAC>,
			 <&cru PCLK_GMAC>;
		clock-names = "stmmaceth", "mac_clk_rx",
			      "mac_clk_tx", "clk_mac_ref",
			      "clk_mac_refout", "aclk_mac",
			      "pclk_mac";
		power-domains = <&power RK3399_PD_GMAC>;
		resets = <&cru SRST_A_GMAC>;
		reset-names = "stmmaceth";
		rockchip,grf = <&grf>;
	sdio0: mmc@fe310000 {
		compatible = "rockchip,rk3399-dw-mshc",
			     "rockchip,rk3288-dw-mshc";
		reg = <0x0 0xfe310000 0x0 0x4000>;
		interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH 0>;
		clocks = <&cru HCLK_SDIO>, <&cru SCLK_SDIO>,
			 <&cru SCLK_SDIO_DRV>, <&cru SCLK_SDIO_SAMPLE>;
		clock-names = "biu", "ciu", "ciu-drive", "ciu-sample";
		fifo-depth = <0x100>;
		power-domains = <&power RK3399_PD_SDIOAUDIO>;
		resets = <&cru SRST_SDIO0>;
		reset-names = "reset";
	sdmmc: mmc@fe320000 {
		compatible = "rockchip,rk3399-dw-mshc",
			     "rockchip,rk3288-dw-mshc";
		reg = <0x0 0xfe320000 0x0 0x4000>;
		interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH 0>;
		assigned-clocks = <&cru HCLK_SD>;
		assigned-clock-rates = <200000000>;
		clocks = <&cru HCLK_SDMMC>, <&cru SCLK_SDMMC>,
			 <&cru SCLK_SDMMC_DRV>, <&cru SCLK_SDMMC_SAMPLE>;
		clock-names = "biu", "ciu", "ciu-drive", "ciu-sample";
		fifo-depth = <0x100>;
		power-domains = <&power RK3399_PD_SD>;
		resets = <&cru SRST_SDMMC>;
		reset-names = "reset";
	sdhci: sdhci@fe330000 {
		compatible = "rockchip,rk3399-sdhci-5.1", "arasan,sdhci-5.1";
		reg = <0x0 0xfe330000 0x0 0x10000>;
		interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH 0>;
		arasan,soc-ctl-syscon = <&grf>;
		assigned-clocks = <&cru SCLK_EMMC>;
		assigned-clock-rates = <200000000>;
		clocks = <&cru SCLK_EMMC>, <&cru ACLK_EMMC>;
		clock-names = "clk_xin", "clk_ahb";
		clock-output-names = "emmc_cardclock";
		#clock-cells = <0>;
		phys = <&emmc_phy>;
		phy-names = "phy_arasan";
		power-domains = <&power RK3399_PD_EMMC>;
	usb_host0_ehci: usb@fe380000 {
		compatible = "generic-ehci";
		reg = <0x0 0xfe380000 0x0 0x20000>;
		interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH 0>;
		clocks = <&cru HCLK_HOST0>, <&cru HCLK_HOST0_ARB>,
			 <&u2phy0>;
		phys = <&u2phy0_host>;
		phy-names = "usb";
		status = "disabled";
	};

	usb_host0_ohci: usb@fe3a0000 {
		compatible = "generic-ohci";
		reg = <0x0 0xfe3a0000 0x0 0x20000>;
		interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH 0>;
		clocks = <&cru HCLK_HOST0>, <&cru HCLK_HOST0_ARB>,
			 <&u2phy0>;
		phys = <&u2phy0_host>;
		phy-names = "usb";
		status = "disabled";
	};

	usb_host1_ehci: usb@fe3c0000 {
		compatible = "generic-ehci";
		reg = <0x0 0xfe3c0000 0x0 0x20000>;
		interrupts = <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH 0>;
		clocks = <&cru HCLK_HOST1>, <&cru HCLK_HOST1_ARB>,
			 <&u2phy1>;
		phys = <&u2phy1_host>;
		phy-names = "usb";
		status = "disabled";
	};

	usb_host1_ohci: usb@fe3e0000 {
		compatible = "generic-ohci";
		reg = <0x0 0xfe3e0000 0x0 0x20000>;
		interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH 0>;
		clocks = <&cru HCLK_HOST1>, <&cru HCLK_HOST1_ARB>,
			 <&u2phy1>;
		phys = <&u2phy1_host>;
		phy-names = "usb";
	usbdrd3_0: usb@fe800000 {
		compatible = "rockchip,rk3399-dwc3";
		#address-cells = <2>;
		#size-cells = <2>;
		ranges;
		clocks = <&cru SCLK_USB3OTG0_REF>, <&cru SCLK_USB3OTG0_SUSPEND>,
			 <&cru ACLK_USB3OTG0>, <&cru ACLK_USB3_RKSOC_AXI_PERF>,
			 <&cru ACLK_USB3>, <&cru ACLK_USB3_GRF>;
		clock-names = "ref_clk", "suspend_clk",
			      "bus_clk", "aclk_usb3_rksoc_axi_perf",
			      "aclk_usb3", "grf_clk";
		resets = <&cru SRST_A_USB3_OTG0>;
		reset-names = "usb3-otg";
			compatible = "snps,dwc3";
			reg = <0x0 0xfe800000 0x0 0x100000>;
			interrupts = <GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH 0>;
			clocks = <&cru SCLK_USB3OTG0_REF>, <&cru ACLK_USB3OTG0>,
				 <&cru SCLK_USB3OTG0_SUSPEND>;
			clock-names = "ref", "bus_early", "suspend";
			phys = <&u2phy0_otg>, <&tcphy0_usb3>;
			phy-names = "usb2-phy", "usb3-phy";
			phy_type = "utmi_wide";
			snps,dis_enblslpm_quirk;
			snps,dis-u2-freeclk-exists-quirk;
			snps,dis_u2_susphy_quirk;
			snps,dis-del-phy-power-chg-quirk;
			snps,dis-tx-ipgap-linecheck-quirk;
			power-domains = <&power RK3399_PD_USB3>;
			status = "disabled";
		};
	};

	usbdrd3_1: usb@fe900000 {
		compatible = "rockchip,rk3399-dwc3";
		#address-cells = <2>;
		#size-cells = <2>;
		ranges;
		clocks = <&cru SCLK_USB3OTG1_REF>, <&cru SCLK_USB3OTG1_SUSPEND>,
			 <&cru ACLK_USB3OTG1>, <&cru ACLK_USB3_RKSOC_AXI_PERF>,
			 <&cru ACLK_USB3>, <&cru ACLK_USB3_GRF>;
		clock-names = "ref_clk", "suspend_clk",
			      "bus_clk", "aclk_usb3_rksoc_axi_perf",
			      "aclk_usb3", "grf_clk";
		resets = <&cru SRST_A_USB3_OTG1>;
		reset-names = "usb3-otg";
			compatible = "snps,dwc3";
			reg = <0x0 0xfe900000 0x0 0x100000>;
			interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH 0>;
			clocks = <&cru SCLK_USB3OTG1_REF>, <&cru ACLK_USB3OTG1>,
				 <&cru SCLK_USB3OTG1_SUSPEND>;
			clock-names = "ref", "bus_early", "suspend";
			phys = <&u2phy1_otg>, <&tcphy1_usb3>;
			phy-names = "usb2-phy", "usb3-phy";
			phy_type = "utmi_wide";
			snps,dis_enblslpm_quirk;
			snps,dis-u2-freeclk-exists-quirk;
			snps,dis_u2_susphy_quirk;
			snps,dis-del-phy-power-chg-quirk;
			snps,dis-tx-ipgap-linecheck-quirk;
			power-domains = <&power RK3399_PD_USB3>;
	cdn_dp: dp@fec00000 {
		compatible = "rockchip,rk3399-cdn-dp";
		reg = <0x0 0xfec00000 0x0 0x100000>;
		interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH 0>;
		assigned-clocks = <&cru SCLK_DP_CORE>, <&cru SCLK_SPDIF_REC_DPTX>;
		assigned-clock-rates = <100000000>, <200000000>;
		clocks = <&cru SCLK_DP_CORE>, <&cru PCLK_DP_CTRL>,
			 <&cru SCLK_SPDIF_REC_DPTX>, <&cru PCLK_VIO_GRF>;
		clock-names = "core-clk", "pclk", "spdif", "grf";
		phys = <&tcphy0_dp>, <&tcphy1_dp>;
		power-domains = <&power RK3399_PD_HDCP>;
		resets = <&cru SRST_DPTX_SPDIF_REC>, <&cru SRST_P_UPHY0_DPTX>,
			 <&cru SRST_P_UPHY0_APB>, <&cru SRST_DP_CORE>;
		reset-names = "spdif", "dptx", "apb", "core";
		rockchip,grf = <&grf>;
		#sound-dai-cells = <1>;
		status = "disabled";

		ports {
			dp_in: port {
				#address-cells = <1>;
				#size-cells = <0>;

				dp_in_vopb: endpoint@0 {
					reg = <0>;
					remote-endpoint = <&vopb_out_dp>;
				};

				dp_in_vopl: endpoint@1 {
					reg = <1>;
					remote-endpoint = <&vopl_out_dp>;
				};
			};
		};
	};

	gic: interrupt-controller@fee00000 {
		compatible = "arm,gic-v3";
		#address-cells = <2>;
		#size-cells = <2>;
		ranges;
		interrupt-controller;

		reg = <0x0 0xfee00000 0 0x10000>, /* GICD */
		      <0x0 0xfef00000 0 0xc0000>, /* GICR */
		      <0x0 0xfff00000 0 0x10000>, /* GICC */
		      <0x0 0xfff10000 0 0x10000>, /* GICH */
		      <0x0 0xfff20000 0 0x10000>; /* GICV */
		interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH 0>;
		its: interrupt-controller@fee20000 {
			compatible = "arm,gic-v3-its";
			msi-controller;
			reg = <0x0 0xfee20000 0x0 0x20000>;
		};

		ppi-partitions {
			ppi_cluster0: interrupt-partition-0 {
				affinity = <&cpu_l0 &cpu_l1 &cpu_l2 &cpu_l3>;
			};

			ppi_cluster1: interrupt-partition-1 {
				affinity = <&cpu_b0 &cpu_b1>;
			};
		};
	saradc: saradc@ff100000 {
		compatible = "rockchip,rk3399-saradc";
		reg = <0x0 0xff100000 0x0 0x100>;
		interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH 0>;
		#io-channel-cells = <1>;
		clocks = <&cru SCLK_SARADC>, <&cru PCLK_SARADC>;
		clock-names = "saradc", "apb_pclk";
		resets = <&cru SRST_P_SARADC>;
		reset-names = "saradc-apb";
		status = "disabled";
	};

	i2c1: i2c@ff110000 {
		compatible = "rockchip,rk3399-i2c";
		reg = <0x0 0xff110000 0x0 0x1000>;
		assigned-clocks = <&cru SCLK_I2C1>;
		assigned-clock-rates = <200000000>;
		clocks = <&cru SCLK_I2C1>, <&cru PCLK_I2C1>;
		clock-names = "i2c", "pclk";
		interrupts = <GIC_SPI 59 IRQ_TYPE_LEVEL_HIGH 0>;
		pinctrl-names = "default";
		pinctrl-0 = <&i2c1_xfer>;
		#address-cells = <1>;
		#size-cells = <0>;
		status = "disabled";
	};

	i2c2: i2c@ff120000 {
		compatible = "rockchip,rk3399-i2c";
		reg = <0x0 0xff120000 0x0 0x1000>;
		assigned-clocks = <&cru SCLK_I2C2>;
		assigned-clock-rates = <200000000>;
		clocks = <&cru SCLK_I2C2>, <&cru PCLK_I2C2>;
		clock-names = "i2c", "pclk";
		interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH 0>;
		pinctrl-names = "default";
		pinctrl-0 = <&i2c2_xfer>;
		#address-cells = <1>;
		#size-cells = <0>;
		status = "disabled";
	};

	i2c3: i2c@ff130000 {
		compatible = "rockchip,rk3399-i2c";
		reg = <0x0 0xff130000 0x0 0x1000>;
		assigned-clocks = <&cru SCLK_I2C3>;
		assigned-clock-rates = <200000000>;
		clocks = <&cru SCLK_I2C3>, <&cru PCLK_I2C3>;
		clock-names = "i2c", "pclk";
		interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH 0>;
		pinctrl-names = "default";
		pinctrl-0 = <&i2c3_xfer>;
		#address-cells = <1>;
		#size-cells = <0>;
		status = "disabled";
	};

	i2c5: i2c@ff140000 {
		compatible = "rockchip,rk3399-i2c";
		reg = <0x0 0xff140000 0x0 0x1000>;
		assigned-clocks = <&cru SCLK_I2C5>;
		assigned-clock-rates = <200000000>;
		clocks = <&cru SCLK_I2C5>, <&cru PCLK_I2C5>;
		clock-names = "i2c", "pclk";
		interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH 0>;
		pinctrl-names = "default";
		pinctrl-0 = <&i2c5_xfer>;
		#address-cells = <1>;
		#size-cells = <0>;
		status = "disabled";
	};

	i2c6: i2c@ff150000 {
		compatible = "rockchip,rk3399-i2c";
		reg = <0x0 0xff150000 0x0 0x1000>;
		assigned-clocks = <&cru SCLK_I2C6>;
		assigned-clock-rates = <200000000>;
		clocks = <&cru SCLK_I2C6>, <&cru PCLK_I2C6>;
		clock-names = "i2c", "pclk";
		interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH 0>;
		pinctrl-names = "default";
		pinctrl-0 = <&i2c6_xfer>;
		#address-cells = <1>;
		#size-cells = <0>;
		status = "disabled";
	};

	i2c7: i2c@ff160000 {
		compatible = "rockchip,rk3399-i2c";
		reg = <0x0 0xff160000 0x0 0x1000>;
		assigned-clocks = <&cru SCLK_I2C7>;
		assigned-clock-rates = <200000000>;
		clocks = <&cru SCLK_I2C7>, <&cru PCLK_I2C7>;
		clock-names = "i2c", "pclk";
		interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH 0>;
		pinctrl-names = "default";
		pinctrl-0 = <&i2c7_xfer>;
		#address-cells = <1>;
		#size-cells = <0>;
		status = "disabled";
	};

	uart0: serial@ff180000 {
		compatible = "rockchip,rk3399-uart", "snps,dw-apb-uart";
		reg = <0x0 0xff180000 0x0 0x100>;
		clocks = <&cru SCLK_UART0>, <&cru PCLK_UART0>;
		clock-names = "baudclk", "apb_pclk";
		interrupts = <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH 0>;
		reg-shift = <2>;
		reg-io-width = <4>;
		pinctrl-names = "default";
		pinctrl-0 = <&uart0_xfer>;
		status = "disabled";
	};

	uart1: serial@ff190000 {
		compatible = "rockchip,rk3399-uart", "snps,dw-apb-uart";
		reg = <0x0 0xff190000 0x0 0x100>;
		clocks = <&cru SCLK_UART1>, <&cru PCLK_UART1>;
		clock-names = "baudclk", "apb_pclk";
		interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH 0>;
		reg-shift = <2>;
		reg-io-width = <4>;
		pinctrl-names = "default";
		pinctrl-0 = <&uart1_xfer>;
		status = "disabled";
	};

	uart2: serial@ff1a0000 {
		compatible = "rockchip,rk3399-uart", "snps,dw-apb-uart";
		reg = <0x0 0xff1a0000 0x0 0x100>;
		clocks = <&cru SCLK_UART2>, <&cru PCLK_UART2>;
		clock-names = "baudclk", "apb_pclk";
		interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH 0>;
		reg-shift = <2>;
		reg-io-width = <4>;
		pinctrl-names = "default";
		pinctrl-0 = <&uart2c_xfer>;
		status = "disabled";
	};

	uart3: serial@ff1b0000 {
		compatible = "rockchip,rk3399-uart", "snps,dw-apb-uart";
		reg = <0x0 0xff1b0000 0x0 0x100>;
		clocks = <&cru SCLK_UART3>, <&cru PCLK_UART3>;
		clock-names = "baudclk", "apb_pclk";
		interrupts = <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH 0>;
		reg-shift = <2>;
		reg-io-width = <4>;
		pinctrl-names = "default";
		pinctrl-0 = <&uart3_xfer>;
		status = "disabled";
	};

	spi0: spi@ff1c0000 {
		compatible = "rockchip,rk3399-spi", "rockchip,rk3066-spi";
		reg = <0x0 0xff1c0000 0x0 0x1000>;
		clocks = <&cru SCLK_SPI0>, <&cru PCLK_SPI0>;
		clock-names = "spiclk", "apb_pclk";
		interrupts = <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH 0>;
		dmas = <&dmac_peri 10>, <&dmac_peri 11>;
		dma-names = "tx", "rx";
		pinctrl-names = "default";
		pinctrl-0 = <&spi0_clk &spi0_tx &spi0_rx &spi0_cs0>;
		#address-cells = <1>;
		#size-cells = <0>;
		status = "disabled";
	};

	spi1: spi@ff1d0000 {
		compatible = "rockchip,rk3399-spi", "rockchip,rk3066-spi";
		reg = <0x0 0xff1d0000 0x0 0x1000>;
		clocks = <&cru SCLK_SPI1>, <&cru PCLK_SPI1>;
		clock-names = "spiclk", "apb_pclk";
		interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH 0>;
		dmas = <&dmac_peri 12>, <&dmac_peri 13>;
		dma-names = "tx", "rx";
		pinctrl-names = "default";
		pinctrl-0 = <&spi1_clk &spi1_tx &spi1_rx &spi1_cs0>;
		#address-cells = <1>;
		#size-cells = <0>;
		status = "disabled";
	};

	spi2: spi@ff1e0000 {
		compatible = "rockchip,rk3399-spi", "rockchip,rk3066-spi";
		reg = <0x0 0xff1e0000 0x0 0x1000>;
		clocks = <&cru SCLK_SPI2>, <&cru PCLK_SPI2>;
		clock-names = "spiclk", "apb_pclk";
		interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH 0>;
		dmas = <&dmac_peri 14>, <&dmac_peri 15>;
		dma-names = "tx", "rx";
		pinctrl-names = "default";
		pinctrl-0 = <&spi2_clk &spi2_tx &spi2_rx &spi2_cs0>;
		#address-cells = <1>;
		#size-cells = <0>;
		status = "disabled";
	};

	spi4: spi@ff1f0000 {
		compatible = "rockchip,rk3399-spi", "rockchip,rk3066-spi";
		reg = <0x0 0xff1f0000 0x0 0x1000>;
		clocks = <&cru SCLK_SPI4>, <&cru PCLK_SPI4>;
		clock-names = "spiclk", "apb_pclk";
		interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH 0>;
		dmas = <&dmac_peri 18>, <&dmac_peri 19>;
		dma-names = "tx", "rx";
		pinctrl-names = "default";
		pinctrl-0 = <&spi4_clk &spi4_tx &spi4_rx &spi4_cs0>;
		#address-cells = <1>;
		#size-cells = <0>;
		status = "disabled";
	};

	spi5: spi@ff200000 {
		compatible = "rockchip,rk3399-spi", "rockchip,rk3066-spi";
		reg = <0x0 0xff200000 0x0 0x1000>;
		clocks = <&cru SCLK_SPI5>, <&cru PCLK_SPI5>;
		clock-names = "spiclk", "apb_pclk";
		interrupts = <GIC_SPI 132 IRQ_TYPE_LEVEL_HIGH 0>;
		dmas = <&dmac_bus 8>, <&dmac_bus 9>;
		dma-names = "tx", "rx";
		pinctrl-names = "default";
		pinctrl-0 = <&spi5_clk &spi5_tx &spi5_rx &spi5_cs0>;
		power-domains = <&power RK3399_PD_SDIOAUDIO>;
		#address-cells = <1>;
		#size-cells = <0>;
		status = "disabled";
	};

	thermal_zones: thermal-zones {
		cpu_thermal: cpu {
			polling-delay-passive = <100>;
			polling-delay = <1000>;

			thermal-sensors = <&tsadc 0>;

			trips {
				cpu_alert0: cpu_alert0 {
					temperature = <70000>;
					hysteresis = <2000>;
					type = "passive";
				};
				cpu_alert1: cpu_alert1 {
					temperature = <75000>;
					hysteresis = <2000>;
					type = "passive";
				};
				cpu_crit: cpu_crit {
					temperature = <95000>;
					hysteresis = <2000>;
					type = "critical";
				};
			};

			cooling-maps {
				map0 {
					trip = <&cpu_alert0>;
					cooling-device =
						<&cpu_b0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
						<&cpu_b1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
				};
				map1 {
					trip = <&cpu_alert1>;
					cooling-device =
						<&cpu_l0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
						<&cpu_l1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
						<&cpu_l2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
						<&cpu_l3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
						<&cpu_b0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
						<&cpu_b1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
				};
			};
		};

		gpu_thermal: gpu {
			polling-delay-passive = <100>;
			polling-delay = <1000>;

			thermal-sensors = <&tsadc 1>;

			trips {
				gpu_alert0: gpu_alert0 {
					temperature = <75000>;
					hysteresis = <2000>;
					type = "passive";
				};
				gpu_crit: gpu_crit {
					temperature = <95000>;
					hysteresis = <2000>;
					type = "critical";
				};
			};

			cooling-maps {
				map0 {
					trip = <&gpu_alert0>;
					cooling-device =
						<&gpu THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
				};
			};
		};
	};

	tsadc: tsadc@ff260000 {
		compatible = "rockchip,rk3399-tsadc";
		reg = <0x0 0xff260000 0x0 0x100>;
		interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH 0>;
		assigned-clocks = <&cru SCLK_TSADC>;
		assigned-clock-rates = <750000>;
		clocks = <&cru SCLK_TSADC>, <&cru PCLK_TSADC>;
		clock-names = "tsadc", "apb_pclk";
		resets = <&cru SRST_TSADC>;
		reset-names = "tsadc-apb";
		rockchip,grf = <&grf>;
		rockchip,hw-tshut-temp = <95000>;
		pinctrl-names = "init", "default", "sleep";
		pinctrl-1 = <&otp_out>;
		#thermal-sensor-cells = <1>;
		status = "disabled";
	};

	qos_emmc: qos@ffa58000 {
		compatible = "syscon";
		reg = <0x0 0xffa58000 0x0 0x20>;
	};

	qos_gmac: qos@ffa5c000 {
		compatible = "syscon";
		reg = <0x0 0xffa5c000 0x0 0x20>;
	};

	qos_pcie: qos@ffa60080 {
		compatible = "syscon";
		reg = <0x0 0xffa60080 0x0 0x20>;
	};

	qos_usb_host0: qos@ffa60100 {
		compatible = "syscon";
		reg = <0x0 0xffa60100 0x0 0x20>;
	};

	qos_usb_host1: qos@ffa60180 {
		compatible = "syscon";
		reg = <0x0 0xffa60180 0x0 0x20>;
	};

	qos_usb_otg0: qos@ffa70000 {
		compatible = "syscon";
		reg = <0x0 0xffa70000 0x0 0x20>;
	};

	qos_usb_otg1: qos@ffa70080 {
		compatible = "syscon";
		reg = <0x0 0xffa70080 0x0 0x20>;
	};

	qos_sd: qos@ffa74000 {
		compatible = "syscon";
		reg = <0x0 0xffa74000 0x0 0x20>;
	};

	qos_sdioaudio: qos@ffa76000 {
		compatible = "syscon";
		reg = <0x0 0xffa76000 0x0 0x20>;
	};

	qos_hdcp: qos@ffa90000 {
		compatible = "syscon";
		reg = <0x0 0xffa90000 0x0 0x20>;
	};

	qos_iep: qos@ffa98000 {
		compatible = "syscon";
		reg = <0x0 0xffa98000 0x0 0x20>;
	};

	qos_isp0_m0: qos@ffaa0000 {
		compatible = "syscon";
		reg = <0x0 0xffaa0000 0x0 0x20>;
	};

	qos_isp0_m1: qos@ffaa0080 {
		compatible = "syscon";
		reg = <0x0 0xffaa0080 0x0 0x20>;
	};

	qos_isp1_m0: qos@ffaa8000 {
		compatible = "syscon";
		reg = <0x0 0xffaa8000 0x0 0x20>;
	};

	qos_isp1_m1: qos@ffaa8080 {
		compatible = "syscon";
		reg = <0x0 0xffaa8080 0x0 0x20>;
	};

	qos_rga_r: qos@ffab0000 {
		compatible = "syscon";
		reg = <0x0 0xffab0000 0x0 0x20>;
	};

	qos_rga_w: qos@ffab0080 {
		compatible = "syscon";
		reg = <0x0 0xffab0080 0x0 0x20>;
	};

	qos_video_m0: qos@ffab8000 {
		compatible = "syscon";
		reg = <0x0 0xffab8000 0x0 0x20>;
	};

	qos_video_m1_r: qos@ffac0000 {
		compatible = "syscon";
		reg = <0x0 0xffac0000 0x0 0x20>;
	};

	qos_video_m1_w: qos@ffac0080 {
		compatible = "syscon";
		reg = <0x0 0xffac0080 0x0 0x20>;
	};

	qos_vop_big_r: qos@ffac8000 {
		compatible = "syscon";
		reg = <0x0 0xffac8000 0x0 0x20>;
	};

	qos_vop_big_w: qos@ffac8080 {
		compatible = "syscon";
		reg = <0x0 0xffac8080 0x0 0x20>;
	};

	qos_vop_little: qos@ffad0000 {
		compatible = "syscon";
		reg = <0x0 0xffad0000 0x0 0x20>;
	};

	qos_perihp: qos@ffad8080 {
		compatible = "syscon";
		reg = <0x0 0xffad8080 0x0 0x20>;
	};

	qos_gpu: qos@ffae0000 {
		compatible = "syscon";
		reg = <0x0 0xffae0000 0x0 0x20>;
	};

	pmu: power-management@ff310000 {
		compatible = "rockchip,rk3399-pmu", "syscon", "simple-mfd";
		reg = <0x0 0xff310000 0x0 0x1000>;

		/*
		 * Note: RK3399 supports 6 voltage domains including VD_CORE_L,
		 * VD_CORE_B, VD_CENTER, VD_GPU, VD_LOGIC and VD_PMU.
		 * Some of the power domains are grouped together for every
		 * voltage domain.
		 * The detail contents as below.
		 */
		power: power-controller {
			compatible = "rockchip,rk3399-power-controller";
			#power-domain-cells = <1>;
			#address-cells = <1>;
			#size-cells = <0>;