/*
 * Copyright 2015-2016 Freescale Semiconductor, Inc.
 * Copyright 2016 Toradex AG
 * Copyright 2017 NXP.
 *
 * This file is dual-licensed: you can use it either under the terms
 * of the GPL or the X11 license, at your option. Note that this dual
 * licensing only applies to this file, and not this project as a
 * whole.
 *
 *  a) This file 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 file 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.
 *
 * Or, alternatively,
 *
 *  b) Permission is hereby granted, free of charge, to any person
 *     obtaining a copy of this software and associated documentation
 *     files (the "Software"), to deal in the Software without
 *     restriction, including without limitation the rights to use,
 *     copy, modify, merge, publish, distribute, sublicense, and/or
 *     sell copies of the Software, and to permit persons to whom the
 *     Software is furnished to do so, subject to the following
 *     conditions:
 *
 *     The above copyright notice and this permission notice shall be
 *     included in all copies or substantial portions of the Software.
 *
 *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 *     OTHER DEALINGS IN THE SOFTWARE.
 */

#include "imx7s.dtsi"

/ {
	cpus {
		cpu0: cpu@0 {
			operating-points = <
				/* KHz	uV */
				1200000	1225000
				996000	1075000
				792000	975000
			>;
			clock-frequency = <996000000>;
		};

		cpu1: cpu@1 {
			compatible = "arm,cortex-a7";
			device_type = "cpu";
			reg = <1>;
			clock-frequency = <996000000>;
		};
	};

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

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

	soc {
		etm@3007d000 {
			compatible = "arm,coresight-etm3x", "arm,primecell";
			reg = <0x3007d000 0x1000>;

			/*
			 * System will hang if added nosmp in kernel command line
			 * without arm,primecell-periphid because amba bus try to
			 * read id and core1 power off at this time.
			 */
			arm,primecell-periphid = <0xbb956>;
			cpu = <&cpu1>;
			clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
			clock-names = "apb_pclk";

			port {
				etm1_out_port: endpoint {
					remote-endpoint = <&ca_funnel_in_port1>;
				};
			};
		};

		busfreq {
			compatible = "fsl,imx_busfreq";
			fsl,max_ddr_freq = <533000000>;
			clocks = <&clks IMX7D_OSC_24M_CLK>, <&clks IMX7D_MAIN_AXI_ROOT_SRC>,
				<&clks IMX7D_AHB_CHANNEL_ROOT_SRC>, <&clks IMX7D_PLL_SYS_PFD0_392M_CLK>,
				<&clks IMX7D_DRAM_ROOT_SRC>, <&clks IMX7D_DRAM_ALT_ROOT_SRC>,
				<&clks IMX7D_PLL_DRAM_MAIN_CLK>, <&clks IMX7D_DRAM_ALT_ROOT_CLK>,
				<&clks IMX7D_PLL_SYS_PFD2_270M_CLK>, <&clks IMX7D_PLL_SYS_PFD1_332M_CLK>,
				<&clks IMX7D_AHB_CHANNEL_ROOT_CLK>, <&clks IMX7D_MAIN_AXI_ROOT_DIV>;
			clock-names = "osc", "axi_sel", "ahb_sel", "pfd0_392m", "dram_root", "dram_alt_sel",
					"pll_dram", "dram_alt_root", "pfd2_270m", "pfd1_332m", "ahb", "axi";
			interrupts = <0 112 0x04>, <0 113 0x04>;
			interrupt-names = "irq_busfreq_0", "irq_busfreq_1";
		};

		caam_sm: caam-sm@00100000 {
			 compatible = "fsl,imx7d-caam-sm", "fsl,imx6q-caam-sm";
			 reg = <0x00100000 0x3fff>;
		};

		irq_sec_vio: caam_secvio {
			compatible = "fsl,imx7d-caam-secvio", "fsl,imx6q-caam-secvio";
			interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
			jtag-tamper = "disabled";
			watchdog-tamper = "enabled";
			internal-boot-tamper = "enabled";
			external-pin-tamper = "disabled";
		};

		pmu {
			compatible = "arm,cortex-a7-pmu";
			interrupts = <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>;
			status = "disabled";
		};

		ocrams_ddr: sram@00900000 {
			compatible = "fsl,ddr-lpm-sram";
			reg = <0x00900000 0x1000>;
			clocks = <&clks IMX7D_OCRAM_CLK>;
		};

		ocram: sram@901000 {
			compatible = "mmio-sram";
			reg = <0x00901000 0x1f000>;
			clocks = <&clks IMX7D_OCRAM_CLK>;
		};

		ocrams: sram@00180000 {
			compatible = "fsl,lpm-sram";
			reg = <0x00180000 0x8000>;
			clocks = <&clks IMX7D_OCRAM_S_CLK>;
			status = "disabled";
		};

		ocrams_mf: sram-mf@00900000 {
			compatible = "fsl,mega-fast-sram";
			reg = <0x00900000 0x20000>;
			clocks = <&clks IMX7D_OCRAM_CLK>;
		};

		dma_apbh: dma-apbh@33000000 {
			compatible = "fsl,imx7d-dma-apbh", "fsl,imx28-dma-apbh";
			reg = <0x33000000 0x2000>;
			interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>,
				     <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>,
				     <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>,
				     <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
			interrupt-names = "gpmi0", "gpmi1", "gpmi2", "gpmi3";
			#dma-cells = <1>;
			dma-channels = <4>;
			clocks = <&clks IMX7D_NAND_USDHC_BUS_RAWNAND_CLK>;
		};

		gpmi: gpmi-nand@33002000{
			compatible = "fsl,imx7d-gpmi-nand";
			#address-cells = <1>;
			#size-cells = <1>;
			reg = <0x33002000 0x2000>, <0x33004000 0x4000>;
			reg-names = "gpmi-nand", "bch";
			interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
			interrupt-names = "bch";
			clocks = <&clks IMX7D_NAND_RAWNAND_CLK>,
				<&clks IMX7D_NAND_USDHC_BUS_RAWNAND_CLK>;
			clock-names = "gpmi_io", "gpmi_bch_apb";
			dmas = <&dma_apbh 0>;
			dma-names = "rx-tx";
			status = "disabled";
		};

		pcie: pcie@0x33800000 {
			compatible = "fsl,imx7d-pcie", "snps,dw-pcie";
			reg = <0x33800000 0x4000>,  <0x4ff00000 0x80000>;
			reg-names = "dbi", "config";
			#address-cells = <3>;
			#size-cells = <2>;
			device_type = "pci";
			ranges =  <0x81000000 0 0          0x4ff80000 0 0x00010000 /* downstream I/O 64KB */
				   0x82000000 0 0x40000000 0x40000000 0 0x0ff00000>; /* non-prefetchable memory */
			num-lanes = <1>;
			interrupts = <GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>,
					<GIC_SPI 127 IRQ_TYPE_LEVEL_HIGH>; /* eDMA */
			interrupt-names = "msi";
			#interrupt-cells = <1>;
			interrupt-map-mask = <0 0 0 0x7>;
			interrupt-map = <0 0 0 1 &intc GIC_SPI 125 IRQ_TYPE_LEVEL_HIGH>,
					<0 0 0 2 &intc GIC_SPI 124 IRQ_TYPE_LEVEL_HIGH>,
					<0 0 0 3 &intc GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>,
					<0 0 0 4 &intc GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>;
			clocks = <&clks IMX7D_PCIE_CTRL_ROOT_CLK>,
				<&clks IMX7D_PLL_ENET_MAIN_100M_CLK>,
				<&clks IMX7D_PCIE_PHY_ROOT_CLK>;
			clock-names = "pcie", "pcie_bus", "pcie_phy";
			pcie-phy-supply = <&reg_1p0d>;
			fsl,max-link-speed = <2>;
			status = "disabled";
		};
	};
};

