Skip to content

Commit 9e1b2a0

Browse files
Radhey Shyam Pandeymathieupoirier
authored andcommitted
dt-bindings: remoteproc: Add Tightly Coupled Memory (TCM) bindings
Introduce bindings for TCM memory address space on AMD-xilinx Zynq UltraScale+ platform. It will help in defining TCM in device-tree and make it's access platform agnostic and data-driven. Tightly-coupled memories(TCMs) are low-latency memory that provides predictable instruction execution and predictable data load/store timing. Each Cortex-R5F processor contains two 64-bit wide 64 KB memory banks on the ATCM and BTCM ports, for a total of 128 KB of memory. The TCM resources(reg, reg-names and power-domain) are documented for each TCM in the R5 node. The reg and reg-names are made as required properties as we don't want to hardcode TCM addresses for future platforms and for zu+ legacy implementation will ensure that the old dts without reg/reg-names works and stable ABI is maintained. It also extends the examples for TCM split and lockstep modes. Signed-off-by: Radhey Shyam Pandey <[email protected]> Reviewed-by: Krzysztof Kozlowski <[email protected]> Signed-off-by: Tanmay Shah <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Mathieu Poirier <[email protected]>
1 parent b31bcda commit 9e1b2a0

File tree

1 file changed

+257
-22
lines changed

1 file changed

+257
-22
lines changed

Documentation/devicetree/bindings/remoteproc/xlnx,zynqmp-r5fss.yaml

