/*
 * Device Tree file for Globalscale Mirabox
 *
 * Gregory CLEMENT <gregory.clement@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.
 */

/dts-v1/;
#include <dt-bindings/gpio/gpio.h>
#include "armada-370.dtsi"

/ {
	model = "Globalscale Mirabox";
	compatible = "globalscale,mirabox", "marvell,armada370", "marvell,armada-370-xp";

	chosen {
		bootargs = "console=ttyS0,115200 earlyprintk";
	};

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

	soc {
		ranges = <MBUS_ID(0xf0, 0x01) 0 0xd0000000 0x100000
			  MBUS_ID(0x01, 0xe0) 0 0xfff00000 0x100000>;

		pcie-controller {
			status = "okay";

			/* Internal mini-PCIe connector */
			pcie@1,0 {
				/* Port 0, Lane 0 */
				status = "okay";
			};

			/* Connected on the PCB to a USB 3.0 XHCI controller */
			pcie@2,0 {
				/* Port 1, Lane 0 */
				status = "okay";
			};
		};

		internal-regs {
			serial@12000 {
				clock-frequency = <200000000>;
				status = "okay";
			};
			timer@20300 {
				clock-frequency = <600000000>;
				status = "okay";
			};

			pinctrl {
				pwr_led_pin: pwr-led-pin {
					marvell,pins = "mpp63";
					marvell,function = "gpo";
				};

				stat_led_pins: stat-led-pins {
					marvell,pins = "mpp64", "mpp65";
					marvell,function = "gpio";
				};
			};

			gpio_leds {
				compatible = "gpio-leds";
				pinctrl-names = "default";
				pinctrl-0 = <&pwr_led_pin &stat_led_pins>;

				green_pwr_led {
					label = "mirabox:green:pwr";
					gpios = <&gpio1 31 GPIO_ACTIVE_LOW>;
					default-state = "keep";
				};

				blue_stat_led {
					label = "mirabox:blue:stat";
					gpios = <&gpio2 0 GPIO_ACTIVE_LOW>;
					default-state = "off";
				};

				green_stat_led {
					label = "mirabox:green:stat";
					gpios = <&gpio2 1 GPIO_ACTIVE_LOW>;
					default-state = "off";
				};
			};

			mdio {
				phy0: ethernet-phy@0 {
					reg = <0>;
				};

				phy1: ethernet-phy@1 {
					reg = <1>;
				};
			};
			ethernet@70000 {
				status = "okay";
				phy = <&phy0>;
				phy-mode = "rgmii-id";
			};
			ethernet@74000 {
				status = "okay";
				phy = <&phy1>;
				phy-mode = "rgmii-id";
			};

			mvsdio@d4000 {
				pinctrl-0 = <&sdio_pins3>;
				pinctrl-names = "default";
				status = "okay";
				/*
				 * No CD or WP GPIOs: SDIO interface used for
				 * Wifi/Bluetooth chip
				 */
				 broken-cd;
			};

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

			usb@51000 {
				status = "okay";
			};

			i2c@11000 {
				status = "okay";
				clock-frequency = <100000>;
				pca9505: pca9505@25 {
					compatible = "nxp,pca9505";
					gpio-controller;
					#gpio-cells = <2>;
					reg = <0x25>;
				};
			};

			nand@d0000 {
				status = "okay";
				num-cs = <1>;
				marvell,nand-keep-config;
				marvell,nand-enable-arbiter;
				nand-on-flash-bbt;

				partition@0 {
					label = "U-Boot";
					reg = <0 0x400000>;
				};
				partition@400000 {
					label = "Linux";
					reg = <0x400000 0x400000>;
				};
				partition@800000 {
					label = "Filesystem";
					reg = <0x800000 0x3f800000>;
				};
			};
		};
	};
};
