]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - rpmsg/hwspinlock.git/blob - Documentation/devicetree/bindings/arm/cpus.txt
Merge tag 'at91-ab-4.19-dt' of git://git.kernel.org/pub/scm/linux/kernel/git/abelloni...
[rpmsg/hwspinlock.git] / Documentation / devicetree / bindings / arm / cpus.txt
1 =================
2 ARM CPUs bindings
3 =================
5 The device tree allows to describe the layout of CPUs in a system through
6 the "cpus" node, which in turn contains a number of subnodes (ie "cpu")
7 defining properties for every cpu.
9 Bindings for CPU nodes follow the Devicetree Specification, available from:
11 https://www.devicetree.org/specifications/
13 with updates for 32-bit and 64-bit ARM systems provided in this document.
15 ================================
16 Convention used in this document
17 ================================
19 This document follows the conventions described in the Devicetree
20 Specification, with the addition:
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
25 =====================================
26 cpus and cpu node bindings definition
27 =====================================
29 The ARM architecture, in accordance with the Devicetree Specification,
30 requires the cpus and cpu nodes to be present and contain the properties
31 described below.
33 - cpus node
35         Description: Container of cpu nodes
37         The node name must be "cpus".
39         A cpus node must define the following properties:
41         - #address-cells
42                 Usage: required
43                 Value type: <u32>
45                 Definition depends on ARM architecture version and
46                 configuration:
48                         # On uniprocessor ARM architectures previous to v7
49                           value must be 1, to enable a simple enumeration
50                           scheme for processors that do not have a HW CPU
51                           identification register.
52                         # On 32-bit ARM 11 MPcore, ARM v7 or later systems
53                           value must be 1, that corresponds to CPUID/MPIDR
54                           registers sizes.
55                         # On ARM v8 64-bit systems value should be set to 2,
56                           that corresponds to the MPIDR_EL1 register size.
57                           If MPIDR_EL1[63:32] value is equal to 0 on all CPUs
58                           in the system, #address-cells can be set to 1, since
59                           MPIDR_EL1[63:32] bits are not used for CPUs
60                           identification.
61         - #size-cells
62                 Usage: required
63                 Value type: <u32>
64                 Definition: must be set to 0
66 - cpu node
68         Description: Describes a CPU in an ARM based system
70         PROPERTIES
72         - device_type
73                 Usage: required
74                 Value type: <string>
75                 Definition: must be "cpu"
76         - reg
77                 Usage and definition depend on ARM architecture version and
78                 configuration:
80                         # On uniprocessor ARM architectures previous to v7
81                           this property is required and must be set to 0.
83                         # On ARM 11 MPcore based systems this property is
84                           required and matches the CPUID[11:0] register bits.
86                           Bits [11:0] in the reg cell must be set to
87                           bits [11:0] in CPU ID register.
89                           All other bits in the reg cell must be set to 0.
91                         # On 32-bit ARM v7 or later systems this property is
92                           required and matches the CPU MPIDR[23:0] register
93                           bits.
95                           Bits [23:0] in the reg cell must be set to
96                           bits [23:0] in MPIDR.
98                           All other bits in the reg cell must be set to 0.
100                         # On ARM v8 64-bit systems this property is required
101                           and matches the MPIDR_EL1 register affinity bits.
103                           * If cpus node's #address-cells property is set to 2
105                             The first reg cell bits [7:0] must be set to
106                             bits [39:32] of MPIDR_EL1.
108                             The second reg cell bits [23:0] must be set to
109                             bits [23:0] of MPIDR_EL1.
111                           * If cpus node's #address-cells property is set to 1
113                             The reg cell bits [23:0] must be set to bits [23:0]
114                             of MPIDR_EL1.
116                           All other bits in the reg cells must be set to 0.
118         - compatible:
119                 Usage: required
120                 Value type: <string>
121                 Definition: should be one of:
122                             "arm,arm710t"
123                             "arm,arm720t"
124                             "arm,arm740t"
125                             "arm,arm7ej-s"
126                             "arm,arm7tdmi"
127                             "arm,arm7tdmi-s"
128                             "arm,arm9es"
129                             "arm,arm9ej-s"
130                             "arm,arm920t"
131                             "arm,arm922t"
132                             "arm,arm925"
133                             "arm,arm926e-s"
134                             "arm,arm926ej-s"
135                             "arm,arm940t"
136                             "arm,arm946e-s"
137                             "arm,arm966e-s"
138                             "arm,arm968e-s"
139                             "arm,arm9tdmi"
140                             "arm,arm1020e"
141                             "arm,arm1020t"
142                             "arm,arm1022e"
143                             "arm,arm1026ej-s"
144                             "arm,arm1136j-s"
145                             "arm,arm1136jf-s"
146                             "arm,arm1156t2-s"
147                             "arm,arm1156t2f-s"
148                             "arm,arm1176jzf"
149                             "arm,arm1176jz-s"
150                             "arm,arm1176jzf-s"
151                             "arm,arm11mpcore"
152                             "arm,cortex-a5"
153                             "arm,cortex-a7"
154                             "arm,cortex-a8"
155                             "arm,cortex-a9"
156                             "arm,cortex-a12"
157                             "arm,cortex-a15"
158                             "arm,cortex-a17"
159                             "arm,cortex-a53"
160                             "arm,cortex-a57"
161                             "arm,cortex-a72"
162                             "arm,cortex-a73"
163                             "arm,cortex-m0"
164                             "arm,cortex-m0+"
165                             "arm,cortex-m1"
166                             "arm,cortex-m3"
167                             "arm,cortex-m4"
168                             "arm,cortex-r4"
169                             "arm,cortex-r5"
170                             "arm,cortex-r7"
171                             "brcm,brahma-b15"
172                             "brcm,brahma-b53"
173                             "brcm,vulcan"
174                             "cavium,thunder"
175                             "cavium,thunder2"
176                             "faraday,fa526"
177                             "intel,sa110"
178                             "intel,sa1100"
179                             "marvell,feroceon"
180                             "marvell,mohawk"
181                             "marvell,pj4a"
182                             "marvell,pj4b"
183                             "marvell,sheeva-v5"
184                             "nvidia,tegra132-denver"
185                             "nvidia,tegra186-denver"
186                             "nvidia,tegra194-carmel"
187                             "qcom,krait"
188                             "qcom,kryo"
189                             "qcom,kryo385"
190                             "qcom,scorpion"
191         - enable-method
192                 Value type: <stringlist>
193                 Usage and definition depend on ARM architecture version.
194                         # On ARM v8 64-bit this property is required and must
195                           be one of:
196                              "psci"
197                              "spin-table"
198                         # On ARM 32-bit systems this property is optional and
199                           can be one of:
200                             "actions,s500-smp"
201                             "allwinner,sun6i-a31"
202                             "allwinner,sun8i-a23"
203                             "allwinner,sun9i-a80-smp"
204                             "amlogic,meson8-smp"
205                             "amlogic,meson8b-smp"
206                             "arm,realview-smp"
207                             "brcm,bcm11351-cpu-method"
208                             "brcm,bcm23550"
209                             "brcm,bcm2836-smp"
210                             "brcm,bcm-nsp-smp"
211                             "brcm,brahma-b15"
212                             "marvell,armada-375-smp"
213                             "marvell,armada-380-smp"
214                             "marvell,armada-390-smp"
215                             "marvell,armada-xp-smp"
216                             "marvell,98dx3236-smp"
217                             "mediatek,mt6589-smp"
218                             "mediatek,mt81xx-tz-smp"
219                             "qcom,gcc-msm8660"
220                             "qcom,kpss-acc-v1"
221                             "qcom,kpss-acc-v2"
222                             "renesas,apmu"
223                             "rockchip,rk3036-smp"
224                             "rockchip,rk3066-smp"
225                             "ste,dbx500-smp"
227         - cpu-release-addr
228                 Usage: required for systems that have an "enable-method"
229                        property value of "spin-table".
230                 Value type: <prop-encoded-array>
231                 Definition:
232                         # On ARM v8 64-bit systems must be a two cell
233                           property identifying a 64-bit zero-initialised
234                           memory location.
236         - qcom,saw
237                 Usage: required for systems that have an "enable-method"
238                        property value of "qcom,kpss-acc-v1" or
239                        "qcom,kpss-acc-v2"
240                 Value type: <phandle>
241                 Definition: Specifies the SAW[1] node associated with this CPU.
243         - qcom,acc
244                 Usage: required for systems that have an "enable-method"
245                        property value of "qcom,kpss-acc-v1" or
246                        "qcom,kpss-acc-v2"
247                 Value type: <phandle>
248                 Definition: Specifies the ACC[2] node associated with this CPU.
250         - cpu-idle-states
251                 Usage: Optional
252                 Value type: <prop-encoded-array>
253                 Definition:
254                         # List of phandles to idle state nodes supported
255                           by this cpu [3].
257         - capacity-dmips-mhz
258                 Usage: Optional
259                 Value type: <u32>
260                 Definition:
261                         # u32 value representing CPU capacity [4] in
262                           DMIPS/MHz, relative to highest capacity-dmips-mhz
263                           in the system.
265         - rockchip,pmu
266                 Usage: 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                 Value type: <phandle>
271                 Definition: Specifies the syscon node controlling the cpu core
272                             power domains.
274         - dynamic-power-coefficient
275                 Usage: optional
276                 Value type: <prop-encoded-array>
277                 Definition: A u32 value that represents the running time dynamic
278                             power coefficient in units of mW/MHz/uV^2. The
279                             coefficient can either be calculated from power
280                             measurements or derived by analysis.
282                             The dynamic power consumption of the CPU  is
283                             proportional to the square of the Voltage (V) and
284                             the clock frequency (f). The coefficient is used to
285                             calculate the dynamic power as below -
287                             Pdyn = dynamic-power-coefficient * V^2 * f
289                             where voltage is in uV, frequency is in MHz.
291 Example 1 (dual-cluster big.LITTLE system 32-bit):
293         cpus {
294                 #size-cells = <0>;
295                 #address-cells = <1>;
297                 cpu@0 {
298                         device_type = "cpu";
299                         compatible = "arm,cortex-a15";
300                         reg = <0x0>;
301                 };
303                 cpu@1 {
304                         device_type = "cpu";
305                         compatible = "arm,cortex-a15";
306                         reg = <0x1>;
307                 };
309                 cpu@100 {
310                         device_type = "cpu";
311                         compatible = "arm,cortex-a7";
312                         reg = <0x100>;
313                 };
315                 cpu@101 {
316                         device_type = "cpu";
317                         compatible = "arm,cortex-a7";
318                         reg = <0x101>;
319                 };
320         };
322 Example 2 (Cortex-A8 uniprocessor 32-bit system):
324         cpus {
325                 #size-cells = <0>;
326                 #address-cells = <1>;
328                 cpu@0 {
329                         device_type = "cpu";
330                         compatible = "arm,cortex-a8";
331                         reg = <0x0>;
332                 };
333         };
335 Example 3 (ARM 926EJ-S uniprocessor 32-bit system):
337         cpus {
338                 #size-cells = <0>;
339                 #address-cells = <1>;
341                 cpu@0 {
342                         device_type = "cpu";
343                         compatible = "arm,arm926ej-s";
344                         reg = <0x0>;
345                 };
346         };
348 Example 4 (ARM Cortex-A57 64-bit system):
350 cpus {
351         #size-cells = <0>;
352         #address-cells = <2>;
354         cpu@0 {
355                 device_type = "cpu";
356                 compatible = "arm,cortex-a57";
357                 reg = <0x0 0x0>;
358                 enable-method = "spin-table";
359                 cpu-release-addr = <0 0x20000000>;
360         };
362         cpu@1 {
363                 device_type = "cpu";
364                 compatible = "arm,cortex-a57";
365                 reg = <0x0 0x1>;
366                 enable-method = "spin-table";
367                 cpu-release-addr = <0 0x20000000>;
368         };
370         cpu@100 {
371                 device_type = "cpu";
372                 compatible = "arm,cortex-a57";
373                 reg = <0x0 0x100>;
374                 enable-method = "spin-table";
375                 cpu-release-addr = <0 0x20000000>;
376         };
378         cpu@101 {
379                 device_type = "cpu";
380                 compatible = "arm,cortex-a57";
381                 reg = <0x0 0x101>;
382                 enable-method = "spin-table";
383                 cpu-release-addr = <0 0x20000000>;
384         };
386         cpu@10000 {
387                 device_type = "cpu";
388                 compatible = "arm,cortex-a57";
389                 reg = <0x0 0x10000>;
390                 enable-method = "spin-table";
391                 cpu-release-addr = <0 0x20000000>;
392         };
394         cpu@10001 {
395                 device_type = "cpu";
396                 compatible = "arm,cortex-a57";
397                 reg = <0x0 0x10001>;
398                 enable-method = "spin-table";
399                 cpu-release-addr = <0 0x20000000>;
400         };
402         cpu@10100 {
403                 device_type = "cpu";
404                 compatible = "arm,cortex-a57";
405                 reg = <0x0 0x10100>;
406                 enable-method = "spin-table";
407                 cpu-release-addr = <0 0x20000000>;
408         };
410         cpu@10101 {
411                 device_type = "cpu";
412                 compatible = "arm,cortex-a57";
413                 reg = <0x0 0x10101>;
414                 enable-method = "spin-table";
415                 cpu-release-addr = <0 0x20000000>;
416         };
418         cpu@100000000 {
419                 device_type = "cpu";
420                 compatible = "arm,cortex-a57";
421                 reg = <0x1 0x0>;
422                 enable-method = "spin-table";
423                 cpu-release-addr = <0 0x20000000>;
424         };
426         cpu@100000001 {
427                 device_type = "cpu";
428                 compatible = "arm,cortex-a57";
429                 reg = <0x1 0x1>;
430                 enable-method = "spin-table";
431                 cpu-release-addr = <0 0x20000000>;
432         };
434         cpu@100000100 {
435                 device_type = "cpu";
436                 compatible = "arm,cortex-a57";
437                 reg = <0x1 0x100>;
438                 enable-method = "spin-table";
439                 cpu-release-addr = <0 0x20000000>;
440         };
442         cpu@100000101 {
443                 device_type = "cpu";
444                 compatible = "arm,cortex-a57";
445                 reg = <0x1 0x101>;
446                 enable-method = "spin-table";
447                 cpu-release-addr = <0 0x20000000>;
448         };
450         cpu@100010000 {
451                 device_type = "cpu";
452                 compatible = "arm,cortex-a57";
453                 reg = <0x1 0x10000>;
454                 enable-method = "spin-table";
455                 cpu-release-addr = <0 0x20000000>;
456         };
458         cpu@100010001 {
459                 device_type = "cpu";
460                 compatible = "arm,cortex-a57";
461                 reg = <0x1 0x10001>;
462                 enable-method = "spin-table";
463                 cpu-release-addr = <0 0x20000000>;
464         };
466         cpu@100010100 {
467                 device_type = "cpu";
468                 compatible = "arm,cortex-a57";
469                 reg = <0x1 0x10100>;
470                 enable-method = "spin-table";
471                 cpu-release-addr = <0 0x20000000>;
472         };
474         cpu@100010101 {
475                 device_type = "cpu";
476                 compatible = "arm,cortex-a57";
477                 reg = <0x1 0x10101>;
478                 enable-method = "spin-table";
479                 cpu-release-addr = <0 0x20000000>;
480         };
481 };
483 --
484 [1] arm/msm/qcom,saw2.txt
485 [2] arm/msm/qcom,kpss-acc.txt
486 [3] ARM Linux kernel documentation - idle states bindings
487     Documentation/devicetree/bindings/arm/idle-states.txt
488 [4] ARM Linux kernel documentation - cpu capacity bindings
489     Documentation/devicetree/bindings/arm/cpu-capacity.txt