Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -37,16 +37,24 @@
- Description
- Latency

* - **cpu_sleep_0** (CPU Level)
* - **cpu_sleep_stby** (CPU Level)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am missing more idle states that you recently added in the DT (to select deep sleep, DSS + DeepSleep, RTC + IO + DDR) etc. Can you please add those as well?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i understand that these idle states are not meant for standby but do we have their documentation elsewhere, then please add it there.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This section I am thinking of keeping for the standby related idle-states only
The s2idle docs will have all the idle-states mentioned

- Individual CPU WFI (Wait For Interrupt) state
- Very Low (microseconds)

* - **cluster_sleep_0** (Low Latency Cluster standby)
- Cluster low-latency standby mode when all cores are idle, with reduced clock frequencies and non-critical power domains disabled
* - **cluster_sleep_stby** (Cluster standby)
- The default Cluster standby mode when all cores are idle, with reduced clock frequencies and non-critical power domains disabled
- Low (milliseconds)

The configuration can be loaded from the device tree overlay :file:`k3-am62l3-evm-idle-states.dtso`, which defines
these states and their power management characteristics.
* - **cluster_sleep_deep_stby*** (Cluster Deep standby)
- Additional Deep standby mode similar to cluster standby, with additional clock gating and power domain shutdown for more aggressive power savings.
- Low (milliseconds)

.. note::

| The ``cluster_sleep_deep_stby`` state is an optional configuration. Enable it using the device tree overlay
:file:`k3-am62l3-evm-idle-states.dtso`.
| It should be used **only** when CPSW and Display drivers are not needed.

Check warning on line 56 in source/linux/Foundational_Components/Power_Management/pm_am62l_standby.rst

View workflow job for this annotation

GitHub Actions / vale

[vale] reported by reviewdog 🐶 [RedHat.Definitions] Define acronyms and abbreviations (such as 'CPSW') on first occurrence if they're likely to be unfamiliar. Raw Output: {"message": "[RedHat.Definitions] Define acronyms and abbreviations (such as 'CPSW') on first occurrence if they're likely to be unfamiliar.", "location": {"path": "source/linux/Foundational_Components/Power_Management/pm_am62l_standby.rst", "range": {"start": {"line": 56, "column": 38}}}, "severity": "INFO"}

Check warning on line 56 in source/linux/Foundational_Components/Power_Management/pm_am62l_standby.rst

View workflow job for this annotation

GitHub Actions / vale

[vale] reported by reviewdog 🐶 [RedHat.PassiveVoice] 'be used' is passive voice. In general, use active voice. Consult the style guide for acceptable use of passive voice. Raw Output: {"message": "[RedHat.PassiveVoice] 'be used' is passive voice. In general, use active voice. Consult the style guide for acceptable use of passive voice.", "location": {"path": "source/linux/Foundational_Components/Power_Management/pm_am62l_standby.rst", "range": {"start": {"line": 56, "column": 16}}}, "severity": "INFO"}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
| It should be used **only** when CPSW and Display drivers are not needed.
| **Only do this when CPSW and Display drivers are not needed.**

| See :ref:`deep-standby-mode` for more details.
Comment on lines +54 to +57

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please avoid using | unless explicitly necessary for formatting. It has a habit of breaking other directives.


Power Domain Hierarchy
======================
Expand All @@ -57,36 +65,36 @@
* **CPU_PD** (CPU Power Domain): Per-CPU power domain
* **CLUSTER_PD** (Cluster Power Domain): Cluster-level power domain that groups multiple CPUs

These power domains inform CPUIdle about which non-critical domains can be disabled when all cores within them are idle.
These power domains inform CPUIdle about which non-critical domains to disable when all cores within them are idle.

Check warning on line 68 in source/linux/Foundational_Components/Power_Management/pm_am62l_standby.rst

View workflow job for this annotation

GitHub Actions / vale

[vale] reported by reviewdog 🐶 [RedHat.TermsSuggestions] Depending on the context, consider using 'that' or ', which' rather than 'which'. Raw Output: {"message": "[RedHat.TermsSuggestions] Depending on the context, consider using 'that' or ', which' rather than 'which'.", "location": {"path": "source/linux/Foundational_Components/Power_Management/pm_am62l_standby.rst", "range": {"start": {"line": 68, "column": 42}}}, "severity": "INFO"}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
These power domains inform CPUIdle about which non-critical domains to disable when all cores within them are idle.
These power domains inform CPUIdle about what non-critical domains to disable when all cores within them are idle.


