blob: d748774444d29e33b5de5ae1c70f717377930e05 [file] [log] [blame]
Lorenzo Pieralisi594f88d2013-09-26 10:42:02 +01001=================
2ARM CPUs bindings
3=================
Lorenzo Pieralisia0ae02402011-11-17 17:31:51 +00004
5The device tree allows to describe the layout of CPUs in a system through
6the "cpus" node, which in turn contains a number of subnodes (ie "cpu")
7defining properties for every cpu.
8
Lorenzo Pieralisi594f88d2013-09-26 10:42:02 +01009Bindings for CPU nodes follow the ePAPR v1.1 standard, available from:
Lorenzo Pieralisia0ae02402011-11-17 17:31:51 +000010
Lorenzo Pieralisi594f88d2013-09-26 10:42:02 +010011https://www.power.org/documentation/epapr-version-1-1/
Lorenzo Pieralisia0ae02402011-11-17 17:31:51 +000012
Lorenzo Pieralisi594f88d2013-09-26 10:42:02 +010013with updates for 32-bit and 64-bit ARM systems provided in this document.
Lorenzo Pieralisia0ae02402011-11-17 17:31:51 +000014
Lorenzo Pieralisi594f88d2013-09-26 10:42:02 +010015================================
16Convention used in this document
17================================
Lorenzo Pieralisia0ae02402011-11-17 17:31:51 +000018
Lorenzo Pieralisi594f88d2013-09-26 10:42:02 +010019This document follows the conventions described in the ePAPR v1.1, with
20the addition:
21
22- square brackets define bitfields, eg reg[7:0] value of the bitfield in
23 the reg property contained in bits 7 down to 0
24
25=====================================
26cpus and cpu node bindings definition
27=====================================
28
29The ARM architecture, in accordance with the ePAPR, requires the cpus and cpu
30nodes to be present and contain the properties described below.
31
32- cpus node
33
34 Description: Container of cpu nodes
35
36 The node name must be "cpus".
37
38 A cpus node must define the following properties:
39
40 - #address-cells
41 Usage: required
42 Value type: <u32>
43
44 Definition depends on ARM architecture version and
45 configuration:
46
47 # On uniprocessor ARM architectures previous to v7
48 value must be 1, to enable a simple enumeration
49 scheme for processors that do not have a HW CPU
50 identification register.
51 # On 32-bit ARM 11 MPcore, ARM v7 or later systems
52 value must be 1, that corresponds to CPUID/MPIDR
53 registers sizes.
54 # On ARM v8 64-bit systems value should be set to 2,
55 that corresponds to the MPIDR_EL1 register size.
56 If MPIDR_EL1[63:32] value is equal to 0 on all CPUs
57 in the system, #address-cells can be set to 1, since
58 MPIDR_EL1[63:32] bits are not used for CPUs
59 identification.
60 - #size-cells
61 Usage: required
62 Value type: <u32>
63 Definition: must be set to 0
64
65- cpu node
66
67 Description: Describes a CPU in an ARM based system
68
69 PROPERTIES
70
71 - device_type
72 Usage: required
73 Value type: <string>
74 Definition: must be "cpu"
75 - reg
76 Usage and definition depend on ARM architecture version and
77 configuration:
78
79 # On uniprocessor ARM architectures previous to v7
80 this property is required and must be set to 0.
81
82 # On ARM 11 MPcore based systems this property is
83 required and matches the CPUID[11:0] register bits.
84
85 Bits [11:0] in the reg cell must be set to
86 bits [11:0] in CPU ID register.
87
88 All other bits in the reg cell must be set to 0.
89
90 # On 32-bit ARM v7 or later systems this property is
91 required and matches the CPU MPIDR[23:0] register
92 bits.
93
94 Bits [23:0] in the reg cell must be set to
95 bits [23:0] in MPIDR.
96
97 All other bits in the reg cell must be set to 0.
98
99 # On ARM v8 64-bit systems this property is required
100 and matches the MPIDR_EL1 register affinity bits.
101
102 * If cpus node's #address-cells property is set to 2
103
104 The first reg cell bits [7:0] must be set to
105 bits [39:32] of MPIDR_EL1.
106
107 The second reg cell bits [23:0] must be set to
108 bits [23:0] of MPIDR_EL1.
109
110 * If cpus node's #address-cells property is set to 1
111
112 The reg cell bits [23:0] must be set to bits [23:0]
113 of MPIDR_EL1.
114
115 All other bits in the reg cells must be set to 0.
116
117 - compatible:
118 Usage: required
119 Value type: <string>
120 Definition: should be one of:
121 "arm,arm710t"
122 "arm,arm720t"
123 "arm,arm740t"
124 "arm,arm7ej-s"
125 "arm,arm7tdmi"
126 "arm,arm7tdmi-s"
127 "arm,arm9es"
128 "arm,arm9ej-s"
129 "arm,arm920t"
130 "arm,arm922t"
131 "arm,arm925"
132 "arm,arm926e-s"
133 "arm,arm926ej-s"
134 "arm,arm940t"
135 "arm,arm946e-s"
136 "arm,arm966e-s"
137 "arm,arm968e-s"
138 "arm,arm9tdmi"
139 "arm,arm1020e"
140 "arm,arm1020t"
141 "arm,arm1022e"
142 "arm,arm1026ej-s"
143 "arm,arm1136j-s"
144 "arm,arm1136jf-s"
145 "arm,arm1156t2-s"
146 "arm,arm1156t2f-s"
147 "arm,arm1176jzf"
148 "arm,arm1176jz-s"
149 "arm,arm1176jzf-s"
150 "arm,arm11mpcore"
151 "arm,cortex-a5"
152 "arm,cortex-a7"
153 "arm,cortex-a8"
154 "arm,cortex-a9"
Heiko Stuebner198946b2014-07-08 22:20:57 +0200155 "arm,cortex-a12"
Lorenzo Pieralisi594f88d2013-09-26 10:42:02 +0100156 "arm,cortex-a15"
Heiko Stuebner198946b2014-07-08 22:20:57 +0200157 "arm,cortex-a17"
Lorenzo Pieralisi594f88d2013-09-26 10:42:02 +0100158 "arm,cortex-a53"
159 "arm,cortex-a57"
Masahiro Yamada182f4f02015-11-24 20:31:51 +0900160 "arm,cortex-a72"
Chen Feng022e53b2017-01-24 16:57:29 +0800161 "arm,cortex-a73"
Lorenzo Pieralisi594f88d2013-09-26 10:42:02 +0100162 "arm,cortex-m0"
163 "arm,cortex-m0+"
164 "arm,cortex-m1"
165 "arm,cortex-m3"
166 "arm,cortex-m4"
167 "arm,cortex-r4"
168 "arm,cortex-r5"
169 "arm,cortex-r7"
Marc Carino0a540d42013-09-06 13:40:19 -0700170 "brcm,brahma-b15"
Jayachandran Cf008dec2016-02-20 19:49:21 +0530171 "brcm,vulcan"
Radha Mohan Chintakuntla4c308702014-04-08 18:53:14 +0530172 "cavium,thunder"
Lorenzo Pieralisi594f88d2013-09-26 10:42:02 +0100173 "faraday,fa526"
174 "intel,sa110"
175 "intel,sa1100"
176 "marvell,feroceon"
177 "marvell,mohawk"
178 "marvell,pj4a"
179 "marvell,pj4b"
180 "marvell,sheeva-v5"
Paul Walmsleyf634da32015-01-30 15:11:04 -0700181 "nvidia,tegra132-denver"
Thierry Reding2e002bd2016-10-10 17:10:44 +0200182 "nvidia,tegra186-denver"
Lorenzo Pieralisi594f88d2013-09-26 10:42:02 +0100183 "qcom,krait"
Stephen Boydbd301ee2015-11-17 17:12:26 -0800184 "qcom,kryo"
Lorenzo Pieralisi594f88d2013-09-26 10:42:02 +0100185 "qcom,scorpion"
186 - enable-method
187 Value type: <stringlist>
188 Usage and definition depend on ARM architecture version.
189 # On ARM v8 64-bit this property is required and must
190 be one of:
Lorenzo Pieralisi594f88d2013-09-26 10:42:02 +0100191 "psci"
Olof Johanssone1dc5662014-05-26 11:14:36 -0700192 "spin-table"
Rohit Vaswanib00c9272013-10-31 17:26:33 -0700193 # On ARM 32-bit systems this property is optional and
194 can be one of:
Maxime Ripard913627b2014-04-18 21:01:51 +0200195 "allwinner,sun6i-a31"
Chen-Yu Tsai7917d14122015-03-18 11:24:01 +0800196 "allwinner,sun8i-a23"
Linus Walleij5420b4b2015-10-09 13:38:57 +0200197 "arm,realview-smp"
Chris Brand500d3362016-04-28 10:59:57 -0700198 "brcm,bcm11351-cpu-method"
Chris Brand31bda092016-05-11 14:36:19 -0700199 "brcm,bcm23550"
Kapil Hali74181112015-12-05 06:53:40 -0500200 "brcm,bcm-nsp-smp"
Marc Carino0a540d42013-09-06 13:40:19 -0700201 "brcm,brahma-b15"
Gregory CLEMENT1ee89e22014-04-14 15:54:05 +0200202 "marvell,armada-375-smp"
203 "marvell,armada-380-smp"
Thomas Petazzoni007fa942015-03-03 15:41:07 +0100204 "marvell,armada-390-smp"
Thomas Petazzoni2c9b2242014-04-14 15:53:59 +0200205 "marvell,armada-xp-smp"
Yingjoe Chen4562c912015-10-02 23:19:38 +0800206 "mediatek,mt6589-smp"
207 "mediatek,mt81xx-tz-smp"
Olof Johanssone1dc5662014-05-26 11:14:36 -0700208 "qcom,gcc-msm8660"
209 "qcom,kpss-acc-v1"
210 "qcom,kpss-acc-v2"
Magnus Damme454b352016-06-28 16:10:30 +0200211 "renesas,apmu"
Heiko Stuebner9def7cc2015-11-04 20:25:16 +0800212 "rockchip,rk3036-smp"
Heiko Stübner26ab69c2014-03-27 01:06:32 +0100213 "rockchip,rk3066-smp"
Linus Walleijbf64dd22015-08-03 09:26:41 +0200214 "ste,dbx500-smp"
Lorenzo Pieralisi594f88d2013-09-26 10:42:02 +0100215
216 - cpu-release-addr
217 Usage: required for systems that have an "enable-method"
218 property value of "spin-table".
219 Value type: <prop-encoded-array>
220 Definition:
221 # On ARM v8 64-bit systems must be a two cell
222 property identifying a 64-bit zero-initialised
223 memory location.
224
Rohit Vaswanib00c9272013-10-31 17:26:33 -0700225 - qcom,saw
226 Usage: required for systems that have an "enable-method"
227 property value of "qcom,kpss-acc-v1" or
228 "qcom,kpss-acc-v2"
229 Value type: <phandle>
230 Definition: Specifies the SAW[1] node associated with this CPU.
231
232 - qcom,acc
233 Usage: required for systems that have an "enable-method"
234 property value of "qcom,kpss-acc-v1" or
235 "qcom,kpss-acc-v2"
236 Value type: <phandle>
237 Definition: Specifies the ACC[2] node associated with this CPU.
238
Lorenzo Pieralisi3f8161b2013-11-27 16:22:55 +0000239 - cpu-idle-states
240 Usage: Optional
241 Value type: <prop-encoded-array>
242 Definition:
243 # List of phandles to idle state nodes supported
244 by this cpu [3].
Rohit Vaswanib00c9272013-10-31 17:26:33 -0700245
Juri Lellide42fe12016-10-17 16:46:42 +0100246 - capacity-dmips-mhz
247 Usage: Optional
248 Value type: <u32>
249 Definition:
250 # u32 value representing CPU capacity [3] in
251 DMIPS/MHz, relative to highest capacity-dmips-mhz
252 in the system.
253
Heiko Stuebner6de2d212014-10-15 10:23:01 -0700254 - rockchip,pmu
255 Usage: optional for systems that have an "enable-method"
256 property value of "rockchip,rk3066-smp"
257 While optional, it is the preferred way to get access to
258 the cpu-core power-domains.
259 Value type: <phandle>
260 Definition: Specifies the syscon node controlling the cpu core
261 power domains.
262
Punit Agrawal3be3f8f2015-11-17 12:06:21 +0000263 - dynamic-power-coefficient
264 Usage: optional
265 Value type: <prop-encoded-array>
266 Definition: A u32 value that represents the running time dynamic
Geert Uytterhoeven46f12962016-02-15 13:44:42 +0100267 power coefficient in units of mW/MHz/uV^2. The
Punit Agrawal3be3f8f2015-11-17 12:06:21 +0000268 coefficient can either be calculated from power
269 measurements or derived by analysis.
270
271 The dynamic power consumption of the CPU is
272 proportional to the square of the Voltage (V) and
273 the clock frequency (f). The coefficient is used to
274 calculate the dynamic power as below -
275
276 Pdyn = dynamic-power-coefficient * V^2 * f
277
278 where voltage is in uV, frequency is in MHz.
279
Lorenzo Pieralisi594f88d2013-09-26 10:42:02 +0100280Example 1 (dual-cluster big.LITTLE system 32-bit):
Lorenzo Pieralisia0ae02402011-11-17 17:31:51 +0000281
282 cpus {
283 #size-cells = <0>;
284 #address-cells = <1>;
285
Lorenzo Pieralisi594f88d2013-09-26 10:42:02 +0100286 cpu@0 {
Lorenzo Pieralisia0ae02402011-11-17 17:31:51 +0000287 device_type = "cpu";
288 compatible = "arm,cortex-a15";
289 reg = <0x0>;
290 };
291
Lorenzo Pieralisi594f88d2013-09-26 10:42:02 +0100292 cpu@1 {
Lorenzo Pieralisia0ae02402011-11-17 17:31:51 +0000293 device_type = "cpu";
294 compatible = "arm,cortex-a15";
295 reg = <0x1>;
296 };
297
Lorenzo Pieralisi594f88d2013-09-26 10:42:02 +0100298 cpu@100 {
Lorenzo Pieralisia0ae02402011-11-17 17:31:51 +0000299 device_type = "cpu";
300 compatible = "arm,cortex-a7";
301 reg = <0x100>;
302 };
303
Lorenzo Pieralisi594f88d2013-09-26 10:42:02 +0100304 cpu@101 {
Lorenzo Pieralisia0ae02402011-11-17 17:31:51 +0000305 device_type = "cpu";
306 compatible = "arm,cortex-a7";
307 reg = <0x101>;
308 };
309 };
Lorenzo Pieralisi594f88d2013-09-26 10:42:02 +0100310
311Example 2 (Cortex-A8 uniprocessor 32-bit system):
312
313 cpus {
314 #size-cells = <0>;
315 #address-cells = <1>;
316
317 cpu@0 {
318 device_type = "cpu";
319 compatible = "arm,cortex-a8";
320 reg = <0x0>;
321 };
322 };
323
324Example 3 (ARM 926EJ-S uniprocessor 32-bit system):
325
326 cpus {
327 #size-cells = <0>;
328 #address-cells = <1>;
329
330 cpu@0 {
331 device_type = "cpu";
332 compatible = "arm,arm926ej-s";
333 reg = <0x0>;
334 };
335 };
336
337Example 4 (ARM Cortex-A57 64-bit system):
338
339cpus {
340 #size-cells = <0>;
341 #address-cells = <2>;
342
343 cpu@0 {
344 device_type = "cpu";
345 compatible = "arm,cortex-a57";
346 reg = <0x0 0x0>;
347 enable-method = "spin-table";
348 cpu-release-addr = <0 0x20000000>;
349 };
350
351 cpu@1 {
352 device_type = "cpu";
353 compatible = "arm,cortex-a57";
354 reg = <0x0 0x1>;
355 enable-method = "spin-table";
356 cpu-release-addr = <0 0x20000000>;
357 };
358
359 cpu@100 {
360 device_type = "cpu";
361 compatible = "arm,cortex-a57";
362 reg = <0x0 0x100>;
363 enable-method = "spin-table";
364 cpu-release-addr = <0 0x20000000>;
365 };
366
367 cpu@101 {
368 device_type = "cpu";
369 compatible = "arm,cortex-a57";
370 reg = <0x0 0x101>;
371 enable-method = "spin-table";
372 cpu-release-addr = <0 0x20000000>;
373 };
374
375 cpu@10000 {
376 device_type = "cpu";
377 compatible = "arm,cortex-a57";
378 reg = <0x0 0x10000>;
379 enable-method = "spin-table";
380 cpu-release-addr = <0 0x20000000>;
381 };
382
383 cpu@10001 {
384 device_type = "cpu";
385 compatible = "arm,cortex-a57";
386 reg = <0x0 0x10001>;
387 enable-method = "spin-table";
388 cpu-release-addr = <0 0x20000000>;
389 };
390
391 cpu@10100 {
392 device_type = "cpu";
393 compatible = "arm,cortex-a57";
394 reg = <0x0 0x10100>;
395 enable-method = "spin-table";
396 cpu-release-addr = <0 0x20000000>;
397 };
398
399 cpu@10101 {
400 device_type = "cpu";
401 compatible = "arm,cortex-a57";
402 reg = <0x0 0x10101>;
403 enable-method = "spin-table";
404 cpu-release-addr = <0 0x20000000>;
405 };
406
407 cpu@100000000 {
408 device_type = "cpu";
409 compatible = "arm,cortex-a57";
410 reg = <0x1 0x0>;
411 enable-method = "spin-table";
412 cpu-release-addr = <0 0x20000000>;
413 };
414
415 cpu@100000001 {
416 device_type = "cpu";
417 compatible = "arm,cortex-a57";
418 reg = <0x1 0x1>;
419 enable-method = "spin-table";
420 cpu-release-addr = <0 0x20000000>;
421 };
422
423 cpu@100000100 {
424 device_type = "cpu";
425 compatible = "arm,cortex-a57";
426 reg = <0x1 0x100>;
427 enable-method = "spin-table";
428 cpu-release-addr = <0 0x20000000>;
429 };
430
431 cpu@100000101 {
432 device_type = "cpu";
433 compatible = "arm,cortex-a57";
434 reg = <0x1 0x101>;
435 enable-method = "spin-table";
436 cpu-release-addr = <0 0x20000000>;
437 };
438
439 cpu@100010000 {
440 device_type = "cpu";
441 compatible = "arm,cortex-a57";
442 reg = <0x1 0x10000>;
443 enable-method = "spin-table";
444 cpu-release-addr = <0 0x20000000>;
445 };
446
447 cpu@100010001 {
448 device_type = "cpu";
449 compatible = "arm,cortex-a57";
450 reg = <0x1 0x10001>;
451 enable-method = "spin-table";
452 cpu-release-addr = <0 0x20000000>;
453 };
454
455 cpu@100010100 {
456 device_type = "cpu";
457 compatible = "arm,cortex-a57";
458 reg = <0x1 0x10100>;
459 enable-method = "spin-table";
460 cpu-release-addr = <0 0x20000000>;
461 };
462
463 cpu@100010101 {
464 device_type = "cpu";
465 compatible = "arm,cortex-a57";
466 reg = <0x1 0x10101>;
467 enable-method = "spin-table";
468 cpu-release-addr = <0 0x20000000>;
469 };
470};
Rohit Vaswanib00c9272013-10-31 17:26:33 -0700471
472--
473[1] arm/msm/qcom,saw2.txt
474[2] arm/msm/qcom,kpss-acc.txt
Lorenzo Pieralisi3f8161b2013-11-27 16:22:55 +0000475[3] ARM Linux kernel documentation - idle states bindings
476 Documentation/devicetree/bindings/arm/idle-states.txt
Juri Lellide42fe12016-10-17 16:46:42 +0100477[3] ARM Linux kernel documentation - cpu capacity bindings
478 Documentation/devicetree/bindings/arm/cpu-capacity.txt