/*
 * 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>;
					device_type = "ethernet-phy";
				};

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

				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>;
					device_type = "ethernet-phy";
				};
			};

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