// SPDX-License-Identifier: GPL-2.0
/*
 * at91-wb50n.dtsi - Device Tree include file for wb50n cpu module
 *
 *  Copyright (C) 2018 Laird
 *
 */

#include "sama5d31.dtsi"

/ {
	model = "Laird Workgroup Bridge 50N - Atmel SAMA5D";
	compatible = "laird,wb50n", "atmel,sama5d31", "atmel,sama5d3", "atmel,sama5";

	chosen {
		bootargs = "ubi.mtd=6 root=ubi0:rootfs rootfstype=ubifs rw";
		stdout-path = "serial0:115200n8";
	};

	memory {
		reg = <0x20000000 0x4000000>;
	};
};

&pinctrl {
	board {
		pinctrl_mmc0_cd: mmc0_cd {
			atmel,pins = <AT91_PIOC 26 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>; /* PC26 GPIO with pullup deglitch */
		};

		pinctrl_usba_vbus: usba_vbus {
			atmel,pins = <AT91_PIOB 13 AT91_PERIPH_GPIO AT91_PINCTRL_DEGLITCH>; /* PB13 GPIO with deglitch */
		};
	};
};

&slow_xtal {
	clock-frequency = <32768>;
};

&main_xtal {
	clock-frequency = <12000000>;
};

&slow_osc {
	atmel,osc-bypass;
};

&usart1_clk {
	atmel,clk-output-range = <0 132000000>;
};

&mmc0 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_mmc0_clk_cmd_dat0 &pinctrl_mmc0_dat1_3 &pinctrl_mmc0_cd>;
	cd-gpios = <&pioC 26 GPIO_ACTIVE_LOW>;
	slot@0 {
		reg = <0>;
		bus-width = <4>;
	};
};

&mmc1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_mmc1_clk_cmd_dat0 &pinctrl_mmc1_dat1_3>;
	status = "okay";
	atheros@0 {
		compatible = "atheros,ath6kl";
		atheros,board-id = "SD32";
		reg = <0>;
		bus-width = <4>;
	};
};

&macb1 {
	phy-mode = "rmii";
};

&dbgu {
	dmas = <0>, <0>;	/*  Do not use DMA for dbgu */
};

/* On BB40 this port is labeled UART1 */
&usart0 {
	atmel,use-dma-rx;
	atmel,use-dma-tx;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usart0 &pinctrl_usart0_rts_cts>;
};

/* On BB40 this port is labeled UART0 */
&usart1 {
	atmel,use-dma-rx;
	atmel,use-dma-tx;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usart1 &pinctrl_usart1_rts_cts>;
	dtr-gpios = <&pioD 13 GPIO_ACTIVE_LOW>;
	dsr-gpios = <&pioD 11 GPIO_ACTIVE_LOW>;
	dcd-gpios = <&pioD 7 GPIO_ACTIVE_LOW>;
	rng-gpios = <&pioD 8 GPIO_ACTIVE_LOW>;
};

/* USART3 is direct-connect to the Bluetooth UART on the radio SIP */
&usart3 {
	atmel,use-dma-rx;
	atmel,use-dma-tx;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usart3 &pinctrl_usart3_rts_cts>;
	status = "okay";
};

&spi1 {
	cs-gpios = <&pioC 25 0>, <0>, <0>, <0>;
};

&ebi {
	pinctrl-0 = <&pinctrl_ebi_nand_addr>;
	pinctrl-names = "default";
	status = "okay";
};

&nand_controller {
	status = "okay";

	nand: nand@3 {
		reg = <0x3 0x0 0x2>;
		atmel,rb = <0>;
		nand-bus-width = <8>;
		nand-ecc-mode = "hw";
		nand-ecc-strength = <8>;
		nand-ecc-step-size = <512>;
		nand-on-flash-bbt;
		label = "atmel_nand";

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

			at91bootstrap@0 {
				label = "at91bs";
				reg = <0x0 0x20000>;
			};

			uboot@20000 {
				label = "u-boot";
				reg = <0x20000 0x80000>;
			};

			ubootenv@a0000 {
				label = "u-boot-env";
				reg = <0xa0000 0x20000>;
			};

			ubootenv@c0000 {
				label = "u-boot-env";
				reg = <0xc0000 0x20000>;
			};

			kernel-a@e0000 {
				label = "kernel-a";
				reg = <0xe0000 0x500000>;
			};

			kernel-b@5e0000 {
				label = "kernel-b";
				reg = <0x5e0000 0x500000>;
			};

			rootfs-a@ae0000 {
				label = "rootfs-a";
				reg = <0xae0000 0x3000000>;
			};

			rootfs-b@3ae0000 {
				label = "rootfs-b";
				reg = <0x3ae0000 0x3000000>;
			};

			user@6ae0000 {
				label = "user";
				reg = <0x6ae0000 0x14e0000>;
			};
		};
	};
};

&usb0 {
	atmel,vbus-gpio = <&pioB 13 GPIO_ACTIVE_LOW>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usba_vbus>;
};

&usb1 {
	num-ports = <3>;
	atmel,vbus-gpio = <&pioA 2 GPIO_ACTIVE_LOW>;
	atmel,oc-gpio = <&pioA 4 GPIO_ACTIVE_LOW>;
};
