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