&aips1 {
	kpp: kpp@30320000 {
		compatible = "fsl,imx7d-kpp", "fsl,imx21-kpp";
		reg = <0x30320000 0x10000>;
		interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&clks IMX7D_CLK_DUMMY>;
		status = "disabled";
	};

	mqs: mqs {
		compatible = "fsl,imx6sx-mqs";
		gpr = <&gpr>;
		status = "disabled";
	};

	ocotp: ocotp-ctrl@30350000 {
		compatible = "fsl,imx7d-ocotp", "syscon";
		reg = <0x30350000 0x10000>;
		clocks = <&clks IMX7D_OCOTP_CLK>;
		status = "okay";
	};

	tempmon: tempmon {
		compatible = "fsl,imx7d-tempmon";
		interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
		fsl,tempmon =<&anatop>;
		fsl,tempmon-data = <&ocotp>;
		clocks = <&clks IMX7D_PLL_SYS_MAIN_CLK>;
	};

	caam_snvs: caam-snvs@30370000 {
		compatible = "fsl,imx6q-caam-snvs";
		reg = <0x30370000 0x10000>;
	};
	iomuxc_lpsr_gpr: lpsr-gpr@30270000 {
		compatible = "fsl,imx7d-lpsr-gpr";
		reg = <0x30270000 0x10000>;
	};
};

