/*
 * Copyright (c) 2024 BayLibre
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;

#include <st/l4/stm32l4s5Xi.dtsi>
#include <st/l4/stm32l4s5qiix-pinctrl.dtsi>
#include "arduino_r3_connector.dtsi"
#include <zephyr/dt-bindings/memory-controller/stm32-fmc-nor-psram.h>

/ {
	model = "Analog Devices Inc. EVAL-ADIN1110EBZ board";
	compatible = "adi,eval-adin1110ebz";

	chosen {
		zephyr,console = &usart1;
		zephyr,shell-uart = &usart1;
		zephyr,sram = &sram0;
		zephyr,flash = &flash0;
		zephyr,code-partition = &slot0_partition;
		zephyr,flash-controller = &mx25r6435f;
	};

	ram0: psram@60000000 {
		compatible = "zephyr,memory-region", "mmio-sram";
		device_type = "memory";
		reg = <0x60000000 DT_SIZE_M(8)>;
		zephyr,memory-region = "RAM0";
	};

	leds { /* Respecting pcb silkscreen naming */
		compatible = "gpio-leds";
		green_led: led_uC0 {
			gpios = <&gpioc 13 GPIO_ACTIVE_HIGH>;
			label = "Status uC0";
		};
		red_led: led_uC1 {
			gpios = <&gpioe 2 GPIO_ACTIVE_HIGH>;
			label = "Status uC1 ";
		};
		yellow_led: led_uC2 {
			gpios = <&gpioe 6 GPIO_ACTIVE_HIGH>;
			label = "Status uC2";
		};
		blue_led: led_uC3 {
			gpios = <&gpiog 15 GPIO_ACTIVE_HIGH>;
			label = "Status uC3";
		};
	};

	aliases {
		led0 = &green_led;
		watchdog0 = &iwdg;
		spi-flash0 = &mx25r6435f;
		ambient-temp0 = &adt7420;
	};

	soc {
		fmc: memory-controller@a0000000 {
			compatible = "st,stm32-fmc";
			reg = <0xa0000000 0x400>;
			clocks = <&rcc STM32_CLOCK_BUS_AHB3 0x00000001>;

			sram {
				compatible = "st,stm32-fmc-nor-psram";

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

&clk_lsi {
	status = "okay";
};

&clk_hsi48 {
	status = "okay";
};

&clk_hsi {
	status = "okay";
};

&pll {
	div-m = <4>;
	mul-n = <40>;
	div-q = <2>;
	div-r = <2>;
	clocks = <&clk_hsi>;
	status = "okay";
};

&rcc {
	clocks = <&pll>;
	clock-frequency = <DT_FREQ_M(80)>;
	ahb-prescaler = <1>;
	apb1-prescaler = <1>;
	apb2-prescaler = <1>;
};

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

		boot_partition: partition@0 {
			label = "mcuboot";
			reg = <0x00000000 DT_SIZE_K(64)>;
			read-only;
		};

		/*
		 * The flash starting at offset 0x10000 and ending at
		 * offset 0x1ffff is reserved for use by the application.
		 */

		slot0_partition: partition@20000 {
			label = "image-0";
			reg = <0x00020000 DT_SIZE_K(432)>;
		};
		slot1_partition: partition@8c000 {
			label = "image-1";
			reg = <0x0008C000 DT_SIZE_K(432)>;
		};
		scratch_partition: partition@f8000 {
			label = "image-scratch";
			reg = <0x000F8000 DT_SIZE_K(16)>;
		};

		storage_partition: partition@fc000 {
			label = "storage";
			reg = <0x000fc000 DT_SIZE_K(16)>;
		};
	};
};

&iwdg {
	status = "okay";
};

&rng {
	status = "okay";
};

&dma1 {
	status = "okay";
};

&dmamux1 {
	status = "okay";
};

&usart1 { /* USB FT232 */
	pinctrl-0 = <&usart1_tx_pa9 &usart1_rx_pa10>;
	pinctrl-names = "default";
	current-speed = <115200>;
	status = "okay";
};

&uart4 { /* ARDUINO P405 1 & 2 */
	pinctrl-0 = <&uart4_tx_pa0 &uart4_rx_pa1>;
	pinctrl-names = "default";
	current-speed = <115200>;
};

&i2c1 {
	pinctrl-0 = <&i2c1_scl_pg14 &i2c1_sda_pg13>;
	pinctrl-names = "default";
	status = "okay";
	clock-frequency = <I2C_BITRATE_FAST>;
};

&i2c3 {
	pinctrl-0 = <&i2c3_scl_pg7 &i2c3_sda_pg8>;
	pinctrl-names = "default";
	status = "okay";
	clock-frequency = <I2C_BITRATE_FAST>;

	adt7420: adt7420@48 {
		compatible = "adi,adt7420";
		reg = <0x48>;
	};
};

&spi1 {
	pinctrl-0 = <&spi1_sck_pa5 &spi1_miso_pa6 &spi1_mosi_pa7>;
	pinctrl-names = "default";
	cs-gpios = <&gpioa 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
};

&spi2 {
	pinctrl-0 = <&spi2_sck_pb13 &spi2_miso_pb14 &spi2_mosi_pb15>;
	pinctrl-names = "default";
	cs-gpios = <&gpiob 12 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
	dmas = <&dmamux1 2 13 (STM32_DMA_MEMORY_TO_PERIPH | STM32_DMA_MEM_INC |
		       STM32_DMA_MEM_8BITS | STM32_DMA_PERIPH_8BITS)>,
		       <&dmamux1 3 12 (STM32_DMA_PERIPH_TO_MEMORY | STM32_DMA_MEM_INC |
		       STM32_DMA_MEM_8BITS | STM32_DMA_PERIPH_8BITS)>;
		dma-names = "tx", "rx";
	status = "okay";

	adin1110: adin1110@0 {
		compatible = "adi,adin1110";
		reg = <0x0>;
		spi-max-frequency = <25000000>;
		int-gpios = <&gpiob 11 GPIO_ACTIVE_LOW>;
		reset-gpios = <&gpioc 7 GPIO_ACTIVE_LOW>;
		status = "okay";
		spi-oa;
		spi-oa-protection;

		port1 {
			local-mac-address = [ 00 E0 22 FE DA C8 ];
		};
		mdio {
			compatible = "adi,adin2111-mdio";
			#address-cells = <1>;
			#size-cells = <0>;

			ethernet-phy@1 {
				reg = <0x1>;
				compatible = "adi,adin2111-phy";
			};
		};
	};
};

&spi3 {
	pinctrl-0 = <&spi3_sck_pc10 &spi3_miso_pc11 &spi3_mosi_pc12>;
	pinctrl-names = "default";
	status = "okay";
};

&timers2 {
	status = "okay";

	pwm2: pwm {
		status = "okay";
		pinctrl-0 = <&tim2_ch1_pa15>;
		pinctrl-names = "default";
	};
};

&rtc {
	clocks = <&rcc STM32_CLOCK_BUS_APB1 0x10000000>,
		 <&rcc STM32_SRC_LSI RTC_SEL(2)>;
	status = "okay";
};

zephyr_udc0: &usbotg_fs {
	pinctrl-0 = <&usb_otg_fs_dm_pa11 &usb_otg_fs_dp_pa12
		     &usb_otg_fs_id_pa10>;
	pinctrl-names = "default";
	status = "okay";
};

&octospi1 {
	pinctrl-0 = <&octospim_p1_clk_pa3 &octospim_p1_ncs_pa4
		     &octospim_p1_io0_pb1 &octospim_p1_io1_pb0
		     &octospim_p1_io2_pa7 &octospim_p1_io3_pa6>;
	pinctrl-names = "default";
	dmas = <&dma1 0 40 0x480>; /* request 40 for OCTOSPI1 */
	dma-names = "tx_rx";

	status = "okay";

	mx25r6435f: ospi-nor-flash@90000000 {
		compatible = "st,stm32-ospi-nor";
		reg = <0x90000000 DT_SIZE_M(8)>; /* 64 Megabits */
		ospi-max-frequency = <DT_FREQ_M(26)>; /* for Voltage Range 2 */
		spi-bus-width = <OSPI_QUAD_MODE>;
		data-rate = <OSPI_STR_TRANSFER>;
		writeoc="PP_1_4_4";

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

			store_partition: partition@0 {
				label = "store";
				reg = <0x00000000 DT_SIZE_M(8)>;
			};
		};
	};
};

