/*
 * Device Tree Source for ESTeem 195E Hotfoot
 *
 * Copyright 2009 AbsoluteValue Systems <solomon@linux-wlan.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.
 */

/dts-v1/;

/ {
	#address-cells = <1>;
	#size-cells = <1>;
	model = "est,hotfoot";
	compatible = "est,hotfoot";
	dcr-parent = <&{/cpus/cpu@0}>;

	aliases {
		ethernet0 = &EMAC0;
		ethernet1 = &EMAC1;
		serial0 = &UART0;
		serial1 = &UART1;
	};

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

		cpu@0 {
			device_type = "cpu";
			model = "PowerPC,405EP";
			reg = <0x00000000>;
			clock-frequency = <0>; /* Filled in by zImage */
			timebase-frequency = <0>; /* Filled in by zImage */
			i-cache-line-size = <0x20>;
			d-cache-line-size = <0x20>;
			i-cache-size = <0x4000>;
			d-cache-size = <0x4000>;
			dcr-controller;
			dcr-access-method = "native";
		};
	};

	memory {
		device_type = "memory";
		reg = <0x00000000 0x00000000>; /* Filled in by zImage */
	};

	UIC0: interrupt-controller {
		compatible = "ibm,uic";
		interrupt-controller;
		cell-index = <0>;
		dcr-reg = <0x0c0 0x009>;
		#address-cells = <0>;
		#size-cells = <0>;
		#interrupt-cells = <2>;
	};

	plb {
		compatible = "ibm,plb3";
		#address-cells = <1>;
		#size-cells = <1>;
		ranges;
		clock-frequency = <0>; /* Filled in by zImage */

		SDRAM0: memory-controller {
			compatible = "ibm,sdram-405ep";
			dcr-reg = <0x010 0x002>;
		};

		MAL: mcmal {
			compatible = "ibm,mcmal-405ep", "ibm,mcmal";
			dcr-reg = <0x180 0x062>;
			num-tx-chans = <4>;
			num-rx-chans = <2>;
			interrupt-parent = <&UIC0>;
			interrupts = <
				0xb 0x4 /* TXEOB */
				0xc 0x4 /* RXEOB */
				0xa 0x4 /* SERR */
				0xd 0x4 /* TXDE */
				0xe 0x4 /* RXDE */>;
		};

		POB0: opb {
			compatible = "ibm,opb-405ep", "ibm,opb";
			#address-cells = <1>;
			#size-cells = <1>;
			ranges = <0xef600000 0xef600000 0x00a00000>;
			dcr-reg = <0x0a0 0x005>;
			clock-frequency = <0>; /* Filled in by zImage */

			/* Hotfoot has UART0/UART1 swapped */

			UART0: serial@ef600400 {
				device_type = "serial";
				compatible = "ns16550";
				reg = <0xef600400 0x00000008>;
				virtual-reg = <0xef600400>;
				clock-frequency = <0>; /* Filled in by zImage */
				current-speed = <0x9600>;
				interrupt-parent = <&UIC0>;
				interrupts = <0x1 0x4>;
			};

			UART1: serial@ef600300 {
				device_type = "serial";
				compatible = "ns16550";
				reg = <0xef600300 0x00000008>;
				virtual-reg = <0xef600300>;
				clock-frequency = <0>; /* Filled in by zImage */
				current-speed = <0x9600>;
				interrupt-parent = <&UIC0>;
				interrupts = <0x0 0x4>;
			};

			IIC: i2c@ef600500 {
				#address-cells = <1>;
				#size-cells = <0>;
				compatible = "ibm,iic-405ep", "ibm,iic";
				reg = <0xef600500 0x00000011>;
				interrupt-parent = <&UIC0>;
				interrupts = <0x2 0x4>;

				rtc@68 {
					/* Actually a DS1339 */
					compatible = "dallas,ds1307";
					reg = <0x68>;
				};

				temp@4a {
					/* Not present on all boards */
					compatible = "national,lm75";
					reg = <0x4a>;
				};
			};

			GPIO: gpio@ef600700 {
				#gpio-cells = <2>;
				compatible = "ibm,ppc4xx-gpio";
				reg = <0xef600700 0x00000020>;
				gpio-controller;
			};

			gpio-leds {
				compatible = "gpio-leds";
				status {
					label = "Status";
					gpios = <&GPIO 1 0>;
				};
				radiorx {
					label = "Rx";
					gpios = <&GPIO 0xe 0>;
				};
			};

			EMAC0: ethernet@ef600800 {
				linux,network-index = <0x0>;
				device_type = "network";
				compatible = "ibm,emac-405ep", "ibm,emac";
				interrupt-parent = <&UIC0>;
				interrupts = <
					0xf 0x4 /* Ethernet */
					0x9 0x4 /* Ethernet Wake Up */>;
				local-mac-address = [000000000000]; /* Filled in by zImage */
				reg = <0xef600800 0x00000070>;
				mal-device = <&MAL>;
				mal-tx-channel = <0>;
				mal-rx-channel = <0>;
				cell-index = <0>;
				max-frame-size = <0x5dc>;
				rx-fifo-size = <0x1000>;
				tx-fifo-size = <0x800>;
				phy-mode = "mii";
				phy-map = <0x00000000>;
			};

			EMAC1: ethernet@ef600900 {
				linux,network-index = <0x1>;
				device_type = "network";
				compatible = "ibm,emac-405ep", "ibm,emac";
				interrupt-parent = <&UIC0>;
				interrupts = <
					0x11 0x4 /* Ethernet */
					0x9 0x4 /* Ethernet Wake Up */>;
				local-mac-address = [000000000000]; /* Filled in by zImage */
				reg = <0xef600900 0x00000070>;
				mal-device = <&MAL>;
				mal-tx-channel = <2>;
				mal-rx-channel = <1>;
				cell-index = <1>;
				max-frame-size = <0x5dc>;
				rx-fifo-size = <0x1000>;
				tx-fifo-size = <0x800>;
				mdio-device = <&EMAC0>;
				phy-mode = "mii";
				phy-map = <0x0000001>;
			};
		};

		EBC0: ebc {
			compatible = "ibm,ebc-405ep", "ibm,ebc";
			dcr-reg = <0x012 0x002>;
			#address-cells = <2>;
			#size-cells = <1>;

			/* The ranges property is supplied by the bootwrapper
			 * and is based on the firmware's configuration of the
			 * EBC bridge
			 */
			clock-frequency = <0>; /* Filled in by zImage */

			nor_flash@0 {
				compatible = "cfi-flash";
				bank-width = <2>;
				reg = <0x0 0xff800000 0x00800000>;
				#address-cells = <1>;
				#size-cells = <1>;

				/* This mapping is for the 8M flash
				   4M flash has all ofssets -= 4M,
				   and FeatFS partition is not present */
				partition@0 {
					label = "Bootloader";
					reg = <0x7c0000 0x40000>;
					/* read-only; */
				};
				partition@1 {
					label = "Env_and_Config_Primary";
					reg = <0x400000 0x10000>;
				};
				partition@2 {
					label = "Kernel";
					reg = <0x420000 0x100000>;
				};
				partition@3 {
					label = "Filesystem";
					reg = <0x520000 0x2a0000>;
				};
				partition@4 {
					label = "Env_and_Config_Secondary";
					reg = <0x410000 0x10000>;
				};
				partition@5 {
					label = "FeatFS";
					reg = <0x000000 0x400000>;
				};
				partition@6 {
					label = "Bootloader_Env";
					reg = <0x7d0000 0x10000>;
				};
			};
		};

		PCI0: pci@ec000000 {
			device_type = "pci";
			#interrupt-cells = <1>;
			#size-cells = <2>;
			#address-cells = <3>;
			compatible = "ibm,plb405ep-pci", "ibm,plb-pci";
			primary;
			reg = <0xeec00000 0x00000008    /* Config space access */
				0xeed80000 0x00000004    /* IACK */
				0xeed80000 0x00000004    /* Special cycle */
				0xef480000 0x00000040>;  /* Internal registers */

			/* Outbound ranges, one memory and one IO,
			 * later cannot be changed. Chip supports a second
			 * IO range but we don't use it for now
			 */
			ranges = <0x02000000 0x00000000 0x80000000 0x80000000 0x00000000 0x20000000
				0x01000000 0x00000000 0x00000000 0xe8000000 0x00000000 0x00010000>;

			/* Inbound 2GB range starting at 0 */
			dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x80000000>;

			interrupt-parent = <&UIC0>;
			interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
			interrupt-map = <
				/* IDSEL 3 -- slot1 (optional) 27/29 A/B IRQ2/4 */
				0x1800 0x0 0x0 0x1 &UIC0 0x1b 0x8
				0x1800 0x0 0x0 0x2 &UIC0 0x1d 0x8

				/* IDSEL 4 -- slot0, 26/28 A/B IRQ1/3 */
				0x2000 0x0 0x0 0x1 &UIC0 0x1a 0x8
				0x2000 0x0 0x0 0x2 &UIC0 0x1c 0x8
				>;
		};
	};

	chosen {
		linux,stdout-path = &UART0;
	};
};
