1 ===========================================
2 ARM topology binding description
3 ===========================================
5 ===========================================
7 ===========================================
9 In an ARM system, the hierarchy of CPUs is defined through three entities that
10 are used to describe the layout of physical CPUs in the system:
16 The cpu nodes (bindings defined in [1]) represent the devices that
17 correspond to physical CPUs and are to be mapped to the hierarchy levels.
19 The bottom hierarchy level sits at core or thread level depending on whether
20 symmetric multi-threading (SMT) is supported or not.
22 For instance in a system where CPUs support SMT, "cpu" nodes represent all
23 threads existing in the system and map to the hierarchy level "thread" above.
24 In systems where SMT is not supported "cpu" nodes represent all cores present
25 in the system and map to the hierarchy level "core" above.
27 ARM topology bindings allow one to associate cpu nodes with hierarchical groups
28 corresponding to the system hierarchy; syntactically they are defined as device
31 The remainder of this document provides the topology bindings for ARM, based
32 on the ePAPR standard, available from:
34 http://www.power.org/documentation/epapr-version-1-1/
36 If not stated otherwise, whenever a reference to a cpu node phandle is made its
37 value must point to a cpu node compliant with the cpu node bindings as
39 A topology description containing phandles to cpu nodes that are not compliant
40 with bindings standardized in [1] is therefore considered invalid.
42 ===========================================
44 ===========================================
46 The ARM CPU topology is defined within the cpu-map node, which is a direct
47 child of the cpus node and provides a container where the actual topology
52 Usage: Optional - On ARM SMP systems provide CPUs topology to the OS.
53 ARM uniprocessor systems do not require a topology
54 description and therefore should not define a
57 Description: The cpu-map node is just a container node where its
58 subnodes describe the CPU topology.
60 Node name must be "cpu-map".
62 The cpu-map node's parent node must be the cpus node.
64 The cpu-map node's child nodes can be:
66 - one or more cluster nodes
68 Any other configuration is considered invalid.
70 The cpu-map node can only contain three types of child nodes:
76 whose bindings are described in paragraph 3.
78 The nodes describing the CPU topology (cluster/core/thread) can only be
79 defined within the cpu-map node.
80 Any other configuration is consider invalid and therefore must be ignored.
82 ===========================================
83 2.1 - cpu-map child nodes naming convention
84 ===========================================
86 cpu-map child nodes must follow a naming convention where the node name
87 must be "clusterN", "coreN", "threadN" depending on the node type (ie
88 cluster/core/thread) (where N = {0, 1, ...} is the node number; nodes which
89 are siblings within a single common parent node must be given a unique and
90 sequential N value, starting from 0).
91 cpu-map child nodes which do not share a common parent node can have the same
92 name (ie same number N as other cpu-map child nodes at different device tree
93 levels) since name uniqueness will be guaranteed by the device tree hierarchy.
95 ===========================================
96 3 - cluster/core/thread node bindings
97 ===========================================
99 Bindings for cluster/cpu/thread nodes are defined as follows:
103 Description: must be declared within a cpu-map node, one node
104 per cluster. A system can contain several layers of
105 clustering and cluster nodes can be contained in parent
108 The cluster node name must be "clusterN" as described in 2.1 above.
109 A cluster node can not be a leaf node.
111 A cluster node's child nodes must be:
113 - one or more cluster nodes; or
114 - one or more core nodes
116 Any other configuration is considered invalid.
120 Description: must be declared in a cluster node, one node per core in
121 the cluster. If the system does not support SMT, core
122 nodes are leaf nodes, otherwise they become containers of
125 The core node name must be "coreN" as described in 2.1 above.
127 A core node must be a leaf node if SMT is not supported.
129 Properties for core nodes that are leaf nodes:
133 Value type: <phandle>
134 Definition: a phandle to the cpu node that corresponds to the
137 If a core node is not a leaf node (CPUs supporting SMT) a core node's
140 - one or more thread nodes
142 Any other configuration is considered invalid.
146 Description: must be declared in a core node, one node per thread
147 in the core if the system supports SMT. Thread nodes are
148 always leaf nodes in the device tree.
150 The thread node name must be "threadN" as described in 2.1 above.
152 A thread node must be a leaf node.
154 A thread node must contain the following property:
158 Value type: <phandle>
159 Definition: a phandle to the cpu node that corresponds to
162 ===========================================
164 ===========================================
166 Example 1 (ARM 64-bit, 16-cpu system, two clusters of clusters):
170 #address-cells = <2>;
258 compatible = "arm,cortex-a57";
260 enable-method = "spin-table";
261 cpu-release-addr = <0 0x20000000>;
266 compatible = "arm,cortex-a57";
268 enable-method = "spin-table";
269 cpu-release-addr = <0 0x20000000>;
274 compatible = "arm,cortex-a57";
276 enable-method = "spin-table";
277 cpu-release-addr = <0 0x20000000>;
282 compatible = "arm,cortex-a57";
284 enable-method = "spin-table";
285 cpu-release-addr = <0 0x20000000>;
290 compatible = "arm,cortex-a57";
292 enable-method = "spin-table";
293 cpu-release-addr = <0 0x20000000>;
298 compatible = "arm,cortex-a57";
300 enable-method = "spin-table";
301 cpu-release-addr = <0 0x20000000>;
306 compatible = "arm,cortex-a57";
308 enable-method = "spin-table";
309 cpu-release-addr = <0 0x20000000>;
314 compatible = "arm,cortex-a57";
316 enable-method = "spin-table";
317 cpu-release-addr = <0 0x20000000>;
320 CPU8: cpu@100000000 {
322 compatible = "arm,cortex-a57";
324 enable-method = "spin-table";
325 cpu-release-addr = <0 0x20000000>;
328 CPU9: cpu@100000001 {
330 compatible = "arm,cortex-a57";
332 enable-method = "spin-table";
333 cpu-release-addr = <0 0x20000000>;
336 CPU10: cpu@100000100 {
338 compatible = "arm,cortex-a57";
340 enable-method = "spin-table";
341 cpu-release-addr = <0 0x20000000>;
344 CPU11: cpu@100000101 {
346 compatible = "arm,cortex-a57";
348 enable-method = "spin-table";
349 cpu-release-addr = <0 0x20000000>;
352 CPU12: cpu@100010000 {
354 compatible = "arm,cortex-a57";
356 enable-method = "spin-table";
357 cpu-release-addr = <0 0x20000000>;
360 CPU13: cpu@100010001 {
362 compatible = "arm,cortex-a57";
364 enable-method = "spin-table";
365 cpu-release-addr = <0 0x20000000>;
368 CPU14: cpu@100010100 {
370 compatible = "arm,cortex-a57";
372 enable-method = "spin-table";
373 cpu-release-addr = <0 0x20000000>;
376 CPU15: cpu@100010101 {
378 compatible = "arm,cortex-a57";
380 enable-method = "spin-table";
381 cpu-release-addr = <0 0x20000000>;
385 Example 2 (ARM 32-bit, dual-cluster, 8-cpu system, no SMT):
389 #address-cells = <1>;
425 compatible = "arm,cortex-a15";
431 compatible = "arm,cortex-a15";
437 compatible = "arm,cortex-a15";
443 compatible = "arm,cortex-a15";
449 compatible = "arm,cortex-a7";
455 compatible = "arm,cortex-a7";
461 compatible = "arm,cortex-a7";
467 compatible = "arm,cortex-a7";
472 ===============================================================================
473 [1] ARM Linux kernel documentation
474 Documentation/devicetree/bindings/arm/cpus.txt