/*
 * Device Tree file for OpenBlocks AX3-4 board
 *
 * Copyright (C) 2012 Marvell
 *
 * 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.
 */

/dts-v1/;
/include/ "armada-xp-mv78260.dtsi"

/ {
	model = "PlatHome OpenBlocks AX3-4 board";
	compatible = "plathome,openblocks-ax3-4", "marvell,armadaxp-mv78260", "marvell,armadaxp", "marvell,armada-370-xp";

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

	memory {
		device_type = "memory";
		reg = <0 0x00000000 0 0xC0000000>; /* 3 GB */
	};

	soc {
		ranges = <0          0 0xd0000000 0x100000	/* Internal registers 1MiB */
			  0xe0000000 0 0xe0000000 0x8100000     /* PCIe */
			  0xf0000000 0 0xf0000000 0x8000000     /* Device Bus, NOR 128MiB   */>;

		internal-regs {
			rtc@10300 {
				/* No crystal connected to the internal RTC */
				status = "disabled";
			};
			serial@12000 {
				clock-frequency = <250000000>;
				status = "okay";
			};
			serial@12100 {
				clock-frequency = <250000000>;
				status = "okay";
			};
			pinctrl {
				led_pins: led-pins-0 {
					marvell,pins = "mpp49", "mpp51", "mpp53";
					marvell,function = "gpio";
				};
			};
			leds {
				compatible = "gpio-leds";
				pinctrl-names = "default";
				pinctrl-0 = <&led_pins>;

				red_led {
					label = "red_led";
					gpios = <&gpio1 17 1>;
					default-state = "off";
				};

				yellow_led {
					label = "yellow_led";
					gpios = <&gpio1 19 1>;
					default-state = "off";
				};

				green_led {
					label = "green_led";
					gpios = <&gpio1 21 1>;
					default-state = "off";
					linux,default-trigger = "heartbeat";
				};
			};

			gpio_keys {
				compatible = "gpio-keys";
				#address-cells = <1>;
				#size-cells = <0>;

				button@1 {
					label = "Init Button";
					linux,code = <116>;
					gpios = <&gpio1 28 0>;
				};
			};

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

				phy1: ethernet-phy@1 {
					reg = <1>;
				};

				phy2: ethernet-phy@2 {
					reg = <2>;
				};

				phy3: ethernet-phy@3 {
					reg = <3>;
				};
			};

			ethernet@70000 {
				status = "okay";
				phy = <&phy0>;
				phy-mode = "sgmii";
			};
			ethernet@74000 {
				status = "okay";
				phy = <&phy1>;
				phy-mode = "sgmii";
			};
			ethernet@30000 {
				status = "okay";
				phy = <&phy2>;
				phy-mode = "sgmii";
			};
			ethernet@34000 {
				status = "okay";
				phy = <&phy3>;
				phy-mode = "sgmii";
			};
			i2c@11000 {
				status = "okay";
				clock-frequency = <400000>;
			};
			i2c@11100 {
				status = "okay";
				clock-frequency = <400000>;

				s35390a: s35390a@30 {
					compatible = "s35390a";
					reg = <0x30>;
				};
			};
			sata@a0000 {
				nr-ports = <2>;
				status = "okay";
			};
			usb@50000 {
				status = "okay";
			};
			usb@51000 {
				status = "okay";
			};

			devbus-bootcs@10400 {
				status = "okay";
				ranges = <0 0xf0000000 0x8000000>; /* @addr 0xf000000, size 0x8000000 */

				/* Device Bus parameters are required */

				/* Read parameters */
				devbus,bus-width    = <16>;
				devbus,turn-off-ps  = <60000>;
				devbus,badr-skew-ps = <0>;
				devbus,acc-first-ps = <124000>;
				devbus,acc-next-ps  = <248000>;
				devbus,rd-setup-ps  = <0>;
				devbus,rd-hold-ps   = <0>;

				/* Write parameters */
				devbus,sync-enable = <0>;
				devbus,wr-high-ps  = <60000>;
				devbus,wr-low-ps   = <60000>;
				devbus,ale-wr-ps   = <60000>;

				/* NOR 128 MiB */
				nor@0 {
					compatible = "cfi-flash";
					reg = <0 0x8000000>;
					bank-width = <2>;
				};
			};

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