// SPDX-License-Identifier: GPL-2.0-or-later
/*
 * 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
 */

/dts-v1/;
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>

/*
 * 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@c002000 {
			compatible = "nintendo,hollywood-vi",
					"nintendo,flipper-vi";
			reg = <0x0c002000 0x100>;
			interrupts = <8>;
		};

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

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

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

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

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

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

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

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

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

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

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

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

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

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

			gpio-line-names =
				"POWER", "SHUTDOWN", "FAN", "DC_DC",
				"DI_SPIN", "SLOT_LED", "EJECT_BTN", "SLOT_IN",
				"SENSOR_BAR", "DO_EJECT", "EEP_CS", "EEP_CLK",
				"EEP_MOSI", "EEP_MISO", "AVE_SCL", "AVE_SDA",
				"DEBUG0", "DEBUG1", "DEBUG2", "DEBUG3",
				"DEBUG4", "DEBUG5", "DEBUG6", "DEBUG7";

			interrupt-controller;
			#interrupt-cells = <2>;
			interrupts = <10>;
			interrupt-parent = <&PIC1>;

			/*
			 * 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@d800100 {
			compatible = "nintendo,hollywood-control";
			/*
			 * Both the address and length are wrong, according to
			 * Wiibrew this should be <0x0d800000 0x400>, but it
			 * requires refactoring the PIC1, GPIO and OTP nodes
			 * before changing that.
			 */
			reg = <0x0d800100 0xa0>;
		};

		otp@d8001ec {
			compatible = "nintendo,hollywood-otp";
			reg = <0x0d8001ec 0x8>;
		};

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

	gpio-leds {
		compatible = "gpio-leds";

		/* This is the blue LED in the disk drive slot */
		drive-slot {
			label = "wii:blue:drive_slot";
			gpios = <&GPIO 5 GPIO_ACTIVE_HIGH>;
			panic-indicator;
		};
	};

	gpio-keys {
		compatible = "gpio-keys";

		power {
			label = "Power Button";
			gpios = <&GPIO 0 GPIO_ACTIVE_HIGH>;
			linux,code = <KEY_POWER>;
		};

		eject {
			label = "Eject Button";
			gpios = <&GPIO 6 GPIO_ACTIVE_HIGH>;
			linux,code = <KEY_EJECTCD>;
		};
	};
};

