blob: c492274935be650cd29d2bd2b869683eda3c71fb [file] [log] [blame]
Leo Yanb4d71342024-04-14 08:27:39 +01001/*
2 * Copyright (c) 2020-2024, Arm Limited. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6/dts-v1/;
7
8#include <dt-bindings/interrupt-controller/arm-gic.h>
9#include <dt-bindings/interrupt-controller/irq.h>
10#include <platform_def.h>
11
Leo Yan4d4a1972024-04-24 09:53:21 +010012#if TARGET_FLAVOUR_FVP
13#define LIT_CAPACITY 406
14#define MID_CAPACITY 912
15#else /* TARGET_FLAVOUR_FPGA */
16#define LIT_CAPACITY 280
17#define MID_CAPACITY 775
18/* this is an area optimized configuration of the big core */
19#define BIG2_CAPACITY 930
20#endif /* TARGET_FLAVOUR_FPGA */
21#define BIG_CAPACITY 1024
22
Leo Yan4d4a1972024-04-24 09:53:21 +010023#define MHU_TX_ADDR 45000000 /* hex */
Boyan Karatotevcd2b4cc2024-04-24 10:09:18 +010024#define MHU_TX_COMPAT "arm,mhuv2-tx","arm,primecell"
25#define MHU_TX_INT_NAME "mhu_tx"
26
Leo Yan4d4a1972024-04-24 09:53:21 +010027#define MHU_RX_ADDR 45010000 /* hex */
Boyan Karatotevcd2b4cc2024-04-24 10:09:18 +010028#define MHU_RX_COMPAT "arm,mhuv2-rx","arm,primecell"
29#define MHU_OFFSET 0x1000
30#define MHU_MBOX_CELLS 2
31#define MHU_RX_INT_NUM 317
32#define MHU_RX_INT_NAME "mhu_rx"
33
Jagdish Gediya9247a602024-04-24 15:20:21 +010034#define LIT_CPU_PMU_COMPATIBLE "arm,cortex-a520-pmu"
35#define MID_CPU_PMU_COMPATIBLE "arm,cortex-a720-pmu"
36#define BIG_CPU_PMU_COMPATIBLE "arm,cortex-x4-pmu"
37
Leo Yan4d4a1972024-04-24 09:53:21 +010038#define MPAM_ADDR 0x1 0x00010000 /* 0x1_0001_0000 */
39#define UARTCLK_FREQ 5000000
40
41#define DPU_ADDR 2cc00000
42#define DPU_IRQ 69
43
Jackson Cooper-Driver61418972024-04-24 10:27:58 +010044#define ETHERNET_ADDR 18000000
45#define ETHERNET_INT 109
46
47#define SYS_REGS_ADDR 1c010000
48
49#define MMC_ADDR 1c050000
50#define MMC_INT_0 107
51#define MMC_INT_1 108
52
53#define RTC_ADDR 1c170000
54#define RTC_INT 100
55
56#define KMI_0_ADDR 1c060000
57#define KMI_0_INT 197
58#define KMI_1_ADDR 1c070000
59#define KMI_1_INT 103
60
61#define VIRTIO_BLOCK_ADDR 1c130000
62#define VIRTIO_BLOCK_INT 204
63
Leo Yanb4d71342024-04-14 08:27:39 +010064#include "tc-common.dtsi"
65#if TARGET_FLAVOUR_FVP
66#include "tc-fvp.dtsi"
Leo Yan815f5502024-04-24 09:57:28 +010067#else
68#include "tc-fpga.dtsi"
Leo Yanb4d71342024-04-14 08:27:39 +010069#endif /* TARGET_FLAVOUR_FVP */
70#include "tc-base.dtsi"
Leo Yan4d4a1972024-04-24 09:53:21 +010071
72/ {
Leo Yan6705ff02024-04-14 22:09:34 +010073 cpus {
74#if TARGET_FLAVOUR_FPGA
75 cpu-map {
76 cluster0 {
77 core8 {
78 cpu = <&CPU8>;
79 };
80 core9 {
81 cpu = <&CPU9>;
82 };
83 core10 {
84 cpu = <&CPU10>;
85 };
86 core11 {
87 cpu = <&CPU11>;
88 };
89 core12 {
90 cpu = <&CPU12>;
91 };
92 core13 {
93 cpu = <&CPU13>;
94 };
95 };
96 };
97#endif
98
99 CPU2:cpu@200 {
100 clocks = <&scmi_dvfs 0>;
101 capacity-dmips-mhz = <LIT_CAPACITY>;
102 };
103
104 CPU3:cpu@300 {
105 clocks = <&scmi_dvfs 0>;
106 capacity-dmips-mhz = <LIT_CAPACITY>;
107 };
108
109 CPU6:cpu@600 {
110 clocks = <&scmi_dvfs 1>;
111 capacity-dmips-mhz = <MID_CAPACITY>;
112 };
113
114 CPU7:cpu@700 {
115 clocks = <&scmi_dvfs 1>;
116 capacity-dmips-mhz = <MID_CAPACITY>;
117 };
118
119#if TARGET_FLAVOUR_FPGA
120 CPU8:cpu@800 {
121 device_type = "cpu";
122 compatible = "arm,armv8";
123 reg = <0x800>;
124 enable-method = "psci";
125 clocks = <&scmi_dvfs 1>;
126 capacity-dmips-mhz = <MID_CAPACITY>;
127 amu = <&amu>;
128 supports-mpmm;
129 };
130
131 CPU9:cpu@900 {
132 device_type = "cpu";
133 compatible = "arm,armv8";
134 reg = <0x900>;
135 enable-method = "psci";
136 clocks = <&scmi_dvfs 2>;
137 capacity-dmips-mhz = <BIG2_CAPACITY>;
138 amu = <&amu>;
139 supports-mpmm;
140 };
141
142 CPU10:cpu@A00 {
143 device_type = "cpu";
144 compatible = "arm,armv8";
145 reg = <0xA00>;
146 enable-method = "psci";
147 clocks = <&scmi_dvfs 2>;
148 capacity-dmips-mhz = <BIG2_CAPACITY>;
149 amu = <&amu>;
150 supports-mpmm;
151 };
152
153 CPU11:cpu@B00 {
154 device_type = "cpu";
155 compatible = "arm,armv8";
156 reg = <0xB00>;
157 enable-method = "psci";
158 clocks = <&scmi_dvfs 2>;
159 capacity-dmips-mhz = <BIG2_CAPACITY>;
160 amu = <&amu>;
161 supports-mpmm;
162 };
163
164 CPU12:cpu@C00 {
165 device_type = "cpu";
166 compatible = "arm,armv8";
167 reg = <0xC00>;
168 enable-method = "psci";
169 clocks = <&scmi_dvfs 3>;
170 capacity-dmips-mhz = <BIG_CAPACITY>;
171 amu = <&amu>;
172 supports-mpmm;
173 };
174
175 CPU13:cpu@D00 {
176 device_type = "cpu";
177 compatible = "arm,armv8";
178 reg = <0xD00>;
179 enable-method = "psci";
180 clocks = <&scmi_dvfs 3>;
181 capacity-dmips-mhz = <BIG_CAPACITY>;
182 amu = <&amu>;
183 supports-mpmm;
184 };
185#endif
186 };
187
188#if TARGET_FLAVOUR_FPGA
189 ete8 {
190 compatible = "arm,embedded-trace-extension";
191 cpu = <&CPU8>;
192 };
193
194 ete9 {
195 compatible = "arm,embedded-trace-extension";
196 cpu = <&CPU9>;
197 };
198
199 ete10 {
200 compatible = "arm,embedded-trace-extension";
201 cpu = <&CPU10>;
202 };
203
204 ete11 {
205 compatible = "arm,embedded-trace-extension";
206 cpu = <&CPU11>;
207 };
208
209 ete12 {
210 compatible = "arm,embedded-trace-extension";
211 cpu = <&CPU12>;
212 };
213
214 ete13 {
215 compatible = "arm,embedded-trace-extension";
216 cpu = <&CPU13>;
217 };
218#endif /* TARGET_FLAVOUR_FPGA */
219
Leo Yan4d4a1972024-04-24 09:53:21 +0100220 cmn-pmu {
221 compatible = "arm,ci-700";
222 reg = <0x0 0x50000000 0x0 0x10000000>;
Jagdish Gediyabd6755d2024-04-23 12:06:47 +0100223 interrupts = <GIC_SPI 460 IRQ_TYPE_LEVEL_HIGH 0>;
Leo Yan4d4a1972024-04-24 09:53:21 +0100224 };
Leo Yan6705ff02024-04-14 22:09:34 +0100225
Boyan Karatotevd1f55502024-04-19 12:00:49 +0100226 mbox_db_rx: mhu@MHU_RX_ADDR {
227 arm,mhuv2-protocols = <0 1>;
228 };
229
230 mbox_db_tx: mhu@MHU_TX_ADDR {
231 arm,mhuv2-protocols = <0 1>;
232 };
233
Boyan Karatotev102554c2024-04-19 12:27:46 +0100234 firmware {
235 /*
236 * TC2 does not have a P2A channel, but wiring one was needed to make Linux work
237 * (by chance). At the time the SCMI driver did not support bidirectional
238 * mailboxes so as a workaround, the A2P channel was wired for TX communication
239 * and the synchronous replies would be read asyncrhonously as if coming from
240 * the P2A channel, while being the actual A2P channel.
241 *
242 * This will not work with kernels > 5.15, but keep it around to keep TC2
243 * working with its target kernel. Newer kernels will still work, but SCMI
244 * won't as they check that the two regions are distinct.
245 */
246 scmi {
247 mboxes = <&mbox_db_tx 0 0 &mbox_db_rx 0 0>;
248 shmem = <&cpu_scp_scmi_a2p &cpu_scp_scmi_a2p>;
249 };
250 };
251
Jagdish Gediya35625da2024-04-23 12:36:32 +0100252 gic: interrupt-controller@GIC_CTRL_ADDR {
253 ppi-partitions {
254 ppi_partition_little: interrupt-partition-0 {
255 affinity = <&CPU0>, <&CPU1>, <&CPU2>, <&CPU3>;
256 };
257
258#if TARGET_FLAVOUR_FVP
259 ppi_partition_mid: interrupt-partition-1 {
260 affinity = <&CPU4>, <&CPU5>, <&CPU6>;
261 };
262
263 ppi_partition_big: interrupt-partition-2 {
264 affinity = <&CPU7>;
265 };
266#elif TARGET_FLAVOUR_FPGA
267 ppi_partition_mid: interrupt-partition-1 {
268 affinity = <&CPU4>, <&CPU5>, <&CPU6>, <&CPU7>, <&CPU8>;
269 };
270
271 ppi_partition_big: interrupt-partition-2 {
272 affinity = <&CPU9>, <&CPU10>, <&CPU11>, <&CPU12>, <&CPU13>;
273 };
274#endif
275 };
276 };
277
Jagdish Gediyac71080f2024-04-23 13:46:41 +0100278 spe-pmu-big {
279 status = "okay";
280 };
281
Leo Yan983fd452024-06-04 12:51:12 +0100282 smmu_700: iommu@3f000000 {
283 status = "okay";
284 };
285
Leo Yan6705ff02024-04-14 22:09:34 +0100286 dp0: display@DPU_ADDR {
287#if TC_SCMI_PD_CTRL_EN
288 power-domains = <&scmi_devpd (PLAT_MAX_CPUS_PER_CLUSTER + 2)>;
289#endif
Leo Yan983fd452024-06-04 12:51:12 +0100290 iommus = <&smmu_700 0x100>;
291 };
292
293 gpu: gpu@2d000000 {
Leo Yan41606fc2024-04-22 18:02:52 +0100294 interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH 0>,
295 <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH 0>,
296 <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH 0>;
297 interrupt-names = "JOB", "MMU", "GPU";
Leo Yan983fd452024-06-04 12:51:12 +0100298 iommus = <&smmu_700 0x200>;
Leo Yan6705ff02024-04-14 22:09:34 +0100299 };
Leo Yan4d4a1972024-04-24 09:53:21 +0100300};