/*
 * Device Tree Source for the Socrates board (MPC8544).
 *
 * Copyright (c) 2008 Emcraft Systems.
 * Sergei Poselenov, <sposelenov@emcraft.com>
 *
 * This program is free software; you can redistribute  it and/or modify it
 * under  the terms of  the GNU General  Public License as published by the
 * Free Software Foundation;  either version 2 of the  License, or (at your
 * option) any later version.
 */

/dts-v1/;

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

	aliases {
		ethernet0 = &enet0;
		ethernet1 = &enet1;
		serial0 = &serial0;
		serial1 = &serial1;
		pci0 = &pci0;
	};

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

		PowerPC,8544@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>;
			bus-frequency = <0>;
			clock-frequency = <0>;
			next-level-cache = <&L2>;
		};
	};

	memory {
		device_type = "memory";
		reg = <0x00000000 0x00000000>;	// Filled in by U-Boot
	};

	soc8544@e0000000 {
		#address-cells = <1>;
		#size-cells = <1>;
		device_type = "soc";

		ranges = <0x00000000 0xe0000000 0x00100000>;
		bus-frequency = <0>;		// Filled in by U-Boot
		compatible = "fsl,mpc8544-immr", "simple-bus";

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

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

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

		L2: l2-cache-controller@20000 {
			compatible = "fsl,mpc8544-l2-cache-controller";
			reg = <0x20000 0x1000>;
			cache-line-size = <32>;
			cache-size = <0x40000>;	// L2, 256K
			interrupt-parent = <&mpic>;
			interrupts = <16 2>;
		};

		i2c@3000 {
			#address-cells = <1>;
			#size-cells = <0>;
			cell-index = <0>;
			compatible = "fsl,mpc8544-i2c", "fsl-i2c";
			reg = <0x3000 0x100>;
			interrupts = <43 2>;
			interrupt-parent = <&mpic>;
			fsl,preserve-clocking;

			dtt@28 {
				compatible = "winbond,w83782d";
				reg = <0x28>;
			};
			rtc@32 {
				compatible = "epson,rx8025";
				reg = <0x32>;
				interrupts = <7 1>;
				interrupt-parent = <&mpic>;
			};
			dtt@4c {
				compatible = "dallas,ds75";
				reg = <0x4c>;
			};
			ts@4a {
				compatible = "ti,tsc2003";
				reg = <0x4a>;
				interrupt-parent = <&mpic>;
				interrupts = <8 1>;
			};
		};

		i2c@3100 {
			#address-cells = <1>;
			#size-cells = <0>;
			cell-index = <1>;
			compatible = "fsl,mpc8544-i2c", "fsl-i2c";
			reg = <0x3100 0x100>;
			interrupts = <43 2>;
			interrupt-parent = <&mpic>;
			fsl,preserve-clocking;
		};

		enet0: ethernet@24000 {
			#address-cells = <1>;
			#size-cells = <1>;
			cell-index = <0>;
			device_type = "network";
			model = "eTSEC";
			compatible = "gianfar";
			reg = <0x24000 0x1000>;
			ranges = <0x0 0x24000 0x1000>;
			local-mac-address = [ 00 00 00 00 00 00 ];
			interrupts = <29 2 30 2 34 2>;
			interrupt-parent = <&mpic>;
			phy-handle = <&phy0>;
			tbi-handle = <&tbi0>;
			phy-connection-type = "rgmii-id";

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

				phy0: ethernet-phy@0 {
					interrupt-parent = <&mpic>;
					interrupts = <0 1>;
					reg = <0>;
				};
				phy1: ethernet-phy@1 {
					interrupt-parent = <&mpic>;
					interrupts = <0 1>;
					reg = <1>;
				};
				tbi0: tbi-phy@11 {
					reg = <0x11>;
				};
			};
		};

		enet1: ethernet@26000 {
			#address-cells = <1>;
			#size-cells = <1>;
			cell-index = <1>;
			device_type = "network";
			model = "eTSEC";
			compatible = "gianfar";
			reg = <0x26000 0x1000>;
			ranges = <0x0 0x26000 0x1000>;
			local-mac-address = [ 00 00 00 00 00 00 ];
			interrupts = <31 2 32 2 33 2>;
			interrupt-parent = <&mpic>;
			phy-handle = <&phy1>;
			tbi-handle = <&tbi1>;
			phy-connection-type = "rgmii-id";

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

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

		serial0: serial@4500 {
			cell-index = <0>;
			device_type = "serial";
			compatible = "ns16550";
			reg = <0x4500 0x100>;
			clock-frequency = <0>;
			interrupts = <42 2>;
			interrupt-parent = <&mpic>;
		};

		serial1: serial@4600 {
			cell-index = <1>;
			device_type = "serial";
			compatible = "ns16550";
			reg = <0x4600 0x100>;
			clock-frequency = <0>;
			interrupts = <42 2>;
			interrupt-parent = <&mpic>;
		};

		global-utilities@e0000 {	//global utilities block
			compatible = "fsl,mpc8548-guts";
			reg = <0xe0000 0x1000>;
			fsl,has-rstcr;
		};

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


	localbus {
		compatible = "fsl,mpc8544-localbus",
		             "fsl,pq3-localbus",
			     "simple-bus";
		#address-cells = <2>;
		#size-cells = <1>;
		reg = <0xe0005000 0x40>;

		ranges = <0 0 0xfc000000 0x04000000
			  2 0 0xc8000000 0x04000000
			  3 0 0xc0000000 0x00100000
			>; /* Overwritten by U-Boot */

		nor_flash@0,0 {
			compatible = "amd,s29gl256n", "cfi-flash";
			bank-width = <2>;
			reg = <0x0 0x000000 0x4000000>;
			#address-cells = <1>;
			#size-cells = <1>;
			partition@0 {
				label = "kernel";
				reg = <0x0 0x1e0000>;
				read-only;
			};
			partition@1e0000 {
				label = "dtb";
				reg = <0x1e0000 0x20000>;
			};
			partition@200000 {
				label = "root";
				reg = <0x200000 0x200000>;
			};
			partition@400000 {
				label = "user";
				reg = <0x400000 0x3b80000>;
			};
			partition@3f80000 {
				label = "env";
				reg = <0x3f80000 0x40000>;
				read-only;
			};
			partition@3fc0000 {
				label = "u-boot";
				reg = <0x3fc0000 0x40000>;
				read-only;
			};
		};

		display@2,0 {
			compatible = "fujitsu,lime";
			reg = <2 0x0 0x4000000>;
			interrupt-parent = <&mpic>;
			interrupts = <6 1>;
		};

		fpga_pic: fpga-pic@3,10 {
			compatible = "abb,socrates-fpga-pic";
			reg = <3 0x10 0x10>;
			interrupt-controller;
			/* IRQs 2, 10, 11, active low, level-sensitive */
			interrupts = <2 1 10 1 11 1>;
			interrupt-parent = <&mpic>;
			#interrupt-cells = <3>;
		};

		spi@3,60 {
			compatible = "abb,socrates-spi";
			reg = <3 0x60 0x10>;
			interrupts = <8 4 0>;	// number, type, routing
			interrupt-parent = <&fpga_pic>;
		};

		nand@3,70 {
			compatible = "abb,socrates-nand";
			reg = <3 0x70 0x04>;
			bank-width = <1>;
			#address-cells = <1>;
			#size-cells = <1>;
			data@0 {
				label = "data";
				reg = <0x0 0x40000000>;
			};
		};

		can@3,100 {
			compatible = "philips,sja1000";
			reg = <3 0x100 0x80>;
			interrupts = <2 8 1>;	// number, type, routing
			interrupt-parent = <&fpga_pic>;
		};
	};

	pci0: pci@e0008000 {
		#interrupt-cells = <1>;
		#size-cells = <2>;
		#address-cells = <3>;
		compatible = "fsl,mpc8540-pci";
		device_type = "pci";
		reg = <0xe0008000 0x1000>;
		clock-frequency = <66666666>;

		interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
		interrupt-map = <
				/* IDSEL 0x11 */
				 0x8800 0x0 0x0 1 &mpic 5 1
				/* IDSEL 0x12 */
				 0x9000 0x0 0x0 1 &mpic 4 1>;
		interrupt-parent = <&mpic>;
		interrupts = <24 2>;
		bus-range = <0x0 0x0>;
		ranges = <0x02000000 0x0 0x80000000 0x80000000 0x0 0x20000000
			  0x01000000 0x0 0x00000000 0xe2000000 0x0 0x01000000>;
	};

};