Lines changed: 257 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,26 @@ description: |
1818
1919
properties:
2020
compatible:
21-
const: xlnx,zynqmp-r5fss
21+
enum:
22+
- xlnx,zynqmp-r5fss
23+
- xlnx,versal-r5fss
24+
- xlnx,versal-net-r52fss
25+
26+
"#address-cells":
27+
const: 2
28+
29+
"#size-cells":
30+
const: 2
31+
32+
ranges:
33+
description: |
34+
Standard ranges definition providing address translations for
35+
local R5F TCM address spaces to bus addresses.
2236
2337
xlnx,cluster-mode:
2438
$ref: /schemas/types.yaml#/definitions/uint32
2539
enum: [0, 1, 2]
40+
default: 1
2641
description: |
2742
The RPU MPCore can operate in split mode (Dual-processor performance), Safety
2843
lock-step mode(Both RPU cores execute the same code in lock-step,
@@ -36,8 +51,16 @@ properties:
3651
1: lockstep mode (default)
3752
2: single cpu mode
3853
54+
xlnx,tcm-mode:
55+
$ref: /schemas/types.yaml#/definitions/uint32
56+
enum: [0, 1]
57+
description: |
58+
Configure RPU TCM
59+
0: split mode
60+
1: lockstep mode
61+
3962
patternProperties:
40-
"^r5f-[a-f0-9]+$":
63+
"^r(.*)@[0-9a-f]+$":
4164
type: object
4265
description: |
4366
The RPU is located in the Low Power Domain of the Processor Subsystem.
@@ -52,10 +75,22 @@ patternProperties:
5275
5376
properties:
5477
compatible:
55-
const: xlnx,zynqmp-r5f
78+
enum:
79+
- xlnx,zynqmp-r5f
80+
- xlnx,versal-r5f
81+
- xlnx,versal-net-r52f
82+
83+
reg:
84+
minItems: 1
85+
maxItems: 4
86+
87+
reg-names:
88+
minItems: 1
89+
maxItems: 4
5690

5791
power-domains:
58-
maxItems: 1
92+
minItems: 2
93+
maxItems: 5
5994

6095
mboxes:
6196
minItems: 1
@@ -101,35 +136,235 @@ patternProperties:
101136

102137
required:
103138
- compatible
139+
- reg
140+
- reg-names
104141
- power-domains
105142

106-
unevaluatedProperties: false
107-
108143
required:
109144
- compatible
145+
- "#address-cells"
146+
- "#size-cells"
147+
- ranges
148+
149+
allOf:
150+
- if:
151+
properties:
152+
compatible:
153+
contains:
154+
enum:
155+
- xlnx,versal-net-r52fss
156+
then:
157+
properties:
158+
xlnx,tcm-mode: false
159+
160+
patternProperties:
161+
"^r52f@[0-9a-f]+$":
162+
type: object
163+
164+
properties:
165+
reg:
166+
minItems: 1
167+
items:
168+
- description: ATCM internal memory
169+
- description: BTCM internal memory
170+
- description: CTCM internal memory
171+
172+
reg-names:
173+
minItems: 1
174+
items:
175+
- const: atcm0
176+
- const: btcm0
177+
- const: ctcm0
178+
179+
power-domains:
180+
minItems: 2
181+
items:
182+
- description: RPU core power domain
183+
- description: ATCM power domain
184+
- description: BTCM power domain
185+
- description: CTCM power domain
186+
187+
- if:
188+
properties:
189+
compatible:
190+
contains:
191+
enum:
192+
- xlnx,zynqmp-r5fss
193+
- xlnx,versal-r5fss
194+
then:
195+
if:
196+
properties:
197+
xlnx,cluster-mode:
198+
enum: [1, 2]
199+
then:
200+
properties:
201+
xlnx,tcm-mode:
202+
enum: [1]
203+
204+
patternProperties:
205+
"^r5f@[0-9a-f]+$":
206+
type: object
207+
208+
properties:
209+
reg:
210+
minItems: 1
211+
items:
212+
- description: ATCM internal memory
213+
- description: BTCM internal memory
214+
- description: extra ATCM memory in lockstep mode
215+
- description: extra BTCM memory in lockstep mode
216+
217+
reg-names:
218+
minItems: 1
219+
items:
220+
- const: atcm0
221+
- const: btcm0
222+
- const: atcm1
223+
- const: btcm1
224+
225+
power-domains:
226+
minItems: 2
227+
items:
228+
- description: RPU core power domain
229+
- description: ATCM power domain
230+
- description: BTCM power domain
231+
- description: second ATCM power domain
232+
- description: second BTCM power domain
233+
234+
required:
235+
- xlnx,tcm-mode
236+
237+
else:
238+
properties:
239+
xlnx,tcm-mode:
240+
enum: [0]
241+
242+
patternProperties:
243+
"^r5f@[0-9a-f]+$":
244+
type: object
245+
246+
properties:
247+
reg:
248+
minItems: 1
249+
items:
250+
- description: ATCM internal memory
251+
- description: BTCM internal memory
252+
253+
reg-names:
254+
minItems: 1
255+
items:
256+
- const: atcm0
257+
- const: btcm0
258+
259+
power-domains:
260+
minItems: 2
261+
items:
262+
- description: RPU core power domain
263+
- description: ATCM power domain
264+
- description: BTCM power domain
265+
266+
required:
267+
- xlnx,tcm-mode
110268

111269
additionalProperties: false
112270

113271
examples:
114272
- |
115-
remoteproc {
116-
compatible = "xlnx,zynqmp-r5fss";
117-
xlnx,cluster-mode = <1>;
118-
119-
r5f-0 {
120-
compatible = "xlnx,zynqmp-r5f";
121-
power-domains = <&zynqmp_firmware 0x7>;
122-
memory-region = <&rproc_0_fw_image>, <&rpu0vdev0buffer>, <&rpu0vdev0vring0>, <&rpu0vdev0vring1>;
123-
mboxes = <&ipi_mailbox_rpu0 0>, <&ipi_mailbox_rpu0 1>;
124-
mbox-names = "tx", "rx";
273+
#include <dt-bindings/power/xlnx-zynqmp-power.h>
274+
275+
// Split mode configuration
276+
soc {
277+
#address-cells = <2>;
278+
#size-cells = <2>;
279+
280+
remoteproc@ffe00000 {
281+
compatible = "xlnx,zynqmp-r5fss";
282+
xlnx,cluster-mode = <0>;
283+
xlnx,tcm-mode = <0>;
284+
285+
#address-cells = <2>;
286+
#size-cells = <2>;
287+
ranges = <0x0 0x0 0x0 0xffe00000 0x0 0x10000>,
288+
<0x0 0x20000 0x0 0xffe20000 0x0 0x10000>,
289+
<0x1 0x0 0x0 0xffe90000 0x0 0x10000>,
290+
<0x1 0x20000 0x0 0xffeb0000 0x0 0x10000>;
291+
292+
r5f@0 {
293+
compatible = "xlnx,zynqmp-r5f";
294+
reg = <0x0 0x0 0x0 0x10000>, <0x0 0x20000 0x0 0x10000>;
295+
reg-names = "atcm0", "btcm0";
296+
power-domains = <&zynqmp_firmware PD_RPU_0>,
297+
<&zynqmp_firmware PD_R5_0_ATCM>,
298+
<&zynqmp_firmware PD_R5_0_BTCM>;
299+
memory-region = <&rproc_0_fw_image>, <&rpu0vdev0buffer>,
300+
<&rpu0vdev0vring0>, <&rpu0vdev0vring1>;
301+
mboxes = <&ipi_mailbox_rpu0 0>, <&ipi_mailbox_rpu0 1>;
302+
mbox-names = "tx", "rx";
303+
};
304+
305+
r5f@1 {
306+
compatible = "xlnx,zynqmp-r5f";
307+
reg = <0x1 0x0 0x0 0x10000>, <0x1 0x20000 0x0 0x10000>;
308+
reg-names = "atcm0", "btcm0";
309+
power-domains = <&zynqmp_firmware PD_RPU_1>,
310+
<&zynqmp_firmware PD_R5_1_ATCM>,
311+
<&zynqmp_firmware PD_R5_1_BTCM>;
312+
memory-region = <&rproc_1_fw_image>, <&rpu1vdev0buffer>,
313+
<&rpu1vdev0vring0>, <&rpu1vdev0vring1>;
314+
mboxes = <&ipi_mailbox_rpu1 0>, <&ipi_mailbox_rpu1 1>;
315+
mbox-names = "tx", "rx";
316+
};
125317
};
318+
};
319+
320+
- |
321+
//Lockstep configuration
322+
soc {
323+
#address-cells = <2>;
324+
#size-cells = <2>;
325+
326+
remoteproc@ffe00000 {
327+
compatible = "xlnx,zynqmp-r5fss";
328+
xlnx,cluster-mode = <1>;
329+
xlnx,tcm-mode = <1>;
330+
331+
#address-cells = <2>;
332+
#size-cells = <2>;
333+
ranges = <0x0 0x0 0x0 0xffe00000 0x0 0x10000>,
334+
<0x0 0x20000 0x0 0xffe20000 0x0 0x10000>,
335+
<0x0 0x10000 0x0 0xffe10000 0x0 0x10000>,
336+
<0x0 0x30000 0x0 0xffe30000 0x0 0x10000>;
337+
338+
r5f@0 {
339+
compatible = "xlnx,zynqmp-r5f";
340+
reg = <0x0 0x0 0x0 0x10000>,
341+
<0x0 0x20000 0x0 0x10000>,
342+
<0x0 0x10000 0x0 0x10000>,
343+
<0x0 0x30000 0x0 0x10000>;
344+
reg-names = "atcm0", "btcm0", "atcm1", "btcm1";
345+
power-domains = <&zynqmp_firmware PD_RPU_0>,
346+
<&zynqmp_firmware PD_R5_0_ATCM>,
347+
<&zynqmp_firmware PD_R5_0_BTCM>,
348+
<&zynqmp_firmware PD_R5_1_ATCM>,
349+
<&zynqmp_firmware PD_R5_1_BTCM>;
350+
memory-region = <&rproc_0_fw_image>, <&rpu0vdev0buffer>,
351+
<&rpu0vdev0vring0>, <&rpu0vdev0vring1>;
352+
mboxes = <&ipi_mailbox_rpu0 0>, <&ipi_mailbox_rpu0 1>;
353+
mbox-names = "tx", "rx";
354+
};
126355
127-
r5f-1 {
128-
compatible = "xlnx,zynqmp-r5f";
129-
power-domains = <&zynqmp_firmware 0x8>;
130-
memory-region = <&rproc_1_fw_image>, <&rpu1vdev0buffer>, <&rpu1vdev0vring0>, <&rpu1vdev0vring1>;
131-
mboxes = <&ipi_mailbox_rpu1 0>, <&ipi_mailbox_rpu1 1>;
132-
mbox-names = "tx", "rx";
356+
r5f@1 {
357+
compatible = "xlnx,zynqmp-r5f";
358+
reg = <0x1 0x0 0x0 0x10000>, <0x1 0x20000 0x0 0x10000>;
359+
reg-names = "atcm0", "btcm0";
360+
power-domains = <&zynqmp_firmware PD_RPU_1>,
361+
<&zynqmp_firmware PD_R5_1_ATCM>,
362+
<&zynqmp_firmware PD_R5_1_BTCM>;
363+
memory-region = <&rproc_1_fw_image>, <&rpu1vdev0buffer>,
364+
<&rpu1vdev0vring0>, <&rpu1vdev0vring1>;
365+
mboxes = <&ipi_mailbox_rpu1 0>, <&ipi_mailbox_rpu1 1>;
366+
mbox-names = "tx", "rx";
367+
};
133368
};
134369
};
135370
...

0 commit comments

Comments
 (0)