dts/resources/bindings/cpus.yaml (309 lines of code) (raw):
description: |
A cpus node is required for all devicetrees. It does not represent a real
device in the system, but acts as a container for child cpu nodes which
represent the systems CPUs.
The cpus node may contain properties that are common across cpu nodes.
Here is an example of a cpus node with one child cpu node:
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu@0 {
device_type = "cpu";
reg = <0>;
d-cache-block-size = <32>;
i-cache-block-size = <32>;
d-cache-size = <0x8000>;
i-cache-size = <0x8000>;
timebase-frequency = <82500000>;
clock-frequency = <825000000>;
};
};
properties:
"#address-cells":
required: true
type: int
description: |
The value specifies how many cells each element of the reg property
array takes in children of this node.
"#size-cells":
required: true
type: int
const: 0
description: |
Value shall be 0. Specifies that no size is required in the reg
property in children of this node.
child-binding:
description: |
A cpu node represents a hardware execution block that is sufficiently
independent that it is capable of running an operating system without
interfering with other CPUs possibly running other operating systems.
Hardware threads that share an MMU would generally be represented under
one cpu node. If other more complex CPU topographies are designed, the
binding for the CPU must describe the topography (e.g. threads that
don't share an MMU).
CPUs and threads are numbered through a unified number-space that should
match as closely as possible the interrupt controller's numbering of
CPUs/threads.
Properties that have identical values across cpu nodes may be placed in
the cpus node instead. A client program must first examine a specific
cpu node, but if an expected property is not found then it should look
at the parent cpus node. This results in a less verbose representation
of properties which are identical across all CPUs.
The node name for every CPU node should be cpu.
properties:
device_type:
required: true
type: string
const: "cpu"
description: |
Value shall be "cpu".
reg:
required: true
type: array
description: |
The value of reg defines a unique CPU/thread id for the
CPU/threads represented by the CPU node.
If a CPU supports more than one thread (i.e. multiple streams
of execution) the reg property is an array with 1 element per
thread. The #address-cells on the cpus node specifies how many
cells each element of the array takes. Software can determine
the number of threads by dividing the size of reg by the parent
node's #address-cells.
If a CPU/thread can be the target of an external interrupt the
reg property value must be a unique CPU/thread id that is
addressable by the interrupt controller.
If a CPU/thread cannot be the target of an external interrupt,
then reg must be unique and out of bounds of the range addressed
by the interrupt controller.
If a CPU/thread's PIR (pending interrupt register) is
modifiable, a client program should modify PIR to match the reg
property value. If PIR cannot be modified and the PIR value is
distinct from the interrupt controller number space, the CPUs
binding may define a binding- specific representation of PIR
values if desired.
clock-frequency:
type: array
description: |
!!html
Specifies the clock speed of the CPU in Hertz, if that is
constant. The value is in one of two forms:
<ul>
<li>
A 32-bit integer represented as a <u32> specifying the
frequency.
</li>
<li>
A 64-bit integer represented as a <u64> specifying the
frequency.
</li>
</ul>
timebase-frequency:
type: array
description: |
!!html
Specifies the current frequency at which the timebase and
decrementer registers are updated (in Hertz). The value is in
one of two forms:
<ul>
<li>
A 32-bit integer represented as a <u32> specifying the
frequency.
</li>
<li>
A 64-bit integer represented as a <u64> specifying the
frequency.
</li>
</ul>
status:
type: string
description: |
!!html
A standard property describing the state of a CPU. This property
shall be present for nodes representing CPUs in a symmetric
multiprocessing (SMP) configuration. For a CPU node the meaning
of the "okay", "disabled" and "fail" values are as follows:
<ul>
<li>
<b>"okay"</b>: The CPU is running.
</li>
<li>
<b>"disabled"</b>: The CPU is in a quiescent state.
</li>
<li>
<b>"fail"</b>: The CPU is not operational or does not exist.
</li>
<ul>
A quiescent CPU is in a state where it can- not interfere with
the normal operation of other CPUs, nor can its state be
affected by the normal operation of other running CPUs, except
by an explicit method for enabling or reenabling the quiescent
CPU (see the enable-method property).
In particular, a running CPU shall be able to issue broadcast
TLB invalidates without affect- ing a quiescent CPU.
Examples: A quiescent CPU could be in a spin loop, held in
reset, and electrically isolated from the system bus or in
another implementation dependent state.
A CPU with "fail" status does not affect the system in any way.
The status is assigned to nodes for which no corresponding CPU
exists.
enable-method:
type: string-array
description: |
!!html
Describes the method by which a CPU in a disabled state is
enabled. This property is required for CPUs with a status
property with a value of "disabled". The value consists of one
or more strings that define the method to release this CPU. If
a client program recognizes any of the methods, it may use it.
The value shall be one of the following:
<ul>
<li>
<b>"spin-table"</b>: The CPU is enabled with the spin table
method defined in the DTSpec.
</li>
<li>
<b>"[vendor],[method]"</b>: Implementation dependent string
that describes the method by which a CPU is released from a
"disabled" state. The required format is:
"[vendor], [method]", where vendor is a string describing
the name of the manufacturer and method is a string
describing the vendor specific mechanism.
<br>
Example: "fsl,MPC8572DS"
</li>
</ul>
cpu-release-addr:
type: array
description: |
The cpu-release-addr property is required for cpu nodes that
have an enable-method property value of "spin-table". The value
specifies the physical address of a spin table entry that
releases a secondary CPU from its spin loop.
power-isa-version:
type: string
description: |
A string that specifies the numerical portion of the Power ISA
version string. For example, for an implementation complying
with Power ISA Version 2.06, the value of this property would be
"2.06".
# power-isa-* - cannot be represented in zephyr binding
cache-op-block-size:
type: int
description: |
Specifies the block size in bytes upon which cache block
instructions operate (e.g. dcbz). Required if different than
the L1 cache block size.
reservation-granule-siz:
type: int
description: |
Specifies the reservation granule size sup- ported by this
processor in bytes.
tlb-split:
type: boolean
description: |
If present specifies that the TLB has a split configuration,
with separate TLBs for instructions and data. If absent,
specifies that the TLB has a unified configuration. Required for
a CPU with a TLB in a split configuration.
tbl-size:
type: int
description: |
Specifies the number of entries in the TLB. Required for a CPU
with a unified TLB for instruction and data addresses.
tlb-sets:
type: int
description: |
Specifies the number of associativity sets in the TLB. Required
for a CPU with a unified TLB for instruction and data addresses.
d-tlb-size:
type: int
description: |
Specifies the number of entries in the data TLB. Required for a
CPU with a split TLB configuration.
d-tlb-sets:
type: int
description: |
Specifies the number of associativity sets in the data TLB.
Required for a CPU with a split TLB configuration.
i-tlb-size:
type: int
description: |
Specifies the number of entries in the instruction TLB. Required
for a CPU with a split TLB configuration.
i-tlb-sets:
type: int
description: |
Specifies the number of associativity sets in the instruction
TLB. Required for a CPU with a split TLB configuration.
cache-unified:
type: boolean
description: |
If present, specifies the cache has a unified organization. If
not present, specifies that the cache has a Harvard architecture
with separate caches for instructions and data.
cache-size:
type: int
description: |
Specifies the size in bytes of a unified cache. Required if the
cache is unified (combined instructions and data).
cache-sets:
type: int
description: |
Specifies the number of associativity sets in a unified cache.
Required if the cache is unified (combined instructions and data)
cache-block-size:
type: int
description: |
Specifies the block size in bytes of a unified cache. Required
if the processor has a unified cache (combined instructions and
data)
cache-line-size:
type: int
description: |
Specifies the line size in bytes of a unified cache, if
different than the cache block size Required if the processor
has a unified cache (combined instructions and data).
i-cache-size:
type: int
description: |
Specifies the size in bytes of the instruction cache. Required
if the cpu has a separate cache for instructions.
i-cache-sets:
type: int
description: |
Specifies the number of associativity sets in the instruction
cache. Required if the cpu has a separate cache for instructions.
i-cache-block-size:
type: int
description: |
Specifies the block size in bytes of the instruction cache.
Required if the cpu has a separate cache for instructions.
i-cache-line-size:
type: int
description: |
Specifies the line size in bytes of the instruction cache, if
different than the cache block size. Required if the cpu has a
separate cache for instructions.
d-cache-size:
type: int
description: |
Specifies the size in bytes of the data cache. Required if the
cpu has a separate cache for data.
d-cache-sets:
type: int
description: |
Specifies the number of associativity sets in the data cache.
Required if the cpu has a separate cache for data.
d-cache-block-size:
type: int
description: |
Specifies the block size in bytes of the data cache. Required if
the cpu has a separate cache for data.
d-cache-line-size:
type: int
description: |
Specifies the line size in bytes of the data cache, if different
than the cache block size. Required if the cpu has a separate
cache for data.
next-level-cache:
type: phandle
description: |
If present, indicates that another level of cache exists. The
value is the phandle of the next level of cache.