fsl-imx8qm.dtsi 9.52 KB
/*
 * Copyright (C) 2016 Freescale Semiconductor, Inc.
 * Copyright 2017-2018 NXP
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

#include <dt-bindings/interrupt-controller/arm-gic.h>
#include "fsl-imx8-ca53.dtsi"
#include "fsl-imx8-ca72.dtsi"
#include <dt-bindings/clock/imx8qm-clock.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/soc/imx_rsrc.h>
#include <dt-bindings/soc/imx8_hsio.h>
#include <dt-bindings/soc/imx8_pd.h>
#include <dt-bindings/pinctrl/pads-imx8qm.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/thermal/thermal.h>

/ {
	compatible = "fsl,imx8qm";
	interrupt-parent = <&gic>;
	#address-cells = <2>;
	#size-cells = <2>;

	aliases {
		csi0 = &mipi_csi_0;
		csi1 = &mipi_csi_1;
		dpu0 = &dpu1;
		dpu1 = &dpu2;
		ethernet0 = &fec1;
		ethernet1 = &fec2;
		dsiphy0 = &mipi_dsi_phy1;
		dsiphy1 = &mipi_dsi_phy2;
		mipidsi0 = &mipi_dsi1;
		mipidsi1 = &mipi_dsi2;
		ldb0 = &ldb1;
		ldb1 = &ldb2;
		isi0 = &isi_0;
		isi1 = &isi_1;
		isi2 = &isi_2;
		isi3 = &isi_3;
		isi4 = &isi_4;
		isi5 = &isi_5;
		isi6 = &isi_6;
		isi7 = &isi_7;
		serial0 = &lpuart0;
		serial1 = &lpuart1;
		serial2 = &lpuart2;
		serial3 = &lpuart3;
		serial4 = &lpuart4;
		gpio0 = &gpio0;
		gpio1 = &gpio1;
		gpio2 = &gpio2;
		gpio3 = &gpio3;
		gpio4 = &gpio4;
		gpio5 = &gpio5;
		gpio6 = &gpio6;
		gpio7 = &gpio7;
		mmc0 = &usdhc1;
		mmc1 = &usdhc2;
		mmc2 = &usdhc3;
		usb0 = &usbotg1;
		usbphy0 = &usbphy1;
		usb1 = &usbotg3;
		can0 = &flexcan1;
		can1 = &flexcan2;
		can2 = &flexcan3;
		i2c0 = &i2c0;
		i2c1 = &i2c1;
		i2c2 = &i2c2;
		i2c3 = &i2c3;
		i2c4 = &i2c4;
		i2c6 = &i2c1_lvds0;
		i2c8 = &i2c1_lvds1;
		spi0 = &flexspi0;
		pci0 = &pciea;
		pci1 = &pcieb;
	};

	memory@80000000 {
		device_type = "memory";
		reg = <0x00000000 0x80000000 0 0x40000000>;
		      /* DRAM space - 1, size : 1 GB DRAM */
	};

	reserved-memory {
		#address-cells = <2>;
		#size-cells = <2>;
		ranges;

		/*
		 * reserved-memory layout
		 * 0x8800_0000 ~ 0x8FFF_FFFF is reserved for M4
		 * Shouldn't be used at A core and Linux side.
		 *
		 */

		decoder_boot: decoder_boot@0x84000000 {
			no-map;
			reg = <0 0x84000000 0 0x2000000>;
		};
		encoder_boot: encoder_boot@0x86000000 {
			no-map;
			reg = <0 0x86000000 0 0x400000>;
		};
		rpmsg_reserved: rpmsg@0x90000000 {
			no-map;
			reg = <0 0x90000000 0 0x400000>;
		};
		rpmsg_dma_reserved:rpmsg_dma@0x90400000 {
			compatible = "shared-dma-pool";
			no-map;
			reg = <0 0x90400000 0 0x1C00000>;
		};
		decoder_rpc: decoder_rpc@0x92000000 {
			no-map;
			reg = <0 0x92000000 0 0x200000>;
		};
		encoder_rpc: encoder_rpc@0x92200000 {
			no-map;
			reg = <0 0x92200000 0 0x200000>;
		};
		dsp_reserved: dsp@0x92400000 {
			no-map;
			reg = <0 0x92400000 0 0x2000000>;
		};
		encoder_reserved: encoder_reserved@0x94400000 {
			no-map;
			reg = <0 0x94400000 0 0x800000>;
		};

		/* global autoconfigured region for contiguous allocations */
		linux,cma {
			compatible = "shared-dma-pool";
			reusable;
			size = <0 0x3c000000>;
			alloc-ranges = <0 0x96000000 0 0x3c000000>;
			linux,cma-default;
		};

	};

	gic: interrupt-controller@51a00000 {
		compatible = "arm,gic-v3";
		reg = <0x0 0x51a00000 0 0x10000>, /* GIC Dist */
		      <0x0 0x51b00000 0 0xC0000>, /* GICR */
		      <0x0 0x52000000 0 0x2000>,  /* GICC */
		      <0x0 0x52010000 0 0x1000>,  /* GICH */
		      <0x0 0x52020000 0 0x20000>; /* GICV */
		#interrupt-cells = <3>;
		interrupt-controller;
		interrupts = <GIC_PPI 9
			(GIC_CPU_MASK_SIMPLE(6) | IRQ_TYPE_LEVEL_HIGH)>;
		interrupt-parent = <&gic>;
	};

	mu8: mu@5d230000 {
		compatible = "fsl,imx-m4-mu";
		reg = <0x0 0x5d230000 0x0 0x10000>;
		interrupts = <GIC_SPI 187 IRQ_TYPE_LEVEL_HIGH>;
		power-domains = <&pd_lsio_mu8a>;
		status = "okay";
	};

	mu9: mu@5d240000 {
		compatible = "fsl,imx-m4-mu";
		reg = <0x0 0x5d240000 0x0 0x10000>;
		interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>;
		power-domains = <&pd_lsio_mu9a>;
		status = "okay";
	};

	mu: mu@5d1c0000 {
		compatible = "fsl,imx8-mu";
		reg = <0x0 0x5d1c0000 0x0 0x10000>;
		interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>;
		interrupt-parent = <&gic>;
		#mbox-cells = <4>;
		status = "okay";

		clk: clk {
			compatible = "fsl,imx8qm-clk";
			#clock-cells = <1>;
		};

		iomuxc: iomuxc {
			compatible = "fsl,imx8qm-iomuxc";
		};
	};

	mu13: mu13@5d280000 {
		compatible = "fsl,imx8-mu-dsp";
		reg = <0x0 0x5d280000 0x0 0x10000>;
		interrupts = <GIC_SPI 192 IRQ_TYPE_LEVEL_HIGH>;
		fsl,dsp_ap_mu_id = <13>;
		status = "okay";
	};

	mu_m0: mu_m0@2d000000 {
		compatible = "fsl,imx8-mu0-vpu-m0";
		reg = <0x0 0x2d000000 0x0 0x20000>;
		interrupts = <GIC_SPI 472 IRQ_TYPE_LEVEL_HIGH>;
		fsl,vpu_ap_mu_id = <16>;
		status = "okay";
	};

	mu1_m0: mu1_m0@2d020000 {
		compatible = "fsl,imx8-mu1-vpu-m0";
		reg = <0x0 0x2d020000 0x0 0x20000>;
		interrupts = <GIC_SPI 473 IRQ_TYPE_LEVEL_HIGH>;
		fsl,vpu_ap_mu_id = <17>;
		status = "okay";
	};

	mu2_m0: mu2_m0@2d040000 {
		compatible = "fsl,imx8-mu2-vpu-m0";
		reg = <0x0 0x2d040000 0x0 0x20000>;
		interrupts = <GIC_SPI 474 IRQ_TYPE_LEVEL_HIGH>;
		fsl,vpu_ap_mu_id = <18>;
		status = "okay";
	};

	vpu_decoder: vpu_decoder@2c000000 {
		compatible = "nxp,imx8qm-b0-vpudec", "nxp,imx8qxp-b0-vpudec";
		boot-region = <&decoder_boot>;
		rpc-region = <&decoder_rpc>;
		reg = <0x0 0x2c000000 0x0 0x1000000>;
		reg-names = "vpu_regs";
		reg-csr = <0x2d080000>;
		power-domains = <&pd_vpu_dec>;
		status = "disabled";
	};

	vpu_encoder: vpu_encoder@2d000000 {
		compatible = "nxp,imx8qm-b0-vpuenc";
		#address-cells = <1>;
		#size-cells = <1>;

		boot-region = <&encoder_boot>;
		rpc-region = <&encoder_rpc>;
		reserved-region = <&encoder_reserved>;
		reg = <0x0 0x2d000000 0x0 0x1000000>,	/*VPU Encoder*/
			<0x0 0x2c000000 0x0 0x2000000>; /*VPU*/
		reg-names = "vpu_regs";
		power-domains = <&pd_vpu_enc>;
		reg-rpc-system = <0x40000000>;

		resolution-max = <1920 1080>;
		fps-max = <120>;
		status = "disabled";

		core0@1020000 {
			compatible = "fsl,imx8-mu1-vpu-m0";
			reg = <0x1020000 0x20000>;
			reg-csr = <0x1090000 0x10000>;
			interrupts = <GIC_SPI 473 IRQ_TYPE_LEVEL_HIGH>;
			fsl,vpu_ap_mu_id = <17>;
			fw-buf-size = <0x200000>;
			rpc-buf-size = <0x80000>;
			print-buf-size = <0x80000>;
		};
		core1@1040000 {
			compatible = "fsl,imx8-mu2-vpu-m0";
			reg = <0x1040000 0x20000>;
			reg-csr = <0x10a0000 0x10000>;
			interrupts = <GIC_SPI 474 IRQ_TYPE_LEVEL_HIGH>;
			fsl,vpu_ap_mu_id = <18>;
			fw-buf-size = <0x200000>;
			rpc-buf-size = <0x80000>;
			print-buf-size = <0x80000>;
		};
	};

	timer {
		compatible = "arm,armv8-timer";
		interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(6) | IRQ_TYPE_LEVEL_LOW)>, /* Physical Secure */
			     <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(6) | IRQ_TYPE_LEVEL_LOW)>, /* Physical Non-Secure */
			     <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(6) | IRQ_TYPE_LEVEL_LOW)>, /* Virtual */
			     <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(6) | IRQ_TYPE_LEVEL_LOW)>; /* Hypervisor */
		clock-frequency = <8000000>;
		interrupt-parent = <&gic>;
	};

	smmu: iommu@51400000 {
		compatible = "arm,mmu-500";
		interrupt-parent = <&gic>;
		reg = <0 0x51400000 0 0x40000>;
		#global-interrupts = <1>;
		#iommu-cells = <2>;
		interrupts = <0 32 4>,
			     <0 32 4>, <0 32 4>, <0 32 4>, <0 32 4>,
			     <0 32 4>, <0 32 4>, <0 32 4>, <0 32 4>,
			     <0 32 4>, <0 32 4>, <0 32 4>, <0 32 4>,
			     <0 32 4>, <0 32 4>, <0 32 4>, <0 32 4>,
			     <0 32 4>, <0 32 4>, <0 32 4>, <0 32 4>,
			     <0 32 4>, <0 32 4>, <0 32 4>, <0 32 4>,
			     <0 32 4>, <0 32 4>, <0 32 4>, <0 32 4>,
			     <0 32 4>, <0 32 4>, <0 32 4>, <0 32 4>;
	};

	cci: cci@52090000 {
		compatible = "arm,cci-400";
		#address-cells = <1>;
		#size-cells = <1>;
		reg = <0 0x52090000 0 0x1000>;
		ranges = <0 0 0x52090000 0x10000>;

		pmu@9000 {
			compatible = "arm,cci-400-pmu,r1",
				     "arm,cci-400-pmu";
			reg = <0x9000 0x4000>;
			interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>,
				     <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>,
				     <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>,
				     <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>,
				     <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>,
				     <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>;
			interrupt-parent = <&gic>;
		};
	};

	#include "fsl-imx8qm-device.dtsi"
};

