/*
 * Copyright (c) 2020 Henrik Brix Andersen <henrik@brixandersen.dk>
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr/dt-bindings/gpio/gpio.h>
#include <mem.h>

/ {
	chosen {
		zephyr,console = &uartlite0;
		zephyr,shell-uart = &uartlite0;
		zephyr,flash = &itcm;
		/* Use DTCM as SRAM by default */
		zephyr,sram = &dtcm;
	};

	aliases {
		led0 = &led_ld4;
		led1 = &led_ld5;
		led2 = &led_ld6;
		led3 = &led_ld7;
		sw0 = &sw0;
		sw1 = &sw1;
		sw2 = &sw2;
		sw3 = &sw3;
		spi-flash0 = &flash0;
	};

	leds {
		compatible = "gpio-leds";
		led_ld0_red: led_ld0_red {
			gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
			label = "LED LD0 RED";
		};
		led_ld0_green: led_ld0_green {
			gpios = <&gpio1 1 GPIO_ACTIVE_HIGH>;
			label = "LED LD0 GREEN";
		};
		led_ld0_blue: led_ld0_blue {
			gpios = <&gpio1 0 GPIO_ACTIVE_HIGH>;
			label = "LED LD0 BLUE";
		};

		led_ld1_red: led_ld1_red {
			gpios = <&gpio1 5 GPIO_ACTIVE_HIGH>;
			label = "LED LD1 RED";
		};
		led_ld1_green: led_ld1_green {
			gpios = <&gpio1 4 GPIO_ACTIVE_HIGH>;
			label = "LED LD1 GREEN";
		};
		led_ld1_blue: led_ld1_blue {
			gpios = <&gpio1 3 GPIO_ACTIVE_HIGH>;
			label = "LED LD1 BLUE";
		};

		led_ld2_red: led_ld2_red {
			gpios = <&gpio1 8 GPIO_ACTIVE_HIGH>;
			label = "LED LD2 RED";
		};
		led_ld2_green: led_ld2_green {
			gpios = <&gpio1 7 GPIO_ACTIVE_HIGH>;
			label = "LED LD2 GREEN";
		};
		led_ld2_blue: led_ld2_blue {
			gpios = <&gpio1 6 GPIO_ACTIVE_HIGH>;
			label = "LED LD2 BLUE";
		};

		led_ld3_red: led_ld3_red {
			gpios = <&gpio1 11 GPIO_ACTIVE_HIGH>;
			label = "LED LD3 RED";
		};
		led_ld3_green: led_ld3_green {
			gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>;
			label = "LED LD3 GREEN";
		};
		led_ld3_blue: led_ld3_blue {
			gpios = <&gpio1 9 GPIO_ACTIVE_HIGH>;
			label = "LED LD3 BLUE";
		};

		led_ld4: led_ld4 {
			gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>;
			label = "LED LD4";
		};
		led_ld5: led_ld5 {
			gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>;
			label = "LED LD5";
		};
		led_ld6: led_ld6 {
			gpios = <&gpio0 2 GPIO_ACTIVE_HIGH>;
			label = "LED LD6";
		};
		led_ld7: led_ld7 {
			gpios = <&gpio0 3 GPIO_ACTIVE_HIGH>;
			label = "LED LD7";
		};
	};

	gpio_keys {
		compatible = "gpio-keys";
		sw0: sw0 {
			gpios = <&gpio0_2 0 GPIO_ACTIVE_HIGH>;
			label = "SW0";
		};
		sw1: sw1 {
			gpios = <&gpio0_2 1 GPIO_ACTIVE_HIGH>;
			label = "SW1";
		};
		sw2: sw2 {
			gpios = <&gpio0_2 2 GPIO_ACTIVE_HIGH>;
			label = "SW2";
		};
		sw3: sw3 {
			gpios = <&gpio0_2 3 GPIO_ACTIVE_HIGH>;
			label = "SW3";
		};
		btn0: btn0 {
			gpios = <&gpio1_2 0 GPIO_ACTIVE_HIGH>;
			label = "BTN0";
		};
		btn1: btn1 {
			gpios = <&gpio1_2 1 GPIO_ACTIVE_HIGH>;
			label = "BTN1";
		};
		btn2: btn2 {
			gpios = <&gpio1_2 2 GPIO_ACTIVE_HIGH>;
			label = "BTN2";
		};
		btn3: btn3 {
			gpios = <&gpio1_2 3 GPIO_ACTIVE_HIGH>;
			label = "BTN3";
		};
	};

	daplink_qspi_mux: daplink_qspi_mux {
		compatible = "arm,daplink-qspi-mux";
		status = "disabled";
		interrupt-parent = <&nvic>;
		interrupts = <7 0>;
		mux-gpios = <&daplink_gpio0 0 GPIO_ACTIVE_HIGH>;
	};

	soc {
		daplink_gpio0: gpio@40010000 {
			compatible = "xlnx,xps-gpio-1.00.a";
			status = "disabled";
			reg = <0x40010000 0x10000>;
			gpio-controller;
			#gpio-cells = <2>;

			xlnx,all-inputs = <0x0>;
			xlnx,all-outputs = <0x0>;
			xlnx,dout-default = <0x0>;
			xlnx,gpio-width = <0x20>;
			xlnx,is-dual = <0x0>;
			xlnx,tri-default = <0xffffffff>;
		};

		daplink_quad_spi0: spi@40020000 {
			compatible = "xlnx,xps-spi-2.00.a";
			status = "disabled";
			reg = <0x40020000 0x10000>;
			interrupts = <4 0>;
			#address-cells = <1>;
			#size-cells = <0>;

			xlnx,num-ss-bits = <0x1>;
			xlnx,num-transfer-bits = <0x8>;
		};

		daplink_single_spi0: spi@40030000 {
			compatible = "xlnx,xps-spi-2.00.a";
			status = "disabled";
			reg = <0x40030000 0x10000>;
			interrupts = <5 0>;
			#address-cells = <1>;
			#size-cells = <0>;

			xlnx,num-ss-bits = <0x1>;
			xlnx,num-transfer-bits = <0x8>;
		};

		uartlite0: uartlite@40100000 {
			compatible = "xlnx,xps-uartlite-1.00.a";
			interrupts = <0 0>;
			reg = <0x40100000 0x10000>;
		};

		gpio0: gpio@40110000 {
			compatible = "xlnx,xps-gpio-1.00.a";
			interrupts = <1 0>;
			reg = <0x40110000 0x10000>;
			gpio-controller;
			#gpio-cells = <2>;

			xlnx,all-inputs = <0x0>;
			xlnx,all-inputs-2 = <0x1>;
			xlnx,all-outputs = <0x0>;
			xlnx,all-outputs-2 = <0x0>;
			xlnx,dout-default = <0x0>;
			xlnx,dout-default-2 = <0x0>;
			xlnx,gpio-width = <0x4>;
			xlnx,gpio2-width = <0x4>;
			xlnx,is-dual = <0x1>;
			xlnx,tri-default = <0xffffffff>;
			xlnx,tri-default-2 = <0xffffffff>;

			gpio0_2: gpio2 {
				compatible = "xlnx,xps-gpio-1.00.a-gpio2";
				gpio-controller;
				#gpio-cells = <2>;
			};
		};

		gpio1: gpio@40120000 {
			compatible = "xlnx,xps-gpio-1.00.a";
			interrupts = <2 0>;
			reg = <0x40120000 0x10000>;
			gpio-controller;
			#gpio-cells = <2>;

			xlnx,all-inputs = <0x0>;
			xlnx,all-inputs-2 = <0x1>;
			xlnx,all-outputs = <0x0>;
			xlnx,all-outputs-2 = <0x0>;
			xlnx,dout-default = <0x0>;
			xlnx,dout-default-2 = <0x0>;
			xlnx,gpio-width = <0xc>;
			xlnx,gpio2-width = <0x4>;
			xlnx,is-dual = <0x1>;
			xlnx,tri-default = <0xffffffff>;
			xlnx,tri-default-2 = <0xffffffff>;

			gpio1_2: gpio2 {
				compatible = "xlnx,xps-gpio-1.00.a-gpio2";
				gpio-controller;
				#gpio-cells = <2>;
			};
		};

		quad_spi0: spi@40130000 {
			compatible = "xlnx,xps-spi-2.00.a";
			reg = <0x40130000 0x10000>;
			interrupts = <3 0>;
			#address-cells = <1>;
			#size-cells = <0>;

			xlnx,num-ss-bits = <0x1>;
			xlnx,num-transfer-bits = <0x8>;

			flash0: flash@0 {
				compatible = "micron,n25q128a","jedec,spi-nor";
				reg = <0>;
				spi-max-frequency = <108000000>;
				size = <DT_SIZE_M(128)>;
				jedec-id = [20 ba 18];

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

					fpga_bitstream_partition: partition@0 {
						label = "fpga_bitstream";
						/* From Xilinx 7 Series FPGA User Guide (UG470)
						 * Table 1-1: Bitstream Length
						 *           Bits    Bytes (sector multiple)
						 * A35T:  17,536,096     0x218000
						 * A100T: 30,606,304     0x3a8000
						 */
						reg = <0x00000000 0x218000>;
					};
				};
			};
		};
	};
};
