/*
 * Marvell 88F6281 GTW GE Board
 *
 * Lennert Buytenhek <buytenh@marvell.com>
 * Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
 *
 * This file is licensed under the terms of the GNU General Public
 * License version 2.  This program is licensed "as is" without any
 * warranty of any kind, whether express or implied.
 *
 * This file contains the definitions that are common between the 6281
 * and 6282 variants of the Marvell Kirkwood Development Board.
 */

/dts-v1/;

#include "kirkwood.dtsi"
#include "kirkwood-6281.dtsi"

/ {
	model = "Marvell 88F6281 GTW GE Board";
	compatible = "marvell,mv88f6281gtw-ge", "marvell,kirkwood-88f6281", "marvell,kirkwood";

	memory {
		device_type = "memory";
		reg = <0x00000000 0x20000000>; /* 512 MB */
	};

	chosen {
		bootargs = "console=ttyS0,115200n8 earlyprintk";
		stdout-path = &uart0;
	};

	mbus {
		pcie-controller {
			status = "okay";

			pcie@1,0 {
				status = "okay";
			};
		};
        };

	ocp@f1000000 {
		pin-controller@10000 {
			pmx_usb_led: pmx-usb-led {
				marvell,pins = "mpp12";
				marvell,function = "gpo";
			};

			pmx_leds: pmx-leds {
				marvell,pins = "mpp20", "mpp21";
				marvell,function = "gpio";
			};

			pmx_keys: pmx-keys {
				marvell,pins = "mpp46", "mpp47";
				marvell,function = "gpio";
			};
		};

		spi@10600 {
			status = "okay";

			flash@0 {
				#address-cells = <1>;
				#size-cells = <1>;
				compatible = "mxicy,mx25l12805d", "jedec,spi-nor";
				reg = <0>;
				spi-max-frequency = <50000000>;
				mode = <0>;
			};
		};

		serial@12000 {
			status = "okay";
		};

		ehci@50000 {
			status = "okay";
		};
	};

	gpio-leds {
		compatible = "gpio-leds";
		pinctrl-0 = <&pmx_leds &pmx_usb_led>;
		pinctrl-names = "default";

		green-status {
			label = "gtw:green:Status";
			gpios = <&gpio0 20 GPIO_ACTIVE_HIGH>;
		};

		red-status {
			label = "gtw:red:Status";
			gpios = <&gpio0 21 GPIO_ACTIVE_HIGH>;
		};

		green-usb {
			label = "gtw:green:USB";
			gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>;
		};
	};

	gpio_keys {
		compatible = "gpio-keys";
		#address-cells = <1>;
		#size-cells = <0>;
		pinctrl-0 = <&pmx_keys>;
		pinctrl-names = "default";

		button@1 {
			label = "SWR Button";
			linux,code = <KEY_RESTART>;
			gpios = <&gpio1 15 GPIO_ACTIVE_LOW>;
		};
		button@2 {
			label = "WPS Button";
			linux,code = <KEY_WPS_BUTTON>;
			gpios = <&gpio1 14 GPIO_ACTIVE_LOW>;
		};
	};

	dsa@0 {
		compatible = "marvell,dsa";
		#address-cells = <1>;
		#size-cells = <0>;

		dsa,ethernet = <&eth0port>;
		dsa,mii-bus = <&mdio>;

		switch@0 {
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0 0>;	/* MDIO address 0, switch 0 in tree */

			port@0 {
				reg = <0>;
				label = "lan1";
			};

			port@1 {
				reg = <1>;
				label = "lan2";
			};

			port@2 {
				reg = <2>;
				label = "lan3";
			};

			port@3 {
				reg = <3>;
				label = "lan4";
			};

			port@4 {
				reg = <4>;
				label = "wan";
			};

			port@5 {
				reg = <5>;
				label = "cpu";
			};
		};
	};
};

&mdio {
	status = "okay";
};

&eth0 {
	status = "okay";

	ethernet0-port@0 {
		speed = <1000>;
		duplex = <1>;
	};
};
