/*
 * Copyright (c) 2018 Christian Taedcke
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;
#include <silabs/efr32fg1p133f256gm48.dtsi>

/ {
	model = "Silicon Labs EFR32 SLWSTK6061A board";
	compatible = "silabs,efr32_slwstk6061a", "silabs,efr32fg1p";

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

	/* These aliases are provided for compatibility with samples */
	aliases {
		led0 = &led0;
		led1 = &led1;
		sw0 = &button0;
		sw1 = &button1;
		watchdog0 = &wdog0;
	};

	leds {
		compatible = "gpio-leds";
		led0: led_0 {
			gpios = <&gpiof 4 0>;
			label = "LED 0";
		};
		led1: led_1 {
			gpios = <&gpiof 5 0>;
			label = "LED 1";
		};
	};

	buttons {
		compatible = "gpio-keys";
		button0: button_0 {
			/* gpio flags need validation */
			gpios = <&gpiof 6 GPIO_ACTIVE_LOW>;
			label = "User Push Button 0";
		};
		button1: button_1 {
			/* gpio flags need validation */
			gpios = <&gpiof 7 GPIO_ACTIVE_LOW>;
			label = "User Push Button 1";
		};
	};

};

&cpu0 {
	clock-frequency = <38400000>;
};

&usart0 {
	current-speed = <115200>;
	location-rx = <GECKO_LOCATION(0) GECKO_PORT_A GECKO_PIN(1)>;
	location-tx = <GECKO_LOCATION(0) GECKO_PORT_A GECKO_PIN(0)>;
	status = "okay";
};

&usart1 {
	compatible = "silabs,gecko-spi-usart";

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

	location-rx = <GECKO_LOCATION(11) GECKO_PORT_C GECKO_PIN(7)>;
	location-tx = <GECKO_LOCATION(11) GECKO_PORT_C GECKO_PIN(6)>;
	location-clk = <GECKO_LOCATION(11) GECKO_PORT_C GECKO_PIN(8)>;

	cs-gpios = <&gpioa 4 0>;

	status = "okay";

	mx25r80: mx25r8035f@0 {
		compatible = "jedec,spi-nor";
		label = "MX25R8035F";
		reg = <0>;
		spi-max-frequency = <80000000>;
		size = <0x800000>;
		has-be32k;
		jedec-id = [c2 28 14];
	};
};

&rtcc0 {
	prescaler = <1>;
	status = "okay";
};

&gpio {
	location-swo = <0>;
	status = "okay";
};

&wdog0 {
	status = "okay";
};

&flash0 {
	/*
	 * If the chosen node has no zephyr,code-partition property, the
	 * application image link uses the entire flash device. If a
	 * zephyr,code-partition property is defined, the application link
	 * will be restricted to that partition.
	 *
	 * For more information, see:
	 * http://docs.zephyrproject.org/latest/guides/dts/index.html#flash-partitions
	 */
	partitions {
		compatible = "fixed-partitions";
		#address-cells = <1>;
		#size-cells = <1>;

		/* Reserve 32 kB for the bootloader */
		boot_partition: partition@0 {
			label = "mcuboot";
			reg = <0x0 0x00008000>;
			read-only;
		};

		/* Reserve 94 kB for the application in slot 0 */
		slot0_partition: partition@8000 {
			label = "image-0";
			reg = <0x0008000 0x00017800>;
		};

		/* Reserve 94 kB for the application in slot 1 */
		slot1_partition: partition@1f800 {
			label = "image-1";
			reg = <0x0001f800 0x00017800>;
		};

		/* Reserve 32 kB for the scratch partition */
		scratch_partition: partition@37000 {
			label = "image-scratch";
			reg = <0x00037000 0x00008000>;
		};

		/* Set 4Kb of storage at the end of the 256Kb of flash */
		storage_partition: partition@3f000 {
			label = "storage";
			reg = <0x0003f000 0x00001000>;
		};

	};
};
