/*
 * T2080QDS Device Tree Source
 *
 * Copyright 2013 - 2015 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.
 */

/include/ "t208xsi-pre.dtsi"
/include/ "t208xqds.dtsi"

/ {
	model = "fsl,T2080QDS";
	compatible = "fsl,T2080QDS";
	#address-cells = <2>;
	#size-cells = <2>;
	interrupt-parent = <&mpic>;

	aliases {
		emi1_slot1 = &t2080mdio2;
		emi1_slot2 = &t2080mdio3;
		emi1_slot3 = &t2080mdio4;
	};

	rio: rapidio@ffe0c0000 {
		reg = <0xf 0xfe0c0000 0 0x11000>;

		port1 {
			ranges = <0 0 0xc 0x20000000 0 0x10000000>;
		};
		port2 {
			ranges = <0 0 0xc 0x30000000 0 0x10000000>;
		};
	};
};

&soc {
	fman@400000 {
		ethernet@e0000 {
			phy-handle = <&phy_sgmii_s3_1e>;
			phy-connection-type = "xgmii";
		};

		ethernet@e2000 {
			phy-handle = <&phy_sgmii_s3_1f>;
			phy-connection-type = "xgmii";
		};

		ethernet@e4000 {
			phy-handle = <&rgmii_phy1>;
			phy-connection-type = "rgmii";
		};

		ethernet@e6000 {
			phy-handle = <&rgmii_phy2>;
			phy-connection-type = "rgmii";
		};

		ethernet@e8000 {
			phy-handle = <&phy_sgmii_s2_1e>;
			phy-connection-type = "sgmii";
		};

		ethernet@ea000 {
			phy-handle = <&phy_sgmii_s2_1d>;
			phy-connection-type = "sgmii";
		};

		ethernet@f0000 {
			phy-handle = <&phy_xaui_slot3>;
			phy-connection-type = "xgmii";
		};

		ethernet@f2000 {
			phy-handle = <&phy_sgmii_s3_1f>;
			phy-connection-type = "xgmii";
		};

		mdio@fd000 {
			phy_xaui_slot3: ethernet-phy@3 {
				compatible = "ethernet-phy-ieee802.3-c45";
				reg = <0x3>;
			};
		};
	};
};

&boardctrl {
	mdio-mux-emi1 {
		compatible = "mdio-mux-mmioreg", "mdio-mux";
		mdio-parent-bus = <&mdio0>;
		#address-cells = <1>;
		#size-cells = <0>;
		reg = <0x54 1>;
		mux-mask = <0xe0>;

		t2080mdio0: mdio@0 {
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0>;

			rgmii_phy1: ethernet-phy@1 {
				reg = <0x1>;
			};
		};

		t2080mdio1: mdio@20 {
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x20>;

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

		t2080mdio2: mdio@40 {
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x40>;
			status = "disabled";

			phy_sgmii_s1_1c: ethernet-phy@1c {
				reg = <0x1c>;
			};

			phy_sgmii_s1_1d: ethernet-phy@1d {
				reg = <0x1d>;
			};

			phy_sgmii_s1_1e: ethernet-phy@1e {
				reg = <0x1e>;
			};

			phy_sgmii_s1_1f: ethernet-phy@1f {
				reg = <0x1f>;
			};
		};

		t2080mdio3: mdio@c0 {
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0xc0>;

			phy_sgmii_s2_1c: ethernet-phy@1c {
				reg = <0x1c>;
			};

			phy_sgmii_s2_1d: ethernet-phy@1d {
				reg = <0x1d>;
			};

			phy_sgmii_s2_1e: ethernet-phy@1e {
				reg = <0x1e>;
			};

			phy_sgmii_s2_1f: ethernet-phy@1f {
				reg = <0x1f>;
			};
		};

		t2080mdio4: mdio@60 {
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x60>;
			status = "disabled";

			phy_sgmii_s3_1c: ethernet-phy@1c {
				reg = <0x1c>;
			};

			phy_sgmii_s3_1d: ethernet-phy@1d {
				reg = <0x1d>;
			};

			phy_sgmii_s3_1e: ethernet-phy@1e {
				reg = <0x1e>;
			};

			phy_sgmii_s3_1f: ethernet-phy@1f {
				reg = <0x1f>;
			};
		};
	};
};

/include/ "t2080si-post.dtsi"
