/*
 * Copyright (c) 2017, NXP
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <mem.h>
#include <zephyr/dt-bindings/clock/mcux_lpc_syscon_clock.h>
#include <zephyr/dt-bindings/gpio/gpio.h>
#include <zephyr/dt-bindings/i2c/i2c.h>
#include <mem.h>

/ {
	aliases{
		gpio-0 = &gpio0;
		gpio-1 = &gpio1;
		mailbox-0 = &mailbox0;
	};

	chosen {
		zephyr,flash-controller = &iap;
	};

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

		cpu0: cpu@0 {
			compatible = "arm,cortex-m4f";
			reg = <0>;
		};

		cpu1: cpu@1 {
			compatible = "arm,cortex-m0+";
			reg = <1>;
		};
	};

	soc {
		syscon: syscon@40000000 {
			compatible = "nxp,lpc-syscon";
			reg = <0x40000000 0x4000>;
			#clock-cells = <1>;
		};

		/*
		 * lpc54xxx Memory configurations:
		 * (note: reference manual says "up to <n>K")
		 * SRAM0 through SRAM3 will be contiguous
		 *
		 * LPC540xx: RAMX: 192K, SRAM0: 64K, SRAM1: 32K, SRAM2: 32K, SRAM3: 32K, USBRAM: 8K
		 * LPC5410x: RAMX: ----, SRAM0: 64K, SRAM1: 32K, USBRAM: 8K @ 0x03400000
		 * LPC5411x: RAMX: 32K,  SRAM0: 64K, SRAM1: 64K, SRAM2: 32K
		 *
		 * SRAM0-SRAM3 will be contiguous memory when present.
		 *
		 * The board level or application level device tree can override the memory sizes
		 * to allocate memory to the different cores of the dual-core platforms.
		 */
		sram0:memory@20000000 {
			compatible = "mmio-sram";
			reg = <0x20000000 DT_SIZE_K(64)>;
		};

		sram1:memory@20010000 {
			compatible = "zephyr,memory-region", "mmio-sram";
			reg = <0x20010000 DT_SIZE_K(64)>;
			zephyr,memory-region = "SRAM1";
		};

		sram2:memory@20020000 {
			compatible = "zephyr,memory-region", "mmio-sram";
			reg = <0x20020000 DT_SIZE_K(32)>;
			zephyr,memory-region = "SRAM2";
		};

		/*
		 * LPC54018: 192K @ 0x04000000
		 * LPC540xx: 192K @ 0x04000000
		 * LPC541xx:  32K @ 0x04000000
		 */
		sramx:memory@04000000{
			compatible = "mmio-sram";
			reg = <0x04000000 DT_SIZE_K(32)>;
		};

		iap: flash-controller@4009c000 {
			compatible = "nxp,lpc-iap";
			reg = <0x4009c000 0x18>;
			#address-cells = <1>;
			#size-cells = <1>;
			flash0: flash@0 {
				compatible = "soc-nv-flash";
				reg = <0 DT_SIZE_K(256)>;
				erase-block-size = <256>;
				write-block-size = <256>;
			};
		};

		iocon: iocon@40001000 {
			compatible = "nxp,lpc-iocon";
			reg = <0x40001000 0x100>;
			#address-cells = <1>;
			#size-cells = <1>;
			ranges = <0x0 0x40001000 0x100>;
			pinctrl: pinctrl {
				compatible = "nxp,lpc-iocon-pinctrl";
			};
			pio0: pio0@0 {
				compatible = "nxp,lpc-iocon-pio";
				reg = <0x0 0x80>;
			};
			pio1: pio0@80 {
				compatible = "nxp,lpc-iocon-pio";
				reg = <0x80 0x80>;
			};
		};

		gpio0: gpio@0 {
			compatible = "nxp,lpc-gpio";
			reg = <0x4008c000 0x2488>;
			interrupts = <4 2>,<5 2>,<6 2>,<7 2>;
			gpio-controller;
			#gpio-cells = <2>;
			port = <0>;
		};

		gpio1: gpio@1 {
			compatible = "nxp,lpc-gpio";
			reg = <0x4008C000 0x2488>;
			interrupts = <32 2>,<33 2>,<34 2>,<35 2>;
			gpio-controller;
			#gpio-cells = <2>;
			port = <1>;
		};

		mailbox0:mailbox@4008b000 {
			compatible = "nxp,lpc-mailbox";
			reg = <0x4008b000 0xEC>;
			interrupts = <31 0>;
			status = "disabled";
		};

		flexcomm0: flexcomm@40086000 {
			compatible = "nxp,lpc-flexcomm";
			reg = <0x40086000 0x1000>;
			interrupts = <14 0>;
			clocks = <&syscon MCUX_FLEXCOMM0_CLK>;
			status = "disabled";
		};

		flexcomm1: flexcomm@40087000 {
			compatible = "nxp,lpc-flexcomm";
			reg = <0x40087000 0x1000>;
			interrupts = <15 0>;
			clocks = <&syscon MCUX_FLEXCOMM1_CLK>;
			status = "disabled";
		};

		flexcomm2: flexcomm@40088000 {
			compatible = "nxp,lpc-flexcomm";
			reg = <0x40088000 0x1000>;
			interrupts = <16 0>;
			clocks = <&syscon MCUX_FLEXCOMM2_CLK>;
			status = "disabled";
		};

		flexcomm3: flexcomm@40089000 {
			compatible = "nxp,lpc-flexcomm";
			reg = <0x40089000 0x1000>;
			interrupts = <17 0>;
			clocks = <&syscon MCUX_FLEXCOMM3_CLK>;
			status = "disabled";
		};

		flexcomm4: flexcomm@4008a000 {
			compatible = "nxp,lpc-flexcomm";
			reg = <0x4008a000 0x1000>;
			interrupts = <18 0>;
			clocks = <&syscon MCUX_FLEXCOMM4_CLK>;
			status = "disabled";
		};

		flexcomm5: flexcomm@40096000 {
			compatible = "nxp,lpc-flexcomm";
			reg = <0x40096000 0x1000>;
			interrupts = <19 0>;
			clocks = <&syscon MCUX_FLEXCOMM5_CLK>;
			status = "disabled";
		};

		flexcomm6: flexcomm@40097000 {
			compatible = "nxp,lpc-flexcomm";
			reg = <0x40097000 0x1000>;
			interrupts = <20 0>;
			clocks = <&syscon MCUX_FLEXCOMM6_CLK>;
			status = "disabled";
		};

		flexcomm7: flexcomm@40098000 {
			compatible = "nxp,lpc-flexcomm";
			reg = <0x40098000 0x1000>;
			interrupts = <21 0>;
			clocks = <&syscon MCUX_FLEXCOMM7_CLK>;
			status = "disabled";
		};
	};
};

&nvic {
	arm,num-irq-priority-bits = <3>;
};
