/*
 * arch/powerpc/boot/dts/wii.dts
 *
 * Nintendo Wii platform device tree source
 * Copyright (C) 2008-2009 The GameCube Linux Team
 * Copyright (C) 2008,2009 Albert Herranz
 *
 * 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/;

/*
 * This is commented-out for now.
 * Until a later patch is merged, the kernel can use only the first
 * contiguous RAM range and will BUG() if the memreserve is outside
 * that range.
 */
/*/memreserve/ 0x10000000 0x0004000;*/	/* DSP RAM */

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

	chosen {
		bootargs = "root=/dev/mmcblk0p2 rootwait udbg-immortal";
	};

	memory {
		device_type = "memory";
		reg = <0x00000000 0x01800000	/* MEM1 24MB 1T-SRAM */
		       0x10000000 0x04000000>;	/* MEM2 64MB GDDR3 */
	};

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

		PowerPC,broadway@0 {
			device_type = "cpu";
			reg = <0>;
			clock-frequency = <729000000>; /* 729MHz */
			bus-frequency = <243000000>; /* 243MHz core-to-bus 3x */
			timebase-frequency = <60750000>; /* 243MHz / 4 */
			i-cache-line-size = <32>;
			d-cache-line-size = <32>;
			i-cache-size = <32768>;
			d-cache-size = <32768>;
		};
	};

	/* devices contained in the hollywood chipset */
	hollywood {
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "nintendo,hollywood";
                ranges = <0x0c000000 0x0c000000 0x01000000
			  0x0d000000 0x0d000000 0x00800000
			  0x0d800000 0x0d800000 0x00800000>;
		interrupt-parent = <&PIC0>;

		video@0c002000 {
			compatible = "nintendo,hollywood-vi",
					"nintendo,flipper-vi";
			reg = <0x0c002000 0x100>;
			interrupts = <8>;
		};

		processor-interface@0c003000 {
			compatible = "nintendo,hollywood-pi",
					"nintendo,flipper-pi";
			reg = <0x0c003000 0x100>;

			PIC0: pic0 {
				#interrupt-cells = <1>;
				compatible = "nintendo,flipper-pic";
				interrupt-controller;
			};
		};

		dsp@0c005000 {
			#address-cells = <1>;
			#size-cells = <1>;
			compatible = "nintendo,hollywood-dsp",
					"nintendo,flipper-dsp";
			reg = <0x0c005000 0x200>;
			interrupts = <6>;
		};

		gamepad-controller@0d006400 {
			compatible = "nintendo,hollywood-si",
					"nintendo,flipper-si";
			reg = <0x0d006400 0x100>;
			interrupts = <3>;
		};

		audio@0c006c00 {
			compatible = "nintendo,hollywood-ai",
					"nintendo,flipper-ai";
			reg = <0x0d006c00 0x20>;
			interrupts = <6>;
		};

		/* External Interface bus */
		exi@0d006800 {
			compatible = "nintendo,hollywood-exi",
					"nintendo,flipper-exi";
			reg = <0x0d006800 0x40>;
			virtual-reg = <0x0d006800>;
			interrupts = <4>;
		};

		usb@0d040000 {
			compatible = "nintendo,hollywood-usb-ehci",
					"usb-ehci";
			reg = <0x0d040000 0x100>;
			interrupts = <4>;
			interrupt-parent = <&PIC1>;
		};

		usb@0d050000 {
			compatible = "nintendo,hollywood-usb-ohci",
					"usb-ohci";
			reg = <0x0d050000 0x100>;
			interrupts = <5>;
			interrupt-parent = <&PIC1>;
		};

		usb@0d060000 {
			compatible = "nintendo,hollywood-usb-ohci",
					"usb-ohci";
			reg = <0x0d060000 0x100>;
			interrupts = <6>;
			interrupt-parent = <&PIC1>;
		};

		sd@0d070000 {
			compatible = "nintendo,hollywood-sdhci",
					"sdhci";
			reg = <0x0d070000 0x200>;
			interrupts = <7>;
			interrupt-parent = <&PIC1>;
		};

		sdio@0d080000 {
			compatible = "nintendo,hollywood-sdhci",
					"sdhci";
			reg = <0x0d080000 0x200>;
			interrupts = <8>;
			interrupt-parent = <&PIC1>;
		};

		ipc@0d000000 {
			compatible = "nintendo,hollywood-ipc";
			reg = <0x0d000000 0x10>;
			interrupts = <30>;
			interrupt-parent = <&PIC1>;
		};

		PIC1: pic1@0d800030 {
			#interrupt-cells = <1>;
			compatible = "nintendo,hollywood-pic";
			reg = <0x0d800030 0x10>;
			interrupt-controller;
			interrupts = <14>;
		};

		GPIO: gpio@0d8000c0 {
			#gpio-cells = <2>;
			compatible = "nintendo,hollywood-gpio";
			reg = <0x0d8000c0 0x40>;
			gpio-controller;

			/*
			 * This is commented out while a standard binding
			 * for i2c over gpio is defined.
			 */
			/*
			i2c-video {
				#address-cells = <1>;
				#size-cells = <0>;
			        compatible = "i2c-gpio";

			        gpios = <&GPIO 15 0
			                 &GPIO 14 0>;
			        clock-frequency = <250000>;
				no-clock-stretching;
			        scl-is-open-drain;
			        sda-is-open-drain;
			        sda-enforce-dir;

			        AVE: audio-video-encoder@70 {
			                compatible = "nintendo,wii-audio-video-encoder";
			                reg = <0x70>;
			        };
			};
			*/
		};

		control@0d800100 {
			compatible = "nintendo,hollywood-control";
			reg = <0x0d800100 0x300>;
		};

		disk@0d806000 {
			compatible = "nintendo,hollywood-di";
			reg = <0x0d806000 0x40>;
			interrupts = <2>;
		};
	};
};

