18c2ecf20Sopenharmony_ci===========================================
28c2ecf20Sopenharmony_ciCPU topology binding description
38c2ecf20Sopenharmony_ci===========================================
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ci===========================================
68c2ecf20Sopenharmony_ci1 - Introduction
78c2ecf20Sopenharmony_ci===========================================
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ciIn a SMP system, the hierarchy of CPUs is defined through three entities that
108c2ecf20Sopenharmony_ciare used to describe the layout of physical CPUs in the system:
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci- socket
138c2ecf20Sopenharmony_ci- cluster
148c2ecf20Sopenharmony_ci- core
158c2ecf20Sopenharmony_ci- thread
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ciThe bottom hierarchy level sits at core or thread level depending on whether
188c2ecf20Sopenharmony_cisymmetric multi-threading (SMT) is supported or not.
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ciFor instance in a system where CPUs support SMT, "cpu" nodes represent all
218c2ecf20Sopenharmony_cithreads existing in the system and map to the hierarchy level "thread" above.
228c2ecf20Sopenharmony_ciIn systems where SMT is not supported "cpu" nodes represent all cores present
238c2ecf20Sopenharmony_ciin the system and map to the hierarchy level "core" above.
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_ciCPU topology bindings allow one to associate cpu nodes with hierarchical groups
268c2ecf20Sopenharmony_cicorresponding to the system hierarchy; syntactically they are defined as device
278c2ecf20Sopenharmony_citree nodes.
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_ciCurrently, only ARM/RISC-V intend to use this cpu topology binding but it may be
308c2ecf20Sopenharmony_ciused for any other architecture as well.
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_ciThe cpu nodes, as per bindings defined in [4], represent the devices that
338c2ecf20Sopenharmony_cicorrespond to physical CPUs and are to be mapped to the hierarchy levels.
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_ciA topology description containing phandles to cpu nodes that are not compliant
368c2ecf20Sopenharmony_ciwith bindings standardized in [4] is therefore considered invalid.
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_ci===========================================
398c2ecf20Sopenharmony_ci2 - cpu-map node
408c2ecf20Sopenharmony_ci===========================================
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ciThe ARM/RISC-V CPU topology is defined within the cpu-map node, which is a direct
438c2ecf20Sopenharmony_cichild of the cpus node and provides a container where the actual topology
448c2ecf20Sopenharmony_cinodes are listed.
458c2ecf20Sopenharmony_ci
468c2ecf20Sopenharmony_ci- cpu-map node
478c2ecf20Sopenharmony_ci
488c2ecf20Sopenharmony_ci	Usage: Optional - On SMP systems provide CPUs topology to the OS.
498c2ecf20Sopenharmony_ci			  Uniprocessor systems do not require a topology
508c2ecf20Sopenharmony_ci			  description and therefore should not define a
518c2ecf20Sopenharmony_ci			  cpu-map node.
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_ci	Description: The cpu-map node is just a container node where its
548c2ecf20Sopenharmony_ci		     subnodes describe the CPU topology.
558c2ecf20Sopenharmony_ci
568c2ecf20Sopenharmony_ci	Node name must be "cpu-map".
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_ci	The cpu-map node's parent node must be the cpus node.
598c2ecf20Sopenharmony_ci
608c2ecf20Sopenharmony_ci	The cpu-map node's child nodes can be:
618c2ecf20Sopenharmony_ci
628c2ecf20Sopenharmony_ci	- one or more cluster nodes or
638c2ecf20Sopenharmony_ci	- one or more socket nodes in a multi-socket system
648c2ecf20Sopenharmony_ci
658c2ecf20Sopenharmony_ci	Any other configuration is considered invalid.
668c2ecf20Sopenharmony_ci
678c2ecf20Sopenharmony_ciThe cpu-map node can only contain 4 types of child nodes:
688c2ecf20Sopenharmony_ci
698c2ecf20Sopenharmony_ci- socket node
708c2ecf20Sopenharmony_ci- cluster node
718c2ecf20Sopenharmony_ci- core node
728c2ecf20Sopenharmony_ci- thread node
738c2ecf20Sopenharmony_ci
748c2ecf20Sopenharmony_ciwhose bindings are described in paragraph 3.
758c2ecf20Sopenharmony_ci
768c2ecf20Sopenharmony_ciThe nodes describing the CPU topology (socket/cluster/core/thread) can
778c2ecf20Sopenharmony_cionly be defined within the cpu-map node and every core/thread in the
788c2ecf20Sopenharmony_cisystem must be defined within the topology.  Any other configuration is
798c2ecf20Sopenharmony_ciinvalid and therefore must be ignored.
808c2ecf20Sopenharmony_ci
818c2ecf20Sopenharmony_ci===========================================
828c2ecf20Sopenharmony_ci2.1 - cpu-map child nodes naming convention
838c2ecf20Sopenharmony_ci===========================================
848c2ecf20Sopenharmony_ci
858c2ecf20Sopenharmony_cicpu-map child nodes must follow a naming convention where the node name
868c2ecf20Sopenharmony_cimust be "socketN", "clusterN", "coreN", "threadN" depending on the node type
878c2ecf20Sopenharmony_ci(ie socket/cluster/core/thread) (where N = {0, 1, ...} is the node number; nodes
888c2ecf20Sopenharmony_ciwhich are siblings within a single common parent node must be given a unique and
898c2ecf20Sopenharmony_cisequential N value, starting from 0).
908c2ecf20Sopenharmony_cicpu-map child nodes which do not share a common parent node can have the same
918c2ecf20Sopenharmony_ciname (ie same number N as other cpu-map child nodes at different device tree
928c2ecf20Sopenharmony_cilevels) since name uniqueness will be guaranteed by the device tree hierarchy.
938c2ecf20Sopenharmony_ci
948c2ecf20Sopenharmony_ci===========================================
958c2ecf20Sopenharmony_ci3 - socket/cluster/core/thread node bindings
968c2ecf20Sopenharmony_ci===========================================
978c2ecf20Sopenharmony_ci
988c2ecf20Sopenharmony_ciBindings for socket/cluster/cpu/thread nodes are defined as follows:
998c2ecf20Sopenharmony_ci
1008c2ecf20Sopenharmony_ci- socket node
1018c2ecf20Sopenharmony_ci
1028c2ecf20Sopenharmony_ci	 Description: must be declared within a cpu-map node, one node
1038c2ecf20Sopenharmony_ci		      per physical socket in the system. A system can
1048c2ecf20Sopenharmony_ci		      contain single or multiple physical socket.
1058c2ecf20Sopenharmony_ci		      The association of sockets and NUMA nodes is beyond
1068c2ecf20Sopenharmony_ci		      the scope of this bindings, please refer [2] for
1078c2ecf20Sopenharmony_ci		      NUMA bindings.
1088c2ecf20Sopenharmony_ci
1098c2ecf20Sopenharmony_ci	This node is optional for a single socket system.
1108c2ecf20Sopenharmony_ci
1118c2ecf20Sopenharmony_ci	The socket node name must be "socketN" as described in 2.1 above.
1128c2ecf20Sopenharmony_ci	A socket node can not be a leaf node.
1138c2ecf20Sopenharmony_ci
1148c2ecf20Sopenharmony_ci	A socket node's child nodes must be one or more cluster nodes.
1158c2ecf20Sopenharmony_ci
1168c2ecf20Sopenharmony_ci	Any other configuration is considered invalid.
1178c2ecf20Sopenharmony_ci
1188c2ecf20Sopenharmony_ci- cluster node
1198c2ecf20Sopenharmony_ci
1208c2ecf20Sopenharmony_ci	 Description: must be declared within a cpu-map node, one node
1218c2ecf20Sopenharmony_ci		      per cluster. A system can contain several layers of
1228c2ecf20Sopenharmony_ci		      clustering within a single physical socket and cluster
1238c2ecf20Sopenharmony_ci		      nodes can be contained in parent cluster nodes.
1248c2ecf20Sopenharmony_ci
1258c2ecf20Sopenharmony_ci	The cluster node name must be "clusterN" as described in 2.1 above.
1268c2ecf20Sopenharmony_ci	A cluster node can not be a leaf node.
1278c2ecf20Sopenharmony_ci
1288c2ecf20Sopenharmony_ci	A cluster node's child nodes must be:
1298c2ecf20Sopenharmony_ci
1308c2ecf20Sopenharmony_ci	- one or more cluster nodes; or
1318c2ecf20Sopenharmony_ci	- one or more core nodes
1328c2ecf20Sopenharmony_ci
1338c2ecf20Sopenharmony_ci	Any other configuration is considered invalid.
1348c2ecf20Sopenharmony_ci
1358c2ecf20Sopenharmony_ci- core node
1368c2ecf20Sopenharmony_ci
1378c2ecf20Sopenharmony_ci	Description: must be declared in a cluster node, one node per core in
1388c2ecf20Sopenharmony_ci		     the cluster. If the system does not support SMT, core
1398c2ecf20Sopenharmony_ci		     nodes are leaf nodes, otherwise they become containers of
1408c2ecf20Sopenharmony_ci		     thread nodes.
1418c2ecf20Sopenharmony_ci
1428c2ecf20Sopenharmony_ci	The core node name must be "coreN" as described in 2.1 above.
1438c2ecf20Sopenharmony_ci
1448c2ecf20Sopenharmony_ci	A core node must be a leaf node if SMT is not supported.
1458c2ecf20Sopenharmony_ci
1468c2ecf20Sopenharmony_ci	Properties for core nodes that are leaf nodes:
1478c2ecf20Sopenharmony_ci
1488c2ecf20Sopenharmony_ci	- cpu
1498c2ecf20Sopenharmony_ci		Usage: required
1508c2ecf20Sopenharmony_ci		Value type: <phandle>
1518c2ecf20Sopenharmony_ci		Definition: a phandle to the cpu node that corresponds to the
1528c2ecf20Sopenharmony_ci			    core node.
1538c2ecf20Sopenharmony_ci
1548c2ecf20Sopenharmony_ci	If a core node is not a leaf node (CPUs supporting SMT) a core node's
1558c2ecf20Sopenharmony_ci	child nodes can be:
1568c2ecf20Sopenharmony_ci
1578c2ecf20Sopenharmony_ci	- one or more thread nodes
1588c2ecf20Sopenharmony_ci
1598c2ecf20Sopenharmony_ci	Any other configuration is considered invalid.
1608c2ecf20Sopenharmony_ci
1618c2ecf20Sopenharmony_ci- thread node
1628c2ecf20Sopenharmony_ci
1638c2ecf20Sopenharmony_ci	Description: must be declared in a core node, one node per thread
1648c2ecf20Sopenharmony_ci		     in the core if the system supports SMT. Thread nodes are
1658c2ecf20Sopenharmony_ci		     always leaf nodes in the device tree.
1668c2ecf20Sopenharmony_ci
1678c2ecf20Sopenharmony_ci	The thread node name must be "threadN" as described in 2.1 above.
1688c2ecf20Sopenharmony_ci
1698c2ecf20Sopenharmony_ci	A thread node must be a leaf node.
1708c2ecf20Sopenharmony_ci
1718c2ecf20Sopenharmony_ci	A thread node must contain the following property:
1728c2ecf20Sopenharmony_ci
1738c2ecf20Sopenharmony_ci	- cpu
1748c2ecf20Sopenharmony_ci		Usage: required
1758c2ecf20Sopenharmony_ci		Value type: <phandle>
1768c2ecf20Sopenharmony_ci		Definition: a phandle to the cpu node that corresponds to
1778c2ecf20Sopenharmony_ci			    the thread node.
1788c2ecf20Sopenharmony_ci
1798c2ecf20Sopenharmony_ci===========================================
1808c2ecf20Sopenharmony_ci4 - Example dts
1818c2ecf20Sopenharmony_ci===========================================
1828c2ecf20Sopenharmony_ci
1838c2ecf20Sopenharmony_ciExample 1 (ARM 64-bit, 16-cpu system, two clusters of clusters in a single
1848c2ecf20Sopenharmony_ciphysical socket):
1858c2ecf20Sopenharmony_ci
1868c2ecf20Sopenharmony_cicpus {
1878c2ecf20Sopenharmony_ci	#size-cells = <0>;
1888c2ecf20Sopenharmony_ci	#address-cells = <2>;
1898c2ecf20Sopenharmony_ci
1908c2ecf20Sopenharmony_ci	cpu-map {
1918c2ecf20Sopenharmony_ci		socket0 {
1928c2ecf20Sopenharmony_ci			cluster0 {
1938c2ecf20Sopenharmony_ci				cluster0 {
1948c2ecf20Sopenharmony_ci					core0 {
1958c2ecf20Sopenharmony_ci						thread0 {
1968c2ecf20Sopenharmony_ci							cpu = <&CPU0>;
1978c2ecf20Sopenharmony_ci						};
1988c2ecf20Sopenharmony_ci						thread1 {
1998c2ecf20Sopenharmony_ci							cpu = <&CPU1>;
2008c2ecf20Sopenharmony_ci						};
2018c2ecf20Sopenharmony_ci					};
2028c2ecf20Sopenharmony_ci
2038c2ecf20Sopenharmony_ci					core1 {
2048c2ecf20Sopenharmony_ci						thread0 {
2058c2ecf20Sopenharmony_ci							cpu = <&CPU2>;
2068c2ecf20Sopenharmony_ci						};
2078c2ecf20Sopenharmony_ci						thread1 {
2088c2ecf20Sopenharmony_ci							cpu = <&CPU3>;
2098c2ecf20Sopenharmony_ci						};
2108c2ecf20Sopenharmony_ci					};
2118c2ecf20Sopenharmony_ci				};
2128c2ecf20Sopenharmony_ci
2138c2ecf20Sopenharmony_ci				cluster1 {
2148c2ecf20Sopenharmony_ci					core0 {
2158c2ecf20Sopenharmony_ci						thread0 {
2168c2ecf20Sopenharmony_ci							cpu = <&CPU4>;
2178c2ecf20Sopenharmony_ci						};
2188c2ecf20Sopenharmony_ci						thread1 {
2198c2ecf20Sopenharmony_ci							cpu = <&CPU5>;
2208c2ecf20Sopenharmony_ci						};
2218c2ecf20Sopenharmony_ci					};
2228c2ecf20Sopenharmony_ci
2238c2ecf20Sopenharmony_ci					core1 {
2248c2ecf20Sopenharmony_ci						thread0 {
2258c2ecf20Sopenharmony_ci							cpu = <&CPU6>;
2268c2ecf20Sopenharmony_ci						};
2278c2ecf20Sopenharmony_ci						thread1 {
2288c2ecf20Sopenharmony_ci							cpu = <&CPU7>;
2298c2ecf20Sopenharmony_ci						};
2308c2ecf20Sopenharmony_ci					};
2318c2ecf20Sopenharmony_ci				};
2328c2ecf20Sopenharmony_ci			};
2338c2ecf20Sopenharmony_ci
2348c2ecf20Sopenharmony_ci			cluster1 {
2358c2ecf20Sopenharmony_ci				cluster0 {
2368c2ecf20Sopenharmony_ci					core0 {
2378c2ecf20Sopenharmony_ci						thread0 {
2388c2ecf20Sopenharmony_ci							cpu = <&CPU8>;
2398c2ecf20Sopenharmony_ci						};
2408c2ecf20Sopenharmony_ci						thread1 {
2418c2ecf20Sopenharmony_ci							cpu = <&CPU9>;
2428c2ecf20Sopenharmony_ci						};
2438c2ecf20Sopenharmony_ci					};
2448c2ecf20Sopenharmony_ci					core1 {
2458c2ecf20Sopenharmony_ci						thread0 {
2468c2ecf20Sopenharmony_ci							cpu = <&CPU10>;
2478c2ecf20Sopenharmony_ci						};
2488c2ecf20Sopenharmony_ci						thread1 {
2498c2ecf20Sopenharmony_ci							cpu = <&CPU11>;
2508c2ecf20Sopenharmony_ci						};
2518c2ecf20Sopenharmony_ci					};
2528c2ecf20Sopenharmony_ci				};
2538c2ecf20Sopenharmony_ci
2548c2ecf20Sopenharmony_ci				cluster1 {
2558c2ecf20Sopenharmony_ci					core0 {
2568c2ecf20Sopenharmony_ci						thread0 {
2578c2ecf20Sopenharmony_ci							cpu = <&CPU12>;
2588c2ecf20Sopenharmony_ci						};
2598c2ecf20Sopenharmony_ci						thread1 {
2608c2ecf20Sopenharmony_ci							cpu = <&CPU13>;
2618c2ecf20Sopenharmony_ci						};
2628c2ecf20Sopenharmony_ci					};
2638c2ecf20Sopenharmony_ci					core1 {
2648c2ecf20Sopenharmony_ci						thread0 {
2658c2ecf20Sopenharmony_ci							cpu = <&CPU14>;
2668c2ecf20Sopenharmony_ci						};
2678c2ecf20Sopenharmony_ci						thread1 {
2688c2ecf20Sopenharmony_ci							cpu = <&CPU15>;
2698c2ecf20Sopenharmony_ci						};
2708c2ecf20Sopenharmony_ci					};
2718c2ecf20Sopenharmony_ci				};
2728c2ecf20Sopenharmony_ci			};
2738c2ecf20Sopenharmony_ci		};
2748c2ecf20Sopenharmony_ci	};
2758c2ecf20Sopenharmony_ci
2768c2ecf20Sopenharmony_ci	CPU0: cpu@0 {
2778c2ecf20Sopenharmony_ci		device_type = "cpu";
2788c2ecf20Sopenharmony_ci		compatible = "arm,cortex-a57";
2798c2ecf20Sopenharmony_ci		reg = <0x0 0x0>;
2808c2ecf20Sopenharmony_ci		enable-method = "spin-table";
2818c2ecf20Sopenharmony_ci		cpu-release-addr = <0 0x20000000>;
2828c2ecf20Sopenharmony_ci	};
2838c2ecf20Sopenharmony_ci
2848c2ecf20Sopenharmony_ci	CPU1: cpu@1 {
2858c2ecf20Sopenharmony_ci		device_type = "cpu";
2868c2ecf20Sopenharmony_ci		compatible = "arm,cortex-a57";
2878c2ecf20Sopenharmony_ci		reg = <0x0 0x1>;
2888c2ecf20Sopenharmony_ci		enable-method = "spin-table";
2898c2ecf20Sopenharmony_ci		cpu-release-addr = <0 0x20000000>;
2908c2ecf20Sopenharmony_ci	};
2918c2ecf20Sopenharmony_ci
2928c2ecf20Sopenharmony_ci	CPU2: cpu@100 {
2938c2ecf20Sopenharmony_ci		device_type = "cpu";
2948c2ecf20Sopenharmony_ci		compatible = "arm,cortex-a57";
2958c2ecf20Sopenharmony_ci		reg = <0x0 0x100>;
2968c2ecf20Sopenharmony_ci		enable-method = "spin-table";
2978c2ecf20Sopenharmony_ci		cpu-release-addr = <0 0x20000000>;
2988c2ecf20Sopenharmony_ci	};
2998c2ecf20Sopenharmony_ci
3008c2ecf20Sopenharmony_ci	CPU3: cpu@101 {
3018c2ecf20Sopenharmony_ci		device_type = "cpu";
3028c2ecf20Sopenharmony_ci		compatible = "arm,cortex-a57";
3038c2ecf20Sopenharmony_ci		reg = <0x0 0x101>;
3048c2ecf20Sopenharmony_ci		enable-method = "spin-table";
3058c2ecf20Sopenharmony_ci		cpu-release-addr = <0 0x20000000>;
3068c2ecf20Sopenharmony_ci	};
3078c2ecf20Sopenharmony_ci
3088c2ecf20Sopenharmony_ci	CPU4: cpu@10000 {
3098c2ecf20Sopenharmony_ci		device_type = "cpu";
3108c2ecf20Sopenharmony_ci		compatible = "arm,cortex-a57";
3118c2ecf20Sopenharmony_ci		reg = <0x0 0x10000>;
3128c2ecf20Sopenharmony_ci		enable-method = "spin-table";
3138c2ecf20Sopenharmony_ci		cpu-release-addr = <0 0x20000000>;
3148c2ecf20Sopenharmony_ci	};
3158c2ecf20Sopenharmony_ci
3168c2ecf20Sopenharmony_ci	CPU5: cpu@10001 {
3178c2ecf20Sopenharmony_ci		device_type = "cpu";
3188c2ecf20Sopenharmony_ci		compatible = "arm,cortex-a57";
3198c2ecf20Sopenharmony_ci		reg = <0x0 0x10001>;
3208c2ecf20Sopenharmony_ci		enable-method = "spin-table";
3218c2ecf20Sopenharmony_ci		cpu-release-addr = <0 0x20000000>;
3228c2ecf20Sopenharmony_ci	};
3238c2ecf20Sopenharmony_ci
3248c2ecf20Sopenharmony_ci	CPU6: cpu@10100 {
3258c2ecf20Sopenharmony_ci		device_type = "cpu";
3268c2ecf20Sopenharmony_ci		compatible = "arm,cortex-a57";
3278c2ecf20Sopenharmony_ci		reg = <0x0 0x10100>;
3288c2ecf20Sopenharmony_ci		enable-method = "spin-table";
3298c2ecf20Sopenharmony_ci		cpu-release-addr = <0 0x20000000>;
3308c2ecf20Sopenharmony_ci	};
3318c2ecf20Sopenharmony_ci
3328c2ecf20Sopenharmony_ci	CPU7: cpu@10101 {
3338c2ecf20Sopenharmony_ci		device_type = "cpu";
3348c2ecf20Sopenharmony_ci		compatible = "arm,cortex-a57";
3358c2ecf20Sopenharmony_ci		reg = <0x0 0x10101>;
3368c2ecf20Sopenharmony_ci		enable-method = "spin-table";
3378c2ecf20Sopenharmony_ci		cpu-release-addr = <0 0x20000000>;
3388c2ecf20Sopenharmony_ci	};
3398c2ecf20Sopenharmony_ci
3408c2ecf20Sopenharmony_ci	CPU8: cpu@100000000 {
3418c2ecf20Sopenharmony_ci		device_type = "cpu";
3428c2ecf20Sopenharmony_ci		compatible = "arm,cortex-a57";
3438c2ecf20Sopenharmony_ci		reg = <0x1 0x0>;
3448c2ecf20Sopenharmony_ci		enable-method = "spin-table";
3458c2ecf20Sopenharmony_ci		cpu-release-addr = <0 0x20000000>;
3468c2ecf20Sopenharmony_ci	};
3478c2ecf20Sopenharmony_ci
3488c2ecf20Sopenharmony_ci	CPU9: cpu@100000001 {
3498c2ecf20Sopenharmony_ci		device_type = "cpu";
3508c2ecf20Sopenharmony_ci		compatible = "arm,cortex-a57";
3518c2ecf20Sopenharmony_ci		reg = <0x1 0x1>;
3528c2ecf20Sopenharmony_ci		enable-method = "spin-table";
3538c2ecf20Sopenharmony_ci		cpu-release-addr = <0 0x20000000>;
3548c2ecf20Sopenharmony_ci	};
3558c2ecf20Sopenharmony_ci
3568c2ecf20Sopenharmony_ci	CPU10: cpu@100000100 {
3578c2ecf20Sopenharmony_ci		device_type = "cpu";
3588c2ecf20Sopenharmony_ci		compatible = "arm,cortex-a57";
3598c2ecf20Sopenharmony_ci		reg = <0x1 0x100>;
3608c2ecf20Sopenharmony_ci		enable-method = "spin-table";
3618c2ecf20Sopenharmony_ci		cpu-release-addr = <0 0x20000000>;
3628c2ecf20Sopenharmony_ci	};
3638c2ecf20Sopenharmony_ci
3648c2ecf20Sopenharmony_ci	CPU11: cpu@100000101 {
3658c2ecf20Sopenharmony_ci		device_type = "cpu";
3668c2ecf20Sopenharmony_ci		compatible = "arm,cortex-a57";
3678c2ecf20Sopenharmony_ci		reg = <0x1 0x101>;
3688c2ecf20Sopenharmony_ci		enable-method = "spin-table";
3698c2ecf20Sopenharmony_ci		cpu-release-addr = <0 0x20000000>;
3708c2ecf20Sopenharmony_ci	};
3718c2ecf20Sopenharmony_ci
3728c2ecf20Sopenharmony_ci	CPU12: cpu@100010000 {
3738c2ecf20Sopenharmony_ci		device_type = "cpu";
3748c2ecf20Sopenharmony_ci		compatible = "arm,cortex-a57";
3758c2ecf20Sopenharmony_ci		reg = <0x1 0x10000>;
3768c2ecf20Sopenharmony_ci		enable-method = "spin-table";
3778c2ecf20Sopenharmony_ci		cpu-release-addr = <0 0x20000000>;
3788c2ecf20Sopenharmony_ci	};
3798c2ecf20Sopenharmony_ci
3808c2ecf20Sopenharmony_ci	CPU13: cpu@100010001 {
3818c2ecf20Sopenharmony_ci		device_type = "cpu";
3828c2ecf20Sopenharmony_ci		compatible = "arm,cortex-a57";
3838c2ecf20Sopenharmony_ci		reg = <0x1 0x10001>;
3848c2ecf20Sopenharmony_ci		enable-method = "spin-table";
3858c2ecf20Sopenharmony_ci		cpu-release-addr = <0 0x20000000>;
3868c2ecf20Sopenharmony_ci	};
3878c2ecf20Sopenharmony_ci
3888c2ecf20Sopenharmony_ci	CPU14: cpu@100010100 {
3898c2ecf20Sopenharmony_ci		device_type = "cpu";
3908c2ecf20Sopenharmony_ci		compatible = "arm,cortex-a57";
3918c2ecf20Sopenharmony_ci		reg = <0x1 0x10100>;
3928c2ecf20Sopenharmony_ci		enable-method = "spin-table";
3938c2ecf20Sopenharmony_ci		cpu-release-addr = <0 0x20000000>;
3948c2ecf20Sopenharmony_ci	};
3958c2ecf20Sopenharmony_ci
3968c2ecf20Sopenharmony_ci	CPU15: cpu@100010101 {
3978c2ecf20Sopenharmony_ci		device_type = "cpu";
3988c2ecf20Sopenharmony_ci		compatible = "arm,cortex-a57";
3998c2ecf20Sopenharmony_ci		reg = <0x1 0x10101>;
4008c2ecf20Sopenharmony_ci		enable-method = "spin-table";
4018c2ecf20Sopenharmony_ci		cpu-release-addr = <0 0x20000000>;
4028c2ecf20Sopenharmony_ci	};
4038c2ecf20Sopenharmony_ci};
4048c2ecf20Sopenharmony_ci
4058c2ecf20Sopenharmony_ciExample 2 (ARM 32-bit, dual-cluster, 8-cpu system, no SMT):
4068c2ecf20Sopenharmony_ci
4078c2ecf20Sopenharmony_cicpus {
4088c2ecf20Sopenharmony_ci	#size-cells = <0>;
4098c2ecf20Sopenharmony_ci	#address-cells = <1>;
4108c2ecf20Sopenharmony_ci
4118c2ecf20Sopenharmony_ci	cpu-map {
4128c2ecf20Sopenharmony_ci		cluster0 {
4138c2ecf20Sopenharmony_ci			core0 {
4148c2ecf20Sopenharmony_ci				cpu = <&CPU0>;
4158c2ecf20Sopenharmony_ci			};
4168c2ecf20Sopenharmony_ci			core1 {
4178c2ecf20Sopenharmony_ci				cpu = <&CPU1>;
4188c2ecf20Sopenharmony_ci			};
4198c2ecf20Sopenharmony_ci			core2 {
4208c2ecf20Sopenharmony_ci				cpu = <&CPU2>;
4218c2ecf20Sopenharmony_ci			};
4228c2ecf20Sopenharmony_ci			core3 {
4238c2ecf20Sopenharmony_ci				cpu = <&CPU3>;
4248c2ecf20Sopenharmony_ci			};
4258c2ecf20Sopenharmony_ci		};
4268c2ecf20Sopenharmony_ci
4278c2ecf20Sopenharmony_ci		cluster1 {
4288c2ecf20Sopenharmony_ci			core0 {
4298c2ecf20Sopenharmony_ci				cpu = <&CPU4>;
4308c2ecf20Sopenharmony_ci			};
4318c2ecf20Sopenharmony_ci			core1 {
4328c2ecf20Sopenharmony_ci				cpu = <&CPU5>;
4338c2ecf20Sopenharmony_ci			};
4348c2ecf20Sopenharmony_ci			core2 {
4358c2ecf20Sopenharmony_ci				cpu = <&CPU6>;
4368c2ecf20Sopenharmony_ci			};
4378c2ecf20Sopenharmony_ci			core3 {
4388c2ecf20Sopenharmony_ci				cpu = <&CPU7>;
4398c2ecf20Sopenharmony_ci			};
4408c2ecf20Sopenharmony_ci		};
4418c2ecf20Sopenharmony_ci	};
4428c2ecf20Sopenharmony_ci
4438c2ecf20Sopenharmony_ci	CPU0: cpu@0 {
4448c2ecf20Sopenharmony_ci		device_type = "cpu";
4458c2ecf20Sopenharmony_ci		compatible = "arm,cortex-a15";
4468c2ecf20Sopenharmony_ci		reg = <0x0>;
4478c2ecf20Sopenharmony_ci	};
4488c2ecf20Sopenharmony_ci
4498c2ecf20Sopenharmony_ci	CPU1: cpu@1 {
4508c2ecf20Sopenharmony_ci		device_type = "cpu";
4518c2ecf20Sopenharmony_ci		compatible = "arm,cortex-a15";
4528c2ecf20Sopenharmony_ci		reg = <0x1>;
4538c2ecf20Sopenharmony_ci	};
4548c2ecf20Sopenharmony_ci
4558c2ecf20Sopenharmony_ci	CPU2: cpu@2 {
4568c2ecf20Sopenharmony_ci		device_type = "cpu";
4578c2ecf20Sopenharmony_ci		compatible = "arm,cortex-a15";
4588c2ecf20Sopenharmony_ci		reg = <0x2>;
4598c2ecf20Sopenharmony_ci	};
4608c2ecf20Sopenharmony_ci
4618c2ecf20Sopenharmony_ci	CPU3: cpu@3 {
4628c2ecf20Sopenharmony_ci		device_type = "cpu";
4638c2ecf20Sopenharmony_ci		compatible = "arm,cortex-a15";
4648c2ecf20Sopenharmony_ci		reg = <0x3>;
4658c2ecf20Sopenharmony_ci	};
4668c2ecf20Sopenharmony_ci
4678c2ecf20Sopenharmony_ci	CPU4: cpu@100 {
4688c2ecf20Sopenharmony_ci		device_type = "cpu";
4698c2ecf20Sopenharmony_ci		compatible = "arm,cortex-a7";
4708c2ecf20Sopenharmony_ci		reg = <0x100>;
4718c2ecf20Sopenharmony_ci	};
4728c2ecf20Sopenharmony_ci
4738c2ecf20Sopenharmony_ci	CPU5: cpu@101 {
4748c2ecf20Sopenharmony_ci		device_type = "cpu";
4758c2ecf20Sopenharmony_ci		compatible = "arm,cortex-a7";
4768c2ecf20Sopenharmony_ci		reg = <0x101>;
4778c2ecf20Sopenharmony_ci	};
4788c2ecf20Sopenharmony_ci
4798c2ecf20Sopenharmony_ci	CPU6: cpu@102 {
4808c2ecf20Sopenharmony_ci		device_type = "cpu";
4818c2ecf20Sopenharmony_ci		compatible = "arm,cortex-a7";
4828c2ecf20Sopenharmony_ci		reg = <0x102>;
4838c2ecf20Sopenharmony_ci	};
4848c2ecf20Sopenharmony_ci
4858c2ecf20Sopenharmony_ci	CPU7: cpu@103 {
4868c2ecf20Sopenharmony_ci		device_type = "cpu";
4878c2ecf20Sopenharmony_ci		compatible = "arm,cortex-a7";
4888c2ecf20Sopenharmony_ci		reg = <0x103>;
4898c2ecf20Sopenharmony_ci	};
4908c2ecf20Sopenharmony_ci};
4918c2ecf20Sopenharmony_ci
4928c2ecf20Sopenharmony_ciExample 3: HiFive Unleashed (RISC-V 64 bit, 4 core system)
4938c2ecf20Sopenharmony_ci
4948c2ecf20Sopenharmony_ci{
4958c2ecf20Sopenharmony_ci	#address-cells = <2>;
4968c2ecf20Sopenharmony_ci	#size-cells = <2>;
4978c2ecf20Sopenharmony_ci	compatible = "sifive,fu540g", "sifive,fu500";
4988c2ecf20Sopenharmony_ci	model = "sifive,hifive-unleashed-a00";
4998c2ecf20Sopenharmony_ci
5008c2ecf20Sopenharmony_ci	...
5018c2ecf20Sopenharmony_ci	cpus {
5028c2ecf20Sopenharmony_ci		#address-cells = <1>;
5038c2ecf20Sopenharmony_ci		#size-cells = <0>;
5048c2ecf20Sopenharmony_ci		cpu-map {
5058c2ecf20Sopenharmony_ci			socket0 {
5068c2ecf20Sopenharmony_ci				cluster0 {
5078c2ecf20Sopenharmony_ci					core0 {
5088c2ecf20Sopenharmony_ci						cpu = <&CPU1>;
5098c2ecf20Sopenharmony_ci					};
5108c2ecf20Sopenharmony_ci					core1 {
5118c2ecf20Sopenharmony_ci						cpu = <&CPU2>;
5128c2ecf20Sopenharmony_ci					};
5138c2ecf20Sopenharmony_ci					core2 {
5148c2ecf20Sopenharmony_ci						cpu0 = <&CPU2>;
5158c2ecf20Sopenharmony_ci					};
5168c2ecf20Sopenharmony_ci					core3 {
5178c2ecf20Sopenharmony_ci						cpu0 = <&CPU3>;
5188c2ecf20Sopenharmony_ci					};
5198c2ecf20Sopenharmony_ci				};
5208c2ecf20Sopenharmony_ci			};
5218c2ecf20Sopenharmony_ci		};
5228c2ecf20Sopenharmony_ci
5238c2ecf20Sopenharmony_ci		CPU1: cpu@1 {
5248c2ecf20Sopenharmony_ci			device_type = "cpu";
5258c2ecf20Sopenharmony_ci			compatible = "sifive,rocket0", "riscv";
5268c2ecf20Sopenharmony_ci			reg = <0x1>;
5278c2ecf20Sopenharmony_ci		}
5288c2ecf20Sopenharmony_ci
5298c2ecf20Sopenharmony_ci		CPU2: cpu@2 {
5308c2ecf20Sopenharmony_ci			device_type = "cpu";
5318c2ecf20Sopenharmony_ci			compatible = "sifive,rocket0", "riscv";
5328c2ecf20Sopenharmony_ci			reg = <0x2>;
5338c2ecf20Sopenharmony_ci		}
5348c2ecf20Sopenharmony_ci		CPU3: cpu@3 {
5358c2ecf20Sopenharmony_ci			device_type = "cpu";
5368c2ecf20Sopenharmony_ci			compatible = "sifive,rocket0", "riscv";
5378c2ecf20Sopenharmony_ci			reg = <0x3>;
5388c2ecf20Sopenharmony_ci		}
5398c2ecf20Sopenharmony_ci		CPU4: cpu@4 {
5408c2ecf20Sopenharmony_ci			device_type = "cpu";
5418c2ecf20Sopenharmony_ci			compatible = "sifive,rocket0", "riscv";
5428c2ecf20Sopenharmony_ci			reg = <0x4>;
5438c2ecf20Sopenharmony_ci		}
5448c2ecf20Sopenharmony_ci	}
5458c2ecf20Sopenharmony_ci};
5468c2ecf20Sopenharmony_ci===============================================================================
5478c2ecf20Sopenharmony_ci[1] ARM Linux kernel documentation
5488c2ecf20Sopenharmony_ci    Documentation/devicetree/bindings/arm/cpus.yaml
5498c2ecf20Sopenharmony_ci[2] Devicetree NUMA binding description
5508c2ecf20Sopenharmony_ci    Documentation/devicetree/bindings/numa.txt
5518c2ecf20Sopenharmony_ci[3] RISC-V Linux kernel documentation
5528c2ecf20Sopenharmony_ci    Documentation/devicetree/bindings/riscv/cpus.yaml
5538c2ecf20Sopenharmony_ci[4] https://www.devicetree.org/specifications/
554