/*
 * Copyright 2020-2022,2024 NXP
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <mem.h>
#include <freq.h>
#include <arm64/armv8-a.dtsi>
#include <zephyr/dt-bindings/clock/imx_ccm.h>
#include <zephyr/dt-bindings/interrupt-controller/arm-gic.h>
#include <zephyr/dt-bindings/rdc/imx_rdc.h>

/ {
	#address-cells = <1>;
	#size-cells = <1>;

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

		cpu@0 {
			device_type = "cpu";
			compatible = "arm,cortex-a53";
			reg = <0>;
		};

		cpu@1 {
			device_type = "cpu";
			compatible = "arm,cortex-a53";
			reg = <1>;
		};

		cpu@2 {
			device_type = "cpu";
			compatible = "arm,cortex-a53";
			reg = <2>;
		};

		cpu@3 {
			device_type = "cpu";
			compatible = "arm,cortex-a53";
			reg = <3>;
		};
	};

	arch_timer: timer {
		compatible = "arm,armv8-timer";
		interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL
			      IRQ_DEFAULT_PRIORITY>,
			     <GIC_PPI 14 IRQ_TYPE_LEVEL
			      IRQ_DEFAULT_PRIORITY>,
			     <GIC_PPI 11 IRQ_TYPE_LEVEL
			      IRQ_DEFAULT_PRIORITY>,
			     <GIC_PPI 10 IRQ_TYPE_LEVEL
			      IRQ_DEFAULT_PRIORITY>;
		interrupt-parent = <&gic>;
	};

	gic: interrupt-controller@38800000 {
		compatible = "arm,gic-v3", "arm,gic";
		reg = <0x38800000 0x10000>, /* GIC Dist */
		      <0x38880000 0xc0000>; /* GICR (RD_base + SGI_base) */
		interrupt-controller;
		#interrupt-cells = <4>;
		status = "okay";
	};

	soc {
		ana_pll: ana_pll@30360000 {
			compatible = "nxp,imx-ana";
			reg = <0x30360000 DT_SIZE_K(64)>;
		};

		ccm: ccm@30380000 {
			compatible = "nxp,imx-ccm";
			reg = <0x30380000 DT_SIZE_K(64)>;
			#clock-cells = <3>;
		};

		gpt1: gpt@302d0000 {
			compatible = "nxp,imx-gpt";
			reg = <0x302d0000 DT_SIZE_K(64)>;
			interrupt-parent = <&gic>;
			interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL
				IRQ_DEFAULT_PRIORITY>;
			gptfreq = <24000000>;
			clocks = <&ccm IMX_CCM_GPT_IPG_CLK 0x6C 20>;
			status = "disabled";
		};

		gpt2: gpt@302e0000 {
			compatible = "nxp,imx-gpt";
			reg = <0x302e0000 DT_SIZE_K(64)>;
			interrupt-parent = <&gic>;
			interrupts = <GIC_SPI 54 IRQ_TYPE_LEVEL
				IRQ_DEFAULT_PRIORITY>;
			gptfreq = <24000000>;
			clocks = <&ccm IMX_CCM_GPT_IPG_CLK 0x68 24>;
			status = "disabled";
		};

		uart2: uart@30890000 {
			compatible = "nxp,imx-iuart";
			reg = <0x30890000 DT_SIZE_K(64)>;
			interrupts = <GIC_SPI 27 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
			interrupt-names = "irq_0";
			interrupt-parent = <&gic>;
			clocks = <&ccm IMX_CCM_UART2_CLK 0x6c 24>;
			rdc = <(RDC_DOMAIN_PERM(A53_DOMAIN_ID, RDC_DOMAIN_PERM_RW)|\
			       RDC_DOMAIN_PERM(M7_DOMAIN_ID, RDC_DOMAIN_PERM_RW))>;
			status = "disabled";
		};

		uart4: uart@30a60000 {
			compatible = "nxp,imx-iuart";
			reg = <0x30a60000 DT_SIZE_K(64)>;
			interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
			interrupt-names = "irq_0";
			interrupt-parent = <&gic>;
			clocks = <&ccm IMX_CCM_UART4_CLK 0x6c 24>;
			rdc = <(RDC_DOMAIN_PERM(A53_DOMAIN_ID, RDC_DOMAIN_PERM_RW)|\
			       RDC_DOMAIN_PERM(M7_DOMAIN_ID, RDC_DOMAIN_PERM_RW))>;
			status = "disabled";
		};

		enet: enet@30be0000 {
			compatible = "nxp,enet1g";
			reg = <0x30be0000 DT_SIZE_K(64)>;
			clocks = <&ccm IMX_CCM_ENET_CLK 0 0>;
			rdc = <RDC_DOMAIN_PERM(A53_DOMAIN_ID, RDC_DOMAIN_PERM_RW)>;
			status = "disabled";

			enet_mac: ethernet {
				compatible = "nxp,enet-mac";
				interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
				interrupt-names = "COMMON";
				interrupt-parent = <&gic>;
				nxp,mdio = <&enet_mdio>;
				nxp,ptp-clock = <&enet_ptp_clock>;
				status = "disabled";
			};
			enet_mdio: mdio {
				compatible = "nxp,enet-mdio";
				#address-cells = <1>;
				#size-cells = <0>;
				status = "disabled";
			};
			enet_ptp_clock: ptp_clock {
				compatible = "nxp,enet-ptp-clock";
				interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
				interrupt-parent = <&gic>;
				clocks = <&ccm IMX_CCM_ENET_PLL 0 0>;
				status = "disabled";
			};
		};

		iomuxc: iomuxc@30330000 {
			compatible = "nxp,imx-iomuxc";
			reg = <0x30330000 DT_SIZE_K(64)>;
			status = "okay";
			pinctrl: pinctrl {
				status = "okay";
				compatible = "nxp,imx8mp-pinctrl";
			};
		};

		rdc: rdc@303d0000 {
			compatible = "nxp,rdc";
			reg = <0x303d0000 DT_SIZE_K(64)>;
		};
	};
};