&aips2 {
	flextimer1: flextimer@30640000 {
		compatible = "fsl,imx7d-flextimer";
		reg = <0x30640000 0x10000>;
		interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
		status = "disabled";
	};

	flextimer2: flextimer@30650000 {
		compatible = "fsl,imx7d-flextimer";
		reg = <0x30650000 0x10000>;
		interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>;
		status = "disabled";
	};

	system_counter_rd: system-counter-rd@306a0000 {
		compatible = "fsl,imx7d-system-counter-rd";
		reg = <0x306a0000 0x10000>;
		status = "disabled";
	};

	system_counter_cmp: system-counter-cmp@306b0000 {
		compatible = "fsl,imx7d-system-counter-cmp";
		reg = <0x306b0000 0x10000>;
		status = "disabled";
	};

	system_counter_ctrl: system-counter-ctrl@306c0000 {
		compatible = "fsl,imx7d-system-counter-ctrl";
		reg = <0x306c0000 0x10000>;
		interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>,
			<GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>;
		status = "disabled";
	};

	pcie_phy: pcie-phy@306d0000 {
		  compatible = "fsl,imx-pcie-phy";
		  reg = <0x306d0000 0x10000>;
		  status = "disabled";
	};

	epdc: epdc@306f0000 {
		compatible = "fsl,imx7d-epdc";
		interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
		reg = <0x306f0000 0x10000>;
		clocks = <&clks IMX7D_CLK_DUMMY>, <&clks IMX7D_EPDC_PIXEL_ROOT_CLK>;
		clock-names = "epdc_axi", "epdc_pix";
		epdc-ram = <&gpr 0x4 30>;
		status = "disabled";
	};

	epxp: epxp@30700000 {
		compatible = "fsl,imx7d-pxp-dma";
		interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>,
			<GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>;
		reg = <0x30700000 0x10000>;
		clocks = <&clks IMX7D_PXP_IPG_CLK>, <&clks IMX7D_PXP_AXI_CLK>;
		clock-names = "pxp_ipg", "pxp_axi";
		status = "disabled";
	};

	csi1: csi@30710000 {
		compatible = "fsl,imx7d-csi", "fsl,imx6s-csi";
		reg = <0x30710000 0x10000>;
		interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&clks IMX7D_CLK_DUMMY>,
			<&clks IMX7D_CSI_MCLK_ROOT_CLK>,
			<&clks IMX7D_CLK_DUMMY>;
		clock-names = "disp-axi", "csi_mclk", "disp_dcic";
		status = "disabled";
	};

	mipi_csi: mipi-csi@30750000 {
		compatible = "fsl,imx7d-mipi-csi";
		reg = <0x30750000 0x10000>;
		interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&clks IMX7D_MIPI_CSI_ROOT_CLK>,
				<&clks IMX7D_MIPI_DPHY_ROOT_CLK>;
		clock-names = "mipi_clk", "phy_clk";
		mipi-phy-supply = <&reg_1p0d>;
		csis-phy-reset = <&src 0x28 2>;
		bus-width = <4>;
		status = "disabled";
	};

	mipi_dsi: mipi-dsi@30760000 {
		compatible = "fsl,imx7d-mipi-dsi";
		reg = <0x30760000 0x10000>;
		interrupts = <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&clks IMX7D_MIPI_DSI_ROOT_CLK>,
			<&clks IMX7D_MIPI_DPHY_ROOT_CLK>;
		clock-names = "mipi_cfg_clk", "mipi_pllref_clk";
		mipi-phy-supply = <&reg_1p0d>;
		status = "disabled";
	};

	ddrc: ddrc@307a0000 {
		compatible = "fsl,imx7-ddrc";
		reg = <0x307a0000 0x10000>;
	};
};

