blob: 935d63d181d9ed4fa839f85eaf6111b6cd02fed2 [file] [log] [blame]
Tom Rini53633a82024-02-29 12:33:36 -05001# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/memory-controllers/nvidia,tegra186-mc.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: NVIDIA Tegra186 (and later) SoC Memory Controller
8
9maintainers:
10 - Jon Hunter <jonathanh@nvidia.com>
11 - Thierry Reding <thierry.reding@gmail.com>
12
13description: |
14 The NVIDIA Tegra186 SoC features a 128 bit memory controller that is split
15 into four 32 bit channels to support LPDDR4 with x16 subpartitions. The MC
16 handles memory requests for 40-bit virtual addresses from internal clients
17 and arbitrates among them to allocate memory bandwidth.
18
19 Up to 15 GiB of physical memory can be supported. Security features such as
20 encryption of traffic to and from DRAM via general security apertures are
21 available for video and other secure applications, as well as DRAM ECC for
22 automotive safety applications (single bit error correction and double bit
23 error detection).
24
25properties:
26 $nodename:
27 pattern: "^memory-controller@[0-9a-f]+$"
28
29 compatible:
30 items:
31 - enum:
32 - nvidia,tegra186-mc
33 - nvidia,tegra194-mc
34 - nvidia,tegra234-mc
35
36 reg:
37 minItems: 6
38 maxItems: 18
39
40 reg-names:
41 minItems: 6
42 maxItems: 18
43
44 interrupts:
45 items:
46 - description: MC general interrupt
47
48 "#address-cells":
49 const: 2
50
51 "#size-cells":
52 const: 2
53
54 ranges: true
55
56 dma-ranges: true
57
58 "#interconnect-cells":
59 const: 1
60
61patternProperties:
62 "^external-memory-controller@[0-9a-f]+$":
63 description:
64 The bulk of the work involved in controlling the external memory
65 controller on NVIDIA Tegra186 and later is performed on the BPMP. This
66 coprocessor exposes the EMC clock that is used to set the frequency at
67 which the external memory is clocked and a remote procedure call that
68 can be used to obtain the set of available frequencies.
69 type: object
70 properties:
71 compatible:
72 items:
73 - enum:
74 - nvidia,tegra186-emc
75 - nvidia,tegra194-emc
76 - nvidia,tegra234-emc
77
78 reg:
79 minItems: 1
80 maxItems: 2
81
82 interrupts:
83 items:
84 - description: EMC general interrupt
85
86 clocks:
87 items:
88 - description: external memory clock
89
90 clock-names:
91 items:
92 - const: emc
93
94 "#interconnect-cells":
95 const: 0
96
97 nvidia,bpmp:
98 $ref: /schemas/types.yaml#/definitions/phandle
99 description:
100 phandle of the node representing the BPMP
101
102 allOf:
103 - if:
104 properties:
105 compatible:
106 const: nvidia,tegra186-emc
107 then:
108 properties:
109 reg:
110 maxItems: 1
111
112 - if:
113 properties:
114 compatible:
115 const: nvidia,tegra194-emc
116 then:
117 properties:
118 reg:
119 minItems: 2
120
121 - if:
122 properties:
123 compatible:
124 const: nvidia,tegra234-emc
125 then:
126 properties:
127 reg:
128 minItems: 2
129
130 additionalProperties: false
131
132 required:
133 - compatible
134 - reg
135 - interrupts
136 - clocks
137 - clock-names
138 - "#interconnect-cells"
139 - nvidia,bpmp
140
141allOf:
142 - if:
143 properties:
144 compatible:
145 const: nvidia,tegra186-mc
146 then:
147 properties:
148 reg:
149 maxItems: 6
150 description: 5 memory controller channels and 1 for stream-id registers
151
152 reg-names:
153 items:
154 - const: sid
155 - const: broadcast
156 - const: ch0
157 - const: ch1
158 - const: ch2
159 - const: ch3
160
161 - if:
162 properties:
163 compatible:
164 const: nvidia,tegra194-mc
165 then:
166 properties:
167 reg:
168 minItems: 18
169 description: 17 memory controller channels and 1 for stream-id registers
170
171 reg-names:
172 items:
173 - const: sid
174 - const: broadcast
175 - const: ch0
176 - const: ch1
177 - const: ch2
178 - const: ch3
179 - const: ch4
180 - const: ch5
181 - const: ch6
182 - const: ch7
183 - const: ch8
184 - const: ch9
185 - const: ch10
186 - const: ch11
187 - const: ch12
188 - const: ch13
189 - const: ch14
190 - const: ch15
191
192 - if:
193 properties:
194 compatible:
195 const: nvidia,tegra234-mc
196 then:
197 properties:
198 reg:
199 minItems: 18
200 description: 17 memory controller channels and 1 for stream-id registers
201
202 reg-names:
203 items:
204 - const: sid
205 - const: broadcast
206 - const: ch0
207 - const: ch1
208 - const: ch2
209 - const: ch3
210 - const: ch4
211 - const: ch5
212 - const: ch6
213 - const: ch7
214 - const: ch8
215 - const: ch9
216 - const: ch10
217 - const: ch11
218 - const: ch12
219 - const: ch13
220 - const: ch14
221 - const: ch15
222
223additionalProperties: false
224
225required:
226 - compatible
227 - reg
228 - reg-names
229 - interrupts
230 - "#address-cells"
231 - "#size-cells"
232
233examples:
234 - |
235 #include <dt-bindings/clock/tegra186-clock.h>
236 #include <dt-bindings/interrupt-controller/arm-gic.h>
237
238 bus {
239 #address-cells = <2>;
240 #size-cells = <2>;
241
242 memory-controller@2c00000 {
243 compatible = "nvidia,tegra186-mc";
244 reg = <0x0 0x02c00000 0x0 0x10000>, /* MC-SID */
245 <0x0 0x02c10000 0x0 0x10000>, /* Broadcast channel */
246 <0x0 0x02c20000 0x0 0x10000>, /* MC0 */
247 <0x0 0x02c30000 0x0 0x10000>, /* MC1 */
248 <0x0 0x02c40000 0x0 0x10000>, /* MC2 */
249 <0x0 0x02c50000 0x0 0x10000>; /* MC3 */
250 reg-names = "sid", "broadcast", "ch0", "ch1", "ch2", "ch3";
251 interrupts = <GIC_SPI 223 IRQ_TYPE_LEVEL_HIGH>;
252
253 #address-cells = <2>;
254 #size-cells = <2>;
255
256 ranges = <0x0 0x02c00000 0x0 0x02c00000 0x0 0xb0000>;
257
258 /*
259 * Memory clients have access to all 40 bits that the memory
260 * controller can address.
261 */
262 dma-ranges = <0x0 0x0 0x0 0x0 0x100 0x0>;
263
264 external-memory-controller@2c60000 {
265 compatible = "nvidia,tegra186-emc";
266 reg = <0x0 0x02c60000 0x0 0x50000>;
267 interrupts = <GIC_SPI 224 IRQ_TYPE_LEVEL_HIGH>;
268 clocks = <&bpmp TEGRA186_CLK_EMC>;
269 clock-names = "emc";
270
271 #interconnect-cells = <0>;
272
273 nvidia,bpmp = <&bpmp>;
274 };
275 };
276 };