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