/*
 *  BSD LICENSE
 *
 *  Copyright(c) 2016 Broadcom.  All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions
 *  are met:
 *
 *    * Redistributions of source code must retain the above copyright
 *      notice, this list of conditions and the following disclaimer.
 *    * Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in
 *      the documentation and/or other materials provided with the
 *      distribution.
 *    * Neither the name of Broadcom Corporation nor the names of its
 *      contributors may be used to endorse or promote products derived
 *      from this software without specific prior written permission.
 *
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/dts-v1/;

#include "ns2.dtsi"

/ {
	model = "Broadcom NS2 XMC";
	compatible = "brcm,ns2-xmc", "brcm,ns2";

	aliases {
		serial0 = &uart3;
	};

	chosen {
		stdout-path = "serial0:115200n8";
		bootargs = "earlycon=uart8250,mmio32,0x66130000";
	};

	memory {
		device_type = "memory";
		reg = <0x00000000 0x80000000 0x00000001 0x00000000>;
	};
};

&enet {
	status = "okay";
};

&i2c0 {
	status = "okay";
};

&i2c1 {
	status = "okay";
};

&mdio_mux_iproc {
	mdio@10 {
		gphy0: eth-phy@10 {
			reg = <0x10>;
		};
	};
};

&nand {
	nandcs@0 {
		compatible = "brcm,nandcs";
		reg = <0>;
		nand-ecc-mode = "hw";
		nand-ecc-strength = <8>;
		nand-ecc-step-size = <512>;
		nand-bus-width = <16>;
		brcm,nand-oob-sector-size = <16>;
		#address-cells = <1>;
		#size-cells = <1>;

		partition@0 {
			label = "nboot";
			reg = <0x00000000 0x00280000>; /*  2.5MB */
			read-only;
		};

		partition@280000 {
			label = "nenv";
			reg = <0x00280000 0x00040000>; /* 0.25MB */
			read-only;
		};

		partition@2c0000 {
			label = "ndtb";
			reg = <0x002c0000 0x00040000>; /* 0.25MB */
			read-only;
		};

		partition@300000 {
			label = "nsystem";
			reg = <0x00300000 0x03d00000>; /*   61MB */
			read-only;
		};

		partition@4000000 {
			label = "nrootfs";
			reg = <0x04000000 0x06400000>; /*  100MB */
		};

		partition@a400000{
			label = "ncustfs";
			reg = <0x0a400000 0x35c00000>; /*  860MB */
		};
	};
};

&pci_phy0 {
	status = "okay";
};

&pcie0 {
	status = "okay";
};

&pcie8 {
	status = "okay";
};

&sata_phy0 {
	status = "okay";
};

&sata_phy1 {
	status = "okay";
};

&sata {
	status = "okay";
};

&qspi {
	flash: flash@0 {
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "m25p80";
		spi-max-frequency = <62500000>;
		m25p,default-addr-width = <3>;
		reg = <0x0 0x0>;

		partition@0 {
			label = "bl0";
			reg = <0x00000000 0x00080000>; /*  512KB */
		};

		partition@80000 {
			label = "fip";
			reg = <0x00080000 0x00150000>; /* 1344KB */
		};

		partition@1e0000 {
			label = "env";
			reg = <0x001e0000 0x00010000>;/*    64KB */
		};

		partition@1f0000 {
			label = "dtb";
			reg = <0x001f0000 0x00010000>; /*   64KB */
		};

		partition@200000 {
			label = "kernel";
			reg = <0x00200000 0x00e00000>; /*   14MB */
		};

		partition@1000000 {
			label = "rootfs";
			reg = <0x01000000 0x01000000>; /*   16MB */
		};
	};
};

&uart3 {
	status = "okay";
};