&aips3 {
	usbotg2: usb@30b20000 {
		compatible = "fsl,imx7d-usb", "fsl,imx27-usb";
		reg = <0x30b20000 0x200>;
		interrupts = <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&clks IMX7D_USB_CTRL_CLK>;
		fsl,usbphy = <&usbphynop2>;
		fsl,usbmisc = <&usbmisc2 0>;
		phy-clkgate-delay-us = <400>;
		ahb-burst-config = <0x0>;
		tx-burst-size-dword = <0x10>;
		rx-burst-size-dword = <0x10>;
		status = "disabled";
	};

	usbmisc2: usbmisc@30b20200 {
		#index-cells = <1>;
		compatible = "fsl,imx7d-usbmisc", "fsl,imx6q-usbmisc";
		reg = <0x30b20200 0x200>;
	};

	usbphynop2: usbphynop2 {
		compatible = "usb-nop-xceiv";
		clocks = <&clks IMX7D_USB_PHY2_CLK>;
		clock-names = "main_clk";
	};

	fec2: ethernet@30bf0000 {
		compatible = "fsl,imx7d-fec", "fsl,imx6sx-fec";
		reg = <0x30bf0000 0x10000>;
		interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>,
			<GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>,
			<GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&clks IMX7D_ENET2_IPG_ROOT_CLK>,
			<&clks IMX7D_ENET_AXI_ROOT_CLK>,
			<&clks IMX7D_ENET2_TIME_ROOT_CLK>,
			<&clks IMX7D_PLL_ENET_MAIN_125M_CLK>,
			<&clks IMX7D_ENET_PHY_REF_ROOT_DIV>;
		clock-names = "ipg", "ahb", "ptp",
			"enet_clk_ref", "enet_out";
		fsl,num-tx-queues=<3>;
		fsl,num-rx-queues=<3>;
		status = "disabled";
	};

	crypto: caam@30900000 {
		compatible = "fsl,imx7d-caam", "fsl,sec-v4.0";
		#address-cells = <1>;
		#size-cells = <1>;
		reg = <0x30900000 0x40000>;
		ranges = <0 0x30900000 0x40000>;
		interrupts = <GIC_SPI 91 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&clks IMX7D_CAAM_CLK>,
			<&clks IMX7D_AHB_CHANNEL_ROOT_CLK>;
		clock-names = "ipg", "aclk";

		sec_ctrl: ctrl@0 {
			/* CAAM Page 0 only accessible */
			/*	by secure world */
			compatible = "fsl,sec-v4.0-ctrl";
			reg = <0x30900000 0x1000>;
			secure-status = "okay";
			status = "disabled";
		};

		sec_jr0: jr0@1000 {
			 compatible = "fsl,sec-v4.0-job-ring";
			 reg = <0x1000 0x1000>;
			 interrupts = <GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH>;
		};

		sec_jr1: jr1@2000 {
			 compatible = "fsl,sec-v4.0-job-ring";
			 reg = <0x2000 0x1000>;
			 interrupts = <GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>;
		};

		sec_jr2: jr2@3000 {
			 compatible = "fsl,sec-v4.0-job-ring";
			 reg = <0x3000 0x1000>;
			 interrupts = <GIC_SPI 114 IRQ_TYPE_LEVEL_HIGH>;
		};
	};

	mu: mu@30aa0000 {
		compatible = "fsl,imx7d-mu", "fsl,imx6sx-mu";
		reg = <0x30aa0000 0x10000>;
		interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&clks IMX7D_MU_ROOT_CLK>;
		clock-names = "mu";
		status = "okay";
	};

	rpmsg: rpmsg{
		compatible = "fsl,imx7d-rpmsg";
		status = "disabled";
	};

	sema4: sema4@30ac0000 {
		compatible = "fsl,imx7d-sema4";
		reg = <0x30ac0000 0x10000>;
		interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&clks IMX7D_SEMA4_HS_ROOT_CLK>;
		clock-names = "sema4";
		status = "okay";
	};

	sim1: sim@30b90000 {
		compatible = "fsl,imx7d-sim";
		reg = <0x30b90000 0x10000>;
		interrupts = <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&clks IMX7D_SIM1_ROOT_CLK>;
		clock-names = "sim";
		status = "disabled";
	};

	sim2: sim@30ba0000 {
		compatible = "fsl,imx7d-sim";
		reg = <0x30ba0000 0x10000>;
		interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
		status = "disabled";
	};

	qspi1: qspi@30bb0000 {
		#address-cells = <1>;
		#size-cells = <0>;
		compatible = "fsl,imx7d-qspi";
		reg = <0x30bb0000 0x10000>, <0x60000000 0x10000000>;
		reg-names = "QuadSPI", "QuadSPI-memory";
		interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&clks IMX7D_QSPI_ROOT_CLK>,
			<&clks IMX7D_QSPI_ROOT_CLK>;
		clock-names = "qspi_en", "qspi";
		status = "disabled";
	};

	weim: weim@30bc0000 {
		compatible = "fsl,imx7d-weim", "fsl,imx6sx-weim", "fsl,imx6q-weim";
		reg = <0x30bc0000 0x10000>;
		interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&clks IMX7D_EIM_ROOT_CLK>;
		status = "disabled";
	};

};

&usbphynop3 {
	vcc-supply = <&reg_1p2>;
};

&ca_funnel_ports {
	port@1 {
		reg = <1>;
		ca_funnel_in_port1: endpoint {
			slave-mode;
			remote-endpoint = <&etm1_out_port>;
		};
	};
};
