/*
 *  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 = <0x000000000 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";
};