&A53_0 {
	operating-points = <
		/* kHz    uV */
		/* voltage is maintained by SCFW, so no need here */
		1200000	   0
		1104000	   0
		900000	   0
		600000	   0
	>;
	clocks = <&clk IMX8QM_A53_DIV>;
	clock-latency = <61036>;
	#cooling-cells = <2>;
	/delete-property/ cpu-idle-states;
};

&A72_0 {
	operating-points = <
		/* kHz    uV */
		/* voltage is maintained by SCFW, so no need here */
		1596000	   0
		1296000	   0
		1056000	   0
		600000     0
	>;
	clocks = <&clk IMX8QM_A72_DIV>;
	clock-latency = <61036>;
	#cooling-cells = <2>;
	/delete-property/ cpu-idle-states;
};


&imx8_gpu_ss {/*<freq-kHz vol-uV>*/
       operating-points = <
/*overdrive*/  800000  0  /*The first tuple is for core clock frequency*/
               1000000 0  /*The second tuple is for shader clock frequency*/
/*nominal*/    650000  0
               700000  0
/*underdrive*/ 400000  0  /*core/shader clock share the same frequency on underdrive mode*/
       >;
};

&A53_1 {
	/delete-property/ cpu-idle-states;
};

&A53_2 {
	/delete-property/ cpu-idle-states;
};

&A53_3 {
	/delete-property/ cpu-idle-states;
};

&A72_1 {
	/delete-property/ cpu-idle-states;
};