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