/*
 * P1010 RDB Device Tree Source stub (no addresses or top-level ranges)
 *
 * Copyright 2011 Freescale Semiconductor Inc.
 *
 * 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 Freescale Semiconductor nor the
 *       names of its contributors may be used to endorse or promote products
 *       derived from this software without specific prior written permission.
 *
 *
 * ALTERNATIVELY, this software may be distributed under the terms of the
 * GNU General Public License ("GPL") as published by the Free Software
 * Foundation, either version 2 of that License or (at your option) any
 * later version.
 *
 * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``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 Freescale Semiconductor 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.
 */

&board_ifc {
	nor@0,0 {
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "cfi-flash";
		reg = <0x0 0x0 0x2000000>;
		bank-width = <2>;
		device-width = <1>;

		partition@40000 {
			/* 256KB for DTB Image */
			reg = <0x00040000 0x00040000>;
			label = "NOR DTB Image";
		};

		partition@80000 {
			/* 7 MB for Linux Kernel Image */
			reg = <0x00080000 0x00700000>;
			label = "NOR Linux Kernel Image";
		};

		partition@800000 {
			/* 20MB for JFFS2 based Root file System */
			reg = <0x00800000 0x01400000>;
			label = "NOR JFFS2 Root File System";
		};

		partition@1f00000 {
			/* This location must not be altered  */
			/* 512KB for u-boot Bootloader Image */
			/* 512KB for u-boot Environment Variables */
			reg = <0x01f00000 0x00100000>;
			label = "NOR U-Boot Image";
			read-only;
		};
	};

	ifc_nand: nand@1,0 {
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "fsl,ifc-nand";
		reg = <0x1 0x0 0x10000>;
	};

	cpld@3,0 {
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "fsl,p1010rdb-cpld";
		reg = <0x3 0x0 0x0000020>;
		bank-width = <1>;
		device-width = <1>;
	};
};

&board_soc {
	i2c@3000 {
		eeprom@50 {
			compatible = "st,24c256", "atmel,24c256";
			reg = <0x50>;
		};

		rtc@68 {
			compatible = "pericom,pt7c4338";
			reg = <0x68>;
		};
	};

	i2c@3100 {
		eeprom@52 {
			compatible = "atmel,24c01";
			reg = <0x52>;
		};
	};

	spi@7000 {
		flash@0 {
			#address-cells = <1>;
			#size-cells = <1>;
			compatible = "spansion,s25sl12801", "jedec,spi-nor";
			reg = <0>;
			spi-max-frequency = <40000000>;

			partition@0 {
				/* 1MB for u-boot Bootloader Image */
				/* 1MB for Environment */
				reg = <0x0 0x00100000>;
				label = "SPI Flash U-Boot Image";
				read-only;
			};

			partition@100000 {
				/* 512KB for DTB Image */
				reg = <0x00100000 0x00080000>;
				label = "SPI Flash DTB Image";
			};

			partition@180000 {
				/* 4MB for Linux Kernel Image */
				reg = <0x00180000 0x00400000>;
				label = "SPI Flash Linux Kernel Image";
			};

			partition@580000 {
				/* 4MB for Compressed RFS Image */
				reg = <0x00580000 0x00400000>;
				label = "SPI Flash Compressed RFSImage";
			};

			partition@980000 {
				/* 6.5MB for JFFS2 based RFS */
				reg = <0x00980000 0x00680000>;
				label = "SPI Flash JFFS2 RFS";
			};
		};
	};

	usb@22000 {
		phy_type = "utmi";
		dr_mode = "host";
	};

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

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

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

		tbi-phy@3 {
			device_type = "tbi-phy";
			reg = <0x3>;
		};
	};

	mdio@25000 {
		tbi0: tbi-phy@11 {
			reg = <0x11>;
			device_type = "tbi-phy";
		};
	};

	mdio@26000 {
		tbi1: tbi-phy@11 {
			reg = <0x11>;
			device_type = "tbi-phy";
		};
	};

	ptp_clock@b0e00 {
		compatible = "fsl,etsec-ptp";
		reg = <0xb0e00 0xb0>;
		interrupts = <68 2 0 0 69 2 0 0>;
		fsl,tclk-period	= <10>;
		fsl,tmr-prsc	= <2>;
		fsl,tmr-add	= <0x80000016>;
		fsl,tmr-fiper1	= <999999990>;
		fsl,tmr-fiper2	= <99990>;
		fsl,max-adj	= <199999999>;
	};

	enet0: ethernet@b0000 {
		phy-handle = <&phy0>;
		phy-connection-type = "rgmii-id";
	};

	enet1: ethernet@b1000 {
		phy-handle = <&phy1>;
		tbi-handle = <&tbi0>;
		phy-connection-type = "sgmii";
	};

	enet2: ethernet@b2000 {
		phy-handle = <&phy2>;
		tbi-handle = <&tbi1>;
		phy-connection-type = "sgmii";
	};
};

&pci0 {
	pcie@0 {
		interrupt-map = <
			/* IDSEL 0x0 */
			/*
			 *irq[4:5] are active-high
			 *irq[6:7] are active-low
			 */
			0000 0x0 0x0 0x1 &mpic 0x4 0x2 0x0 0x0
			0000 0x0 0x0 0x2 &mpic 0x5 0x2 0x0 0x0
			0000 0x0 0x0 0x3 &mpic 0x6 0x1 0x0 0x0
			0000 0x0 0x0 0x4 &mpic 0x7 0x1 0x0 0x0
			>;
	};
};
