-
Notifications
You must be signed in to change notification settings - Fork 85
fix(linux): Update AM62L standby mode documentation #747
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -37,16 +37,24 @@ | |||||
| - Description | ||||||
| - Latency | ||||||
|
|
||||||
| * - **cpu_sleep_0** (CPU Level) | ||||||
| * - **cpu_sleep_stby** (CPU Level) | ||||||
| - 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
|
||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
| | See :ref:`deep-standby-mode` for more details. | ||||||
|
Comment on lines
+54
to
+57
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please avoid using |
||||||
|
|
||||||
| Power Domain Hierarchy | ||||||
| ====================== | ||||||
|
|
@@ -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
|
||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
|
|
||||||
| .. 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
|
||||||
| ================= | ||||||
|
|
||||||
| 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
|
||||||
| 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
|
||||||
|
|
||||||
| **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
|
||||||
| 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
|
||||||
| ------------------------------- | ||||||
|
|
||||||
| .. 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. | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. No need to mention this in power domain hierarchy list?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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 | ||||||
|
|
@@ -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 | ||||||
|
|
@@ -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 | ||||||
|
|
@@ -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
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||||||
|
|
||||||
| .. code-block:: console | ||||||
|
|
||||||
|
|
||||||
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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