.. note::
.. _deep-standby-mode:

The device tree overlay also includes additional idle states for Suspend-to-Idle (S2Idle) functionality
that can be referred from :ref:`pm_s2idle_psci`.
The Standby Mode uses the **cpu_sleep_0** and **cluster_sleep_0** idle states, coordinated through the
**CPU_PD** and **CLUSTER_PD** power domain hierarchy.
Deep Standby Mode

Check warning on line 72 in source/linux/Foundational_Components/Power_Management/pm_am62l_standby.rst

View workflow job for this annotation

GitHub Actions / vale

[vale] reported by reviewdog 🐶 [RedHat.Headings] Use sentence-style capitalization in 'Deep Standby Mode'. Raw Output: {"message": "[RedHat.Headings] Use sentence-style capitalization in 'Deep Standby Mode'.", "location": {"path": "source/linux/Foundational_Components/Power_Management/pm_am62l_standby.rst", "range": {"start": {"line": 72, "column": 1}}}, "severity": "INFO"}
=================

Critical Prerequisites
======================
----------------------

The AM62L Standby Mode implementation has important prerequisites that must be met for correct operation.
Meet the following prerequisites before using AM62L Deep Standby Mode.

**CPSW (Gigabit Ethernet) Driver Suspension**

The entry into Cluster level standby is conditional on CPSW driver being suspended, since hardware CRC errors
occur when CPSW continues operation during cluster standby. The CPSW is an Always-On IP in the AM62L SoC.
Deep standby entry requires suspending the CPSW driver. Deep standby reduces the CBASS clock

Check warning on line 82 in source/linux/Foundational_Components/Power_Management/pm_am62l_standby.rst

View workflow job for this annotation

GitHub Actions / vale

[vale] reported by reviewdog 🐶 [RedHat.Definitions] Define acronyms and abbreviations (such as 'CBASS') on first occurrence if they're likely to be unfamiliar. Raw Output: {"message": "[RedHat.Definitions] Define acronyms and abbreviations (such as 'CBASS') on first occurrence if they're likely to be unfamiliar.", "location": {"path": "source/linux/Foundational_Components/Power_Management/pm_am62l_standby.rst", "range": {"start": {"line": 82, "column": 82}}}, "severity": "INFO"}

Check warning on line 82 in source/linux/Foundational_Components/Power_Management/pm_am62l_standby.rst

View workflow job for this annotation

GitHub Actions / vale

[vale] reported by reviewdog 🐶 [RedHat.Definitions] Define acronyms and abbreviations (such as 'CPSW') on first occurrence if they're likely to be unfamiliar. Raw Output: {"message": "[RedHat.Definitions] Define acronyms and abbreviations (such as 'CPSW') on first occurrence if they're likely to be unfamiliar.", "location": {"path": "source/linux/Foundational_Components/Power_Management/pm_am62l_standby.rst", "range": {"start": {"line": 82, "column": 44}}}, "severity": "INFO"}
frequency for power savings, which can cause the CPSW driver to malfunction with hardware CRC errors if it is actively driving traffic.

Check warning on line 83 in source/linux/Foundational_Components/Power_Management/pm_am62l_standby.rst

View workflow job for this annotation

GitHub Actions / vale

[vale] reported by reviewdog 🐶 [RedHat.Definitions] Define acronyms and abbreviations (such as 'CRC') on first occurrence if they're likely to be unfamiliar. Raw Output: {"message": "[RedHat.Definitions] Define acronyms and abbreviations (such as 'CRC') on first occurrence if they're likely to be unfamiliar.", "location": {"path": "source/linux/Foundational_Components/Power_Management/pm_am62l_standby.rst", "range": {"start": {"line": 83, "column": 91}}}, "severity": "INFO"}

Check warning on line 83 in source/linux/Foundational_Components/Power_Management/pm_am62l_standby.rst

View workflow job for this annotation

GitHub Actions / vale

