162306a36Sopenharmony_ci=========================================== 262306a36Sopenharmony_ciCPU topology binding description 362306a36Sopenharmony_ci=========================================== 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci=========================================== 662306a36Sopenharmony_ci1 - Introduction 762306a36Sopenharmony_ci=========================================== 862306a36Sopenharmony_ci 962306a36Sopenharmony_ciIn a SMP system, the hierarchy of CPUs is defined through three entities that 1062306a36Sopenharmony_ciare used to describe the layout of physical CPUs in the system: 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci- socket 1362306a36Sopenharmony_ci- cluster 1462306a36Sopenharmony_ci- core 1562306a36Sopenharmony_ci- thread 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ciThe bottom hierarchy level sits at core or thread level depending on whether 1862306a36Sopenharmony_cisymmetric multi-threading (SMT) is supported or not. 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ciFor instance in a system where CPUs support SMT, "cpu" nodes represent all 2162306a36Sopenharmony_cithreads existing in the system and map to the hierarchy level "thread" above. 2262306a36Sopenharmony_ciIn systems where SMT is not supported "cpu" nodes represent all cores present 2362306a36Sopenharmony_ciin the system and map to the hierarchy level "core" above. 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ciCPU topology bindings allow one to associate cpu nodes with hierarchical groups 2662306a36Sopenharmony_cicorresponding to the system hierarchy; syntactically they are defined as device 2762306a36Sopenharmony_citree nodes. 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ciCurrently, only ARM/RISC-V intend to use this cpu topology binding but it may be 3062306a36Sopenharmony_ciused for any other architecture as well. 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ciThe cpu nodes, as per bindings defined in [4], represent the devices that 3362306a36Sopenharmony_cicorrespond to physical CPUs and are to be mapped to the hierarchy levels. 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ciA topology description containing phandles to cpu nodes that are not compliant 3662306a36Sopenharmony_ciwith bindings standardized in [4] is therefore considered invalid. 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci=========================================== 3962306a36Sopenharmony_ci2 - cpu-map node 4062306a36Sopenharmony_ci=========================================== 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ciThe ARM/RISC-V CPU topology is defined within the cpu-map node, which is a direct 4362306a36Sopenharmony_cichild of the cpus node and provides a container where the actual topology 4462306a36Sopenharmony_cinodes are listed. 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci- cpu-map node 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci Usage: Optional - On SMP systems provide CPUs topology to the OS. 4962306a36Sopenharmony_ci Uniprocessor systems do not require a topology 5062306a36Sopenharmony_ci description and therefore should not define a 5162306a36Sopenharmony_ci cpu-map node. 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci Description: The cpu-map node is just a container node where its 5462306a36Sopenharmony_ci subnodes describe the CPU topology. 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci Node name must be "cpu-map". 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci The cpu-map node's parent node must be the cpus node. 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci The cpu-map node's child nodes can be: 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci - one or more cluster nodes or 6362306a36Sopenharmony_ci - one or more socket nodes in a multi-socket system 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci Any other configuration is considered invalid. 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ciThe cpu-map node can only contain 4 types of child nodes: 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci- socket node 7062306a36Sopenharmony_ci- cluster node 7162306a36Sopenharmony_ci- core node 7262306a36Sopenharmony_ci- thread node 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ciwhose bindings are described in paragraph 3. 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ciThe nodes describing the CPU topology (socket/cluster/core/thread) can 7762306a36Sopenharmony_cionly be defined within the cpu-map node and every core/thread in the 7862306a36Sopenharmony_cisystem must be defined within the topology. Any other configuration is 7962306a36Sopenharmony_ciinvalid and therefore must be ignored. 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci=========================================== 8262306a36Sopenharmony_ci2.1 - cpu-map child nodes naming convention 8362306a36Sopenharmony_ci=========================================== 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_cicpu-map child nodes must follow a naming convention where the node name 8662306a36Sopenharmony_cimust be "socketN", "clusterN", "coreN", "threadN" depending on the node type 8762306a36Sopenharmony_ci(ie socket/cluster/core/thread) (where N = {0, 1, ...} is the node number; nodes 8862306a36Sopenharmony_ciwhich are siblings within a single common parent node must be given a unique and 8962306a36Sopenharmony_cisequential N value, starting from 0). 9062306a36Sopenharmony_cicpu-map child nodes which do not share a common parent node can have the same 9162306a36Sopenharmony_ciname (ie same number N as other cpu-map child nodes at different device tree 9262306a36Sopenharmony_cilevels) since name uniqueness will be guaranteed by the device tree hierarchy. 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci=========================================== 9562306a36Sopenharmony_ci3 - socket/cluster/core/thread node bindings 9662306a36Sopenharmony_ci=========================================== 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ciBindings for socket/cluster/cpu/thread nodes are defined as follows: 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_ci- socket node 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ci Description: must be declared within a cpu-map node, one node 10362306a36Sopenharmony_ci per physical socket in the system. A system can 10462306a36Sopenharmony_ci contain single or multiple physical socket. 10562306a36Sopenharmony_ci The association of sockets and NUMA nodes is beyond 10662306a36Sopenharmony_ci the scope of this bindings, please refer [2] for 10762306a36Sopenharmony_ci NUMA bindings. 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ci This node is optional for a single socket system. 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ci The socket node name must be "socketN" as described in 2.1 above. 11262306a36Sopenharmony_ci A socket node can not be a leaf node. 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci A socket node's child nodes must be one or more cluster nodes. 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_ci Any other configuration is considered invalid. 11762306a36Sopenharmony_ci 11862306a36Sopenharmony_ci- cluster node 11962306a36Sopenharmony_ci 12062306a36Sopenharmony_ci Description: must be declared within a cpu-map node, one node 12162306a36Sopenharmony_ci per cluster. A system can contain several layers of 12262306a36Sopenharmony_ci clustering within a single physical socket and cluster 12362306a36Sopenharmony_ci nodes can be contained in parent cluster nodes. 12462306a36Sopenharmony_ci 12562306a36Sopenharmony_ci The cluster node name must be "clusterN" as described in 2.1 above. 12662306a36Sopenharmony_ci A cluster node can not be a leaf node. 12762306a36Sopenharmony_ci 12862306a36Sopenharmony_ci A cluster node's child nodes must be: 12962306a36Sopenharmony_ci 13062306a36Sopenharmony_ci - one or more cluster nodes; or 13162306a36Sopenharmony_ci - one or more core nodes 13262306a36Sopenharmony_ci 13362306a36Sopenharmony_ci Any other configuration is considered invalid. 13462306a36Sopenharmony_ci 13562306a36Sopenharmony_ci- core node 13662306a36Sopenharmony_ci 13762306a36Sopenharmony_ci Description: must be declared in a cluster node, one node per core in 13862306a36Sopenharmony_ci the cluster. If the system does not support SMT, core 13962306a36Sopenharmony_ci nodes are leaf nodes, otherwise they become containers of 14062306a36Sopenharmony_ci thread nodes. 14162306a36Sopenharmony_ci 14262306a36Sopenharmony_ci The core node name must be "coreN" as described in 2.1 above. 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_ci A core node must be a leaf node if SMT is not supported. 14562306a36Sopenharmony_ci 14662306a36Sopenharmony_ci Properties for core nodes that are leaf nodes: 14762306a36Sopenharmony_ci 14862306a36Sopenharmony_ci - cpu 14962306a36Sopenharmony_ci Usage: required 15062306a36Sopenharmony_ci Value type: <phandle> 15162306a36Sopenharmony_ci Definition: a phandle to the cpu node that corresponds to the 15262306a36Sopenharmony_ci core node. 15362306a36Sopenharmony_ci 15462306a36Sopenharmony_ci If a core node is not a leaf node (CPUs supporting SMT) a core node's 15562306a36Sopenharmony_ci child nodes can be: 15662306a36Sopenharmony_ci 15762306a36Sopenharmony_ci - one or more thread nodes 15862306a36Sopenharmony_ci 15962306a36Sopenharmony_ci Any other configuration is considered invalid. 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_ci- thread node 16262306a36Sopenharmony_ci 16362306a36Sopenharmony_ci Description: must be declared in a core node, one node per thread 16462306a36Sopenharmony_ci in the core if the system supports SMT. Thread nodes are 16562306a36Sopenharmony_ci always leaf nodes in the device tree. 16662306a36Sopenharmony_ci 16762306a36Sopenharmony_ci The thread node name must be "threadN" as described in 2.1 above. 16862306a36Sopenharmony_ci 16962306a36Sopenharmony_ci A thread node must be a leaf node. 17062306a36Sopenharmony_ci 17162306a36Sopenharmony_ci A thread node must contain the following property: 17262306a36Sopenharmony_ci 17362306a36Sopenharmony_ci - cpu 17462306a36Sopenharmony_ci Usage: required 17562306a36Sopenharmony_ci Value type: <phandle> 17662306a36Sopenharmony_ci Definition: a phandle to the cpu node that corresponds to 17762306a36Sopenharmony_ci the thread node. 17862306a36Sopenharmony_ci 17962306a36Sopenharmony_ci=========================================== 18062306a36Sopenharmony_ci4 - Example dts 18162306a36Sopenharmony_ci=========================================== 18262306a36Sopenharmony_ci 18362306a36Sopenharmony_ciExample 1 (ARM 64-bit, 16-cpu system, two clusters of clusters in a single 18462306a36Sopenharmony_ciphysical socket): 18562306a36Sopenharmony_ci 18662306a36Sopenharmony_cicpus { 18762306a36Sopenharmony_ci #size-cells = <0>; 18862306a36Sopenharmony_ci #address-cells = <2>; 18962306a36Sopenharmony_ci 19062306a36Sopenharmony_ci cpu-map { 19162306a36Sopenharmony_ci socket0 { 19262306a36Sopenharmony_ci cluster0 { 19362306a36Sopenharmony_ci cluster0 { 19462306a36Sopenharmony_ci core0 { 19562306a36Sopenharmony_ci thread0 { 19662306a36Sopenharmony_ci cpu = <&CPU0>; 19762306a36Sopenharmony_ci }; 19862306a36Sopenharmony_ci thread1 { 19962306a36Sopenharmony_ci cpu = <&CPU1>; 20062306a36Sopenharmony_ci }; 20162306a36Sopenharmony_ci }; 20262306a36Sopenharmony_ci 20362306a36Sopenharmony_ci core1 { 20462306a36Sopenharmony_ci thread0 { 20562306a36Sopenharmony_ci cpu = <&CPU2>; 20662306a36Sopenharmony_ci }; 20762306a36Sopenharmony_ci thread1 { 20862306a36Sopenharmony_ci cpu = <&CPU3>; 20962306a36Sopenharmony_ci }; 21062306a36Sopenharmony_ci }; 21162306a36Sopenharmony_ci }; 21262306a36Sopenharmony_ci 21362306a36Sopenharmony_ci cluster1 { 21462306a36Sopenharmony_ci core0 { 21562306a36Sopenharmony_ci thread0 { 21662306a36Sopenharmony_ci cpu = <&CPU4>; 21762306a36Sopenharmony_ci }; 21862306a36Sopenharmony_ci thread1 { 21962306a36Sopenharmony_ci cpu = <&CPU5>; 22062306a36Sopenharmony_ci }; 22162306a36Sopenharmony_ci }; 22262306a36Sopenharmony_ci 22362306a36Sopenharmony_ci core1 { 22462306a36Sopenharmony_ci thread0 { 22562306a36Sopenharmony_ci cpu = <&CPU6>; 22662306a36Sopenharmony_ci }; 22762306a36Sopenharmony_ci thread1 { 22862306a36Sopenharmony_ci cpu = <&CPU7>; 22962306a36Sopenharmony_ci }; 23062306a36Sopenharmony_ci }; 23162306a36Sopenharmony_ci }; 23262306a36Sopenharmony_ci }; 23362306a36Sopenharmony_ci 23462306a36Sopenharmony_ci cluster1 { 23562306a36Sopenharmony_ci cluster0 { 23662306a36Sopenharmony_ci core0 { 23762306a36Sopenharmony_ci thread0 { 23862306a36Sopenharmony_ci cpu = <&CPU8>; 23962306a36Sopenharmony_ci }; 24062306a36Sopenharmony_ci thread1 { 24162306a36Sopenharmony_ci cpu = <&CPU9>; 24262306a36Sopenharmony_ci }; 24362306a36Sopenharmony_ci }; 24462306a36Sopenharmony_ci core1 { 24562306a36Sopenharmony_ci thread0 { 24662306a36Sopenharmony_ci cpu = <&CPU10>; 24762306a36Sopenharmony_ci }; 24862306a36Sopenharmony_ci thread1 { 24962306a36Sopenharmony_ci cpu = <&CPU11>; 25062306a36Sopenharmony_ci }; 25162306a36Sopenharmony_ci }; 25262306a36Sopenharmony_ci }; 25362306a36Sopenharmony_ci 25462306a36Sopenharmony_ci cluster1 { 25562306a36Sopenharmony_ci core0 { 25662306a36Sopenharmony_ci thread0 { 25762306a36Sopenharmony_ci cpu = <&CPU12>; 25862306a36Sopenharmony_ci }; 25962306a36Sopenharmony_ci thread1 { 26062306a36Sopenharmony_ci cpu = <&CPU13>; 26162306a36Sopenharmony_ci }; 26262306a36Sopenharmony_ci }; 26362306a36Sopenharmony_ci core1 { 26462306a36Sopenharmony_ci thread0 { 26562306a36Sopenharmony_ci cpu = <&CPU14>; 26662306a36Sopenharmony_ci }; 26762306a36Sopenharmony_ci thread1 { 26862306a36Sopenharmony_ci cpu = <&CPU15>; 26962306a36Sopenharmony_ci }; 27062306a36Sopenharmony_ci }; 27162306a36Sopenharmony_ci }; 27262306a36Sopenharmony_ci }; 27362306a36Sopenharmony_ci }; 27462306a36Sopenharmony_ci }; 27562306a36Sopenharmony_ci 27662306a36Sopenharmony_ci CPU0: cpu@0 { 27762306a36Sopenharmony_ci device_type = "cpu"; 27862306a36Sopenharmony_ci compatible = "arm,cortex-a57"; 27962306a36Sopenharmony_ci reg = <0x0 0x0>; 28062306a36Sopenharmony_ci enable-method = "spin-table"; 28162306a36Sopenharmony_ci cpu-release-addr = <0 0x20000000>; 28262306a36Sopenharmony_ci }; 28362306a36Sopenharmony_ci 28462306a36Sopenharmony_ci CPU1: cpu@1 { 28562306a36Sopenharmony_ci device_type = "cpu"; 28662306a36Sopenharmony_ci compatible = "arm,cortex-a57"; 28762306a36Sopenharmony_ci reg = <0x0 0x1>; 28862306a36Sopenharmony_ci enable-method = "spin-table"; 28962306a36Sopenharmony_ci cpu-release-addr = <0 0x20000000>; 29062306a36Sopenharmony_ci }; 29162306a36Sopenharmony_ci 29262306a36Sopenharmony_ci CPU2: cpu@100 { 29362306a36Sopenharmony_ci device_type = "cpu"; 29462306a36Sopenharmony_ci compatible = "arm,cortex-a57"; 29562306a36Sopenharmony_ci reg = <0x0 0x100>; 29662306a36Sopenharmony_ci enable-method = "spin-table"; 29762306a36Sopenharmony_ci cpu-release-addr = <0 0x20000000>; 29862306a36Sopenharmony_ci }; 29962306a36Sopenharmony_ci 30062306a36Sopenharmony_ci CPU3: cpu@101 { 30162306a36Sopenharmony_ci device_type = "cpu"; 30262306a36Sopenharmony_ci compatible = "arm,cortex-a57"; 30362306a36Sopenharmony_ci reg = <0x0 0x101>; 30462306a36Sopenharmony_ci enable-method = "spin-table"; 30562306a36Sopenharmony_ci cpu-release-addr = <0 0x20000000>; 30662306a36Sopenharmony_ci }; 30762306a36Sopenharmony_ci 30862306a36Sopenharmony_ci CPU4: cpu@10000 { 30962306a36Sopenharmony_ci device_type = "cpu"; 31062306a36Sopenharmony_ci compatible = "arm,cortex-a57"; 31162306a36Sopenharmony_ci reg = <0x0 0x10000>; 31262306a36Sopenharmony_ci enable-method = "spin-table"; 31362306a36Sopenharmony_ci cpu-release-addr = <0 0x20000000>; 31462306a36Sopenharmony_ci }; 31562306a36Sopenharmony_ci 31662306a36Sopenharmony_ci CPU5: cpu@10001 { 31762306a36Sopenharmony_ci device_type = "cpu"; 31862306a36Sopenharmony_ci compatible = "arm,cortex-a57"; 31962306a36Sopenharmony_ci reg = <0x0 0x10001>; 32062306a36Sopenharmony_ci enable-method = "spin-table"; 32162306a36Sopenharmony_ci cpu-release-addr = <0 0x20000000>; 32262306a36Sopenharmony_ci }; 32362306a36Sopenharmony_ci 32462306a36Sopenharmony_ci CPU6: cpu@10100 { 32562306a36Sopenharmony_ci device_type = "cpu"; 32662306a36Sopenharmony_ci compatible = "arm,cortex-a57"; 32762306a36Sopenharmony_ci reg = <0x0 0x10100>; 32862306a36Sopenharmony_ci enable-method = "spin-table"; 32962306a36Sopenharmony_ci cpu-release-addr = <0 0x20000000>; 33062306a36Sopenharmony_ci }; 33162306a36Sopenharmony_ci 33262306a36Sopenharmony_ci CPU7: cpu@10101 { 33362306a36Sopenharmony_ci device_type = "cpu"; 33462306a36Sopenharmony_ci compatible = "arm,cortex-a57"; 33562306a36Sopenharmony_ci reg = <0x0 0x10101>; 33662306a36Sopenharmony_ci enable-method = "spin-table"; 33762306a36Sopenharmony_ci cpu-release-addr = <0 0x20000000>; 33862306a36Sopenharmony_ci }; 33962306a36Sopenharmony_ci 34062306a36Sopenharmony_ci CPU8: cpu@100000000 { 34162306a36Sopenharmony_ci device_type = "cpu"; 34262306a36Sopenharmony_ci compatible = "arm,cortex-a57"; 34362306a36Sopenharmony_ci reg = <0x1 0x0>; 34462306a36Sopenharmony_ci enable-method = "spin-table"; 34562306a36Sopenharmony_ci cpu-release-addr = <0 0x20000000>; 34662306a36Sopenharmony_ci }; 34762306a36Sopenharmony_ci 34862306a36Sopenharmony_ci CPU9: cpu@100000001 { 34962306a36Sopenharmony_ci device_type = "cpu"; 35062306a36Sopenharmony_ci compatible = "arm,cortex-a57"; 35162306a36Sopenharmony_ci reg = <0x1 0x1>; 35262306a36Sopenharmony_ci enable-method = "spin-table"; 35362306a36Sopenharmony_ci cpu-release-addr = <0 0x20000000>; 35462306a36Sopenharmony_ci }; 35562306a36Sopenharmony_ci 35662306a36Sopenharmony_ci CPU10: cpu@100000100 { 35762306a36Sopenharmony_ci device_type = "cpu"; 35862306a36Sopenharmony_ci compatible = "arm,cortex-a57"; 35962306a36Sopenharmony_ci reg = <0x1 0x100>; 36062306a36Sopenharmony_ci enable-method = "spin-table"; 36162306a36Sopenharmony_ci cpu-release-addr = <0 0x20000000>; 36262306a36Sopenharmony_ci }; 36362306a36Sopenharmony_ci 36462306a36Sopenharmony_ci CPU11: cpu@100000101 { 36562306a36Sopenharmony_ci device_type = "cpu"; 36662306a36Sopenharmony_ci compatible = "arm,cortex-a57"; 36762306a36Sopenharmony_ci reg = <0x1 0x101>; 36862306a36Sopenharmony_ci enable-method = "spin-table"; 36962306a36Sopenharmony_ci cpu-release-addr = <0 0x20000000>; 37062306a36Sopenharmony_ci }; 37162306a36Sopenharmony_ci 37262306a36Sopenharmony_ci CPU12: cpu@100010000 { 37362306a36Sopenharmony_ci device_type = "cpu"; 37462306a36Sopenharmony_ci compatible = "arm,cortex-a57"; 37562306a36Sopenharmony_ci reg = <0x1 0x10000>; 37662306a36Sopenharmony_ci enable-method = "spin-table"; 37762306a36Sopenharmony_ci cpu-release-addr = <0 0x20000000>; 37862306a36Sopenharmony_ci }; 37962306a36Sopenharmony_ci 38062306a36Sopenharmony_ci CPU13: cpu@100010001 { 38162306a36Sopenharmony_ci device_type = "cpu"; 38262306a36Sopenharmony_ci compatible = "arm,cortex-a57"; 38362306a36Sopenharmony_ci reg = <0x1 0x10001>; 38462306a36Sopenharmony_ci enable-method = "spin-table"; 38562306a36Sopenharmony_ci cpu-release-addr = <0 0x20000000>; 38662306a36Sopenharmony_ci }; 38762306a36Sopenharmony_ci 38862306a36Sopenharmony_ci CPU14: cpu@100010100 { 38962306a36Sopenharmony_ci device_type = "cpu"; 39062306a36Sopenharmony_ci compatible = "arm,cortex-a57"; 39162306a36Sopenharmony_ci reg = <0x1 0x10100>; 39262306a36Sopenharmony_ci enable-method = "spin-table"; 39362306a36Sopenharmony_ci cpu-release-addr = <0 0x20000000>; 39462306a36Sopenharmony_ci }; 39562306a36Sopenharmony_ci 39662306a36Sopenharmony_ci CPU15: cpu@100010101 { 39762306a36Sopenharmony_ci device_type = "cpu"; 39862306a36Sopenharmony_ci compatible = "arm,cortex-a57"; 39962306a36Sopenharmony_ci reg = <0x1 0x10101>; 40062306a36Sopenharmony_ci enable-method = "spin-table"; 40162306a36Sopenharmony_ci cpu-release-addr = <0 0x20000000>; 40262306a36Sopenharmony_ci }; 40362306a36Sopenharmony_ci}; 40462306a36Sopenharmony_ci 40562306a36Sopenharmony_ciExample 2 (ARM 32-bit, dual-cluster, 8-cpu system, no SMT): 40662306a36Sopenharmony_ci 40762306a36Sopenharmony_cicpus { 40862306a36Sopenharmony_ci #size-cells = <0>; 40962306a36Sopenharmony_ci #address-cells = <1>; 41062306a36Sopenharmony_ci 41162306a36Sopenharmony_ci cpu-map { 41262306a36Sopenharmony_ci cluster0 { 41362306a36Sopenharmony_ci core0 { 41462306a36Sopenharmony_ci cpu = <&CPU0>; 41562306a36Sopenharmony_ci }; 41662306a36Sopenharmony_ci core1 { 41762306a36Sopenharmony_ci cpu = <&CPU1>; 41862306a36Sopenharmony_ci }; 41962306a36Sopenharmony_ci core2 { 42062306a36Sopenharmony_ci cpu = <&CPU2>; 42162306a36Sopenharmony_ci }; 42262306a36Sopenharmony_ci core3 { 42362306a36Sopenharmony_ci cpu = <&CPU3>; 42462306a36Sopenharmony_ci }; 42562306a36Sopenharmony_ci }; 42662306a36Sopenharmony_ci 42762306a36Sopenharmony_ci cluster1 { 42862306a36Sopenharmony_ci core0 { 42962306a36Sopenharmony_ci cpu = <&CPU4>; 43062306a36Sopenharmony_ci }; 43162306a36Sopenharmony_ci core1 { 43262306a36Sopenharmony_ci cpu = <&CPU5>; 43362306a36Sopenharmony_ci }; 43462306a36Sopenharmony_ci core2 { 43562306a36Sopenharmony_ci cpu = <&CPU6>; 43662306a36Sopenharmony_ci }; 43762306a36Sopenharmony_ci core3 { 43862306a36Sopenharmony_ci cpu = <&CPU7>; 43962306a36Sopenharmony_ci }; 44062306a36Sopenharmony_ci }; 44162306a36Sopenharmony_ci }; 44262306a36Sopenharmony_ci 44362306a36Sopenharmony_ci CPU0: cpu@0 { 44462306a36Sopenharmony_ci device_type = "cpu"; 44562306a36Sopenharmony_ci compatible = "arm,cortex-a15"; 44662306a36Sopenharmony_ci reg = <0x0>; 44762306a36Sopenharmony_ci }; 44862306a36Sopenharmony_ci 44962306a36Sopenharmony_ci CPU1: cpu@1 { 45062306a36Sopenharmony_ci device_type = "cpu"; 45162306a36Sopenharmony_ci compatible = "arm,cortex-a15"; 45262306a36Sopenharmony_ci reg = <0x1>; 45362306a36Sopenharmony_ci }; 45462306a36Sopenharmony_ci 45562306a36Sopenharmony_ci CPU2: cpu@2 { 45662306a36Sopenharmony_ci device_type = "cpu"; 45762306a36Sopenharmony_ci compatible = "arm,cortex-a15"; 45862306a36Sopenharmony_ci reg = <0x2>; 45962306a36Sopenharmony_ci }; 46062306a36Sopenharmony_ci 46162306a36Sopenharmony_ci CPU3: cpu@3 { 46262306a36Sopenharmony_ci device_type = "cpu"; 46362306a36Sopenharmony_ci compatible = "arm,cortex-a15"; 46462306a36Sopenharmony_ci reg = <0x3>; 46562306a36Sopenharmony_ci }; 46662306a36Sopenharmony_ci 46762306a36Sopenharmony_ci CPU4: cpu@100 { 46862306a36Sopenharmony_ci device_type = "cpu"; 46962306a36Sopenharmony_ci compatible = "arm,cortex-a7"; 47062306a36Sopenharmony_ci reg = <0x100>; 47162306a36Sopenharmony_ci }; 47262306a36Sopenharmony_ci 47362306a36Sopenharmony_ci CPU5: cpu@101 { 47462306a36Sopenharmony_ci device_type = "cpu"; 47562306a36Sopenharmony_ci compatible = "arm,cortex-a7"; 47662306a36Sopenharmony_ci reg = <0x101>; 47762306a36Sopenharmony_ci }; 47862306a36Sopenharmony_ci 47962306a36Sopenharmony_ci CPU6: cpu@102 { 48062306a36Sopenharmony_ci device_type = "cpu"; 48162306a36Sopenharmony_ci compatible = "arm,cortex-a7"; 48262306a36Sopenharmony_ci reg = <0x102>; 48362306a36Sopenharmony_ci }; 48462306a36Sopenharmony_ci 48562306a36Sopenharmony_ci CPU7: cpu@103 { 48662306a36Sopenharmony_ci device_type = "cpu"; 48762306a36Sopenharmony_ci compatible = "arm,cortex-a7"; 48862306a36Sopenharmony_ci reg = <0x103>; 48962306a36Sopenharmony_ci }; 49062306a36Sopenharmony_ci}; 49162306a36Sopenharmony_ci 49262306a36Sopenharmony_ciExample 3: HiFive Unleashed (RISC-V 64 bit, 4 core system) 49362306a36Sopenharmony_ci 49462306a36Sopenharmony_ci{ 49562306a36Sopenharmony_ci #address-cells = <2>; 49662306a36Sopenharmony_ci #size-cells = <2>; 49762306a36Sopenharmony_ci compatible = "sifive,fu540g", "sifive,fu500"; 49862306a36Sopenharmony_ci model = "sifive,hifive-unleashed-a00"; 49962306a36Sopenharmony_ci 50062306a36Sopenharmony_ci ... 50162306a36Sopenharmony_ci cpus { 50262306a36Sopenharmony_ci #address-cells = <1>; 50362306a36Sopenharmony_ci #size-cells = <0>; 50462306a36Sopenharmony_ci cpu-map { 50562306a36Sopenharmony_ci socket0 { 50662306a36Sopenharmony_ci cluster0 { 50762306a36Sopenharmony_ci core0 { 50862306a36Sopenharmony_ci cpu = <&CPU1>; 50962306a36Sopenharmony_ci }; 51062306a36Sopenharmony_ci core1 { 51162306a36Sopenharmony_ci cpu = <&CPU2>; 51262306a36Sopenharmony_ci }; 51362306a36Sopenharmony_ci core2 { 51462306a36Sopenharmony_ci cpu0 = <&CPU2>; 51562306a36Sopenharmony_ci }; 51662306a36Sopenharmony_ci core3 { 51762306a36Sopenharmony_ci cpu0 = <&CPU3>; 51862306a36Sopenharmony_ci }; 51962306a36Sopenharmony_ci }; 52062306a36Sopenharmony_ci }; 52162306a36Sopenharmony_ci }; 52262306a36Sopenharmony_ci 52362306a36Sopenharmony_ci CPU1: cpu@1 { 52462306a36Sopenharmony_ci device_type = "cpu"; 52562306a36Sopenharmony_ci compatible = "sifive,rocket0", "riscv"; 52662306a36Sopenharmony_ci reg = <0x1>; 52762306a36Sopenharmony_ci } 52862306a36Sopenharmony_ci 52962306a36Sopenharmony_ci CPU2: cpu@2 { 53062306a36Sopenharmony_ci device_type = "cpu"; 53162306a36Sopenharmony_ci compatible = "sifive,rocket0", "riscv"; 53262306a36Sopenharmony_ci reg = <0x2>; 53362306a36Sopenharmony_ci } 53462306a36Sopenharmony_ci CPU3: cpu@3 { 53562306a36Sopenharmony_ci device_type = "cpu"; 53662306a36Sopenharmony_ci compatible = "sifive,rocket0", "riscv"; 53762306a36Sopenharmony_ci reg = <0x3>; 53862306a36Sopenharmony_ci } 53962306a36Sopenharmony_ci CPU4: cpu@4 { 54062306a36Sopenharmony_ci device_type = "cpu"; 54162306a36Sopenharmony_ci compatible = "sifive,rocket0", "riscv"; 54262306a36Sopenharmony_ci reg = <0x4>; 54362306a36Sopenharmony_ci } 54462306a36Sopenharmony_ci } 54562306a36Sopenharmony_ci}; 54662306a36Sopenharmony_ci=============================================================================== 54762306a36Sopenharmony_ci[1] ARM Linux kernel documentation 54862306a36Sopenharmony_ci Documentation/devicetree/bindings/arm/cpus.yaml 54962306a36Sopenharmony_ci[2] Devicetree NUMA binding description 55062306a36Sopenharmony_ci Documentation/devicetree/bindings/numa.txt 55162306a36Sopenharmony_ci[3] RISC-V Linux kernel documentation 55262306a36Sopenharmony_ci Documentation/devicetree/bindings/riscv/cpus.yaml 55362306a36Sopenharmony_ci[4] https://www.devicetree.org/specifications/ 554