/*
 * Copyright (c) 2019 Jan Van Winkel (jan.van_winkel@dxplore.eu)
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;
#include <posix/posix.dtsi>
#include <zephyr/dt-bindings/adc/adc.h>
#include <zephyr/dt-bindings/i2c/i2c.h>
#include <zephyr/dt-bindings/gpio/gpio.h>

/ {
	model = "Native Sim Board";
	compatible = "zephyr,posix";

	chosen {
		zephyr,console = &uart0;
		zephyr,shell-uart = &uart0;
		zephyr,uart-mcumgr = &uart0;
		zephyr,flash = &flash0;
		zephyr,entropy = &rng;
		zephyr,flash-controller = &flashcontroller0;
		zephyr,display = &sdl_dc;
		zephyr,canbus = &can_loopback0;
		zephyr,code-partition = &slot0_partition;
		zephyr,bt-hci = &bt_hci_userchan;
	};

	aliases {
		eeprom-0 = &eeprom0;
		i2c-0 = &i2c0;
		spi-0 = &spi0;
		led0 = &led0;
		rtc = &rtc;
	};

	leds {
		compatible = "gpio-leds";
		led0: led_0 {
			gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>;
			label = "Green LED";
		};
	};

	lvgl_pointer {
		compatible = "zephyr,lvgl-pointer-input";
		input = <&input_sdl_touch>;
	};

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

		cpu0: cpu@0 {
			compatible = "zephyr,native-posix-cpu";
			reg = <0>;
		};
	};

	flashcontroller0: flash-controller@0 {
		compatible = "zephyr,sim-flash";
		reg = <0x00000000 DT_SIZE_K(2048)>;

		#address-cells = <1>;
		#size-cells = <1>;
		erase-value = <0xff>;

		flash0: flash@0 {
			status = "okay";
			compatible = "soc-nv-flash";
			erase-block-size = <4096>;
			write-block-size = <1>;
			reg = <0x00000000 DT_SIZE_K(2048)>;

			partitions {
				compatible = "fixed-partitions";
				#address-cells = <1>;
				#size-cells = <1>;

				boot_partition: partition@0 {
					label = "mcuboot";
					reg = <0x00000000 0x0000C000>;
				};
				slot0_partition: partition@c000 {
					label = "image-0";
					reg = <0x0000C000 0x00069000>;
				};
				slot1_partition: partition@75000 {
					label = "image-1";
					reg = <0x00075000 0x00069000>;
				};
				scratch_partition: partition@de000 {
					label = "image-scratch";
					reg = <0x000de000 0x0001e000>;
				};
				storage_partition: partition@fc000 {
					label = "storage";
					reg = <0x000fc000 0x00004000>;
				};
			};
		};
	};

	eeprom0: eeprom {
		status = "okay";
		compatible = "zephyr,sim-eeprom";
		size = <DT_SIZE_K(32)>;
	};

	i2c0: i2c@100 {
		status = "okay";
		compatible = "zephyr,i2c-emul-controller";
		clock-frequency = <I2C_BITRATE_STANDARD>;
		#address-cells = <1>;
		#size-cells = <0>;
		reg = <0x100 4>;
	};

	spi0: spi@200 {
		status = "okay";
		compatible = "zephyr,spi-emul-controller";
		clock-frequency = <50000000>;
		#address-cells = <1>;
		#size-cells = <0>;
		reg = <0x200 4>;
	};

	espi0: espi@300 {
		status = "okay";
		compatible = "zephyr,espi-emul-controller";
		reg = <0x300 4>;
		#address-cells = <1>;
		#size-cells = <0>;
	};

	mspi0: mspi@400 {
		status = "okay";
		compatible = "zephyr,mspi-emul-controller";
		clock-frequency = <250000000>;
		reg = <0x400 4>;
		#address-cells = <1>;
		#size-cells = <0>;
	};

	uart0: uart {
		status = "okay";
		compatible = "zephyr,native-posix-uart";
		/* Dummy current-speed entry to comply with serial
		 * DTS binding
		 */
		current-speed = <0>;
	};

	uart1: uart_1 {
		status = "okay";
		compatible = "zephyr,native-posix-uart";
		/* Dummy current-speed entry to comply with serial
		 * DTS binding
		 */
		current-speed = <0>;
	};

	rng: rng {
		status = "okay";
		compatible = "zephyr,native-posix-rng";
	};

	counter0: counter {
		status = "okay";
		compatible = "zephyr,native-posix-counter";
	};

	gpio0: gpio_emul {
		status = "okay";
		compatible = "zephyr,gpio-emul";
		rising-edge;
		falling-edge;
		high-level;
		low-level;
		gpio-controller;
		#gpio-cells = <2>;
	};

	zephyr_udc0: udc0 {
		compatible = "zephyr,native-posix-udc";
	};

	sdl_dc: sdl_dc {
		compatible = "zephyr,sdl-dc";
		height = <240>;
		width = <320>;
	};

	input_sdl_touch: input-sdl-touch {
		compatible = "zephyr,input-sdl-touch";
	};

	can_loopback0: can_loopback0 {
		status = "okay";
		compatible = "zephyr,can-loopback";
	};

	can0: can {
		status = "disabled";
		compatible = "zephyr,native-linux-can";
		/* adjust zcan0 to desired host interface or create an alternative
		 * name, e.g.: sudo ip link property add dev vcan0 altname zcan0
		 */
		host-interface = "zcan0";
	};

	rtc: rtc {
		status = "okay";
		compatible = "zephyr,rtc-emul";
		alarms-count = <2>;
	};

	adc0: adc {
		compatible = "zephyr,adc-emul";
		nchannels = <2>;
		#io-channel-cells = <1>;
		status = "okay";
	};

	dma: dma {
		compatible = "zephyr,dma-emul";
		#dma-cells = <1>;
		stack-size = <4096>;
	};

	bt_hci_userchan: bt_hci_userchan {
		compatible = "zephyr,bt-hci-userchan";
		status = "okay";
	};
};
