blob: 2c920e22cec2b52dd983f2d20812e7fe80a0c379 [file] [log] [blame]
Tom Rini53633a82024-02-29 12:33:36 -05001// 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};