/*
 * Copyright (c) 2019 Roland Ma
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;
#include <st/f7/stm32f767Xi.dtsi>
#include <st/f7/stm32f767zitx-pinctrl.dtsi>
#include "arduino_r3_connector.dtsi"

/*
 * WARNING: The pin PA7 will conflict on selection of SPI_1 and ETH_STM32_HAL.
 *          If you require both peripherals, and you do not need Arduino Uno v3
 *          comaptability, the pin PB5 (also on ST Zio connector) can be used
 *          for the SPI_1 MOSI signal.
 */

/ {
	model = "STMicroelectronics STM32F767ZI-NUCLEO board";
	compatible = "st,stm32f767zi-nucleo";

	chosen {
		zephyr,console = &usart3;
		zephyr,shell-uart = &usart3;
		zephyr,sram = &sram0;
		zephyr,flash = &flash0;
		zephyr,code-partition = &slot0_partition;
		zephyr,dtcm = &dtcm;
		zephyr,can-primary = &can1;
	};

	leds {
		compatible = "gpio-leds";
		green_led: led_0 {
			gpios = <&gpiob 0 GPIO_ACTIVE_HIGH>;
			label = "User LD1";
		};
		blue_led: led_1 {
			gpios = <&gpiob 7 GPIO_ACTIVE_HIGH>;
			label = "User LD2";
		};
		red_led: led_2 {
			gpios = <&gpiob 14 GPIO_ACTIVE_HIGH>;
			label = "User LD3";
		};
	};

	gpio_keys {
		compatible = "gpio-keys";
		user_button: button_0 {
			label = "User";
			gpios = <&gpioc 13 GPIO_ACTIVE_LOW>;
		};
	};

	aliases {
		led0 = &green_led;
		led1 = &blue_led;
		led2 = &red_led;
		sw0 = &user_button;
	};
};

&clk_hse {
	hse-bypass;
	clock-frequency = <DT_FREQ_M(8)>; /* STLink 8MHz clock */
	status = "okay";
};

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

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

&usart2 {
	pinctrl-0 = <&usart2_tx_pd5
		     &usart2_rx_pd6
		     &usart2_rts_pd4
		     &usart2_cts_pd3>;
	current-speed = <115200>;
};

&usart3 {
	pinctrl-0 = <&usart3_tx_pd8 &usart3_rx_pd9>;
	current-speed = <115200>;
	status = "okay";
};

&usart6 {
	pinctrl-0 = <&usart6_tx_pg14 &usart6_rx_pg9>;
	current-speed = <115200>;
	status = "okay";
};

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

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

&timers1 {
	status = "okay";

	pwm1: pwm {
		status = "okay";
		st,prescaler = <10000>;
		pinctrl-0 = <&tim1_ch3_pe13>;
	};
};

&spi1 {
	pinctrl-0 = <&spi1_sck_pa5 &spi1_miso_pa6 &spi1_mosi_pa7>;
	cs-gpios = <&gpiod 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
	/*
	 * WARNING: The pin PA7 will conflict on selection of SPI_1 and
	 *          ETH_STM32_HAL.
	 */
	status = "okay";
};

&iwdg {
	status = "okay";
};

&rtc {
	status = "okay";
};

&can1 {
	pinctrl-0 = <&can1_rx_pd0 &can1_tx_pd1>;
	bus-speed = <125000>;
	sjw = <1>;
	prop-seg = <0>;
	phase-seg1 = <6>;
	phase-seg2 = <5>;
	status = "okay";
};

&adc1 {
	pinctrl-0 = <&adc1_in0_pa0>;
	status = "okay";
};

&dac1 {
	status = "okay";
	pinctrl-0 = <&dac_out1_pa4>;
};

&rng {
	status = "okay";
};

&mac {
	status = "okay";
	pinctrl-0 = <&eth_mdc_pc1
		     &eth_rxd0_pc4
		     &eth_rxd1_pc5
		     &eth_ref_clk_pa1
		     &eth_mdio_pa2
		     &eth_crs_dv_pa7
		     &eth_tx_en_pg11
		     &eth_txd0_pg13
		     &eth_txd1_pb13>;
};

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

		/*
		 * The two sectors 0-1 (32+32 kbytes) are reserved for
		 * the bootloader.
		 */
		boot_partition: partition@0 {
			label = "mcuboot";
			reg = <0x0 0x00010000>;
			read-only;
		};

		/*
		 * The flash starting at offset 0x10000 and ending at
		 * offset 0x1ffff is reserved for use by the application.
		 * This represents sectors 2-3 (32+32 kbytes)
		 */
		storage_partition: partition@10000 {
			label = "storage";
			reg = <0x00010000 0x00010000>;
		};

		/*
		 * Sector 4 (128 kbytes) unallocated.
		 */

		/*
		 * Allocated 3 (256k x 3) sectors for image-0. Sectors 5-7.
		 */
		slot0_partition: partition@40000 {
			label = "image-0";
			reg = <0x00040000 0x000C0000>;
		};

		/*
		 * Allocated 3 (256k x 3) sectors for image-1. Sectors 8-10.
		 */
		slot1_partition: partition@100000 {
			label = "image-1";
			reg = <0x00100000 0x000C0000>;
		};

		/*
		 * Allocated 1 (256k) sector for image-scratch. Sector 11.
		 */
		scratch_partition: partition@1C0000 {
			label = "image-scratch";
			reg = <0x001C0000 0x00040000>;
		};
	};
};
