1*c66ec88fSEmmanuel Vadot/*
2*c66ec88fSEmmanuel Vadot * Device Tree Source for IBM Embedded PPC 476 Platform
3*c66ec88fSEmmanuel Vadot *
4*c66ec88fSEmmanuel Vadot * Copyright © 2011 Tony Breeds IBM Corporation
5*c66ec88fSEmmanuel Vadot *
6*c66ec88fSEmmanuel Vadot * This file is licensed under the terms of the GNU General Public
7*c66ec88fSEmmanuel Vadot * License version 2.  This program is licensed "as is" without
8*c66ec88fSEmmanuel Vadot * any warranty of any kind, whether express or implied.
9*c66ec88fSEmmanuel Vadot */
10*c66ec88fSEmmanuel Vadot
11*c66ec88fSEmmanuel Vadot/dts-v1/;
12*c66ec88fSEmmanuel Vadot
13*c66ec88fSEmmanuel Vadot/memreserve/ 0x01f00000 0x00100000;	// spin table
14*c66ec88fSEmmanuel Vadot
15*c66ec88fSEmmanuel Vadot/ {
16*c66ec88fSEmmanuel Vadot	#address-cells = <2>;
17*c66ec88fSEmmanuel Vadot	#size-cells = <2>;
18*c66ec88fSEmmanuel Vadot	model = "ibm,currituck";
19*c66ec88fSEmmanuel Vadot	compatible = "ibm,currituck";
20*c66ec88fSEmmanuel Vadot	dcr-parent = <&{/cpus/cpu@0}>;
21*c66ec88fSEmmanuel Vadot
22*c66ec88fSEmmanuel Vadot	aliases {
23*c66ec88fSEmmanuel Vadot		serial0 = &UART0;
24*c66ec88fSEmmanuel Vadot	};
25*c66ec88fSEmmanuel Vadot
26*c66ec88fSEmmanuel Vadot	cpus {
27*c66ec88fSEmmanuel Vadot		#address-cells = <1>;
28*c66ec88fSEmmanuel Vadot		#size-cells = <0>;
29*c66ec88fSEmmanuel Vadot
30*c66ec88fSEmmanuel Vadot		cpu@0 {
31*c66ec88fSEmmanuel Vadot			device_type = "cpu";
32*c66ec88fSEmmanuel Vadot			model = "PowerPC,476";
33*c66ec88fSEmmanuel Vadot			reg = <0>;
34*c66ec88fSEmmanuel Vadot			clock-frequency = <1600000000>; // 1.6 GHz
35*c66ec88fSEmmanuel Vadot			timebase-frequency = <100000000>; // 100Mhz
36*c66ec88fSEmmanuel Vadot			i-cache-line-size = <32>;
37*c66ec88fSEmmanuel Vadot			d-cache-line-size = <32>;
38*c66ec88fSEmmanuel Vadot			i-cache-size = <32768>;
39*c66ec88fSEmmanuel Vadot			d-cache-size = <32768>;
40*c66ec88fSEmmanuel Vadot			dcr-controller;
41*c66ec88fSEmmanuel Vadot			dcr-access-method = "native";
42*c66ec88fSEmmanuel Vadot			status = "okay";
43*c66ec88fSEmmanuel Vadot		};
44*c66ec88fSEmmanuel Vadot		cpu@1 {
45*c66ec88fSEmmanuel Vadot			device_type = "cpu";
46*c66ec88fSEmmanuel Vadot			model = "PowerPC,476";
47*c66ec88fSEmmanuel Vadot			reg = <1>;
48*c66ec88fSEmmanuel Vadot			clock-frequency = <1600000000>; // 1.6 GHz
49*c66ec88fSEmmanuel Vadot			timebase-frequency = <100000000>; // 100Mhz
50*c66ec88fSEmmanuel Vadot			i-cache-line-size = <32>;
51*c66ec88fSEmmanuel Vadot			d-cache-line-size = <32>;
52*c66ec88fSEmmanuel Vadot			i-cache-size = <32768>;
53*c66ec88fSEmmanuel Vadot			d-cache-size = <32768>;
54*c66ec88fSEmmanuel Vadot			dcr-controller;
55*c66ec88fSEmmanuel Vadot			dcr-access-method = "native";
56*c66ec88fSEmmanuel Vadot			status = "disabled";
57*c66ec88fSEmmanuel Vadot			enable-method = "spin-table";
58*c66ec88fSEmmanuel Vadot			cpu-release-addr = <0x0 0x01f00000>;
59*c66ec88fSEmmanuel Vadot		};
60*c66ec88fSEmmanuel Vadot	};
61*c66ec88fSEmmanuel Vadot
62*c66ec88fSEmmanuel Vadot	memory {
63*c66ec88fSEmmanuel Vadot		device_type = "memory";
64*c66ec88fSEmmanuel Vadot		reg = <0x0 0x0 0x0 0x0>; // filled in by zImage
65*c66ec88fSEmmanuel Vadot	};
66*c66ec88fSEmmanuel Vadot
67*c66ec88fSEmmanuel Vadot	MPIC: interrupt-controller {
68*c66ec88fSEmmanuel Vadot		compatible = "chrp,open-pic";
69*c66ec88fSEmmanuel Vadot		interrupt-controller;
70*c66ec88fSEmmanuel Vadot		dcr-reg = <0xffc00000 0x00040000>;
71*c66ec88fSEmmanuel Vadot		#address-cells = <0>;
72*c66ec88fSEmmanuel Vadot		#size-cells = <0>;
73*c66ec88fSEmmanuel Vadot		#interrupt-cells = <2>;
74*c66ec88fSEmmanuel Vadot
75*c66ec88fSEmmanuel Vadot	};
76*c66ec88fSEmmanuel Vadot
77*c66ec88fSEmmanuel Vadot	plb {
78*c66ec88fSEmmanuel Vadot		compatible = "ibm,plb6";
79*c66ec88fSEmmanuel Vadot		#address-cells = <2>;
80*c66ec88fSEmmanuel Vadot		#size-cells = <2>;
81*c66ec88fSEmmanuel Vadot		ranges;
82*c66ec88fSEmmanuel Vadot		clock-frequency = <200000000>; // 200Mhz
83*c66ec88fSEmmanuel Vadot
84*c66ec88fSEmmanuel Vadot		POB0: opb {
85*c66ec88fSEmmanuel Vadot			compatible = "ibm,opb-4xx", "ibm,opb";
86*c66ec88fSEmmanuel Vadot			#address-cells = <1>;
87*c66ec88fSEmmanuel Vadot			#size-cells = <1>;
88*c66ec88fSEmmanuel Vadot			/* Wish there was a nicer way of specifying a full
89*c66ec88fSEmmanuel Vadot			 * 32-bit range
90*c66ec88fSEmmanuel Vadot			 */
91*c66ec88fSEmmanuel Vadot			ranges = <0x00000000 0x00000200 0x00000000 0x80000000
92*c66ec88fSEmmanuel Vadot				  0x80000000 0x00000200 0x80000000 0x80000000>;
93*c66ec88fSEmmanuel Vadot			clock-frequency = <100000000>;
94*c66ec88fSEmmanuel Vadot
95*c66ec88fSEmmanuel Vadot			UART0: serial@10000000 {
96*c66ec88fSEmmanuel Vadot				device_type = "serial";
97*c66ec88fSEmmanuel Vadot				compatible = "ns16750", "ns16550";
98*c66ec88fSEmmanuel Vadot				reg = <0x10000000 0x00000008>;
99*c66ec88fSEmmanuel Vadot				virtual-reg = <0xe1000000>;
100*c66ec88fSEmmanuel Vadot				clock-frequency = <1851851>; // PCIe refclk/MCGC0_CTL[UART]
101*c66ec88fSEmmanuel Vadot				current-speed = <115200>;
102*c66ec88fSEmmanuel Vadot				interrupt-parent = <&MPIC>;
103*c66ec88fSEmmanuel Vadot				interrupts = <34 2>;
104*c66ec88fSEmmanuel Vadot			};
105*c66ec88fSEmmanuel Vadot
106*c66ec88fSEmmanuel Vadot			FPGA0: fpga@50000000 {
107*c66ec88fSEmmanuel Vadot				compatible = "ibm,currituck-fpga";
108*c66ec88fSEmmanuel Vadot				reg = <0x50000000 0x4>;
109*c66ec88fSEmmanuel Vadot			};
110*c66ec88fSEmmanuel Vadot
111*c66ec88fSEmmanuel Vadot			IIC0: i2c@0 {
112*c66ec88fSEmmanuel Vadot				compatible = "ibm,iic-currituck", "ibm,iic";
113*c66ec88fSEmmanuel Vadot				reg = <0x0 0x00000014>;
114*c66ec88fSEmmanuel Vadot				interrupt-parent = <&MPIC>;
115*c66ec88fSEmmanuel Vadot				interrupts = <79 2>;
116*c66ec88fSEmmanuel Vadot				#address-cells = <1>;
117*c66ec88fSEmmanuel Vadot				#size-cells = <0>;
118*c66ec88fSEmmanuel Vadot                                rtc@68 {
119*c66ec88fSEmmanuel Vadot                                        compatible = "st,m41t80", "m41st85";
120*c66ec88fSEmmanuel Vadot                                        reg = <0x68>;
121*c66ec88fSEmmanuel Vadot                                };
122*c66ec88fSEmmanuel Vadot			};
123*c66ec88fSEmmanuel Vadot		};
124*c66ec88fSEmmanuel Vadot
125*c66ec88fSEmmanuel Vadot		PCIE0: pcie@10100000000 {		// 4xGBIF1
126*c66ec88fSEmmanuel Vadot			device_type = "pci";
127*c66ec88fSEmmanuel Vadot			#interrupt-cells = <1>;
128*c66ec88fSEmmanuel Vadot			#size-cells = <2>;
129*c66ec88fSEmmanuel Vadot			#address-cells = <3>;
130*c66ec88fSEmmanuel Vadot			compatible = "ibm,plb-pciex-476fpe", "ibm,plb-pciex";
131*c66ec88fSEmmanuel Vadot			primary;
132*c66ec88fSEmmanuel Vadot			port = <0x0>; /* port number */
133*c66ec88fSEmmanuel Vadot			reg = <0x00000101 0x00000000 0x0 0x10000000		/* Config space access */
134*c66ec88fSEmmanuel Vadot			       0x00000100 0x00000000 0x0 0x00001000>;	/* UTL Registers space access */
135*c66ec88fSEmmanuel Vadot			dcr-reg = <0x80 0x20>;
136*c66ec88fSEmmanuel Vadot
137*c66ec88fSEmmanuel Vadot//                                pci_space  < pci_addr          > < cpu_addr          > < size       >
138*c66ec88fSEmmanuel Vadot			ranges = <0x02000000 0x00000000 0x80000000 0x00000110 0x80000000 0x0 0x80000000
139*c66ec88fSEmmanuel Vadot			          0x01000000 0x0        0x0        0x00000140 0x0        0x0 0x00010000>;
140*c66ec88fSEmmanuel Vadot
141*c66ec88fSEmmanuel Vadot			/* Inbound starting at 0 to memsize filled in by zImage */
142*c66ec88fSEmmanuel Vadot			dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x0>;
143*c66ec88fSEmmanuel Vadot
144*c66ec88fSEmmanuel Vadot			/* This drives busses 0 to 0xf */
145*c66ec88fSEmmanuel Vadot			bus-range = <0x0 0xf>;
146*c66ec88fSEmmanuel Vadot
147*c66ec88fSEmmanuel Vadot			/* Legacy interrupts (note the weird polarity, the bridge seems
148*c66ec88fSEmmanuel Vadot			 * to invert PCIe legacy interrupts).
149*c66ec88fSEmmanuel Vadot			 * We are de-swizzling here because the numbers are actually for
150*c66ec88fSEmmanuel Vadot			 * port of the root complex virtual P2P bridge. But I want
151*c66ec88fSEmmanuel Vadot			 * to avoid putting a node for it in the tree, so the numbers
152*c66ec88fSEmmanuel Vadot			 * below are basically de-swizzled numbers.
153*c66ec88fSEmmanuel Vadot			 * The real slot is on idsel 0, so the swizzling is 1:1
154*c66ec88fSEmmanuel Vadot			 */
155*c66ec88fSEmmanuel Vadot			interrupt-map-mask = <0x0 0x0 0x0 0x7>;
156*c66ec88fSEmmanuel Vadot			interrupt-map = <
157*c66ec88fSEmmanuel Vadot				0x0 0x0 0x0 0x1 &MPIC 46 0x2 /* int A */
158*c66ec88fSEmmanuel Vadot				0x0 0x0 0x0 0x2 &MPIC 47 0x2 /* int B */
159*c66ec88fSEmmanuel Vadot				0x0 0x0 0x0 0x3 &MPIC 48 0x2 /* int C */
160*c66ec88fSEmmanuel Vadot				0x0 0x0 0x0 0x4 &MPIC 49 0x2 /* int D */>;
161*c66ec88fSEmmanuel Vadot		};
162*c66ec88fSEmmanuel Vadot
163*c66ec88fSEmmanuel Vadot		PCIE1: pcie@30100000000 {		// 4xGBIF0
164*c66ec88fSEmmanuel Vadot			device_type = "pci";
165*c66ec88fSEmmanuel Vadot			#interrupt-cells = <1>;
166*c66ec88fSEmmanuel Vadot			#size-cells = <2>;
167*c66ec88fSEmmanuel Vadot			#address-cells = <3>;
168*c66ec88fSEmmanuel Vadot			compatible = "ibm,plb-pciex-476fpe", "ibm,plb-pciex";
169*c66ec88fSEmmanuel Vadot			primary;
170*c66ec88fSEmmanuel Vadot			port = <0x1>; /* port number */
171*c66ec88fSEmmanuel Vadot			reg = <0x00000301 0x00000000 0x0 0x10000000		/* Config space access */
172*c66ec88fSEmmanuel Vadot			       0x00000300 0x00000000 0x0 0x00001000>;	/* UTL Registers space access */
173*c66ec88fSEmmanuel Vadot			dcr-reg = <0x60 0x20>;
174*c66ec88fSEmmanuel Vadot
175*c66ec88fSEmmanuel Vadot			ranges = <0x02000000 0x00000000 0x80000000 0x00000310 0x80000000 0x0 0x80000000
176*c66ec88fSEmmanuel Vadot			          0x01000000 0x0        0x0        0x00000340 0x0        0x0 0x00010000>;
177*c66ec88fSEmmanuel Vadot
178*c66ec88fSEmmanuel Vadot			/* Inbound starting at 0 to memsize filled in by zImage */
179*c66ec88fSEmmanuel Vadot			dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x0>;
180*c66ec88fSEmmanuel Vadot
181*c66ec88fSEmmanuel Vadot			/* This drives busses 0 to 0xf */
182*c66ec88fSEmmanuel Vadot			bus-range = <0x0 0xf>;
183*c66ec88fSEmmanuel Vadot
184*c66ec88fSEmmanuel Vadot			/* Legacy interrupts (note the weird polarity, the bridge seems
185*c66ec88fSEmmanuel Vadot			 * to invert PCIe legacy interrupts).
186*c66ec88fSEmmanuel Vadot			 * We are de-swizzling here because the numbers are actually for
187*c66ec88fSEmmanuel Vadot			 * port of the root complex virtual P2P bridge. But I want
188*c66ec88fSEmmanuel Vadot			 * to avoid putting a node for it in the tree, so the numbers
189*c66ec88fSEmmanuel Vadot			 * below are basically de-swizzled numbers.
190*c66ec88fSEmmanuel Vadot			 * The real slot is on idsel 0, so the swizzling is 1:1
191*c66ec88fSEmmanuel Vadot			 */
192*c66ec88fSEmmanuel Vadot			interrupt-map-mask = <0x0 0x0 0x0 0x7>;
193*c66ec88fSEmmanuel Vadot			interrupt-map = <
194*c66ec88fSEmmanuel Vadot				0x0 0x0 0x0 0x1 &MPIC 38 0x2 /* int A */
195*c66ec88fSEmmanuel Vadot				0x0 0x0 0x0 0x2 &MPIC 39 0x2 /* int B */
196*c66ec88fSEmmanuel Vadot				0x0 0x0 0x0 0x3 &MPIC 40 0x2 /* int C */
197*c66ec88fSEmmanuel Vadot				0x0 0x0 0x0 0x4 &MPIC 41 0x2 /* int D */>;
198*c66ec88fSEmmanuel Vadot		};
199*c66ec88fSEmmanuel Vadot
200*c66ec88fSEmmanuel Vadot		PCIE2: pcie@38100000000 {		// 2xGBIF0
201*c66ec88fSEmmanuel Vadot			device_type = "pci";
202*c66ec88fSEmmanuel Vadot			#interrupt-cells = <1>;
203*c66ec88fSEmmanuel Vadot			#size-cells = <2>;
204*c66ec88fSEmmanuel Vadot			#address-cells = <3>;
205*c66ec88fSEmmanuel Vadot			compatible = "ibm,plb-pciex-476fpe", "ibm,plb-pciex";
206*c66ec88fSEmmanuel Vadot			primary;
207*c66ec88fSEmmanuel Vadot			port = <0x2>; /* port number */
208*c66ec88fSEmmanuel Vadot			reg = <0x00000381 0x00000000 0x0 0x10000000		/* Config space access */
209*c66ec88fSEmmanuel Vadot			       0x00000380 0x00000000 0x0 0x00001000>;	/* UTL Registers space access */
210*c66ec88fSEmmanuel Vadot			dcr-reg = <0xA0 0x20>;
211*c66ec88fSEmmanuel Vadot
212*c66ec88fSEmmanuel Vadot			ranges = <0x02000000 0x00000000 0x80000000 0x00000390 0x80000000 0x0 0x80000000
213*c66ec88fSEmmanuel Vadot			          0x01000000 0x0        0x0        0x000003C0 0x0        0x0 0x00010000>;
214*c66ec88fSEmmanuel Vadot
215*c66ec88fSEmmanuel Vadot			/* Inbound starting at 0 to memsize filled in by zImage */
216*c66ec88fSEmmanuel Vadot			dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x0>;
217*c66ec88fSEmmanuel Vadot
218*c66ec88fSEmmanuel Vadot			/* This drives busses 0 to 0xf */
219*c66ec88fSEmmanuel Vadot			bus-range = <0x0 0xf>;
220*c66ec88fSEmmanuel Vadot
221*c66ec88fSEmmanuel Vadot			/* Legacy interrupts (note the weird polarity, the bridge seems
222*c66ec88fSEmmanuel Vadot			 * to invert PCIe legacy interrupts).
223*c66ec88fSEmmanuel Vadot			 * We are de-swizzling here because the numbers are actually for
224*c66ec88fSEmmanuel Vadot			 * port of the root complex virtual P2P bridge. But I want
225*c66ec88fSEmmanuel Vadot			 * to avoid putting a node for it in the tree, so the numbers
226*c66ec88fSEmmanuel Vadot			 * below are basically de-swizzled numbers.
227*c66ec88fSEmmanuel Vadot			 * The real slot is on idsel 0, so the swizzling is 1:1
228*c66ec88fSEmmanuel Vadot			 */
229*c66ec88fSEmmanuel Vadot			interrupt-map-mask = <0x0 0x0 0x0 0x7>;
230*c66ec88fSEmmanuel Vadot			interrupt-map = <
231*c66ec88fSEmmanuel Vadot				0x0 0x0 0x0 0x1 &MPIC 54 0x2 /* int A */
232*c66ec88fSEmmanuel Vadot				0x0 0x0 0x0 0x2 &MPIC 55 0x2 /* int B */
233*c66ec88fSEmmanuel Vadot				0x0 0x0 0x0 0x3 &MPIC 56 0x2 /* int C */
234*c66ec88fSEmmanuel Vadot				0x0 0x0 0x0 0x4 &MPIC 57 0x2 /* int D */>;
235*c66ec88fSEmmanuel Vadot		};
236*c66ec88fSEmmanuel Vadot
237*c66ec88fSEmmanuel Vadot	};
238*c66ec88fSEmmanuel Vadot
239*c66ec88fSEmmanuel Vadot	chosen {
240*c66ec88fSEmmanuel Vadot		stdout-path = &UART0;
241*c66ec88fSEmmanuel Vadot	};
242*c66ec88fSEmmanuel Vadot};
243