/*
 * Device Tree Source for Emerson KSI8560
 *
 * Author: Alexandr Smirnov <asmirnov@ru.mvista.com>
 *
 * Based on mpc8560ads.dts
 *
 * 2008 (c) MontaVista, Software, Inc.  This file is licensed under
 * the terms of the GNU General Public License version 2.  This program
 * is licensed "as is" without any warranty of any kind, whether express
 * or implied.
 *
 */

/dts-v1/;

/ {
	model = "KSI8560";
	compatible = "emerson,KSI8560";
	#address-cells = <1>;
	#size-cells = <1>;

	aliases {
		ethernet0 = &enet0;
		ethernet1 = &enet1;
		ethernet2 = &enet2;
	};

	cpus {
		#address-cells = <1>;
		#size-cells = <0>;

		PowerPC,8560@0 {
			device_type = "cpu";
			reg = <0>;
			d-cache-line-size = <32>;
			i-cache-line-size = <32>;
			d-cache-size = <0x8000>;		/* L1, 32K */
			i-cache-size = <0x8000>;		/* L1, 32K */
			timebase-frequency = <0>;		/* From U-boot */
			bus-frequency = <0>;			/* From U-boot */
			clock-frequency = <0>;			/* From U-boot */
			next-level-cache = <&L2>;
		};
	};

	memory {
		device_type = "memory";
		reg = <0x00000000 0x10000000>;			/* Fixed by bootwrapper */
	};

	soc@fdf00000 {
		#address-cells = <1>;
		#size-cells = <1>;
		device_type = "soc";
		ranges = <0x00000000 0xfdf00000 0x00100000>;
		bus-frequency = <0>;				/* Fixed by bootwrapper */

		ecm-law@0 {
			compatible = "fsl,ecm-law";
			reg = <0x0 0x1000>;
			fsl,num-laws = <8>;
		};

		ecm@1000 {
			compatible = "fsl,mpc8560-ecm", "fsl,ecm";
			reg = <0x1000 0x1000>;
			interrupts = <17 2>;
			interrupt-parent = <&mpic>;
		};

		memory-controller@2000 {
			compatible = "fsl,mpc8540-memory-controller";
			reg = <0x2000 0x1000>;
			interrupt-parent = <&mpic>;
			interrupts = <0x12 0x2>;
		};

		L2: l2-cache-controller@20000 {
			compatible = "fsl,mpc8540-l2-cache-controller";
			reg = <0x20000 0x1000>;
			cache-line-size = <0x20>;		/* 32 bytes */
			cache-size = <0x40000>;			/* L2, 256K */
			interrupt-parent = <&mpic>;
			interrupts = <0x10 0x2>;
		};

		i2c@3000 {
			#address-cells = <1>;
			#size-cells = <0>;
			cell-index = <0>;
			compatible = "fsl-i2c";
			reg = <0x3000 0x100>;
			interrupts = <0x2b 0x2>;
			interrupt-parent = <&mpic>;
			dfsrr;
		};

		dma@21300 {
			#address-cells = <1>;
			#size-cells = <1>;
			compatible = "fsl,mpc8560-dma", "fsl,eloplus-dma";
			reg = <0x21300 0x4>;
			ranges = <0x0 0x21100 0x200>;
			cell-index = <0>;
			dma-channel@0 {
				compatible = "fsl,mpc8560-dma-channel",
						"fsl,eloplus-dma-channel";
				reg = <0x0 0x80>;
				cell-index = <0>;
				interrupt-parent = <&mpic>;
				interrupts = <20 2>;
			};
			dma-channel@80 {
				compatible = "fsl,mpc8560-dma-channel",
						"fsl,eloplus-dma-channel";
				reg = <0x80 0x80>;
				cell-index = <1>;
				interrupt-parent = <&mpic>;
				interrupts = <21 2>;
			};
			dma-channel@100 {
				compatible = "fsl,mpc8560-dma-channel",
						"fsl,eloplus-dma-channel";
				reg = <0x100 0x80>;
				cell-index = <2>;
				interrupt-parent = <&mpic>;
				interrupts = <22 2>;
			};
			dma-channel@180 {
				compatible = "fsl,mpc8560-dma-channel",
						"fsl,eloplus-dma-channel";
				reg = <0x180 0x80>;
				cell-index = <3>;
				interrupt-parent = <&mpic>;
				interrupts = <23 2>;
			};
		};

		enet0: ethernet@24000 {
			#address-cells = <1>;
			#size-cells = <1>;
			device_type = "network";
			model = "TSEC";
			compatible = "gianfar";
			reg = <0x24000 0x1000>;
			ranges = <0x0 0x24000 0x1000>;
			/* Mac address filled in by bootwrapper */
			local-mac-address = [ 00 00 00 00 00 00 ];
			interrupts = <0x1d 0x2 0x1e 0x2 0x22 0x2>;
			interrupt-parent = <&mpic>;
			tbi-handle = <&tbi0>;
			phy-handle = <&PHY1>;

			mdio@520 {					/* For TSECs */
				#address-cells = <1>;
				#size-cells = <0>;
				compatible = "fsl,gianfar-mdio";
				reg = <0x520 0x20>;

				PHY1: ethernet-phy@1 {
					interrupt-parent = <&mpic>;
					reg = <0x1>;
				};

				PHY2: ethernet-phy@2 {
					interrupt-parent = <&mpic>;
					reg = <0x2>;
				};

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

		enet1: ethernet@25000 {
			#address-cells = <1>;
			#size-cells = <1>;
			device_type = "network";
			model = "TSEC";
			compatible = "gianfar";
			reg = <0x25000 0x1000>;
			ranges = <0x0 0x25000 0x1000>;
			/* Mac address filled in by bootwrapper */
			local-mac-address = [ 00 00 00 00 00 00 ];
			interrupts = <0x23 0x2 0x24 0x2 0x28 0x2>;
			interrupt-parent = <&mpic>;
			tbi-handle = <&tbi1>;
			phy-handle = <&PHY2>;

			mdio@520 {
				#address-cells = <1>;
				#size-cells = <0>;
				compatible = "fsl,gianfar-tbi";
				reg = <0x520 0x20>;

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

		mpic: pic@40000 {
			#address-cells = <0>;
			#interrupt-cells = <2>;
			interrupt-controller;
			reg = <0x40000 0x40000>;
			device_type = "open-pic";
		};

		cpm@919c0 {
			#address-cells = <1>;
			#size-cells = <1>;
			compatible = "fsl,mpc8560-cpm", "fsl,cpm2";
			reg = <0x919c0 0x30>;
			ranges;

			muram@80000 {
				#address-cells = <1>;
				#size-cells = <1>;
				ranges = <0x0 0x80000 0x10000>;

				data@0 {
					compatible = "fsl,cpm-muram-data";
					reg = <0x0 0x4000 0x9000 0x2000>;
				};
			};

			brg@919f0 {
				compatible = "fsl,mpc8560-brg",
					     "fsl,cpm2-brg",
					     "fsl,cpm-brg";
				reg = <0x919f0 0x10 0x915f0 0x10>;
				clock-frequency = <165000000>;	/* 166MHz */
			};

			CPMPIC: pic@90c00 {
				#address-cells = <0>;
				#interrupt-cells = <2>;
				interrupt-controller;
				interrupts = <0x2e 0x2>;
				interrupt-parent = <&mpic>;
				reg = <0x90c00 0x80>;
				compatible = "fsl,mpc8560-cpm-pic", "fsl,cpm2-pic";
			};

			serial@91a00 {
				device_type = "serial";
				compatible = "fsl,mpc8560-scc-uart",
					     "fsl,cpm2-scc-uart";
				reg = <0x91a00 0x20 0x88000 0x100>;
				fsl,cpm-brg = <1>;
				fsl,cpm-command = <0x800000>;
				current-speed = <0x1c200>;
				interrupts = <0x28 0x8>;
				interrupt-parent = <&CPMPIC>;
			};

			serial@91a20 {
				device_type = "serial";
				compatible = "fsl,mpc8560-scc-uart",
					     "fsl,cpm2-scc-uart";
				reg = <0x91a20 0x20 0x88100 0x100>;
				fsl,cpm-brg = <2>;
				fsl,cpm-command = <0x4a00000>;
				current-speed = <0x1c200>;
				interrupts = <0x29 0x8>;
				interrupt-parent = <&CPMPIC>;
			};

			mdio@90d00 {				/* For FCCs */
				#address-cells = <1>;
				#size-cells = <0>;
				compatible = "fsl,cpm2-mdio-bitbang";
				reg = <0x90d00 0x14>;
				fsl,mdio-pin = <24>;
				fsl,mdc-pin = <25>;

				PHY0: ethernet-phy@0 {
					interrupt-parent = <&mpic>;
					reg = <0x0>;
				};
			};

			enet2: ethernet@91300 {
				device_type = "network";
				compatible = "fsl,mpc8560-fcc-enet",
					     "fsl,cpm2-fcc-enet";
				reg = <0x91300 0x20 0x88400 0x100 0x91390 0x1>;
				/* Mac address filled in by bootwrapper */
				local-mac-address = [ 00 00 00 00 00 00 ];
				fsl,cpm-command = <0x12000300>;
				interrupts = <0x20 0x8>;
				interrupt-parent = <&CPMPIC>;
				phy-handle = <&PHY0>;
			};
		};
	};

	localbus@fdf05000 {
		#address-cells = <2>;
		#size-cells = <1>;
		compatible = "fsl,mpc8560-localbus", "simple-bus";
		reg = <0xfdf05000 0x68>;

		ranges = <0x0 0x0 0xe0000000 0x00800000
			  0x4 0x0 0xe8080000 0x00080000>;

		flash@0,0 {
			#address-cells = <1>;
			#size-cells = <1>;
			compatible = "jedec-flash";
			reg = <0x0 0x0 0x800000>;
			bank-width = <0x2>;

			partition@0 {
				label = "Primary Kernel";
				reg = <0x0 0x180000>;
			};
			partition@180000 {
				label = "Primary Filesystem";
				reg = <0x180000 0x580000>;
			};
			partition@700000 {
				label = "Monitor";
				reg = <0x300000 0x100000>;
				read-only;
			};
		};

		cpld@4,0 {
			compatible = "emerson,KSI8560-cpld";
			reg = <0x4 0x0 0x80000>;
		};
	};


	chosen {
		linux,stdout-path = "/soc/cpm/serial@91a00";
	};
};
