1// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2/*
3 * Copyright (C) 2019 Marvell Technology Group Ltd.
4 *
5 * Device Tree file for Marvell Armada AP80x.
6 */
7
8#include <dt-bindings/interrupt-controller/arm-gic.h>
9#include <dt-bindings/thermal/thermal.h>
10
11/dts-v1/;
12
13/ {
14	#address-cells = <2>;
15	#size-cells = <2>;
16
17	aliases {
18		serial0 = &uart0;
19		serial1 = &uart1;
20		gpio0 = &ap_gpio;
21		spi0 = &spi0;
22	};
23
24	psci {
25		compatible = "arm,psci-0.2";
26		method = "smc";
27	};
28
29	reserved-memory {
30		#address-cells = <2>;
31		#size-cells = <2>;
32		ranges;
33
34		/*
35		 * This area matches the mapping done with a
36		 * mainline U-Boot, and should be updated by the
37		 * bootloader.
38		 */
39
40		psci-area@4000000 {
41			reg = <0x0 0x4000000 0x0 0x200000>;
42			no-map;
43		};
44
45		tee@4400000 {
46			reg = <0 0x4400000 0 0x1000000>;
47			no-map;
48		};
49	};
50
51	AP_NAME {
52		#address-cells = <2>;
53		#size-cells = <2>;
54		compatible = "simple-bus";
55		interrupt-parent = <&gic>;
56		ranges;
57
58		config-space@f0000000 {
59			#address-cells = <1>;
60			#size-cells = <1>;
61			compatible = "simple-bus";
62			ranges = <0x0 0x0 0xf0000000 0x1000000>;
63
64			smmu: iommu@5000000 {
65				compatible = "marvell,ap806-smmu-500", "arm,mmu-500";
66				reg = <0x100000 0x100000>;
67				dma-coherent;
68				#iommu-cells = <1>;
69				#global-interrupts = <1>;
70				interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
71					     <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
72					     <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
73					     <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
74					     <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
75					     <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
76					     <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
77					     <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
78					     <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
79				status = "disabled";
80			};
81
82			gic: interrupt-controller@210000 {
83				compatible = "arm,gic-400";
84				#interrupt-cells = <3>;
85				#address-cells = <1>;
86				#size-cells = <1>;
87				ranges;
88				interrupt-controller;
89				interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
90				reg = <0x210000 0x10000>,
91				      <0x220000 0x20000>,
92				      <0x240000 0x20000>,
93				      <0x260000 0x20000>;
94
95				gic_v2m0: v2m@280000 {
96					compatible = "arm,gic-v2m-frame";
97					msi-controller;
98					reg = <0x280000 0x1000>;
99					arm,msi-base-spi = <160>;
100					arm,msi-num-spis = <32>;
101				};
102				gic_v2m1: v2m@290000 {
103					compatible = "arm,gic-v2m-frame";
104					msi-controller;
105					reg = <0x290000 0x1000>;
106					arm,msi-base-spi = <192>;
107					arm,msi-num-spis = <32>;
108				};
109				gic_v2m2: v2m@2a0000 {
110					compatible = "arm,gic-v2m-frame";
111					msi-controller;
112					reg = <0x2a0000 0x1000>;
113					arm,msi-base-spi = <224>;
114					arm,msi-num-spis = <32>;
115				};
116				gic_v2m3: v2m@2b0000 {
117					compatible = "arm,gic-v2m-frame";
118					msi-controller;
119					reg = <0x2b0000 0x1000>;
120					arm,msi-base-spi = <256>;
121					arm,msi-num-spis = <32>;
122				};
123			};
124
125			timer {
126				compatible = "arm,armv8-timer";
127				interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
128					     <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
129					     <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
130					     <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>;
131			};
132
133			pmu {
134				compatible = "arm,cortex-a72-pmu";
135				interrupt-parent = <&pic>;
136				interrupts = <17>;
137			};
138
139			odmi: odmi@300000 {
140				compatible = "marvell,odmi-controller";
141				interrupt-controller;
142				msi-controller;
143				marvell,odmi-frames = <4>;
144				reg = <0x300000 0x4000>,
145				      <0x304000 0x4000>,
146				      <0x308000 0x4000>,
147				      <0x30C000 0x4000>;
148				marvell,spi-base = <128>, <136>, <144>, <152>;
149			};
150
151			gicp: gicp@3f0040 {
152				compatible = "marvell,ap806-gicp";
153				reg = <0x3f0040 0x10>;
154				marvell,spi-ranges = <64 64>, <288 64>;
155				msi-controller;
156			};
157
158			pic: interrupt-controller@3f0100 {
159				compatible = "marvell,armada-8k-pic";
160				reg = <0x3f0100 0x10>;
161				#interrupt-cells = <1>;
162				interrupt-controller;
163				interrupts = <GIC_PPI 15 IRQ_TYPE_LEVEL_HIGH>;
164			};
165
166			sei: interrupt-controller@3f0200 {
167				compatible = "marvell,ap806-sei";
168				reg = <0x3f0200 0x40>;
169				interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
170				#interrupt-cells = <1>;
171				interrupt-controller;
172				msi-controller;
173			};
174
175			xor@400000 {
176				compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
177				reg = <0x400000 0x1000>,
178				      <0x410000 0x1000>;
179				msi-parent = <&gic_v2m0>;
180				clocks = <&ap_clk 3>;
181				dma-coherent;
182			};
183
184			xor@420000 {
185				compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
186				reg = <0x420000 0x1000>,
187				      <0x430000 0x1000>;
188				msi-parent = <&gic_v2m0>;
189				clocks = <&ap_clk 3>;
190				dma-coherent;
191			};
192
193			xor@440000 {
194				compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
195				reg = <0x440000 0x1000>,
196				      <0x450000 0x1000>;
197				msi-parent = <&gic_v2m0>;
198				clocks = <&ap_clk 3>;
199				dma-coherent;
200			};
201
202			xor@460000 {
203				compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
204				reg = <0x460000 0x1000>,
205				      <0x470000 0x1000>;
206				msi-parent = <&gic_v2m0>;
207				clocks = <&ap_clk 3>;
208				dma-coherent;
209			};
210
211			spi0: spi@510600 {
212				compatible = "marvell,armada-380-spi";
213				reg = <0x510600 0x50>;
214				#address-cells = <1>;
215				#size-cells = <0>;
216				interrupts = <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>;
217				clocks = <&ap_clk 3>;
218				status = "disabled";
219			};
220
221			i2c0: i2c@511000 {
222				compatible = "marvell,mv78230-i2c";
223				reg = <0x511000 0x20>;
224				#address-cells = <1>;
225				#size-cells = <0>;
226				interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
227				clocks = <&ap_clk 3>;
228				status = "disabled";
229			};
230
231			uart0: serial@512000 {
232				compatible = "snps,dw-apb-uart";
233				reg = <0x512000 0x100>;
234				reg-shift = <2>;
235				interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
236				reg-io-width = <1>;
237				clocks = <&ap_clk 3>;
238				status = "disabled";
239			};
240
241			uart1: serial@512100 {
242				compatible = "snps,dw-apb-uart";
243				reg = <0x512100 0x100>;
244				reg-shift = <2>;
245				interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>;
246				reg-io-width = <1>;
247				clocks = <&ap_clk 3>;
248				status = "disabled";
249
250			};
251
252			watchdog: watchdog@610000 {
253				compatible = "arm,sbsa-gwdt";
254				reg = <0x610000 0x1000>, <0x600000 0x1000>;
255				interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
256			};
257
258			ap_sdhci0: mmc@6e0000 {
259				compatible = "marvell,armada-ap806-sdhci";
260				reg = <0x6e0000 0x300>;
261				interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>;
262				clock-names = "core";
263				clocks = <&ap_clk 4>;
264				dma-coherent;
265				marvell,xenon-phy-slow-mode;
266				status = "disabled";
267			};
268
269			ap_syscon0: system-controller@6f4000 {
270				compatible = "syscon", "simple-mfd";
271				reg = <0x6f4000 0x2000>;
272
273				ap_pinctrl: pinctrl {
274					compatible = "marvell,ap806-pinctrl";
275
276					uart0_pins: uart0-pins {
277						marvell,pins = "mpp11", "mpp19";
278						marvell,function = "uart0";
279					};
280				};
281
282				ap_gpio: gpio@1040 {
283					compatible = "marvell,armada-8k-gpio";
284					offset = <0x1040>;
285					ngpios = <20>;
286					gpio-controller;
287					#gpio-cells = <2>;
288					gpio-ranges = <&ap_pinctrl 0 0 20>;
289					marvell,pwm-offset = <0x10c0>;
290					#pwm-cells = <2>;
291					clocks = <&ap_clk 3>;
292				};
293			};
294
295			ap_syscon1: system-controller@6f8000 {
296				compatible = "syscon", "simple-mfd";
297				reg = <0x6f8000 0x1000>;
298				#address-cells = <1>;
299				#size-cells = <1>;
300
301				ap_thermal: thermal-sensor@80 {
302					compatible = "marvell,armada-ap806-thermal";
303					reg = <0x80 0x10>;
304					interrupt-parent = <&sei>;
305					interrupts = <18>;
306					#thermal-sensor-cells = <1>;
307				};
308			};
309		};
310	};
311
312	/*
313	 * The thermal IP features one internal sensor plus, if applicable, one
314	 * remote channel wired to one sensor per CPU.
315	 *
316	 * Only one thermal zone per AP/CP may trigger interrupts at a time, the
317	 * first one that will have a critical trip point will be chosen.
318	 */
319	thermal-zones {
320		ap_thermal_ic: ap-ic-thermal {
321			polling-delay-passive = <0>; /* Interrupt driven */
322			polling-delay = <0>; /* Interrupt driven */
323
324			thermal-sensors = <&ap_thermal 0>;
325
326			trips {
327				ap_crit: ap-crit {
328					temperature = <100000>; /* mC degrees */
329					hysteresis = <2000>; /* mC degrees */
330					type = "critical";
331				};
332			};
333
334			cooling-maps { };
335		};
336
337		ap_thermal_cpu0: ap-cpu0-thermal {
338			polling-delay-passive = <1000>;
339			polling-delay = <1000>;
340
341			thermal-sensors = <&ap_thermal 1>;
342
343			trips {
344				cpu0_hot: cpu0-hot {
345					temperature = <85000>;
346					hysteresis = <2000>;
347					type = "passive";
348				};
349				cpu0_emerg: cpu0-emerg {
350					temperature = <95000>;
351					hysteresis = <2000>;
352					type = "passive";
353				};
354			};
355
356			cooling-maps {
357				map0_hot: map0-hot {
358					trip = <&cpu0_hot>;
359					cooling-device = <&cpu0 1 2>,
360						<&cpu1 1 2>;
361				};
362				map0_emerg: map0-ermerg {
363					trip = <&cpu0_emerg>;
364					cooling-device = <&cpu0 3 3>,
365						<&cpu1 3 3>;
366				};
367			};
368		};
369
370		ap_thermal_cpu1: ap-cpu1-thermal {
371			polling-delay-passive = <1000>;
372			polling-delay = <1000>;
373
374			thermal-sensors = <&ap_thermal 2>;
375
376			trips {
377				cpu1_hot: cpu1-hot {
378					temperature = <85000>;
379					hysteresis = <2000>;
380					type = "passive";
381				};
382				cpu1_emerg: cpu1-emerg {
383					temperature = <95000>;
384					hysteresis = <2000>;
385					type = "passive";
386				};
387			};
388
389			cooling-maps {
390				map1_hot: map1-hot {
391					trip = <&cpu1_hot>;
392					cooling-device = <&cpu0 1 2>,
393						<&cpu1 1 2>;
394				};
395				map1_emerg: map1-emerg {
396					trip = <&cpu1_emerg>;
397					cooling-device = <&cpu0 3 3>,
398						<&cpu1 3 3>;
399				};
400			};
401		};
402
403		ap_thermal_cpu2: ap-cpu2-thermal {
404			polling-delay-passive = <1000>;
405			polling-delay = <1000>;
406
407			thermal-sensors = <&ap_thermal 3>;
408
409			trips {
410				cpu2_hot: cpu2-hot {
411					temperature = <85000>;
412					hysteresis = <2000>;
413					type = "passive";
414				};
415				cpu2_emerg: cpu2-emerg {
416					temperature = <95000>;
417					hysteresis = <2000>;
418					type = "passive";
419				};
420			};
421
422			cooling-maps {
423				map2_hot: map2-hot {
424					trip = <&cpu2_hot>;
425					cooling-device = <&cpu2 1 2>,
426						<&cpu3 1 2>;
427				};
428				map2_emerg: map2-emerg {
429					trip = <&cpu2_emerg>;
430					cooling-device = <&cpu2 3 3>,
431						<&cpu3 3 3>;
432				};
433			};
434		};
435
436		ap_thermal_cpu3: ap-cpu3-thermal {
437			polling-delay-passive = <1000>;
438			polling-delay = <1000>;
439
440			thermal-sensors = <&ap_thermal 4>;
441
442			trips {
443				cpu3_hot: cpu3-hot {
444					temperature = <85000>;
445					hysteresis = <2000>;
446					type = "passive";
447				};
448				cpu3_emerg: cpu3-emerg {
449					temperature = <95000>;
450					hysteresis = <2000>;
451					type = "passive";
452				};
453			};
454
455			cooling-maps {
456				map3_hot: map3-bhot {
457					trip = <&cpu3_hot>;
458					cooling-device = <&cpu2 1 2>,
459						<&cpu3 1 2>;
460				};
461				map3_emerg: map3-emerg {
462					trip = <&cpu3_emerg>;
463					cooling-device = <&cpu2 3 3>,
464						<&cpu3 3 3>;
465				};
466			};
467		};
468	};
469};
470