Merge tag 'meminit-v5.3-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/kees...
[sfrench/cifs-2.6.git] / Documentation / devicetree / bindings / arm / cpus.yaml
1 # SPDX-License-Identifier: GPL-2.0
2 %YAML 1.2
3 ---
4 $id: http://devicetree.org/schemas/arm/cpus.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
6
7 title: ARM CPUs bindings
8
9 maintainers:
10   - Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
11
12 description: |+
13   The device tree allows to describe the layout of CPUs in a system through
14   the "cpus" node, which in turn contains a number of subnodes (ie "cpu")
15   defining properties for every cpu.
16
17   Bindings for CPU nodes follow the Devicetree Specification, available from:
18
19   https://www.devicetree.org/specifications/
20
21   with updates for 32-bit and 64-bit ARM systems provided in this document.
22
23   ================================
24   Convention used in this document
25   ================================
26
27   This document follows the conventions described in the Devicetree
28   Specification, with the addition:
29
30   - square brackets define bitfields, eg reg[7:0] value of the bitfield in
31     the reg property contained in bits 7 down to 0
32
33   =====================================
34   cpus and cpu node bindings definition
35   =====================================
36
37   The ARM architecture, in accordance with the Devicetree Specification,
38   requires the cpus and cpu nodes to be present and contain the properties
39   described below.
40
41 properties:
42   reg:
43     maxItems: 1
44     description: |
45       Usage and definition depend on ARM architecture version and
46       configuration:
47
48       On uniprocessor ARM architectures previous to v7
49       this property is required and must be set to 0.
50
51       On ARM 11 MPcore based systems this property is
52         required and matches the CPUID[11:0] register bits.
53
54         Bits [11:0] in the reg cell must be set to
55         bits [11:0] in CPU ID register.
56
57         All other bits in the reg cell must be set to 0.
58
59       On 32-bit ARM v7 or later systems this property is
60         required and matches the CPU MPIDR[23:0] register
61         bits.
62
63         Bits [23:0] in the reg cell must be set to
64         bits [23:0] in MPIDR.
65
66         All other bits in the reg cell must be set to 0.
67
68       On ARM v8 64-bit systems this property is required
69         and matches the MPIDR_EL1 register affinity bits.
70
71         * If cpus node's #address-cells property is set to 2
72
73           The first reg cell bits [7:0] must be set to
74           bits [39:32] of MPIDR_EL1.
75
76           The second reg cell bits [23:0] must be set to
77           bits [23:0] of MPIDR_EL1.
78
79         * If cpus node's #address-cells property is set to 1
80
81           The reg cell bits [23:0] must be set to bits [23:0]
82           of MPIDR_EL1.
83
84       All other bits in the reg cells must be set to 0.
85
86   compatible:
87     enum:
88       - arm,arm710t
89       - arm,arm720t
90       - arm,arm740t
91       - arm,arm7ej-s
92       - arm,arm7tdmi
93       - arm,arm7tdmi-s
94       - arm,arm9es
95       - arm,arm9ej-s
96       - arm,arm920t
97       - arm,arm922t
98       - arm,arm925
99       - arm,arm926e-s
100       - arm,arm926ej-s
101       - arm,arm940t
102       - arm,arm946e-s
103       - arm,arm966e-s
104       - arm,arm968e-s
105       - arm,arm9tdmi
106       - arm,arm1020e
107       - arm,arm1020t
108       - arm,arm1022e
109       - arm,arm1026ej-s
110       - arm,arm1136j-s
111       - arm,arm1136jf-s
112       - arm,arm1156t2-s
113       - arm,arm1156t2f-s
114       - arm,arm1176jzf
115       - arm,arm1176jz-s
116       - arm,arm1176jzf-s
117       - arm,arm11mpcore
118       - arm,armv8 # Only for s/w models
119       - arm,cortex-a5
120       - arm,cortex-a7
121       - arm,cortex-a8
122       - arm,cortex-a9
123       - arm,cortex-a12
124       - arm,cortex-a15
125       - arm,cortex-a17
126       - arm,cortex-a53
127       - arm,cortex-a57
128       - arm,cortex-a72
129       - arm,cortex-a73
130       - arm,cortex-m0
131       - arm,cortex-m0+
132       - arm,cortex-m1
133       - arm,cortex-m3
134       - arm,cortex-m4
135       - arm,cortex-r4
136       - arm,cortex-r5
137       - arm,cortex-r7
138       - brcm,brahma-b15
139       - brcm,brahma-b53
140       - brcm,vulcan
141       - cavium,thunder
142       - cavium,thunder2
143       - faraday,fa526
144       - intel,sa110
145       - intel,sa1100
146       - marvell,feroceon
147       - marvell,mohawk
148       - marvell,pj4a
149       - marvell,pj4b
150       - marvell,sheeva-v5
151       - marvell,sheeva-v7
152       - nvidia,tegra132-denver
153       - nvidia,tegra186-denver
154       - nvidia,tegra194-carmel
155       - qcom,krait
156       - qcom,kryo
157       - qcom,kryo385
158       - qcom,scorpion
159
160   enable-method:
161     allOf:
162       - $ref: '/schemas/types.yaml#/definitions/string'
163       - oneOf:
164           # On ARM v8 64-bit this property is required
165           - enum:
166               - psci
167               - spin-table
168           # On ARM 32-bit systems this property is optional
169           - enum:
170               - actions,s500-smp
171               - allwinner,sun6i-a31
172               - allwinner,sun8i-a23
173               - allwinner,sun9i-a80-smp
174               - allwinner,sun8i-a83t-smp
175               - amlogic,meson8-smp
176               - amlogic,meson8b-smp
177               - arm,realview-smp
178               - brcm,bcm11351-cpu-method
179               - brcm,bcm23550
180               - brcm,bcm2836-smp
181               - brcm,bcm63138
182               - brcm,bcm-nsp-smp
183               - brcm,brahma-b15
184               - marvell,armada-375-smp
185               - marvell,armada-380-smp
186               - marvell,armada-390-smp
187               - marvell,armada-xp-smp
188               - marvell,98dx3236-smp
189               - mediatek,mt6589-smp
190               - mediatek,mt81xx-tz-smp
191               - qcom,gcc-msm8660
192               - qcom,kpss-acc-v1
193               - qcom,kpss-acc-v2
194               - renesas,apmu
195               - renesas,r9a06g032-smp
196               - rockchip,rk3036-smp
197               - rockchip,rk3066-smp
198               - socionext,milbeaut-m10v-smp
199               - ste,dbx500-smp
200
201   cpu-release-addr:
202     $ref: '/schemas/types.yaml#/definitions/uint64'
203
204     description:
205       Required for systems that have an "enable-method"
206         property value of "spin-table".
207       On ARM v8 64-bit systems must be a two cell
208         property identifying a 64-bit zero-initialised
209         memory location.
210
211   cpu-idle-states:
212     $ref: '/schemas/types.yaml#/definitions/phandle-array'
213     description: |
214       List of phandles to idle state nodes supported
215       by this cpu (see ./idle-states.txt).
216
217   capacity-dmips-mhz:
218     $ref: '/schemas/types.yaml#/definitions/uint32'
219     description:
220       u32 value representing CPU capacity (see ./cpu-capacity.txt) in
221       DMIPS/MHz, relative to highest capacity-dmips-mhz
222       in the system.
223
224   dynamic-power-coefficient:
225     $ref: '/schemas/types.yaml#/definitions/uint32'
226     description:
227       A u32 value that represents the running time dynamic
228       power coefficient in units of uW/MHz/V^2. The
229       coefficient can either be calculated from power
230       measurements or derived by analysis.
231
232       The dynamic power consumption of the CPU  is
233       proportional to the square of the Voltage (V) and
234       the clock frequency (f). The coefficient is used to
235       calculate the dynamic power as below -
236
237       Pdyn = dynamic-power-coefficient * V^2 * f
238
239       where voltage is in V, frequency is in MHz.
240
241   qcom,saw:
242     $ref: '/schemas/types.yaml#/definitions/phandle'
243     description: |
244       Specifies the SAW* node associated with this CPU.
245
246       Required for systems that have an "enable-method" property
247       value of "qcom,kpss-acc-v1" or "qcom,kpss-acc-v2"
248
249       * arm/msm/qcom,saw2.txt
250
251   qcom,acc:
252     $ref: '/schemas/types.yaml#/definitions/phandle'
253     description: |
254       Specifies the ACC* node associated with this CPU.
255
256       Required for systems that have an "enable-method" property
257       value of "qcom,kpss-acc-v1" or "qcom,kpss-acc-v2"
258
259       * arm/msm/qcom,kpss-acc.txt
260
261   rockchip,pmu:
262     $ref: '/schemas/types.yaml#/definitions/phandle'
263     description: |
264       Specifies the syscon node controlling the cpu core power domains.
265
266       Optional for systems that have an "enable-method"
267       property value of "rockchip,rk3066-smp"
268       While optional, it is the preferred way to get access to
269       the cpu-core power-domains.
270
271 required:
272   - device_type
273   - reg
274   - compatible
275
276 dependencies:
277   rockchip,pmu: [enable-method]
278
279 examples:
280   - |
281     cpus {
282       #size-cells = <0>;
283       #address-cells = <1>;
284
285       cpu@0 {
286         device_type = "cpu";
287         compatible = "arm,cortex-a15";
288         reg = <0x0>;
289       };
290
291       cpu@1 {
292         device_type = "cpu";
293         compatible = "arm,cortex-a15";
294         reg = <0x1>;
295       };
296
297       cpu@100 {
298         device_type = "cpu";
299         compatible = "arm,cortex-a7";
300         reg = <0x100>;
301       };
302
303       cpu@101 {
304         device_type = "cpu";
305         compatible = "arm,cortex-a7";
306         reg = <0x101>;
307       };
308     };
309
310   - |
311     // Example 2 (Cortex-A8 uniprocessor 32-bit system):
312     cpus {
313       #size-cells = <0>;
314       #address-cells = <1>;
315
316       cpu@0 {
317         device_type = "cpu";
318         compatible = "arm,cortex-a8";
319         reg = <0x0>;
320       };
321     };
322
323   - |
324     // Example 3 (ARM 926EJ-S uniprocessor 32-bit system):
325     cpus {
326       #size-cells = <0>;
327       #address-cells = <1>;
328
329       cpu@0 {
330         device_type = "cpu";
331         compatible = "arm,arm926ej-s";
332         reg = <0x0>;
333       };
334     };
335
336   - |
337     //  Example 4 (ARM Cortex-A57 64-bit system):
338     cpus {
339       #size-cells = <0>;
340       #address-cells = <2>;
341
342       cpu@0 {
343         device_type = "cpu";
344         compatible = "arm,cortex-a57";
345         reg = <0x0 0x0>;
346         enable-method = "spin-table";
347         cpu-release-addr = <0 0x20000000>;
348       };
349
350       cpu@1 {
351         device_type = "cpu";
352         compatible = "arm,cortex-a57";
353         reg = <0x0 0x1>;
354         enable-method = "spin-table";
355         cpu-release-addr = <0 0x20000000>;
356       };
357
358       cpu@100 {
359         device_type = "cpu";
360         compatible = "arm,cortex-a57";
361         reg = <0x0 0x100>;
362         enable-method = "spin-table";
363         cpu-release-addr = <0 0x20000000>;
364       };
365
366       cpu@101 {
367         device_type = "cpu";
368         compatible = "arm,cortex-a57";
369         reg = <0x0 0x101>;
370         enable-method = "spin-table";
371         cpu-release-addr = <0 0x20000000>;
372       };
373
374       cpu@10000 {
375         device_type = "cpu";
376         compatible = "arm,cortex-a57";
377         reg = <0x0 0x10000>;
378         enable-method = "spin-table";
379         cpu-release-addr = <0 0x20000000>;
380       };
381
382       cpu@10001 {
383         device_type = "cpu";
384         compatible = "arm,cortex-a57";
385         reg = <0x0 0x10001>;
386         enable-method = "spin-table";
387         cpu-release-addr = <0 0x20000000>;
388       };
389
390       cpu@10100 {
391         device_type = "cpu";
392         compatible = "arm,cortex-a57";
393         reg = <0x0 0x10100>;
394         enable-method = "spin-table";
395         cpu-release-addr = <0 0x20000000>;
396       };
397
398       cpu@10101 {
399         device_type = "cpu";
400         compatible = "arm,cortex-a57";
401         reg = <0x0 0x10101>;
402         enable-method = "spin-table";
403         cpu-release-addr = <0 0x20000000>;
404       };
405
406       cpu@100000000 {
407         device_type = "cpu";
408         compatible = "arm,cortex-a57";
409         reg = <0x1 0x0>;
410         enable-method = "spin-table";
411         cpu-release-addr = <0 0x20000000>;
412       };
413
414       cpu@100000001 {
415         device_type = "cpu";
416         compatible = "arm,cortex-a57";
417         reg = <0x1 0x1>;
418         enable-method = "spin-table";
419         cpu-release-addr = <0 0x20000000>;
420       };
421
422       cpu@100000100 {
423         device_type = "cpu";
424         compatible = "arm,cortex-a57";
425         reg = <0x1 0x100>;
426         enable-method = "spin-table";
427         cpu-release-addr = <0 0x20000000>;
428       };
429
430       cpu@100000101 {
431         device_type = "cpu";
432         compatible = "arm,cortex-a57";
433         reg = <0x1 0x101>;
434         enable-method = "spin-table";
435         cpu-release-addr = <0 0x20000000>;
436       };
437
438       cpu@100010000 {
439         device_type = "cpu";
440         compatible = "arm,cortex-a57";
441         reg = <0x1 0x10000>;
442         enable-method = "spin-table";
443         cpu-release-addr = <0 0x20000000>;
444       };
445
446       cpu@100010001 {
447         device_type = "cpu";
448         compatible = "arm,cortex-a57";
449         reg = <0x1 0x10001>;
450         enable-method = "spin-table";
451         cpu-release-addr = <0 0x20000000>;
452       };
453
454       cpu@100010100 {
455         device_type = "cpu";
456         compatible = "arm,cortex-a57";
457         reg = <0x1 0x10100>;
458         enable-method = "spin-table";
459         cpu-release-addr = <0 0x20000000>;
460       };
461
462       cpu@100010101 {
463         device_type = "cpu";
464         compatible = "arm,cortex-a57";
465         reg = <0x1 0x10101>;
466         enable-method = "spin-table";
467         cpu-release-addr = <0 0x20000000>;
468       };
469     };
470 ...