Merge tag 'imx-dt64-5.12' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo...
[linux-2.6-microblaze.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-a32
127       - arm,cortex-a34
128       - arm,cortex-a35
129       - arm,cortex-a53
130       - arm,cortex-a55
131       - arm,cortex-a57
132       - arm,cortex-a65
133       - arm,cortex-a72
134       - arm,cortex-a73
135       - arm,cortex-a75
136       - arm,cortex-a76
137       - arm,cortex-a77
138       - arm,cortex-m0
139       - arm,cortex-m0+
140       - arm,cortex-m1
141       - arm,cortex-m3
142       - arm,cortex-m4
143       - arm,cortex-r4
144       - arm,cortex-r5
145       - arm,cortex-r7
146       - arm,neoverse-e1
147       - arm,neoverse-n1
148       - brcm,brahma-b15
149       - brcm,brahma-b53
150       - brcm,vulcan
151       - cavium,thunder
152       - cavium,thunder2
153       - faraday,fa526
154       - intel,sa110
155       - intel,sa1100
156       - marvell,feroceon
157       - marvell,mohawk
158       - marvell,pj4a
159       - marvell,pj4b
160       - marvell,sheeva-v5
161       - marvell,sheeva-v7
162       - nvidia,tegra132-denver
163       - nvidia,tegra186-denver
164       - nvidia,tegra194-carmel
165       - qcom,krait
166       - qcom,kryo
167       - qcom,kryo260
168       - qcom,kryo280
169       - qcom,kryo385
170       - qcom,kryo468
171       - qcom,kryo485
172       - qcom,kryo685
173       - qcom,scorpion
174
175   enable-method:
176     $ref: '/schemas/types.yaml#/definitions/string'
177     oneOf:
178       # On ARM v8 64-bit this property is required
179       - enum:
180           - psci
181           - spin-table
182       # On ARM 32-bit systems this property is optional
183       - enum:
184           - actions,s500-smp
185           - allwinner,sun6i-a31
186           - allwinner,sun8i-a23
187           - allwinner,sun9i-a80-smp
188           - allwinner,sun8i-a83t-smp
189           - amlogic,meson8-smp
190           - amlogic,meson8b-smp
191           - arm,realview-smp
192           - aspeed,ast2600-smp
193           - brcm,bcm11351-cpu-method
194           - brcm,bcm23550
195           - brcm,bcm2836-smp
196           - brcm,bcm63138
197           - brcm,bcm-nsp-smp
198           - brcm,brahma-b15
199           - marvell,armada-375-smp
200           - marvell,armada-380-smp
201           - marvell,armada-390-smp
202           - marvell,armada-xp-smp
203           - marvell,98dx3236-smp
204           - marvell,mmp3-smp
205           - mediatek,mt6589-smp
206           - mediatek,mt81xx-tz-smp
207           - qcom,gcc-msm8660
208           - qcom,kpss-acc-v1
209           - qcom,kpss-acc-v2
210           - renesas,apmu
211           - renesas,r9a06g032-smp
212           - rockchip,rk3036-smp
213           - rockchip,rk3066-smp
214           - socionext,milbeaut-m10v-smp
215           - ste,dbx500-smp
216           - ti,am3352
217           - ti,am4372
218
219   cpu-release-addr:
220     $ref: '/schemas/types.yaml#/definitions/uint64'
221
222     description:
223       Required for systems that have an "enable-method"
224         property value of "spin-table".
225       On ARM v8 64-bit systems must be a two cell
226         property identifying a 64-bit zero-initialised
227         memory location.
228
229   cpu-idle-states:
230     $ref: '/schemas/types.yaml#/definitions/phandle-array'
231     description: |
232       List of phandles to idle state nodes supported
233       by this cpu (see ./idle-states.yaml).
234
235   capacity-dmips-mhz:
236     $ref: '/schemas/types.yaml#/definitions/uint32'
237     description:
238       u32 value representing CPU capacity (see ./cpu-capacity.txt) in
239       DMIPS/MHz, relative to highest capacity-dmips-mhz
240       in the system.
241
242   dynamic-power-coefficient:
243     $ref: '/schemas/types.yaml#/definitions/uint32'
244     description:
245       A u32 value that represents the running time dynamic
246       power coefficient in units of uW/MHz/V^2. The
247       coefficient can either be calculated from power
248       measurements or derived by analysis.
249
250       The dynamic power consumption of the CPU  is
251       proportional to the square of the Voltage (V) and
252       the clock frequency (f). The coefficient is used to
253       calculate the dynamic power as below -
254
255       Pdyn = dynamic-power-coefficient * V^2 * f
256
257       where voltage is in V, frequency is in MHz.
258
259   power-domains:
260     $ref: '/schemas/types.yaml#/definitions/phandle-array'
261     description:
262       List of phandles and PM domain specifiers, as defined by bindings of the
263       PM domain provider (see also ../power_domain.txt).
264
265   power-domain-names:
266     $ref: '/schemas/types.yaml#/definitions/string-array'
267     description:
268       A list of power domain name strings sorted in the same order as the
269       power-domains property.
270
271       For PSCI based platforms, the name corresponding to the index of the PSCI
272       PM domain provider, must be "psci".
273
274   qcom,saw:
275     $ref: '/schemas/types.yaml#/definitions/phandle'
276     description: |
277       Specifies the SAW* node associated with this CPU.
278
279       Required for systems that have an "enable-method" property
280       value of "qcom,kpss-acc-v1" or "qcom,kpss-acc-v2"
281
282       * arm/msm/qcom,saw2.txt
283
284   qcom,acc:
285     $ref: '/schemas/types.yaml#/definitions/phandle'
286     description: |
287       Specifies the ACC* node associated with this CPU.
288
289       Required for systems that have an "enable-method" property
290       value of "qcom,kpss-acc-v1" or "qcom,kpss-acc-v2"
291
292       * arm/msm/qcom,kpss-acc.txt
293
294   rockchip,pmu:
295     $ref: '/schemas/types.yaml#/definitions/phandle'
296     description: |
297       Specifies the syscon node controlling the cpu core power domains.
298
299       Optional for systems that have an "enable-method"
300       property value of "rockchip,rk3066-smp"
301       While optional, it is the preferred way to get access to
302       the cpu-core power-domains.
303
304   secondary-boot-reg:
305     $ref: '/schemas/types.yaml#/definitions/uint32'
306     description: |
307       Required for systems that have an "enable-method" property value of
308       "brcm,bcm11351-cpu-method", "brcm,bcm23550" or "brcm,bcm-nsp-smp".
309
310       This includes the following SoCs: |
311       BCM11130, BCM11140, BCM11351, BCM28145, BCM28155, BCM21664, BCM23550
312       BCM58522, BCM58525, BCM58535, BCM58622, BCM58623, BCM58625, BCM88312
313
314       The secondary-boot-reg property is a u32 value that specifies the
315       physical address of the register used to request the ROM holding pen
316       code release a secondary CPU. The value written to the register is
317       formed by encoding the target CPU id into the low bits of the
318       physical start address it should jump to.
319
320 if:
321   # If the enable-method property contains one of those values
322   properties:
323     enable-method:
324       contains:
325         enum:
326           - brcm,bcm11351-cpu-method
327           - brcm,bcm23550
328           - brcm,bcm-nsp-smp
329   # and if enable-method is present
330   required:
331     - enable-method
332
333 then:
334   required:
335     - secondary-boot-reg
336
337 required:
338   - device_type
339   - reg
340   - compatible
341
342 dependencies:
343   rockchip,pmu: [enable-method]
344
345 additionalProperties: true
346
347 examples:
348   - |
349     cpus {
350       #size-cells = <0>;
351       #address-cells = <1>;
352
353       cpu@0 {
354         device_type = "cpu";
355         compatible = "arm,cortex-a15";
356         reg = <0x0>;
357       };
358
359       cpu@1 {
360         device_type = "cpu";
361         compatible = "arm,cortex-a15";
362         reg = <0x1>;
363       };
364
365       cpu@100 {
366         device_type = "cpu";
367         compatible = "arm,cortex-a7";
368         reg = <0x100>;
369       };
370
371       cpu@101 {
372         device_type = "cpu";
373         compatible = "arm,cortex-a7";
374         reg = <0x101>;
375       };
376     };
377
378   - |
379     // Example 2 (Cortex-A8 uniprocessor 32-bit system):
380     cpus {
381       #size-cells = <0>;
382       #address-cells = <1>;
383
384       cpu@0 {
385         device_type = "cpu";
386         compatible = "arm,cortex-a8";
387         reg = <0x0>;
388       };
389     };
390
391   - |
392     // Example 3 (ARM 926EJ-S uniprocessor 32-bit system):
393     cpus {
394       #size-cells = <0>;
395       #address-cells = <1>;
396
397       cpu@0 {
398         device_type = "cpu";
399         compatible = "arm,arm926ej-s";
400         reg = <0x0>;
401       };
402     };
403
404   - |
405     //  Example 4 (ARM Cortex-A57 64-bit system):
406     cpus {
407       #size-cells = <0>;
408       #address-cells = <2>;
409
410       cpu@0 {
411         device_type = "cpu";
412         compatible = "arm,cortex-a57";
413         reg = <0x0 0x0>;
414         enable-method = "spin-table";
415         cpu-release-addr = <0 0x20000000>;
416       };
417
418       cpu@1 {
419         device_type = "cpu";
420         compatible = "arm,cortex-a57";
421         reg = <0x0 0x1>;
422         enable-method = "spin-table";
423         cpu-release-addr = <0 0x20000000>;
424       };
425
426       cpu@100 {
427         device_type = "cpu";
428         compatible = "arm,cortex-a57";
429         reg = <0x0 0x100>;
430         enable-method = "spin-table";
431         cpu-release-addr = <0 0x20000000>;
432       };
433
434       cpu@101 {
435         device_type = "cpu";
436         compatible = "arm,cortex-a57";
437         reg = <0x0 0x101>;
438         enable-method = "spin-table";
439         cpu-release-addr = <0 0x20000000>;
440       };
441
442       cpu@10000 {
443         device_type = "cpu";
444         compatible = "arm,cortex-a57";
445         reg = <0x0 0x10000>;
446         enable-method = "spin-table";
447         cpu-release-addr = <0 0x20000000>;
448       };
449
450       cpu@10001 {
451         device_type = "cpu";
452         compatible = "arm,cortex-a57";
453         reg = <0x0 0x10001>;
454         enable-method = "spin-table";
455         cpu-release-addr = <0 0x20000000>;
456       };
457
458       cpu@10100 {
459         device_type = "cpu";
460         compatible = "arm,cortex-a57";
461         reg = <0x0 0x10100>;
462         enable-method = "spin-table";
463         cpu-release-addr = <0 0x20000000>;
464       };
465
466       cpu@10101 {
467         device_type = "cpu";
468         compatible = "arm,cortex-a57";
469         reg = <0x0 0x10101>;
470         enable-method = "spin-table";
471         cpu-release-addr = <0 0x20000000>;
472       };
473
474       cpu@100000000 {
475         device_type = "cpu";
476         compatible = "arm,cortex-a57";
477         reg = <0x1 0x0>;
478         enable-method = "spin-table";
479         cpu-release-addr = <0 0x20000000>;
480       };
481
482       cpu@100000001 {
483         device_type = "cpu";
484         compatible = "arm,cortex-a57";
485         reg = <0x1 0x1>;
486         enable-method = "spin-table";
487         cpu-release-addr = <0 0x20000000>;
488       };
489
490       cpu@100000100 {
491         device_type = "cpu";
492         compatible = "arm,cortex-a57";
493         reg = <0x1 0x100>;
494         enable-method = "spin-table";
495         cpu-release-addr = <0 0x20000000>;
496       };
497
498       cpu@100000101 {
499         device_type = "cpu";
500         compatible = "arm,cortex-a57";
501         reg = <0x1 0x101>;
502         enable-method = "spin-table";
503         cpu-release-addr = <0 0x20000000>;
504       };
505
506       cpu@100010000 {
507         device_type = "cpu";
508         compatible = "arm,cortex-a57";
509         reg = <0x1 0x10000>;
510         enable-method = "spin-table";
511         cpu-release-addr = <0 0x20000000>;
512       };
513
514       cpu@100010001 {
515         device_type = "cpu";
516         compatible = "arm,cortex-a57";
517         reg = <0x1 0x10001>;
518         enable-method = "spin-table";
519         cpu-release-addr = <0 0x20000000>;
520       };
521
522       cpu@100010100 {
523         device_type = "cpu";
524         compatible = "arm,cortex-a57";
525         reg = <0x1 0x10100>;
526         enable-method = "spin-table";
527         cpu-release-addr = <0 0x20000000>;
528       };
529
530       cpu@100010101 {
531         device_type = "cpu";
532         compatible = "arm,cortex-a57";
533         reg = <0x1 0x10101>;
534         enable-method = "spin-table";
535         cpu-release-addr = <0 0x20000000>;
536       };
537     };
538 ...