&fmc {
	pinctrl-0 = <&fmc_nbl0_pe0 &fmc_nbl1_pe1
		     &fmc_nce_pd7 &fmc_nwe_pd5 &fmc_noe_pd4
		     &fmc_a0_pf0 &fmc_a1_pf1 &fmc_a2_pf2 &fmc_a3_pf3
		     &fmc_a4_pf4 &fmc_a5_pf5 &fmc_a6_pf12 &fmc_a7_pf13
		     &fmc_a8_pf14 &fmc_a9_pf15 &fmc_a10_pg0 &fmc_a11_pg1
		     &fmc_a12_pg2 &fmc_a13_pg3 &fmc_a14_pg4 &fmc_a15_pg5
		     &fmc_a16_pd11 &fmc_a17_pd12 &fmc_a18_pd13 &fmc_a19_pe3
		     &fmc_a20_pe4 &fmc_a21_pe5
		     &fmc_d0_pd14 &fmc_d1_pd15 &fmc_d2_pd0 &fmc_d3_pd1
		     &fmc_d4_pe7 &fmc_d5_pe8 &fmc_d6_pe9 &fmc_d7_pe10
		     &fmc_d8_pe11 &fmc_d9_pe12 &fmc_d10_pe13 &fmc_d11_pe14
		     &fmc_d12_pe15 &fmc_d13_pd8 &fmc_d14_pd9 &fmc_d15_pd10>;
	pinctrl-names = "default";

	sram {
		bank@0 {
			reg = <0x0>;
			st,control = <STM32_FMC_DATA_ADDRESS_MUX_DISABLE
				      STM32_FMC_MEMORY_TYPE_SRAM
				      STM32_FMC_NORSRAM_MEM_BUS_WIDTH_16
				      STM32_FMC_BURST_ACCESS_MODE_DISABLE
				      STM32_FMC_WAIT_SIGNAL_POLARITY_LOW
				      STM32_FMC_WAIT_TIMING_BEFORE_WS
				      STM32_FMC_WRITE_OPERATION_ENABLE
				      STM32_FMC_WAIT_SIGNAL_DISABLE
				      STM32_FMC_EXTENDED_MODE_DISABLE
				      STM32_FMC_ASYNCHRONOUS_WAIT_DISABLE
				      STM32_FMC_WRITE_BURST_DISABLE
				      STM32_FMC_CONTINUOUS_CLOCK_SYNC_ONLY
				      STM32_FMC_WRITE_FIFO_DISABLE
				      STM32_FMC_PAGE_SIZE_NONE>;
			st,timing = <4 2 3 0 16 17 STM32_FMC_ACCESS_MODE_A>;
		};
	};
};