[vale] reported by reviewdog 🐶 [RedHat.Definitions] Define acronyms and abbreviations (such as 'CPSW') on first occurrence if they're likely to be unfamiliar. Raw Output: {"message": "[RedHat.Definitions] Define acronyms and abbreviations (such as 'CPSW') on first occurrence if they're likely to be unfamiliar.", "location": {"path": "source/linux/Foundational_Components/Power_Management/pm_am62l_standby.rst", "range": {"start": {"line": 83, "column": 50}}}, "severity": "INFO"}

**Display Driver Suspension**

Similarly, the display driver must be in a suspended state for cluster standby due to frame buffer overflow issues.
Ensure display is not actively driving output when testing or relying on Standby Mode for power savings.
Similarly, the display driver must not drive output during Deep standby. The DDR enters Auto self-refresh

Check warning on line 87 in source/linux/Foundational_Components/Power_Management/pm_am62l_standby.rst

View workflow job for this annotation

GitHub Actions / vale

[vale] reported by reviewdog 🐶 [RedHat.Definitions] Define acronyms and abbreviations (such as 'DDR') on first occurrence if they're likely to be unfamiliar. Raw Output: {"message": "[RedHat.Definitions] Define acronyms and abbreviations (such as 'DDR') on first occurrence if they're likely to be unfamiliar.", "location": {"path": "source/linux/Foundational_Components/Power_Management/pm_am62l_standby.rst", "range": {"start": {"line": 87, "column": 78}}}, "severity": "INFO"}
mode during this state, which causes frame buffer overflow errors.

How to Enable Deep Standby Mode

Check warning on line 90 in source/linux/Foundational_Components/Power_Management/pm_am62l_standby.rst

View workflow job for this annotation

GitHub Actions / vale

[vale] reported by reviewdog 🐶 [RedHat.Headings] Use sentence-style capitalization in 'How to Enable Deep Standby Mode'. Raw Output: {"message": "[RedHat.Headings] Use sentence-style capitalization in 'How to Enable Deep Standby Mode'.", "location": {"path": "source/linux/Foundational_Components/Power_Management/pm_am62l_standby.rst", "range": {"start": {"line": 90, "column": 1}}}, "severity": "INFO"}
-------------------------------

.. warning::
To enable Deep Standby Mode, apply the device tree overlay :file:`k3-am62l3-evm-idle-states.dtso` to your system.
See :ref:`howto_dt_overlays` for the steps to enable the overlay.

Standby Mode only functions correctly when the DISPLAY and CPSW drivers are suspended. The device tree
overlay :file:`k3-am62l3-evm-idle-states.dtso` disables the CPSW driver to ensure this
condition is met. Do not override this configuration without understanding the implications for cluster
idle transitions and hardware stability.
This overlay adds the ``cluster_sleep_deep_stby`` idle state to the device tree configuration.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No need to mention this in power domain hierarchy list?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This gets added in the CLUSTER_PD domain itself

The overlay also disables the CPSW and Display drivers to ensure that the system can safely enter deep standby.

***********************************************
Power Sequencing and Cluster Standby Entry/Exit
Expand All @@ -97,7 +105,7 @@
1. **Detection Phase**:
- CPUIdle monitors per-CPU idle state transitions
- Domain idle state manager tracks core idle status
- When all cores in a cluster are idle, cluster standby opportunity is identified
- When all cores in a cluster are idle, the system identifies a cluster standby opportunity

2. **Coordination Phase**:
- Linux CPUIdle framework signals cluster idle state via PSCI ``CPU_SUSPEND`` call
Expand Down Expand Up @@ -126,8 +134,8 @@
Monitoring Standby Activity
***************************

Once Standby Mode is enabled, you can monitor idle state activity through the PM generic power domain (genpd)
sysfs interface. The power domain names are derived from the PSCI power domain hierarchy defined in the device
Once you enable Standby Mode, you can monitor idle state activity through the PM generic power domain (genpd)
sysfs interface. The power domain names come from the PSCI power domain hierarchy in the device
tree overlay.

.. rubric:: CPU Idle Activity
Expand All @@ -145,7 +153,7 @@
.. rubric:: Cluster Standby Activity (Recommended)

To monitor cluster-level standby mode usage, which is the most useful metric for verifying that the system
is successfully entering the low-latency standby mode when all cores are idle:
is successfully entering the standby mode when all cores are idle:
Comment on lines 155 to +156

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The cluster-level standby mode usage metric is useful metric for verifying that the system
is successfully entering standby mode. To check this value, issue the following:


.. code-block:: console

Expand Down
Loading