118334Speter/*
218334Speter * Device Tree Source for IBM Ebony
318334Speter *
418334Speter * Copyright (c) 2006, 2007 IBM Corp.
518334Speter * Josh Boyer <jwboyer@linux.vnet.ibm.com>, David Gibson <dwg@au1.ibm.com>
618334Speter *
7132718Skan * FIXME: Draft only!
8132718Skan *
990075Sobrien * This file is licensed under the terms of the GNU General Public
1018334Speter * License version 2.  This program is licensed "as is" without
1190075Sobrien * any warranty of any kind, whether express or implied.
1218334Speter */
1318334Speter
1418334Speter/dts-v1/;
1518334Speter
1690075Sobrien/ {
1718334Speter	#address-cells = <2>;
1818334Speter	#size-cells = <1>;
1918334Speter	model = "ibm,ebony";
2018334Speter	compatible = "ibm,ebony";
2118334Speter	dcr-parent = <&{/cpus/cpu@0}>;
2290075Sobrien
23169689Skan	aliases {
24169689Skan		ethernet0 = &EMAC0;
2518334Speter		ethernet1 = &EMAC1;
2618334Speter		serial0 = &UART0;
2790075Sobrien		serial1 = &UART1;
2818334Speter	};
2918334Speter
3018334Speter	cpus {
3118334Speter		#address-cells = <1>;
3218334Speter		#size-cells = <0>;
3318334Speter
3418334Speter		cpu@0 {
3518334Speter			device_type = "cpu";
3618334Speter			model = "PowerPC,440GP";
3718334Speter			reg = <0x00000000>;
3818334Speter			clock-frequency = <0>; // Filled in by zImage
3918334Speter			timebase-frequency = <0>; // Filled in by zImage
4018334Speter			i-cache-line-size = <32>;
4118334Speter			d-cache-line-size = <32>;
4218334Speter			i-cache-size = <32768>; /* 32 kB */
4318334Speter			d-cache-size = <32768>; /* 32 kB */
4418334Speter			dcr-controller;
4518334Speter			dcr-access-method = "native";
4618334Speter		};
4718334Speter	};
4818334Speter
4918334Speter	memory {
5018334Speter		device_type = "memory";
5118334Speter		reg = <0x00000000 0x00000000 0x00000000>; // Filled in by zImage
5218334Speter	};
5318334Speter
5418334Speter	UIC0: interrupt-controller0 {
5518334Speter		compatible = "ibm,uic-440gp", "ibm,uic";
5618334Speter		interrupt-controller;
5718334Speter		cell-index = <0>;
5852284Sobrien		dcr-reg = <0x0c0 0x009>;
5952284Sobrien		#address-cells = <0>;
60117395Skan		#size-cells = <0>;
6118334Speter		#interrupt-cells = <2>;
6218334Speter
6318334Speter	};
6452284Sobrien
6552284Sobrien	UIC1: interrupt-controller1 {
6652284Sobrien		compatible = "ibm,uic-440gp", "ibm,uic";
6752284Sobrien		interrupt-controller;
6852284Sobrien		cell-index = <1>;
6952284Sobrien		dcr-reg = <0x0d0 0x009>;
7052284Sobrien		#address-cells = <0>;
7152284Sobrien		#size-cells = <0>;
7252284Sobrien		#interrupt-cells = <2>;
7352284Sobrien		interrupts = <0x1e 0x4 0x1f 0x4>; /* cascade */
7452284Sobrien		interrupt-parent = <&UIC0>;
7552284Sobrien	};
7652284Sobrien
7752284Sobrien	CPC0: cpc {
7852284Sobrien		compatible = "ibm,cpc-440gp";
7918334Speter		dcr-reg = <0x0b0 0x003 0x0e0 0x010>;
8018334Speter		// FIXME: anything else?
8118334Speter	};
8218334Speter
8318334Speter	plb {
8450397Sobrien		compatible = "ibm,plb-440gp", "ibm,plb4";
8518334Speter		#address-cells = <2>;
8618334Speter		#size-cells = <1>;
8718334Speter		ranges;
8818334Speter		clock-frequency = <0>; // Filled in by zImage
8918334Speter
9018334Speter		SDRAM0: memory-controller {
9118334Speter			compatible = "ibm,sdram-440gp";
9218334Speter			dcr-reg = <0x010 0x002>;
9318334Speter			// FIXME: anything else?
9490075Sobrien		};
9590075Sobrien
9690075Sobrien		SRAM0: sram {
9790075Sobrien			compatible = "ibm,sram-440gp";
9890075Sobrien			dcr-reg = <0x020 0x008 0x00a 0x001>;
9990075Sobrien		};
10090075Sobrien
10190075Sobrien		DMA0: dma {
10218334Speter			// FIXME: ???
10318334Speter			compatible = "ibm,dma-440gp";
10418334Speter			dcr-reg = <0x100 0x027>;
10518334Speter		};
10618334Speter
10718334Speter		MAL0: mcmal {
10818334Speter			compatible = "ibm,mcmal-440gp", "ibm,mcmal";
10918334Speter			dcr-reg = <0x180 0x062>;
11018334Speter			num-tx-chans = <4>;
11118334Speter			num-rx-chans = <4>;
11218334Speter			interrupt-parent = <&MAL0>;
11318334Speter			interrupts = <0x0 0x1 0x2 0x3 0x4>;
11418334Speter			#interrupt-cells = <1>;
11518334Speter			#address-cells = <0>;
11652284Sobrien			#size-cells = <0>;
11718334Speter			interrupt-map = </*TXEOB*/ 0x0 &UIC0 0xa 0x4
11818334Speter					 /*RXEOB*/ 0x1 &UIC0 0xb 0x4
11918334Speter					 /*SERR*/  0x2 &UIC1 0x0 0x4
12018334Speter					 /*TXDE*/  0x3 &UIC1 0x1 0x4
12118334Speter					 /*RXDE*/  0x4 &UIC1 0x2 0x4>;
12218334Speter			interrupt-map-mask = <0xffffffff>;
12318334Speter		};
12418334Speter
12590075Sobrien		POB0: opb {
12690075Sobrien			compatible = "ibm,opb-440gp", "ibm,opb";
12790075Sobrien			#address-cells = <1>;
12890075Sobrien			#size-cells = <1>;
12990075Sobrien			/* Wish there was a nicer way of specifying a full 32-bit
13090075Sobrien			   range */
13190075Sobrien			ranges = <0x00000000 0x00000001 0x00000000 0x80000000
13290075Sobrien				  0x80000000 0x00000001 0x80000000 0x80000000>;
13318334Speter			dcr-reg = <0x090 0x00b>;
13418334Speter			interrupt-parent = <&UIC1>;
13518334Speter			interrupts = <0x7 0x4>;
13618334Speter			clock-frequency = <0>; // Filled in by zImage
13718334Speter
13850397Sobrien			EBC0: ebc {
13918334Speter				compatible = "ibm,ebc-440gp", "ibm,ebc";
14018334Speter				dcr-reg = <0x012 0x002>;
14118334Speter				#address-cells = <2>;
14218334Speter				#size-cells = <1>;
14318334Speter				clock-frequency = <0>; // Filled in by zImage
14418334Speter				// ranges property is supplied by zImage
14518334Speter				// based on firmware's configuration of the
14618334Speter				// EBC bridge
14718334Speter				interrupts = <0x5 0x4>;
14818334Speter				interrupt-parent = <&UIC1>;
14918334Speter
15018334Speter				small-flash@0,80000 {
15118334Speter					compatible = "jedec-flash";
15218334Speter					bank-width = <1>;
15318334Speter					reg = <0x00000000 0x00080000 0x00080000>;
15418334Speter					#address-cells = <1>;
15518334Speter					#size-cells = <1>;
15618334Speter					partition@0 {
15718334Speter						label = "OpenBIOS";
15818334Speter						reg = <0x00000000 0x00080000>;
15918334Speter						read-only;
16018334Speter					};
16150397Sobrien				};
16218334Speter
16318334Speter				nvram@1,0 {
16418334Speter					/* NVRAM & RTC */
16518334Speter					compatible = "ds1743-nvram";
16618334Speter					#bytes = <0x2000>;
16718334Speter					reg = <0x00000001 0x00000000 0x00002000>;
16818334Speter				};
16918334Speter
17018334Speter				large-flash@2,0 {
17118334Speter					compatible = "jedec-flash";
17218334Speter					bank-width = <1>;
17318334Speter					reg = <0x00000002 0x00000000 0x00400000>;
17418334Speter					#address-cells = <1>;
17518334Speter					#size-cells = <1>;
17618334Speter					partition@0 {
17718334Speter						label = "fs";
17890075Sobrien						reg = <0x00000000 0x00380000>;
17990075Sobrien					};
18090075Sobrien					partition@380000 {
18190075Sobrien						label = "firmware";
18290075Sobrien						reg = <0x00380000 0x00080000>;
18390075Sobrien					};
18490075Sobrien				};
18590075Sobrien
18618334Speter				ir@3,0 {
18718334Speter					reg = <0x00000003 0x00000000 0x00000010>;
18818334Speter				};
18918334Speter
19018334Speter				fpga@7,0 {
19118334Speter					compatible = "Ebony-FPGA";
19218334Speter					reg = <0x00000007 0x00000000 0x00000010>;
19318334Speter					virtual-reg = <0xe8300000>;
19418334Speter				};
19518334Speter			};
19652284Sobrien
19750397Sobrien			UART0: serial@40000200 {
19850397Sobrien				device_type = "serial";
19918334Speter				compatible = "ns16550";
20018334Speter				reg = <0x40000200 0x00000008>;
20118334Speter				virtual-reg = <0xe0000200>;
20218334Speter				clock-frequency = <11059200>;
20318334Speter				current-speed = <9600>;
20418334Speter				interrupt-parent = <&UIC0>;
20518334Speter				interrupts = <0x0 0x4>;
20618334Speter			};
20718334Speter
20818334Speter			UART1: serial@40000300 {
20918334Speter				device_type = "serial";
21018334Speter				compatible = "ns16550";
21118334Speter				reg = <0x40000300 0x00000008>;
21218334Speter				virtual-reg = <0xe0000300>;
21318334Speter				clock-frequency = <11059200>;
21418334Speter				current-speed = <9600>;
21518334Speter				interrupt-parent = <&UIC0>;
21618334Speter				interrupts = <0x1 0x4>;
21718334Speter			};
21818334Speter
21918334Speter			IIC0: i2c@40000400 {
22018334Speter				/* FIXME */
22118334Speter				compatible = "ibm,iic-440gp", "ibm,iic";
22218334Speter				reg = <0x40000400 0x00000014>;
22352284Sobrien				interrupt-parent = <&UIC0>;
22450397Sobrien				interrupts = <0x2 0x4>;
22550397Sobrien			};
22618334Speter			IIC1: i2c@40000500 {
22718334Speter				/* FIXME */
22818334Speter				compatible = "ibm,iic-440gp", "ibm,iic";
22918334Speter				reg = <0x40000500 0x00000014>;
23018334Speter				interrupt-parent = <&UIC0>;
23118334Speter				interrupts = <0x3 0x4>;
23218334Speter			};
23318334Speter
23418334Speter			GPIO0: gpio@40000700 {
23518334Speter				/* FIXME */
23618334Speter				compatible = "ibm,gpio-440gp";
23718334Speter				reg = <0x40000700 0x00000020>;
23818334Speter			};
23918334Speter
24018334Speter			ZMII0: emac-zmii@40000780 {
24118334Speter				compatible = "ibm,zmii-440gp", "ibm,zmii";
24218334Speter				reg = <0x40000780 0x0000000c>;
24318334Speter			};
24418334Speter
24518334Speter			EMAC0: ethernet@40000800 {
24618334Speter				device_type = "network";
24718334Speter				compatible = "ibm,emac-440gp", "ibm,emac";
24818334Speter				interrupt-parent = <&UIC1>;
24918334Speter				interrupts = <0x1c 0x4 0x1d 0x4>;
25018334Speter				reg = <0x40000800 0x00000070>;
25118334Speter				local-mac-address = [000000000000]; // Filled in by zImage
25218334Speter				mal-device = <&MAL0>;
25318334Speter				mal-tx-channel = <0 1>;
25418334Speter				mal-rx-channel = <0>;
25518334Speter				cell-index = <0>;
25618334Speter				max-frame-size = <1500>;
25718334Speter				rx-fifo-size = <4096>;
25818334Speter				tx-fifo-size = <2048>;
25918334Speter				phy-mode = "rmii";
26018334Speter				phy-map = <0x00000001>;
26118334Speter				zmii-device = <&ZMII0>;
26218334Speter				zmii-channel = <0>;
26318334Speter			};
26418334Speter			EMAC1: ethernet@40000900 {
26518334Speter				device_type = "network";
26618334Speter				compatible = "ibm,emac-440gp", "ibm,emac";
26718334Speter				interrupt-parent = <&UIC1>;
26818334Speter				interrupts = <0x1e 0x4 0x1f 0x4>;
26918334Speter				reg = <0x40000900 0x00000070>;
27090075Sobrien				local-mac-address = [000000000000]; // Filled in by zImage
27118334Speter				mal-device = <&MAL0>;
27218334Speter				mal-tx-channel = <2 3>;
27318334Speter				mal-rx-channel = <1>;
27418334Speter				cell-index = <1>;
27518334Speter				max-frame-size = <1500>;
27618334Speter				rx-fifo-size = <4096>;
27718334Speter				tx-fifo-size = <2048>;
27818334Speter				phy-mode = "rmii";
27918334Speter				phy-map = <0x00000001>;
280132718Skan				zmii-device = <&ZMII0>;
281132718Skan				zmii-channel = <1>;
282132718Skan			};
283132718Skan
284132718Skan
28518334Speter			GPT0: gpt@40000a00 {
28618334Speter				/* FIXME */
28718334Speter				reg = <0x40000a00 0x000000d4>;
28818334Speter				interrupt-parent = <&UIC0>;
289132718Skan				interrupts = <0x12 0x4 0x13 0x4 0x14 0x4 0x15 0x4 0x16 0x4>;
290132718Skan			};
291132718Skan
29250397Sobrien		};
29350397Sobrien
29450397Sobrien		PCIX0: pci@20ec00000 {
295132718Skan			device_type = "pci";
29650397Sobrien			#interrupt-cells = <1>;
29750397Sobrien			#size-cells = <2>;
29850397Sobrien			#address-cells = <3>;
299132718Skan			compatible = "ibm,plb440gp-pcix", "ibm,plb-pcix";
300132718Skan			primary;
301132718Skan			reg = <0x00000002 0x0ec00000 0x00000008	/* Config space access */
302132718Skan			       0x00000000 0x00000000 0x00000000		/* no IACK cycles */
303132718Skan			       0x00000002 0x0ed00000 0x00000004     /* Special cycles */
304132718Skan			       0x00000002 0x0ec80000 0x000000f0	/* Internal registers */
305132718Skan			       0x00000002 0x0ec80100 0x000000fc>;	/* Internal messaging registers */
306132718Skan
307132718Skan			/* Outbound ranges, one memory and one IO,
308132718Skan			 * later cannot be changed
309132718Skan			 */
310132718Skan			ranges = <0x02000000 0x00000000 0x80000000 0x00000003 0x80000000 0x00000000 0x80000000
311132718Skan				  0x01000000 0x00000000 0x00000000 0x00000002 0x08000000 0x00000000 0x00010000>;
312132718Skan
313132718Skan			/* Inbound 2GB range starting at 0 */
314132718Skan			dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x80000000>;
315132718Skan
316132718Skan			/* Ebony has all 4 IRQ pins tied together per slot */
317132718Skan			interrupt-map-mask = <0xf800 0x0 0x0 0x0>;
318132718Skan			interrupt-map = <
319132718Skan				/* IDSEL 1 */
320132718Skan				0x800 0x0 0x0 0x0 &UIC0 0x17 0x8
321132718Skan
322132718Skan				/* IDSEL 2 */
323132718Skan				0x1000 0x0 0x0 0x0 &UIC0 0x18 0x8
32450397Sobrien
32550397Sobrien				/* IDSEL 3 */
32650397Sobrien				0x1800 0x0 0x0 0x0 &UIC0 0x19 0x8
32750397Sobrien
32818334Speter				/* IDSEL 4 */
32990075Sobrien				0x2000 0x0 0x0 0x0 &UIC0 0x1a 0x8
330132718Skan			>;
33190075Sobrien		};
33290075Sobrien	};
33390075Sobrien
33490075Sobrien	chosen {
33518334Speter		stdout-path = "/plb/opb/serial@40000200";
33618334Speter	};
33750397Sobrien};
33850397Sobrien