/*
 * 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.
 *
 * To build:
 *   dtc -I dts -O asm -o holly.S -b 0 holly.dts
 *   dtc -I dts -O dtb -o holly.dtb -b 0 holly.dts
 */

/ {
	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>;
			32-bit;
		};
	};

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

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

		i2c@7000 {
			device_type = "i2c";
			compatible  = "tsi-i2c";
			interrupt-parent = < &/tsi109@c0000000/pic@7400 >;
			interrupts = <e 2>;
			reg = <7000 400>;
		};

		mdio@6000 {
			device_type = "mdio";
			compatible = "tsi-ethernet";

			PHY1: ethernet-phy@6000 {
				device_type = "ethernet-phy";
				compatible = "bcm54xx";
				reg = <6000 50>;
				phy-id = <1>;
			};

			PHY2: ethernet-phy@6400 {
				device_type = "ethernet-phy";
				compatible = "bcm54xx";
				reg = <6000 50>;
				phy-id = <2>;
			};
		};

		ethernet@6200 {
			device_type = "network";
			compatible = "tsi-ethernet";
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <6000 200>;
			local-mac-address = [ 00 00 00 00 00 00 ];
			interrupt-parent = < &/tsi109@c0000000/pic@7400 >;
			interrupts = <10 2>;
			phy-handle = <&PHY1>;
		};

		ethernet@6600 {
			device_type = "network";
			compatible = "tsi-ethernet";
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <6400 200>;
			local-mac-address = [ 00 00 00 00 00 00 ];
			interrupt-parent = < &/tsi109@c0000000/pic@7400 >;
			interrupts = <11 2>;
			phy-handle = <&PHY2>;
		};

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

		serial@7c08 {
			device_type = "serial";
			compatible = "ns16550";
			reg = <7c08 200>;
			virtual-reg = <c0007c08>;
			clock-frequency = <3F9C6000>;
			current-speed = <1c200>;
			interrupt-parent = < &/tsi109@c0000000/pic@7400 >;
			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";
			#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 = < &/tsi109@c0000000/pic@7400 >;
			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 = < &/tsi109@c0000000/pic@7400 >;
			};
		};
	};

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