blob: 8f0b047edbcfc0d506bcf8003272cd3bcfdaa1d6 [file] [log] [blame]
/*
* 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;
};
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;
};