162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 262306a36Sopenharmony_ci%YAML 1.2 362306a36Sopenharmony_ci--- 462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/cpu/idle-states.yaml# 562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml# 662306a36Sopenharmony_ci 762306a36Sopenharmony_cititle: Idle states 862306a36Sopenharmony_ci 962306a36Sopenharmony_cimaintainers: 1062306a36Sopenharmony_ci - Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> 1162306a36Sopenharmony_ci - Anup Patel <anup@brainfault.org> 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_cidescription: |+ 1462306a36Sopenharmony_ci ========================================== 1562306a36Sopenharmony_ci 1 - Introduction 1662306a36Sopenharmony_ci ========================================== 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci ARM and RISC-V systems contain HW capable of managing power consumption 1962306a36Sopenharmony_ci dynamically, where cores can be put in different low-power states (ranging 2062306a36Sopenharmony_ci from simple wfi to power gating) according to OS PM policies. The CPU states 2162306a36Sopenharmony_ci representing the range of dynamic idle states that a processor can enter at 2262306a36Sopenharmony_ci run-time, can be specified through device tree bindings representing the 2362306a36Sopenharmony_ci parameters required to enter/exit specific idle states on a given processor. 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci ========================================== 2662306a36Sopenharmony_ci 2 - ARM idle states 2762306a36Sopenharmony_ci ========================================== 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci According to the Server Base System Architecture document (SBSA, [3]), the 3062306a36Sopenharmony_ci power states an ARM CPU can be put into are identified by the following list: 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci - Running 3362306a36Sopenharmony_ci - Idle_standby 3462306a36Sopenharmony_ci - Idle_retention 3562306a36Sopenharmony_ci - Sleep 3662306a36Sopenharmony_ci - Off 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci The power states described in the SBSA document define the basic CPU states on 3962306a36Sopenharmony_ci top of which ARM platforms implement power management schemes that allow an OS 4062306a36Sopenharmony_ci PM implementation to put the processor in different idle states (which include 4162306a36Sopenharmony_ci states listed above; "off" state is not an idle state since it does not have 4262306a36Sopenharmony_ci wake-up capabilities, hence it is not considered in this document). 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci Idle state parameters (e.g. entry latency) are platform specific and need to 4562306a36Sopenharmony_ci be characterized with bindings that provide the required information to OS PM 4662306a36Sopenharmony_ci code so that it can build the required tables and use them at runtime. 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci The device tree binding definition for ARM idle states is the subject of this 4962306a36Sopenharmony_ci document. 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ci ========================================== 5262306a36Sopenharmony_ci 3 - RISC-V idle states 5362306a36Sopenharmony_ci ========================================== 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci On RISC-V systems, the HARTs (or CPUs) [6] can be put in platform specific 5662306a36Sopenharmony_ci suspend (or idle) states (ranging from simple WFI, power gating, etc). The 5762306a36Sopenharmony_ci RISC-V SBI v0.3 (or higher) [7] hart state management extension provides a 5862306a36Sopenharmony_ci standard mechanism for OS to request HART state transitions. 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci The platform specific suspend (or idle) states of a hart can be either 6162306a36Sopenharmony_ci retentive or non-rententive in nature. A retentive suspend state will 6262306a36Sopenharmony_ci preserve HART registers and CSR values for all privilege modes whereas 6362306a36Sopenharmony_ci a non-retentive suspend state will not preserve HART registers and CSR 6462306a36Sopenharmony_ci values. 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci =========================================== 6762306a36Sopenharmony_ci 4 - idle-states definitions 6862306a36Sopenharmony_ci =========================================== 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci Idle states are characterized for a specific system through a set of 7162306a36Sopenharmony_ci timing and energy related properties, that underline the HW behaviour 7262306a36Sopenharmony_ci triggered upon idle states entry and exit. 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ci The following diagram depicts the CPU execution phases and related timing 7562306a36Sopenharmony_ci properties required to enter and exit an idle state: 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ci ..__[EXEC]__|__[PREP]__|__[ENTRY]__|__[IDLE]__|__[EXIT]__|__[EXEC]__.. 7862306a36Sopenharmony_ci | | | | | 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_ci |<------ entry ------->| 8162306a36Sopenharmony_ci | latency | 8262306a36Sopenharmony_ci |<- exit ->| 8362306a36Sopenharmony_ci | latency | 8462306a36Sopenharmony_ci |<-------- min-residency -------->| 8562306a36Sopenharmony_ci |<------- wakeup-latency ------->| 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ci Diagram 1: CPU idle state execution phases 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci EXEC: Normal CPU execution. 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci PREP: Preparation phase before committing the hardware to idle mode 9262306a36Sopenharmony_ci like cache flushing. This is abortable on pending wake-up 9362306a36Sopenharmony_ci event conditions. The abort latency is assumed to be negligible 9462306a36Sopenharmony_ci (i.e. less than the ENTRY + EXIT duration). If aborted, CPU 9562306a36Sopenharmony_ci goes back to EXEC. This phase is optional. If not abortable, 9662306a36Sopenharmony_ci this should be included in the ENTRY phase instead. 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ci ENTRY: The hardware is committed to idle mode. This period must run 9962306a36Sopenharmony_ci to completion up to IDLE before anything else can happen. 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ci IDLE: This is the actual energy-saving idle period. This may last 10262306a36Sopenharmony_ci between 0 and infinite time, until a wake-up event occurs. 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_ci EXIT: Period during which the CPU is brought back to operational 10562306a36Sopenharmony_ci mode (EXEC). 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_ci entry-latency: Worst case latency required to enter the idle state. The 10862306a36Sopenharmony_ci exit-latency may be guaranteed only after entry-latency has passed. 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ci min-residency: Minimum period, including preparation and entry, for a given 11162306a36Sopenharmony_ci idle state to be worthwhile energywise. 11262306a36Sopenharmony_ci 11362306a36Sopenharmony_ci wakeup-latency: Maximum delay between the signaling of a wake-up event and the 11462306a36Sopenharmony_ci CPU being able to execute normal code again. If not specified, this is assumed 11562306a36Sopenharmony_ci to be entry-latency + exit-latency. 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_ci These timing parameters can be used by an OS in different circumstances. 11862306a36Sopenharmony_ci 11962306a36Sopenharmony_ci An idle CPU requires the expected min-residency time to select the most 12062306a36Sopenharmony_ci appropriate idle state based on the expected expiry time of the next IRQ 12162306a36Sopenharmony_ci (i.e. wake-up) that causes the CPU to return to the EXEC phase. 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ci An operating system scheduler may need to compute the shortest wake-up delay 12462306a36Sopenharmony_ci for CPUs in the system by detecting how long will it take to get a CPU out 12562306a36Sopenharmony_ci of an idle state, e.g.: 12662306a36Sopenharmony_ci 12762306a36Sopenharmony_ci wakeup-delay = exit-latency + max(entry-latency - (now - entry-timestamp), 0) 12862306a36Sopenharmony_ci 12962306a36Sopenharmony_ci In other words, the scheduler can make its scheduling decision by selecting 13062306a36Sopenharmony_ci (e.g. waking-up) the CPU with the shortest wake-up delay. 13162306a36Sopenharmony_ci The wake-up delay must take into account the entry latency if that period 13262306a36Sopenharmony_ci has not expired. The abortable nature of the PREP period can be ignored 13362306a36Sopenharmony_ci if it cannot be relied upon (e.g. the PREP deadline may occur much sooner than 13462306a36Sopenharmony_ci the worst case since it depends on the CPU operating conditions, i.e. caches 13562306a36Sopenharmony_ci state). 13662306a36Sopenharmony_ci 13762306a36Sopenharmony_ci An OS has to reliably probe the wakeup-latency since some devices can enforce 13862306a36Sopenharmony_ci latency constraint guarantees to work properly, so the OS has to detect the 13962306a36Sopenharmony_ci worst case wake-up latency it can incur if a CPU is allowed to enter an 14062306a36Sopenharmony_ci idle state, and possibly to prevent that to guarantee reliable device 14162306a36Sopenharmony_ci functioning. 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_ci The min-residency time parameter deserves further explanation since it is 14462306a36Sopenharmony_ci expressed in time units but must factor in energy consumption coefficients. 14562306a36Sopenharmony_ci 14662306a36Sopenharmony_ci The energy consumption of a cpu when it enters a power state can be roughly 14762306a36Sopenharmony_ci characterised by the following graph: 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci | 15062306a36Sopenharmony_ci | 15162306a36Sopenharmony_ci | 15262306a36Sopenharmony_ci e | 15362306a36Sopenharmony_ci n | /--- 15462306a36Sopenharmony_ci e | /------ 15562306a36Sopenharmony_ci r | /------ 15662306a36Sopenharmony_ci g | /----- 15762306a36Sopenharmony_ci y | /------ 15862306a36Sopenharmony_ci | ---- 15962306a36Sopenharmony_ci | /| 16062306a36Sopenharmony_ci | / | 16162306a36Sopenharmony_ci | / | 16262306a36Sopenharmony_ci | / | 16362306a36Sopenharmony_ci | / | 16462306a36Sopenharmony_ci | / | 16562306a36Sopenharmony_ci |/ | 16662306a36Sopenharmony_ci -----|-------+---------------------------------- 16762306a36Sopenharmony_ci 0| 1 time(ms) 16862306a36Sopenharmony_ci 16962306a36Sopenharmony_ci Graph 1: Energy vs time example 17062306a36Sopenharmony_ci 17162306a36Sopenharmony_ci The graph is split in two parts delimited by time 1ms on the X-axis. 17262306a36Sopenharmony_ci The graph curve with X-axis values = { x | 0 < x < 1ms } has a steep slope 17362306a36Sopenharmony_ci and denotes the energy costs incurred while entering and leaving the idle 17462306a36Sopenharmony_ci state. 17562306a36Sopenharmony_ci The graph curve in the area delimited by X-axis values = {x | x > 1ms } has 17662306a36Sopenharmony_ci shallower slope and essentially represents the energy consumption of the idle 17762306a36Sopenharmony_ci state. 17862306a36Sopenharmony_ci 17962306a36Sopenharmony_ci min-residency is defined for a given idle state as the minimum expected 18062306a36Sopenharmony_ci residency time for a state (inclusive of preparation and entry) after 18162306a36Sopenharmony_ci which choosing that state become the most energy efficient option. A good 18262306a36Sopenharmony_ci way to visualise this, is by taking the same graph above and comparing some 18362306a36Sopenharmony_ci states energy consumptions plots. 18462306a36Sopenharmony_ci 18562306a36Sopenharmony_ci For sake of simplicity, let's consider a system with two idle states IDLE1, 18662306a36Sopenharmony_ci and IDLE2: 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_ci | 18962306a36Sopenharmony_ci | 19062306a36Sopenharmony_ci | 19162306a36Sopenharmony_ci | /-- IDLE1 19262306a36Sopenharmony_ci e | /--- 19362306a36Sopenharmony_ci n | /---- 19462306a36Sopenharmony_ci e | /--- 19562306a36Sopenharmony_ci r | /-----/--------- IDLE2 19662306a36Sopenharmony_ci g | /-------/--------- 19762306a36Sopenharmony_ci y | ------------ /---| 19862306a36Sopenharmony_ci | / /---- | 19962306a36Sopenharmony_ci | / /--- | 20062306a36Sopenharmony_ci | / /---- | 20162306a36Sopenharmony_ci | / /--- | 20262306a36Sopenharmony_ci | --- | 20362306a36Sopenharmony_ci | / | 20462306a36Sopenharmony_ci | / | 20562306a36Sopenharmony_ci |/ | time 20662306a36Sopenharmony_ci ---/----------------------------+------------------------ 20762306a36Sopenharmony_ci |IDLE1-energy < IDLE2-energy | IDLE2-energy < IDLE1-energy 20862306a36Sopenharmony_ci | 20962306a36Sopenharmony_ci IDLE2-min-residency 21062306a36Sopenharmony_ci 21162306a36Sopenharmony_ci Graph 2: idle states min-residency example 21262306a36Sopenharmony_ci 21362306a36Sopenharmony_ci In graph 2 above, that takes into account idle states entry/exit energy 21462306a36Sopenharmony_ci costs, it is clear that if the idle state residency time (i.e. time till next 21562306a36Sopenharmony_ci wake-up IRQ) is less than IDLE2-min-residency, IDLE1 is the better idle state 21662306a36Sopenharmony_ci choice energywise. 21762306a36Sopenharmony_ci 21862306a36Sopenharmony_ci This is mainly down to the fact that IDLE1 entry/exit energy costs are lower 21962306a36Sopenharmony_ci than IDLE2. 22062306a36Sopenharmony_ci 22162306a36Sopenharmony_ci However, the lower power consumption (i.e. shallower energy curve slope) of 22262306a36Sopenharmony_ci idle state IDLE2 implies that after a suitable time, IDLE2 becomes more energy 22362306a36Sopenharmony_ci efficient. 22462306a36Sopenharmony_ci 22562306a36Sopenharmony_ci The time at which IDLE2 becomes more energy efficient than IDLE1 (and other 22662306a36Sopenharmony_ci shallower states in a system with multiple idle states) is defined 22762306a36Sopenharmony_ci IDLE2-min-residency and corresponds to the time when energy consumption of 22862306a36Sopenharmony_ci IDLE1 and IDLE2 states breaks even. 22962306a36Sopenharmony_ci 23062306a36Sopenharmony_ci The definitions provided in this section underpin the idle states 23162306a36Sopenharmony_ci properties specification that is the subject of the following sections. 23262306a36Sopenharmony_ci 23362306a36Sopenharmony_ci =========================================== 23462306a36Sopenharmony_ci 5 - idle-states node 23562306a36Sopenharmony_ci =========================================== 23662306a36Sopenharmony_ci 23762306a36Sopenharmony_ci The processor idle states are defined within the idle-states node, which is 23862306a36Sopenharmony_ci a direct child of the cpus node [1] and provides a container where the 23962306a36Sopenharmony_ci processor idle states, defined as device tree nodes, are listed. 24062306a36Sopenharmony_ci 24162306a36Sopenharmony_ci On ARM systems, it is a container of processor idle states nodes. If the 24262306a36Sopenharmony_ci system does not provide CPU power management capabilities, or the processor 24362306a36Sopenharmony_ci just supports idle_standby, an idle-states node is not required. 24462306a36Sopenharmony_ci 24562306a36Sopenharmony_ci =========================================== 24662306a36Sopenharmony_ci 6 - References 24762306a36Sopenharmony_ci =========================================== 24862306a36Sopenharmony_ci 24962306a36Sopenharmony_ci [1] ARM Linux Kernel documentation - CPUs bindings 25062306a36Sopenharmony_ci Documentation/devicetree/bindings/arm/cpus.yaml 25162306a36Sopenharmony_ci 25262306a36Sopenharmony_ci [2] ARM Linux Kernel documentation - PSCI bindings 25362306a36Sopenharmony_ci Documentation/devicetree/bindings/arm/psci.yaml 25462306a36Sopenharmony_ci 25562306a36Sopenharmony_ci [3] ARM Server Base System Architecture (SBSA) 25662306a36Sopenharmony_ci http://infocenter.arm.com/help/index.jsp 25762306a36Sopenharmony_ci 25862306a36Sopenharmony_ci [4] ARM Architecture Reference Manuals 25962306a36Sopenharmony_ci http://infocenter.arm.com/help/index.jsp 26062306a36Sopenharmony_ci 26162306a36Sopenharmony_ci [5] ARM Linux Kernel documentation - Booting AArch64 Linux 26262306a36Sopenharmony_ci Documentation/arch/arm64/booting.rst 26362306a36Sopenharmony_ci 26462306a36Sopenharmony_ci [6] RISC-V Linux Kernel documentation - CPUs bindings 26562306a36Sopenharmony_ci Documentation/devicetree/bindings/riscv/cpus.yaml 26662306a36Sopenharmony_ci 26762306a36Sopenharmony_ci [7] RISC-V Supervisor Binary Interface (SBI) 26862306a36Sopenharmony_ci http://github.com/riscv/riscv-sbi-doc/riscv-sbi.adoc 26962306a36Sopenharmony_ci 27062306a36Sopenharmony_ciproperties: 27162306a36Sopenharmony_ci $nodename: 27262306a36Sopenharmony_ci const: idle-states 27362306a36Sopenharmony_ci 27462306a36Sopenharmony_ci entry-method: 27562306a36Sopenharmony_ci description: | 27662306a36Sopenharmony_ci Usage and definition depend on ARM architecture version. 27762306a36Sopenharmony_ci 27862306a36Sopenharmony_ci On ARM v8 64-bit this property is required. 27962306a36Sopenharmony_ci On ARM 32-bit systems this property is optional 28062306a36Sopenharmony_ci 28162306a36Sopenharmony_ci This assumes that the "enable-method" property is set to "psci" in the cpu 28262306a36Sopenharmony_ci node[5] that is responsible for setting up CPU idle management in the OS 28362306a36Sopenharmony_ci implementation. 28462306a36Sopenharmony_ci const: psci 28562306a36Sopenharmony_ci 28662306a36Sopenharmony_cipatternProperties: 28762306a36Sopenharmony_ci "^(cpu|cluster)-": 28862306a36Sopenharmony_ci type: object 28962306a36Sopenharmony_ci description: | 29062306a36Sopenharmony_ci Each state node represents an idle state description and must be defined 29162306a36Sopenharmony_ci as follows. 29262306a36Sopenharmony_ci 29362306a36Sopenharmony_ci The idle state entered by executing the wfi instruction (idle_standby 29462306a36Sopenharmony_ci SBSA,[3][4]) is considered standard on all ARM and RISC-V platforms and 29562306a36Sopenharmony_ci therefore must not be listed. 29662306a36Sopenharmony_ci 29762306a36Sopenharmony_ci In addition to the properties listed above, a state node may require 29862306a36Sopenharmony_ci additional properties specific to the entry-method defined in the 29962306a36Sopenharmony_ci idle-states node. Please refer to the entry-method bindings 30062306a36Sopenharmony_ci documentation for properties definitions. 30162306a36Sopenharmony_ci 30262306a36Sopenharmony_ci properties: 30362306a36Sopenharmony_ci compatible: 30462306a36Sopenharmony_ci enum: 30562306a36Sopenharmony_ci - arm,idle-state 30662306a36Sopenharmony_ci - riscv,idle-state 30762306a36Sopenharmony_ci 30862306a36Sopenharmony_ci arm,psci-suspend-param: 30962306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32 31062306a36Sopenharmony_ci description: | 31162306a36Sopenharmony_ci power_state parameter to pass to the ARM PSCI suspend call. 31262306a36Sopenharmony_ci 31362306a36Sopenharmony_ci Device tree nodes that require usage of PSCI CPU_SUSPEND function 31462306a36Sopenharmony_ci (i.e. idle states node with entry-method property is set to "psci") 31562306a36Sopenharmony_ci must specify this property. 31662306a36Sopenharmony_ci 31762306a36Sopenharmony_ci riscv,sbi-suspend-param: 31862306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32 31962306a36Sopenharmony_ci description: | 32062306a36Sopenharmony_ci suspend_type parameter to pass to the RISC-V SBI HSM suspend call. 32162306a36Sopenharmony_ci 32262306a36Sopenharmony_ci This property is required in idle state nodes of device tree meant 32362306a36Sopenharmony_ci for RISC-V systems. For more details on the suspend_type parameter 32462306a36Sopenharmony_ci refer the SBI specifiation v0.3 (or higher) [7]. 32562306a36Sopenharmony_ci 32662306a36Sopenharmony_ci local-timer-stop: 32762306a36Sopenharmony_ci description: 32862306a36Sopenharmony_ci If present the CPU local timer control logic is 32962306a36Sopenharmony_ci lost on state entry, otherwise it is retained. 33062306a36Sopenharmony_ci type: boolean 33162306a36Sopenharmony_ci 33262306a36Sopenharmony_ci entry-latency-us: 33362306a36Sopenharmony_ci description: 33462306a36Sopenharmony_ci Worst case latency in microseconds required to enter the idle state. 33562306a36Sopenharmony_ci 33662306a36Sopenharmony_ci exit-latency-us: 33762306a36Sopenharmony_ci description: 33862306a36Sopenharmony_ci Worst case latency in microseconds required to exit the idle state. 33962306a36Sopenharmony_ci The exit-latency-us duration may be guaranteed only after 34062306a36Sopenharmony_ci entry-latency-us has passed. 34162306a36Sopenharmony_ci 34262306a36Sopenharmony_ci min-residency-us: 34362306a36Sopenharmony_ci description: 34462306a36Sopenharmony_ci Minimum residency duration in microseconds, inclusive of preparation 34562306a36Sopenharmony_ci and entry, for this idle state to be considered worthwhile energy wise 34662306a36Sopenharmony_ci (refer to section 2 of this document for a complete description). 34762306a36Sopenharmony_ci 34862306a36Sopenharmony_ci wakeup-latency-us: 34962306a36Sopenharmony_ci description: | 35062306a36Sopenharmony_ci Maximum delay between the signaling of a wake-up event and the CPU 35162306a36Sopenharmony_ci being able to execute normal code again. If omitted, this is assumed 35262306a36Sopenharmony_ci to be equal to: 35362306a36Sopenharmony_ci 35462306a36Sopenharmony_ci entry-latency-us + exit-latency-us 35562306a36Sopenharmony_ci 35662306a36Sopenharmony_ci It is important to supply this value on systems where the duration of 35762306a36Sopenharmony_ci PREP phase (see diagram 1, section 2) is non-neglibigle. In such 35862306a36Sopenharmony_ci systems entry-latency-us + exit-latency-us will exceed 35962306a36Sopenharmony_ci wakeup-latency-us by this duration. 36062306a36Sopenharmony_ci 36162306a36Sopenharmony_ci idle-state-name: 36262306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/string 36362306a36Sopenharmony_ci description: 36462306a36Sopenharmony_ci A string used as a descriptive name for the idle state. 36562306a36Sopenharmony_ci 36662306a36Sopenharmony_ci additionalProperties: false 36762306a36Sopenharmony_ci 36862306a36Sopenharmony_ci required: 36962306a36Sopenharmony_ci - compatible 37062306a36Sopenharmony_ci - entry-latency-us 37162306a36Sopenharmony_ci - exit-latency-us 37262306a36Sopenharmony_ci - min-residency-us 37362306a36Sopenharmony_ci 37462306a36Sopenharmony_ciadditionalProperties: false 37562306a36Sopenharmony_ci 37662306a36Sopenharmony_ciexamples: 37762306a36Sopenharmony_ci - | 37862306a36Sopenharmony_ci 37962306a36Sopenharmony_ci cpus { 38062306a36Sopenharmony_ci #size-cells = <0>; 38162306a36Sopenharmony_ci #address-cells = <2>; 38262306a36Sopenharmony_ci 38362306a36Sopenharmony_ci cpu@0 { 38462306a36Sopenharmony_ci device_type = "cpu"; 38562306a36Sopenharmony_ci compatible = "arm,cortex-a57"; 38662306a36Sopenharmony_ci reg = <0x0 0x0>; 38762306a36Sopenharmony_ci enable-method = "psci"; 38862306a36Sopenharmony_ci cpu-idle-states = <&CPU_RETENTION_0_0>, <&CPU_SLEEP_0_0>, 38962306a36Sopenharmony_ci <&CLUSTER_RETENTION_0>, <&CLUSTER_SLEEP_0>; 39062306a36Sopenharmony_ci }; 39162306a36Sopenharmony_ci 39262306a36Sopenharmony_ci cpu@1 { 39362306a36Sopenharmony_ci device_type = "cpu"; 39462306a36Sopenharmony_ci compatible = "arm,cortex-a57"; 39562306a36Sopenharmony_ci reg = <0x0 0x1>; 39662306a36Sopenharmony_ci enable-method = "psci"; 39762306a36Sopenharmony_ci cpu-idle-states = <&CPU_RETENTION_0_0>, <&CPU_SLEEP_0_0>, 39862306a36Sopenharmony_ci <&CLUSTER_RETENTION_0>, <&CLUSTER_SLEEP_0>; 39962306a36Sopenharmony_ci }; 40062306a36Sopenharmony_ci 40162306a36Sopenharmony_ci cpu@100 { 40262306a36Sopenharmony_ci device_type = "cpu"; 40362306a36Sopenharmony_ci compatible = "arm,cortex-a57"; 40462306a36Sopenharmony_ci reg = <0x0 0x100>; 40562306a36Sopenharmony_ci enable-method = "psci"; 40662306a36Sopenharmony_ci cpu-idle-states = <&CPU_RETENTION_0_0>, <&CPU_SLEEP_0_0>, 40762306a36Sopenharmony_ci <&CLUSTER_RETENTION_0>, <&CLUSTER_SLEEP_0>; 40862306a36Sopenharmony_ci }; 40962306a36Sopenharmony_ci 41062306a36Sopenharmony_ci cpu@101 { 41162306a36Sopenharmony_ci device_type = "cpu"; 41262306a36Sopenharmony_ci compatible = "arm,cortex-a57"; 41362306a36Sopenharmony_ci reg = <0x0 0x101>; 41462306a36Sopenharmony_ci enable-method = "psci"; 41562306a36Sopenharmony_ci cpu-idle-states = <&CPU_RETENTION_0_0>, <&CPU_SLEEP_0_0>, 41662306a36Sopenharmony_ci <&CLUSTER_RETENTION_0>, <&CLUSTER_SLEEP_0>; 41762306a36Sopenharmony_ci }; 41862306a36Sopenharmony_ci 41962306a36Sopenharmony_ci cpu@10000 { 42062306a36Sopenharmony_ci device_type = "cpu"; 42162306a36Sopenharmony_ci compatible = "arm,cortex-a57"; 42262306a36Sopenharmony_ci reg = <0x0 0x10000>; 42362306a36Sopenharmony_ci enable-method = "psci"; 42462306a36Sopenharmony_ci cpu-idle-states = <&CPU_RETENTION_0_0>, <&CPU_SLEEP_0_0>, 42562306a36Sopenharmony_ci <&CLUSTER_RETENTION_0>, <&CLUSTER_SLEEP_0>; 42662306a36Sopenharmony_ci }; 42762306a36Sopenharmony_ci 42862306a36Sopenharmony_ci cpu@10001 { 42962306a36Sopenharmony_ci device_type = "cpu"; 43062306a36Sopenharmony_ci compatible = "arm,cortex-a57"; 43162306a36Sopenharmony_ci reg = <0x0 0x10001>; 43262306a36Sopenharmony_ci enable-method = "psci"; 43362306a36Sopenharmony_ci cpu-idle-states = <&CPU_RETENTION_0_0>, <&CPU_SLEEP_0_0>, 43462306a36Sopenharmony_ci <&CLUSTER_RETENTION_0>, <&CLUSTER_SLEEP_0>; 43562306a36Sopenharmony_ci }; 43662306a36Sopenharmony_ci 43762306a36Sopenharmony_ci cpu@10100 { 43862306a36Sopenharmony_ci device_type = "cpu"; 43962306a36Sopenharmony_ci compatible = "arm,cortex-a57"; 44062306a36Sopenharmony_ci reg = <0x0 0x10100>; 44162306a36Sopenharmony_ci enable-method = "psci"; 44262306a36Sopenharmony_ci cpu-idle-states = <&CPU_RETENTION_0_0>, <&CPU_SLEEP_0_0>, 44362306a36Sopenharmony_ci <&CLUSTER_RETENTION_0>, <&CLUSTER_SLEEP_0>; 44462306a36Sopenharmony_ci }; 44562306a36Sopenharmony_ci 44662306a36Sopenharmony_ci cpu@10101 { 44762306a36Sopenharmony_ci device_type = "cpu"; 44862306a36Sopenharmony_ci compatible = "arm,cortex-a57"; 44962306a36Sopenharmony_ci reg = <0x0 0x10101>; 45062306a36Sopenharmony_ci enable-method = "psci"; 45162306a36Sopenharmony_ci cpu-idle-states = <&CPU_RETENTION_0_0>, <&CPU_SLEEP_0_0>, 45262306a36Sopenharmony_ci <&CLUSTER_RETENTION_0>, <&CLUSTER_SLEEP_0>; 45362306a36Sopenharmony_ci }; 45462306a36Sopenharmony_ci 45562306a36Sopenharmony_ci cpu@100000000 { 45662306a36Sopenharmony_ci device_type = "cpu"; 45762306a36Sopenharmony_ci compatible = "arm,cortex-a53"; 45862306a36Sopenharmony_ci reg = <0x1 0x0>; 45962306a36Sopenharmony_ci enable-method = "psci"; 46062306a36Sopenharmony_ci cpu-idle-states = <&CPU_RETENTION_1_0>, <&CPU_SLEEP_1_0>, 46162306a36Sopenharmony_ci <&CLUSTER_RETENTION_1>, <&CLUSTER_SLEEP_1>; 46262306a36Sopenharmony_ci }; 46362306a36Sopenharmony_ci 46462306a36Sopenharmony_ci cpu@100000001 { 46562306a36Sopenharmony_ci device_type = "cpu"; 46662306a36Sopenharmony_ci compatible = "arm,cortex-a53"; 46762306a36Sopenharmony_ci reg = <0x1 0x1>; 46862306a36Sopenharmony_ci enable-method = "psci"; 46962306a36Sopenharmony_ci cpu-idle-states = <&CPU_RETENTION_1_0>, <&CPU_SLEEP_1_0>, 47062306a36Sopenharmony_ci <&CLUSTER_RETENTION_1>, <&CLUSTER_SLEEP_1>; 47162306a36Sopenharmony_ci }; 47262306a36Sopenharmony_ci 47362306a36Sopenharmony_ci cpu@100000100 { 47462306a36Sopenharmony_ci device_type = "cpu"; 47562306a36Sopenharmony_ci compatible = "arm,cortex-a53"; 47662306a36Sopenharmony_ci reg = <0x1 0x100>; 47762306a36Sopenharmony_ci enable-method = "psci"; 47862306a36Sopenharmony_ci cpu-idle-states = <&CPU_RETENTION_1_0>, <&CPU_SLEEP_1_0>, 47962306a36Sopenharmony_ci <&CLUSTER_RETENTION_1>, <&CLUSTER_SLEEP_1>; 48062306a36Sopenharmony_ci }; 48162306a36Sopenharmony_ci 48262306a36Sopenharmony_ci cpu@100000101 { 48362306a36Sopenharmony_ci device_type = "cpu"; 48462306a36Sopenharmony_ci compatible = "arm,cortex-a53"; 48562306a36Sopenharmony_ci reg = <0x1 0x101>; 48662306a36Sopenharmony_ci enable-method = "psci"; 48762306a36Sopenharmony_ci cpu-idle-states = <&CPU_RETENTION_1_0>, <&CPU_SLEEP_1_0>, 48862306a36Sopenharmony_ci <&CLUSTER_RETENTION_1>, <&CLUSTER_SLEEP_1>; 48962306a36Sopenharmony_ci }; 49062306a36Sopenharmony_ci 49162306a36Sopenharmony_ci cpu@100010000 { 49262306a36Sopenharmony_ci device_type = "cpu"; 49362306a36Sopenharmony_ci compatible = "arm,cortex-a53"; 49462306a36Sopenharmony_ci reg = <0x1 0x10000>; 49562306a36Sopenharmony_ci enable-method = "psci"; 49662306a36Sopenharmony_ci cpu-idle-states = <&CPU_RETENTION_1_0>, <&CPU_SLEEP_1_0>, 49762306a36Sopenharmony_ci <&CLUSTER_RETENTION_1>, <&CLUSTER_SLEEP_1>; 49862306a36Sopenharmony_ci }; 49962306a36Sopenharmony_ci 50062306a36Sopenharmony_ci cpu@100010001 { 50162306a36Sopenharmony_ci device_type = "cpu"; 50262306a36Sopenharmony_ci compatible = "arm,cortex-a53"; 50362306a36Sopenharmony_ci reg = <0x1 0x10001>; 50462306a36Sopenharmony_ci enable-method = "psci"; 50562306a36Sopenharmony_ci cpu-idle-states = <&CPU_RETENTION_1_0>, <&CPU_SLEEP_1_0>, 50662306a36Sopenharmony_ci <&CLUSTER_RETENTION_1>, <&CLUSTER_SLEEP_1>; 50762306a36Sopenharmony_ci }; 50862306a36Sopenharmony_ci 50962306a36Sopenharmony_ci cpu@100010100 { 51062306a36Sopenharmony_ci device_type = "cpu"; 51162306a36Sopenharmony_ci compatible = "arm,cortex-a53"; 51262306a36Sopenharmony_ci reg = <0x1 0x10100>; 51362306a36Sopenharmony_ci enable-method = "psci"; 51462306a36Sopenharmony_ci cpu-idle-states = <&CPU_RETENTION_1_0>, <&CPU_SLEEP_1_0>, 51562306a36Sopenharmony_ci <&CLUSTER_RETENTION_1>, <&CLUSTER_SLEEP_1>; 51662306a36Sopenharmony_ci }; 51762306a36Sopenharmony_ci 51862306a36Sopenharmony_ci cpu@100010101 { 51962306a36Sopenharmony_ci device_type = "cpu"; 52062306a36Sopenharmony_ci compatible = "arm,cortex-a53"; 52162306a36Sopenharmony_ci reg = <0x1 0x10101>; 52262306a36Sopenharmony_ci enable-method = "psci"; 52362306a36Sopenharmony_ci cpu-idle-states = <&CPU_RETENTION_1_0>, <&CPU_SLEEP_1_0>, 52462306a36Sopenharmony_ci <&CLUSTER_RETENTION_1>, <&CLUSTER_SLEEP_1>; 52562306a36Sopenharmony_ci }; 52662306a36Sopenharmony_ci 52762306a36Sopenharmony_ci idle-states { 52862306a36Sopenharmony_ci entry-method = "psci"; 52962306a36Sopenharmony_ci 53062306a36Sopenharmony_ci CPU_RETENTION_0_0: cpu-retention-0-0 { 53162306a36Sopenharmony_ci compatible = "arm,idle-state"; 53262306a36Sopenharmony_ci arm,psci-suspend-param = <0x0010000>; 53362306a36Sopenharmony_ci entry-latency-us = <20>; 53462306a36Sopenharmony_ci exit-latency-us = <40>; 53562306a36Sopenharmony_ci min-residency-us = <80>; 53662306a36Sopenharmony_ci }; 53762306a36Sopenharmony_ci 53862306a36Sopenharmony_ci CLUSTER_RETENTION_0: cluster-retention-0 { 53962306a36Sopenharmony_ci compatible = "arm,idle-state"; 54062306a36Sopenharmony_ci local-timer-stop; 54162306a36Sopenharmony_ci arm,psci-suspend-param = <0x1010000>; 54262306a36Sopenharmony_ci entry-latency-us = <50>; 54362306a36Sopenharmony_ci exit-latency-us = <100>; 54462306a36Sopenharmony_ci min-residency-us = <250>; 54562306a36Sopenharmony_ci wakeup-latency-us = <130>; 54662306a36Sopenharmony_ci }; 54762306a36Sopenharmony_ci 54862306a36Sopenharmony_ci CPU_SLEEP_0_0: cpu-sleep-0-0 { 54962306a36Sopenharmony_ci compatible = "arm,idle-state"; 55062306a36Sopenharmony_ci local-timer-stop; 55162306a36Sopenharmony_ci arm,psci-suspend-param = <0x0010000>; 55262306a36Sopenharmony_ci entry-latency-us = <250>; 55362306a36Sopenharmony_ci exit-latency-us = <500>; 55462306a36Sopenharmony_ci min-residency-us = <950>; 55562306a36Sopenharmony_ci }; 55662306a36Sopenharmony_ci 55762306a36Sopenharmony_ci CLUSTER_SLEEP_0: cluster-sleep-0 { 55862306a36Sopenharmony_ci compatible = "arm,idle-state"; 55962306a36Sopenharmony_ci local-timer-stop; 56062306a36Sopenharmony_ci arm,psci-suspend-param = <0x1010000>; 56162306a36Sopenharmony_ci entry-latency-us = <600>; 56262306a36Sopenharmony_ci exit-latency-us = <1100>; 56362306a36Sopenharmony_ci min-residency-us = <2700>; 56462306a36Sopenharmony_ci wakeup-latency-us = <1500>; 56562306a36Sopenharmony_ci }; 56662306a36Sopenharmony_ci 56762306a36Sopenharmony_ci CPU_RETENTION_1_0: cpu-retention-1-0 { 56862306a36Sopenharmony_ci compatible = "arm,idle-state"; 56962306a36Sopenharmony_ci arm,psci-suspend-param = <0x0010000>; 57062306a36Sopenharmony_ci entry-latency-us = <20>; 57162306a36Sopenharmony_ci exit-latency-us = <40>; 57262306a36Sopenharmony_ci min-residency-us = <90>; 57362306a36Sopenharmony_ci }; 57462306a36Sopenharmony_ci 57562306a36Sopenharmony_ci CLUSTER_RETENTION_1: cluster-retention-1 { 57662306a36Sopenharmony_ci compatible = "arm,idle-state"; 57762306a36Sopenharmony_ci local-timer-stop; 57862306a36Sopenharmony_ci arm,psci-suspend-param = <0x1010000>; 57962306a36Sopenharmony_ci entry-latency-us = <50>; 58062306a36Sopenharmony_ci exit-latency-us = <100>; 58162306a36Sopenharmony_ci min-residency-us = <270>; 58262306a36Sopenharmony_ci wakeup-latency-us = <100>; 58362306a36Sopenharmony_ci }; 58462306a36Sopenharmony_ci 58562306a36Sopenharmony_ci CPU_SLEEP_1_0: cpu-sleep-1-0 { 58662306a36Sopenharmony_ci compatible = "arm,idle-state"; 58762306a36Sopenharmony_ci local-timer-stop; 58862306a36Sopenharmony_ci arm,psci-suspend-param = <0x0010000>; 58962306a36Sopenharmony_ci entry-latency-us = <70>; 59062306a36Sopenharmony_ci exit-latency-us = <100>; 59162306a36Sopenharmony_ci min-residency-us = <300>; 59262306a36Sopenharmony_ci wakeup-latency-us = <150>; 59362306a36Sopenharmony_ci }; 59462306a36Sopenharmony_ci 59562306a36Sopenharmony_ci CLUSTER_SLEEP_1: cluster-sleep-1 { 59662306a36Sopenharmony_ci compatible = "arm,idle-state"; 59762306a36Sopenharmony_ci local-timer-stop; 59862306a36Sopenharmony_ci arm,psci-suspend-param = <0x1010000>; 59962306a36Sopenharmony_ci entry-latency-us = <500>; 60062306a36Sopenharmony_ci exit-latency-us = <1200>; 60162306a36Sopenharmony_ci min-residency-us = <3500>; 60262306a36Sopenharmony_ci wakeup-latency-us = <1300>; 60362306a36Sopenharmony_ci }; 60462306a36Sopenharmony_ci }; 60562306a36Sopenharmony_ci }; 60662306a36Sopenharmony_ci 60762306a36Sopenharmony_ci - | 60862306a36Sopenharmony_ci // Example 2 (ARM 32-bit, 8-cpu system, two clusters): 60962306a36Sopenharmony_ci 61062306a36Sopenharmony_ci cpus { 61162306a36Sopenharmony_ci #size-cells = <0>; 61262306a36Sopenharmony_ci #address-cells = <1>; 61362306a36Sopenharmony_ci 61462306a36Sopenharmony_ci cpu@0 { 61562306a36Sopenharmony_ci device_type = "cpu"; 61662306a36Sopenharmony_ci compatible = "arm,cortex-a15"; 61762306a36Sopenharmony_ci reg = <0x0>; 61862306a36Sopenharmony_ci cpu-idle-states = <&cpu_sleep_0_0>, <&cluster_sleep_0>; 61962306a36Sopenharmony_ci }; 62062306a36Sopenharmony_ci 62162306a36Sopenharmony_ci cpu@1 { 62262306a36Sopenharmony_ci device_type = "cpu"; 62362306a36Sopenharmony_ci compatible = "arm,cortex-a15"; 62462306a36Sopenharmony_ci reg = <0x1>; 62562306a36Sopenharmony_ci cpu-idle-states = <&cpu_sleep_0_0>, <&cluster_sleep_0>; 62662306a36Sopenharmony_ci }; 62762306a36Sopenharmony_ci 62862306a36Sopenharmony_ci cpu@2 { 62962306a36Sopenharmony_ci device_type = "cpu"; 63062306a36Sopenharmony_ci compatible = "arm,cortex-a15"; 63162306a36Sopenharmony_ci reg = <0x2>; 63262306a36Sopenharmony_ci cpu-idle-states = <&cpu_sleep_0_0>, <&cluster_sleep_0>; 63362306a36Sopenharmony_ci }; 63462306a36Sopenharmony_ci 63562306a36Sopenharmony_ci cpu@3 { 63662306a36Sopenharmony_ci device_type = "cpu"; 63762306a36Sopenharmony_ci compatible = "arm,cortex-a15"; 63862306a36Sopenharmony_ci reg = <0x3>; 63962306a36Sopenharmony_ci cpu-idle-states = <&cpu_sleep_0_0>, <&cluster_sleep_0>; 64062306a36Sopenharmony_ci }; 64162306a36Sopenharmony_ci 64262306a36Sopenharmony_ci cpu@100 { 64362306a36Sopenharmony_ci device_type = "cpu"; 64462306a36Sopenharmony_ci compatible = "arm,cortex-a7"; 64562306a36Sopenharmony_ci reg = <0x100>; 64662306a36Sopenharmony_ci cpu-idle-states = <&cpu_sleep_1_0>, <&cluster_sleep_1>; 64762306a36Sopenharmony_ci }; 64862306a36Sopenharmony_ci 64962306a36Sopenharmony_ci cpu@101 { 65062306a36Sopenharmony_ci device_type = "cpu"; 65162306a36Sopenharmony_ci compatible = "arm,cortex-a7"; 65262306a36Sopenharmony_ci reg = <0x101>; 65362306a36Sopenharmony_ci cpu-idle-states = <&cpu_sleep_1_0>, <&cluster_sleep_1>; 65462306a36Sopenharmony_ci }; 65562306a36Sopenharmony_ci 65662306a36Sopenharmony_ci cpu@102 { 65762306a36Sopenharmony_ci device_type = "cpu"; 65862306a36Sopenharmony_ci compatible = "arm,cortex-a7"; 65962306a36Sopenharmony_ci reg = <0x102>; 66062306a36Sopenharmony_ci cpu-idle-states = <&cpu_sleep_1_0>, <&cluster_sleep_1>; 66162306a36Sopenharmony_ci }; 66262306a36Sopenharmony_ci 66362306a36Sopenharmony_ci cpu@103 { 66462306a36Sopenharmony_ci device_type = "cpu"; 66562306a36Sopenharmony_ci compatible = "arm,cortex-a7"; 66662306a36Sopenharmony_ci reg = <0x103>; 66762306a36Sopenharmony_ci cpu-idle-states = <&cpu_sleep_1_0>, <&cluster_sleep_1>; 66862306a36Sopenharmony_ci }; 66962306a36Sopenharmony_ci 67062306a36Sopenharmony_ci idle-states { 67162306a36Sopenharmony_ci cpu_sleep_0_0: cpu-sleep-0-0 { 67262306a36Sopenharmony_ci compatible = "arm,idle-state"; 67362306a36Sopenharmony_ci local-timer-stop; 67462306a36Sopenharmony_ci entry-latency-us = <200>; 67562306a36Sopenharmony_ci exit-latency-us = <100>; 67662306a36Sopenharmony_ci min-residency-us = <400>; 67762306a36Sopenharmony_ci wakeup-latency-us = <250>; 67862306a36Sopenharmony_ci }; 67962306a36Sopenharmony_ci 68062306a36Sopenharmony_ci cluster_sleep_0: cluster-sleep-0 { 68162306a36Sopenharmony_ci compatible = "arm,idle-state"; 68262306a36Sopenharmony_ci local-timer-stop; 68362306a36Sopenharmony_ci entry-latency-us = <500>; 68462306a36Sopenharmony_ci exit-latency-us = <1500>; 68562306a36Sopenharmony_ci min-residency-us = <2500>; 68662306a36Sopenharmony_ci wakeup-latency-us = <1700>; 68762306a36Sopenharmony_ci }; 68862306a36Sopenharmony_ci 68962306a36Sopenharmony_ci cpu_sleep_1_0: cpu-sleep-1-0 { 69062306a36Sopenharmony_ci compatible = "arm,idle-state"; 69162306a36Sopenharmony_ci local-timer-stop; 69262306a36Sopenharmony_ci entry-latency-us = <300>; 69362306a36Sopenharmony_ci exit-latency-us = <500>; 69462306a36Sopenharmony_ci min-residency-us = <900>; 69562306a36Sopenharmony_ci wakeup-latency-us = <600>; 69662306a36Sopenharmony_ci }; 69762306a36Sopenharmony_ci 69862306a36Sopenharmony_ci cluster_sleep_1: cluster-sleep-1 { 69962306a36Sopenharmony_ci compatible = "arm,idle-state"; 70062306a36Sopenharmony_ci local-timer-stop; 70162306a36Sopenharmony_ci entry-latency-us = <800>; 70262306a36Sopenharmony_ci exit-latency-us = <2000>; 70362306a36Sopenharmony_ci min-residency-us = <6500>; 70462306a36Sopenharmony_ci wakeup-latency-us = <2300>; 70562306a36Sopenharmony_ci }; 70662306a36Sopenharmony_ci }; 70762306a36Sopenharmony_ci }; 70862306a36Sopenharmony_ci 70962306a36Sopenharmony_ci - | 71062306a36Sopenharmony_ci // Example 3 (RISC-V 64-bit, 4-cpu systems, two clusters): 71162306a36Sopenharmony_ci 71262306a36Sopenharmony_ci cpus { 71362306a36Sopenharmony_ci #size-cells = <0>; 71462306a36Sopenharmony_ci #address-cells = <1>; 71562306a36Sopenharmony_ci 71662306a36Sopenharmony_ci cpu@0 { 71762306a36Sopenharmony_ci device_type = "cpu"; 71862306a36Sopenharmony_ci compatible = "riscv"; 71962306a36Sopenharmony_ci reg = <0x0>; 72062306a36Sopenharmony_ci riscv,isa = "rv64imafdc"; 72162306a36Sopenharmony_ci mmu-type = "riscv,sv48"; 72262306a36Sopenharmony_ci cpu-idle-states = <&CPU_RET_0_0>, <&CPU_NONRET_0_0>, 72362306a36Sopenharmony_ci <&CLUSTER_RET_0>, <&CLUSTER_NONRET_0>; 72462306a36Sopenharmony_ci 72562306a36Sopenharmony_ci cpu_intc0: interrupt-controller { 72662306a36Sopenharmony_ci #interrupt-cells = <1>; 72762306a36Sopenharmony_ci compatible = "riscv,cpu-intc"; 72862306a36Sopenharmony_ci interrupt-controller; 72962306a36Sopenharmony_ci }; 73062306a36Sopenharmony_ci }; 73162306a36Sopenharmony_ci 73262306a36Sopenharmony_ci cpu@1 { 73362306a36Sopenharmony_ci device_type = "cpu"; 73462306a36Sopenharmony_ci compatible = "riscv"; 73562306a36Sopenharmony_ci reg = <0x1>; 73662306a36Sopenharmony_ci riscv,isa = "rv64imafdc"; 73762306a36Sopenharmony_ci mmu-type = "riscv,sv48"; 73862306a36Sopenharmony_ci cpu-idle-states = <&CPU_RET_0_0>, <&CPU_NONRET_0_0>, 73962306a36Sopenharmony_ci <&CLUSTER_RET_0>, <&CLUSTER_NONRET_0>; 74062306a36Sopenharmony_ci 74162306a36Sopenharmony_ci cpu_intc1: interrupt-controller { 74262306a36Sopenharmony_ci #interrupt-cells = <1>; 74362306a36Sopenharmony_ci compatible = "riscv,cpu-intc"; 74462306a36Sopenharmony_ci interrupt-controller; 74562306a36Sopenharmony_ci }; 74662306a36Sopenharmony_ci }; 74762306a36Sopenharmony_ci 74862306a36Sopenharmony_ci cpu@10 { 74962306a36Sopenharmony_ci device_type = "cpu"; 75062306a36Sopenharmony_ci compatible = "riscv"; 75162306a36Sopenharmony_ci reg = <0x10>; 75262306a36Sopenharmony_ci riscv,isa = "rv64imafdc"; 75362306a36Sopenharmony_ci mmu-type = "riscv,sv48"; 75462306a36Sopenharmony_ci cpu-idle-states = <&CPU_RET_1_0>, <&CPU_NONRET_1_0>, 75562306a36Sopenharmony_ci <&CLUSTER_RET_1>, <&CLUSTER_NONRET_1>; 75662306a36Sopenharmony_ci 75762306a36Sopenharmony_ci cpu_intc10: interrupt-controller { 75862306a36Sopenharmony_ci #interrupt-cells = <1>; 75962306a36Sopenharmony_ci compatible = "riscv,cpu-intc"; 76062306a36Sopenharmony_ci interrupt-controller; 76162306a36Sopenharmony_ci }; 76262306a36Sopenharmony_ci }; 76362306a36Sopenharmony_ci 76462306a36Sopenharmony_ci cpu@11 { 76562306a36Sopenharmony_ci device_type = "cpu"; 76662306a36Sopenharmony_ci compatible = "riscv"; 76762306a36Sopenharmony_ci reg = <0x11>; 76862306a36Sopenharmony_ci riscv,isa = "rv64imafdc"; 76962306a36Sopenharmony_ci mmu-type = "riscv,sv48"; 77062306a36Sopenharmony_ci cpu-idle-states = <&CPU_RET_1_0>, <&CPU_NONRET_1_0>, 77162306a36Sopenharmony_ci <&CLUSTER_RET_1>, <&CLUSTER_NONRET_1>; 77262306a36Sopenharmony_ci 77362306a36Sopenharmony_ci cpu_intc11: interrupt-controller { 77462306a36Sopenharmony_ci #interrupt-cells = <1>; 77562306a36Sopenharmony_ci compatible = "riscv,cpu-intc"; 77662306a36Sopenharmony_ci interrupt-controller; 77762306a36Sopenharmony_ci }; 77862306a36Sopenharmony_ci }; 77962306a36Sopenharmony_ci 78062306a36Sopenharmony_ci idle-states { 78162306a36Sopenharmony_ci CPU_RET_0_0: cpu-retentive-0-0 { 78262306a36Sopenharmony_ci compatible = "riscv,idle-state"; 78362306a36Sopenharmony_ci riscv,sbi-suspend-param = <0x10000000>; 78462306a36Sopenharmony_ci entry-latency-us = <20>; 78562306a36Sopenharmony_ci exit-latency-us = <40>; 78662306a36Sopenharmony_ci min-residency-us = <80>; 78762306a36Sopenharmony_ci }; 78862306a36Sopenharmony_ci 78962306a36Sopenharmony_ci CPU_NONRET_0_0: cpu-nonretentive-0-0 { 79062306a36Sopenharmony_ci compatible = "riscv,idle-state"; 79162306a36Sopenharmony_ci riscv,sbi-suspend-param = <0x90000000>; 79262306a36Sopenharmony_ci entry-latency-us = <250>; 79362306a36Sopenharmony_ci exit-latency-us = <500>; 79462306a36Sopenharmony_ci min-residency-us = <950>; 79562306a36Sopenharmony_ci }; 79662306a36Sopenharmony_ci 79762306a36Sopenharmony_ci CLUSTER_RET_0: cluster-retentive-0 { 79862306a36Sopenharmony_ci compatible = "riscv,idle-state"; 79962306a36Sopenharmony_ci riscv,sbi-suspend-param = <0x11000000>; 80062306a36Sopenharmony_ci local-timer-stop; 80162306a36Sopenharmony_ci entry-latency-us = <50>; 80262306a36Sopenharmony_ci exit-latency-us = <100>; 80362306a36Sopenharmony_ci min-residency-us = <250>; 80462306a36Sopenharmony_ci wakeup-latency-us = <130>; 80562306a36Sopenharmony_ci }; 80662306a36Sopenharmony_ci 80762306a36Sopenharmony_ci CLUSTER_NONRET_0: cluster-nonretentive-0 { 80862306a36Sopenharmony_ci compatible = "riscv,idle-state"; 80962306a36Sopenharmony_ci riscv,sbi-suspend-param = <0x91000000>; 81062306a36Sopenharmony_ci local-timer-stop; 81162306a36Sopenharmony_ci entry-latency-us = <600>; 81262306a36Sopenharmony_ci exit-latency-us = <1100>; 81362306a36Sopenharmony_ci min-residency-us = <2700>; 81462306a36Sopenharmony_ci wakeup-latency-us = <1500>; 81562306a36Sopenharmony_ci }; 81662306a36Sopenharmony_ci 81762306a36Sopenharmony_ci CPU_RET_1_0: cpu-retentive-1-0 { 81862306a36Sopenharmony_ci compatible = "riscv,idle-state"; 81962306a36Sopenharmony_ci riscv,sbi-suspend-param = <0x10000010>; 82062306a36Sopenharmony_ci entry-latency-us = <20>; 82162306a36Sopenharmony_ci exit-latency-us = <40>; 82262306a36Sopenharmony_ci min-residency-us = <80>; 82362306a36Sopenharmony_ci }; 82462306a36Sopenharmony_ci 82562306a36Sopenharmony_ci CPU_NONRET_1_0: cpu-nonretentive-1-0 { 82662306a36Sopenharmony_ci compatible = "riscv,idle-state"; 82762306a36Sopenharmony_ci riscv,sbi-suspend-param = <0x90000010>; 82862306a36Sopenharmony_ci entry-latency-us = <250>; 82962306a36Sopenharmony_ci exit-latency-us = <500>; 83062306a36Sopenharmony_ci min-residency-us = <950>; 83162306a36Sopenharmony_ci }; 83262306a36Sopenharmony_ci 83362306a36Sopenharmony_ci CLUSTER_RET_1: cluster-retentive-1 { 83462306a36Sopenharmony_ci compatible = "riscv,idle-state"; 83562306a36Sopenharmony_ci riscv,sbi-suspend-param = <0x11000010>; 83662306a36Sopenharmony_ci local-timer-stop; 83762306a36Sopenharmony_ci entry-latency-us = <50>; 83862306a36Sopenharmony_ci exit-latency-us = <100>; 83962306a36Sopenharmony_ci min-residency-us = <250>; 84062306a36Sopenharmony_ci wakeup-latency-us = <130>; 84162306a36Sopenharmony_ci }; 84262306a36Sopenharmony_ci 84362306a36Sopenharmony_ci CLUSTER_NONRET_1: cluster-nonretentive-1 { 84462306a36Sopenharmony_ci compatible = "riscv,idle-state"; 84562306a36Sopenharmony_ci riscv,sbi-suspend-param = <0x91000010>; 84662306a36Sopenharmony_ci local-timer-stop; 84762306a36Sopenharmony_ci entry-latency-us = <600>; 84862306a36Sopenharmony_ci exit-latency-us = <1100>; 84962306a36Sopenharmony_ci min-residency-us = <2700>; 85062306a36Sopenharmony_ci wakeup-latency-us = <1500>; 85162306a36Sopenharmony_ci }; 85262306a36Sopenharmony_ci }; 85362306a36Sopenharmony_ci }; 85462306a36Sopenharmony_ci 85562306a36Sopenharmony_ci... 856