/*
 * Copyright (c) 2019 Intel Corporation.
 *
 * SPDX-License-Identifier: Apache-2.0
 */
#include <mem.h>
#include <xtensa/xtensa.dtsi>
#include <zephyr/dt-bindings/gpio/gpio.h>
#include <zephyr/dt-bindings/i2c/i2c.h>
#include <zephyr/dt-bindings/clock/esp32_clock.h>
#include <zephyr/dt-bindings/interrupt-controller/esp-xtensa-intmux.h>
#include <dt-bindings/pinctrl/esp32-pinctrl.h>

/ {
	chosen {
		zephyr,entropy = &trng0;
		zephyr,flash-controller = &flash;
	};

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

		cpu0: cpu@0 {
			device_type = "cpu";
			compatible = "cdns,tensilica-xtensa-lx6";
			reg = <0>;
		};

		cpu1: cpu@1 {
			device_type = "cpu";
			compatible = "cdns,tensilica-xtensa-lx6";
			reg = <1>;
		};

	};

	wifi: wifi {
		compatible = "espressif,esp32-wifi";
		status = "disabled";
	};

	pinctrl: pin-controller {
		compatible = "espressif,esp32-pinctrl";
		status = "okay";
	};

	soc {
		sram0: memory@3ffb0000 {
			compatible = "mmio-sram";
			reg = <0x3FFB0000 0x50000>;
		};

		intc: interrupt-controller@3ff00104 {
			#interrupt-cells = <1>;
			compatible = "espressif,esp32-intc";
			interrupt-controller;
			reg = <0x3ff00104 0x114>;
			label = "INTC_0";
			status = "okay";
		};

		rtc: rtc@3ff48000 {
			compatible = "espressif,esp32-rtc";
			reg = <0x3ff48000 0x0D8>;
			label = "RTC";
			xtal-freq = <ESP32_CLK_XTAL_40M>;
			#clock-cells = <1>;
			status = "ok";
		};

		flash: flash-controller@3ff42000 {
			compatible = "espressif,esp32-flash-controller";
			label = "FLASH_CTRL";
			reg = <0x3ff42000 0x1000>;
			/* interrupts = <3 0>; */

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

			flash0: flash@0 {
				compatible = "soc-nv-flash";
				label = "FLASH_ESP32";
				reg = <0 0x400000>;
				erase-block-size = <4096>;
				write-block-size = <4>;
			};
		};

		ipi0: ipi@3f4c0058 {
			compatible = "espressif,crosscore-interrupt";
			label = "IPI0";
			reg = <0x3f4c0058 0x4>;
			interrupts = <FROM_CPU_INTR0_SOURCE>;
			interrupt-parent = <&intc>;
		};

		ipi1: ipi@3f4c005c {
			compatible = "espressif,crosscore-interrupt";
			label = "IPI1";
			reg = <0x3f4c005c 0x4>;
			interrupts = <FROM_CPU_INTR1_SOURCE>;
			interrupt-parent = <&intc>;
		};

		uart0: uart@3ff40000 {
			compatible = "espressif,esp32-uart";
			reg = <0x3ff40000 0x400>;
			interrupts = <UART0_INTR_SOURCE>;
			interrupt-parent = <&intc>;
			label = "UART_0";
			clocks = <&rtc ESP32_UART0_MODULE>;
			status = "disabled";
		};

		uart1: uart@3ff50000 {
			compatible = "espressif,esp32-uart";
			reg = <0x3ff50000 0x400>;
			interrupts = <UART1_INTR_SOURCE>;
			interrupt-parent = <&intc>;
			label = "UART_1";
			clocks = <&rtc ESP32_UART1_MODULE>;
			status = "disabled";
		};

		uart2: uart@3ff6e000 {
			compatible = "espressif,esp32-uart";
			reg = <0x3ff6E000 0x400>;
			interrupts = <UART2_INTR_SOURCE>;
			interrupt-parent = <&intc>;
			label = "UART_2";
			clocks = <&rtc ESP32_UART2_MODULE>;
			status = "disabled";
		};

		ledc0: ledc@3ff59000 {
			compatible = "espressif,esp32-ledc";
			pwm-controller;
			#pwm-cells = <3>;
			reg = <0x3ff59000 0x800>;
			label = "LEDC_0";
			status = "disabled";
		};

		gpio: gpio {
			compatible = "simple-bus";
			gpio-map-mask = <0xffffffe0 0xffffffc0>;
			gpio-map-pass-thru = <0x1f 0x3f>;
			gpio-map = <
				0x00 0x0 &gpio0 0x0 0x0
				0x20 0x0 &gpio1 0x0 0x0
			>;
			#gpio-cells = <2>;
			#address-cells = <1>;
			#size-cells = <1>;
			ranges;

			gpio0: gpio@3ff44000 {
				compatible = "espressif,esp32-gpio";
				gpio-controller;
				#gpio-cells = <2>;
				reg = <0x3ff44000 0x800>;
				interrupts = <GPIO_INTR_SOURCE>;
				interrupt-parent = <&intc>;
				label = "GPIO_0";
				ngpios = <32>;   /* 0..31 */
			};

			gpio1: gpio@3ff44800 {
				compatible = "espressif,esp32-gpio";
				gpio-controller;
				#gpio-cells = <2>;
				reg = <0x3ff44800 0x800>;
				interrupts = <GPIO_INTR_SOURCE>;
				interrupt-parent = <&intc>;
				label = "GPIO_1";
				ngpios = <8>;   /* 32..39 */
			};
		};

		i2c0: i2c@3ff53000 {
			compatible = "espressif,esp32-i2c";
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x3ff53000 0x1000>;
			interrupts = <I2C_EXT0_INTR_SOURCE>;
			interrupt-parent = <&intc>;
			label = "I2C_0";
			clocks = <&rtc ESP32_I2C0_MODULE>;
			status = "disabled";
		};

		i2c1: i2c@3ff67000 {
			compatible = "espressif,esp32-i2c";
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x3ff67000 0x1000>;
			interrupts = <I2C_EXT1_INTR_SOURCE>;
			interrupt-parent = <&intc>;
			label = "I2C_1";
			clocks = <&rtc ESP32_I2C1_MODULE>;
			status = "disabled";
		};

		trng0: trng@3ff75144 {
			compatible = "espressif,esp32-trng";
			reg = <0x3FF75144 0x4>;
			/* interrupts = <33 0>; - FIXME: Enable interrupts when interrupt-controller got supported in device tree */
			label = "TRNG_0";
			status = "disabled";
		};

		wdt0: watchdog@3ff5f048 {
			compatible = "espressif,esp32-watchdog";
			reg = <0x3ff5f048 0x20>;
			interrupts = <TG0_WDT_LEVEL_INTR_SOURCE>;
			interrupt-parent = <&intc>;
			clocks = <&rtc ESP32_TIMG0_MODULE>;
			label = "WDT_0";
			status = "okay";
		};

		wdt1: watchdog@3ff60048 {
			compatible = "espressif,esp32-watchdog";
			reg = <0x3ff60048 0x20>;
			interrupts = <TG1_WDT_LEVEL_INTR_SOURCE>;
			interrupt-parent = <&intc>;
			clocks = <&rtc ESP32_TIMG1_MODULE>;
			label = "WDT_1";
			status = "disabled";
		};

		spi2: spi@3ff64000 {
			compatible = "espressif,esp32-spi";
			reg = <0x3ff64000 DT_SIZE_K(4)>;
			interrupts = <SPI2_INTR_SOURCE>;
			interrupt-parent = <&intc>;
			label = "SPI_2";
			clocks = <&rtc ESP32_HSPI_MODULE>;
			status = "disabled";
		};

		spi3: spi@3ff65000 {
			compatible = "espressif,esp32-spi";
			reg = <0x3ff65000 DT_SIZE_K(4)>;
			interrupts = <SPI3_INTR_SOURCE>;
			interrupt-parent = <&intc>;
			label = "SPI_3";
			clocks = <&rtc ESP32_VSPI_MODULE>;
			status = "disabled";
		};

		timer0: counter@3ff5f000 {
			compatible = "espressif,esp32-timer";
			reg = <0x3ff5f000 DT_SIZE_K(4)>;
			interrupts = <TG0_T0_LEVEL_INTR_SOURCE>;
			interrupt-parent = <&intc>;
			label = "TIMG0_T0";
			status = "disabled";
		};

		timer1: counter@3ff5f024 {
			compatible = "espressif,esp32-timer";
			reg = <0x3ff5f024 DT_SIZE_K(4)>;
			interrupts = <TG0_T1_LEVEL_INTR_SOURCE>;
			interrupt-parent = <&intc>;
			label = "TIMG0_T1";
			status = "disabled";
		};

		timer2: counter@3ff60000 {
			compatible = "espressif,esp32-timer";
			reg = <0x3ff60000 DT_SIZE_K(4)>;
			interrupts = <TG1_T0_LEVEL_INTR_SOURCE>;
			interrupt-parent = <&intc>;
			label = "TIMG1_T0";
			status = "disabled";
		};

		timer3: counter@3ff60024 {
			compatible = "espressif,esp32-timer";
			reg = <0x3ff60024 DT_SIZE_K(4)>;
			interrupts = <TG1_T1_LEVEL_INTR_SOURCE>;
			interrupt-parent = <&intc>;
			label = "TIMG1_T1";
			status = "disabled";
		};
	};

};
