/*
 * Device Tree Source for IBM Holly (PPC 750CL with TSI controller)
 * Copyright 2007, IBM Corporation
 *
 * Stephen Winiecki <stevewin@us.ibm.com>
 * Josh Boyer <jwboyer@linux.vnet.ibm.com>
 *
 * 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.
 */

/ {
	model = "41K7339";
	compatible = "ibm,holly";
	#address-cells = <1>;
	#size-cells = <1>;

	cpus {
		#address-cells = <1>;
		#size-cells =<0>;
		PowerPC,750CL@0 {
			device_type = "cpu";
			reg = <0>;
			d-cache-line-size = <20>;
			i-cache-line-size = <20>;
			d-cache-size = <8000>;
			i-cache-size = <8000>;
			d-cache-sets = <80>;
			i-cache-sets = <80>;
			timebase-frequency = <2faf080>;
			clock-frequency = <23c34600>;
			bus-frequency = <bebc200>;
		};
	};

	memory@0 {
		device_type = "memory";
		reg = <00000000 20000000>;
	};

  	tsi109@c0000000 {
		device_type = "tsi-bridge";
		compatible = "tsi109-bridge", "tsi108-bridge";
		#address-cells = <1>;
		#size-cells = <1>;
		ranges = <00000000 c0000000 00010000>;
		reg = <c0000000 00010000>;

		i2c@7000 {
			device_type = "i2c";
			compatible  = "tsi109-i2c", "tsi108-i2c";
			interrupt-parent = <&MPIC>;
			interrupts = <e 2>;
			reg = <7000 400>;
		};

		MDIO: mdio@6000 {
			device_type = "mdio";
			compatible = "tsi109-mdio", "tsi108-mdio";
			reg = <6000 50>;
			#address-cells = <1>;
			#size-cells = <0>;

			PHY1: ethernet-phy@1 {
				compatible = "bcm5461a";
				reg = <1>;
				txc-rxc-delay-disable;
			};

			PHY2: ethernet-phy@2 {
				compatible = "bcm5461a";
				reg = <2>;
				txc-rxc-delay-disable;
			};
		};

		ethernet@6200 {
			device_type = "network";
			compatible = "tsi109-ethernet", "tsi108-ethernet";
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <6000 200>;
			local-mac-address = [ 00 00 00 00 00 00 ];
			interrupt-parent = <&MPIC>;
			interrupts = <10 2>;
			mdio-handle = <&MDIO>;
			phy-handle = <&PHY1>;
		};

		ethernet@6600 {
			device_type = "network";
			compatible = "tsi109-ethernet", "tsi108-ethernet";
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <6400 200>;
			local-mac-address = [ 00 00 00 00 00 00 ];
			interrupt-parent = <&MPIC>;
			interrupts = <11 2>;
			mdio-handle = <&MDIO>;
			phy-handle = <&PHY2>;
		};

		serial@7808 {
			device_type = "serial";
			compatible = "ns16550";
			reg = <7808 200>;
			virtual-reg = <c0007808>;
			clock-frequency = <3F9C6000>;
			current-speed = <1c200>;
			interrupt-parent = <&MPIC>;
			interrupts = <c 2>;
		};

		serial@7c08 {
			device_type = "serial";
			compatible = "ns16550";
			reg = <7c08 200>;
			virtual-reg = <c0007c08>;
			clock-frequency = <3F9C6000>;
			current-speed = <1c200>;
			interrupt-parent = <&MPIC>;
			interrupts = <d 2>;
		};

	  	MPIC: pic@7400 {
			device_type = "open-pic";
			compatible = "chrp,open-pic";
			interrupt-controller;
			#interrupt-cells = <2>;
			reg = <7400 400>;
			big-endian;
		};

		pci@1000 {
			device_type = "pci";
			compatible = "tsi109-pci", "tsi108-pci";
			#interrupt-cells = <1>;
			#size-cells = <2>;
			#address-cells = <3>;
			reg = <1000 1000>;
			bus-range = <0 0>;
			/*----------------------------------------------------+
			| PCI memory range.
			| 01 denotes I/O space
			| 02 denotes 32-bit memory space
			+----------------------------------------------------*/
			ranges = <02000000 0 40000000 40000000 0 10000000
				  01000000 0 00000000 7e000000 0 00010000>;
			clock-frequency = <7f28154>;
			interrupt-parent = <&MPIC>;
			interrupts = <17 2>;
			interrupt-map-mask = <f800 0 0 7>;
			/*----------------------------------------------------+
			| The INTA, INTB, INTC, INTD are shared.
			+----------------------------------------------------*/
			interrupt-map = <
				0800 0 0 1 &RT0 24 0
				0800 0 0 2 &RT0 25 0
				0800 0 0 3 &RT0 26 0
				0800 0 0 4 &RT0 27 0

				1000 0 0 1 &RT0 25 0
				1000 0 0 2 &RT0 26 0
				1000 0 0 3 &RT0 27 0
				1000 0 0 4 &RT0 24 0

				1800 0 0 1 &RT0 26 0
				1800 0 0 2 &RT0 27 0
				1800 0 0 3 &RT0 24 0
				1800 0 0 4 &RT0 25 0

				2000 0 0 1 &RT0 27 0
				2000 0 0 2 &RT0 24 0
				2000 0 0 3 &RT0 25 0
				2000 0 0 4 &RT0 26 0
				>;

			RT0: router@1180 {
 				device_type = "pic-router";
 				interrupt-controller;
 				big-endian;
 				clock-frequency = <0>;
 				#address-cells = <0>;
 				#interrupt-cells = <2>;
 				interrupts = <17 2>;
				interrupt-parent = <&MPIC>;
			};
		};
	};

	chosen {
		linux,stdout-path = "/tsi109@c0000000/serial@7808";
	};
};
