/*
 * Copyright 2023 Google LLC
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;
#include <st/h7/stm32h747Xi_m7.dtsi>
#include <st/h7/stm32h747xihx-pinctrl.dtsi>
#include "arduino_giga_r1.dtsi"

/ {
	model = "Arduino GIGA R1 WiFi Board (M7)";
	compatible = "arduino,giga-r1";

	chosen {
		zephyr,console = &usart1;
		zephyr,shell-uart = &usart1;
		zephyr,uart-mcumgr = &usart1;
		zephyr,bt-uart = &uart7;
		zephyr,sram = &sram0;
		zephyr,flash = &flash0;
		zephyr,canbus = &can2;
		zephyr,code-partition = &slot0_partition;
	};

	sdram1: sdram@c0000000 {
		compatible = "zephyr,memory-region", "mmio-sram";
		device_type = "memory";
		reg = <0xc0000000 DT_SIZE_M(8)>;
		zephyr,memory-region = "SDRAM1";
		zephyr,memory-region-mpu = "RAM";
	};

	aliases {
		led0 = &red_led;
		led1 = &green_led;
		sw0 = &user_button;
		spi-flash0 = &n25q128a1;
	};
};

&clk_hse {
	status = "okay";
	clock-frequency = <DT_FREQ_M(16)>;
};

&clk_lse {
	status = "okay";
};

&clk_hsi48 {
	status = "okay";
};

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

&rcc {
	clocks = <&pll>;
	clock-frequency = <DT_FREQ_M(480)>;
};

&usart1 {
	status = "okay";
	pinctrl-0 = <&usart1_tx_pa9 &usart1_rx_pb7>;
	pinctrl-names = "default";
	current-speed = <115200>;
};

&usart6 {
	status = "disabled";
	pinctrl-0 = <&usart6_tx_pg14 &usart6_rx_pc7>;
	pinctrl-names = "default";
	current-speed = <115200>;
};

&uart4 {
	status = "disabled";
	pinctrl-0 = <&uart4_tx_ph13 &uart4_rx_pi9>;
	pinctrl-names = "default";
	current-speed = <115200>;
};

&uart7 {
	pinctrl-0 = <&uart7_tx_pf7 &uart7_rx_pa8
		     &uart7_cts_pf9 &uart7_rts_pf8>;
	pinctrl-names = "default";
	current-speed = <115200>;
	status = "okay";
	hw-flow-control;

	murata-1dx {
		compatible = "infineon,cyw43xxx-bt-hci";
		bt-reg-on-gpios = <&gpioa 10 GPIO_ACTIVE_HIGH>;
		bt-host-wake-gpios = <&gpiog 3 GPIO_ACTIVE_HIGH>;
		bt-dev-wake-gpios = <&gpioh 7 GPIO_ACTIVE_HIGH>;
		fw-download-speed = <115200>;
	};
};

&i2c4 {
	status = "okay";
	pinctrl-0 = <&i2c4_scl_pb6 &i2c4_sda_ph12>;
	pinctrl-names = "default";
	clock-frequency = <I2C_BITRATE_STANDARD>;
};

&i2c1 {
	status = "disabled";
	pinctrl-0 = <&i2c1_scl_pb8 &i2c1_sda_pb9>;
	pinctrl-names = "default";
	clock-frequency = <I2C_BITRATE_FAST>;
};

&i2c2 {
	status = "disabled";
	pinctrl-0 = <&i2c2_scl_ph4 &i2c2_sda_pb11>;
	pinctrl-names = "default";
	clock-frequency = <I2C_BITRATE_FAST>;
};

&spi5 {
	status = "okay";
	pinctrl-0 = <&spi5_nss_pk1 &spi5_sck_ph6
		     &spi5_miso_pj11 &spi5_mosi_pj10>;
	pinctrl-names = "default";
};

&can2 {
	status = "okay";
	pinctrl-0 = <&fdcan2_tx_pb13 &fdcan2_rx_pb5>;
	pinctrl-names = "default";
	bus-speed = <125000>;
	bus-speed-data = <1000000>;
};

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

		boot_partition: partition@0 {
			label = "bootloader";
			reg = <0x0 0x40000>;
			read-only;
		};

		slot0_partition: partition@40000 {
			label = "image-0";
			reg = <0x40000 0x000c0000>;
		};
	};
};

&quadspi {
	pinctrl-0 = <&quadspi_clk_pf10 &quadspi_bk1_ncs_pg6
		     &quadspi_bk1_io0_pd11 &quadspi_bk1_io1_pd12
		     &quadspi_bk1_io2_pe2 &quadspi_bk1_io3_pf6>;
	pinctrl-names = "default";
	status = "okay";

	n25q128a1: qspi-nor-flash@0 {
		compatible = "st,stm32-qspi-nor";
		reg = <0>;
		qspi-max-frequency = <72000000>;
		size = <DT_SIZE_M(16*8)>;
		status = "okay";

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

			slot1_partition: partition@0 {
				label = "image-1";
				reg = <0x00000000 DT_SIZE_M(1)>;
			};

			storage_partition: partition@100000 {
				label = "storage";
				reg = <0x00100000 DT_SIZE_M(15)>;
			};
		};
	};
};

&rng {
	status = "okay";
};

&dac1 {
	status = "okay";
	pinctrl-0 = <&dac1_out1_pa4 &dac1_out2_pa5>;
	pinctrl-names = "default";
};

&fmc {
	status = "okay";
	pinctrl-0 = <&fmc_nbl0_pe0 &fmc_nbl1_pe1
		     &fmc_sdclk_pg8 &fmc_sdnwe_ph5 &fmc_sdcke0_ph2
		     &fmc_sdne0_ph3 &fmc_sdnras_pf11 &fmc_sdncas_pg15

		     &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_a14_pg4 &fmc_a15_pg5

		     &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";

	sdram {
		status = "okay";

		power-up-delay = <100>;
		num-auto-refresh = <8>;
		mode-register = <0x220>;
		refresh-rate = <603>;

		bank@0 {
			reg = <0>;
			st,sdram-control = <STM32_FMC_SDRAM_NC_8
					    STM32_FMC_SDRAM_NR_12
					    STM32_FMC_SDRAM_MWID_16
					    STM32_FMC_SDRAM_NB_4
					    STM32_FMC_SDRAM_CAS_2
					    STM32_FMC_SDRAM_SDCLK_PERIOD_2
					    STM32_FMC_SDRAM_RBURST_ENABLE
					    STM32_FMC_SDRAM_RPIPE_0>;
			st,sdram-timing = <2 6 4 6 2 2 2>;
		};
	};
};

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