From d91a3763d33f2506a22885f4fc0021f9ea0ba3d0 Mon Sep 17 00:00:00 2001 From: Akashdeep Kaur Date: Fri, 3 Jul 2026 14:04:34 +0530 Subject: [PATCH 1/3] feat(pm_low_power_modes): add DSS plus Deep Sleep mode for AM62LX Add DSS plus Deep Sleep low power mode, a new suspend mode where the Display Subsystem remains powered to show a static image while the rest of the system enters Deep Sleep. Signed-off-by: Akashdeep Kaur --- .../pm_am62lx_low_power_modes.rst | 207 +++++++++++++++--- .../Power_Management/pm_overview.rst | 1 + .../Power_Management/pm_wakeup_sources.rst | 30 +-- 3 files changed, 196 insertions(+), 42 deletions(-) diff --git a/source/linux/Foundational_Components/Power_Management/pm_am62lx_low_power_modes.rst b/source/linux/Foundational_Components/Power_Management/pm_am62lx_low_power_modes.rst index f155e07ec..99b6255ba 100644 --- a/source/linux/Foundational_Components/Power_Management/pm_am62lx_low_power_modes.rst +++ b/source/linux/Foundational_Components/Power_Management/pm_am62lx_low_power_modes.rst @@ -18,6 +18,7 @@ to highest power consumption): #. RTC Only #. RTC Only Plus DDR #. Deep Sleep +#. DSS plus Deep Sleep RTC Only ******** @@ -172,36 +173,188 @@ In order to enter DeepSleep, [ 88.649913] PM: suspend exit root@am62lxx-evm:~# +DSS plus Deep Sleep +******************* + +DSS plus Deep Sleep is a low-power mode where the Display Subsystem (DSS) is kept on to display +a static image while the rest of the system enters Deep Sleep. This mode is useful for +applications that need to maintain visual output during system suspend, such as displaying +status information, warnings, or other static content while minimizing overall power consumption. + +In DSS plus Deep Sleep mode, the system state is retained in RAM with DDR in self-refresh, +similar to standard Deep Sleep. The key difference is that the DSS remains active and +powered to continue driving the display with a static framebuffer. The DSS has a self-refresh +feature that allows it to fetch the framebuffer from its internal memory instead of accessing +DDR, which helps reduce power consumption while maintaining display output. + +How It Works +============ + +DSS plus Deep Sleep requires two display properties to be enabled together: + +**SELF_REFRESH** + +This property enables the DSS hardware to replay the last displayed frame from its internal +on-chip memory (a small FIFO buffer) instead of continuously fetching from DDR. This +significantly reduces memory bandwidth and power consumption during suspend. + +The AM62L-DSS has a 20 KB FIFO buffer. For the self-refresh feature to work, your static +image must fit within this buffer. The size is calculated as: + + **Frame Size = Width × Height × Bytes-per-pixel** + +For RGB format (3 bytes per pixel), this means: + + **Width × Height × 3 ≤ 20,480 bytes** + +For example, a 50×50 RGB image requires 50 × 50 × 3 = 7,500 bytes, which fits comfortably +within the limit. If your frame is too large, self-refresh will not activate. + +**ALWAYS_ON_DISPLAY** + +This property keeps the display pipeline powered on during system suspend. Without this, +the display would be powered off even if self-refresh is enabled. Together with self-refresh, +it ensures the static frame remains visible throughout the suspend period. + +Using both properties together enables DSS plus Deep Sleep mode: the display stays on showing +a static frame from internal memory while the rest of the system is suspended. + +Entering DSS plus Deep Sleep Mode +================================= + +Entering DSS plus Deep Sleep requires several steps to configure the display subsystem properly. +First, stop any display manager service that may be actively managing the display: + +.. code-block:: console + + root@am62lxx-evm:~# systemctl stop emptty.service + +Next, enable the DSS self-refresh feature. This configures the display controller to fetch +the framebuffer from its internal memory instead of accessing DDR. The property ID 35 +corresponds to the SELF_REFRESH plane property: + +.. code-block:: console + + root@am62lxx-evm:~# modetest -M tidss -w 35:SELF_REFRESH:1 # 35 is the SELF_REFRESH plane property ID + opened device `TI Keystone DSS` on driver `tidss` (version 1.0.0 at 0) + +Display a static image on the screen that will remain visible during suspend. This example +uses GStreamer to display a test pattern: + +.. code-block:: console + + root@am62lxx-evm:~# gst-launch-1.0 videotestsrc pattern=ball ! video/x-raw, width=50, height=50, framerate=60/1, format=RGB ! fpsdisplaysink text-overlay=false video-sink="kmssink can-scale=false sync=false" sync=false -v + Setting pipeline to PAUSED ... + Pipeline is PREROLLING ... + /GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0/GstKMSSink:kmssink0: display-width = 800 + /GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0/GstKMSSink:kmssink0: display-height = 480 + /GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0/GstKMSSink:kmssink0: sync = false + /GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0.GstPad:src: caps = video/x-raw, format=(string)RGB, width=(int)50, height=(int)50, framerate=(fraction)60/1, multiview-mode=(string)mono, pixel-aspect-ratio=(fraction)16/15, interlace-mode=(string)progressive + /GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = video/x-raw, format=(string)RGB, width=(int)50, height=(int)50, framerate=(fraction)60/1, multiview-mode=(string)mono, pixel-aspect-ratio=(fraction)16/15, interlace-mode=(string)progressive + /GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0.GstGhostPad:sink.GstProxyPad:proxypad0: caps = video/x-raw, format=(string)RGB, width=(int)50, height=(int)50, framerate=(fraction)60/1, multiview-mode=(string)mono, pixel-aspect-ratio=(fraction)16/15, interlace-mode=(string)progressive + /GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0/GstKMSSink:kmssink0.GstPad:sink: caps = video/x-raw, format=(string)RGB, width=(int)50, height=(int)50, framerate=(fraction)60/1, multiview-mode=(string)mono, pixel-aspect-ratio=(fraction)16/15, interlace-mode=(string)progressive + /GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0.GstGhostPad:sink: caps = video/x-raw, format=(string)RGB, width=(int)50, height=(int)50, framerate=(fraction)60/1, multiview-mode=(string)mono, pixel-aspect-ratio=(fraction)16/15, interlace-mode=(string)progressive + /GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps = video/x-raw, format=(string)RGB, width=(int)50, height=(int)50, framerate=(fraction)60/1, multiview-mode=(string)mono, pixel-aspect-ratio=(fraction)16/15, interlace-mode=(string)progressive + Pipeline is PREROLLED ... + Setting pipeline to PLAYING ... + Redistribute latency... + New clock: GstSystemClock + /GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0/GstKMSSink:kmssink0: sync = false + /GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 16, dropped: 0, current: 30.68, average: 30.68 + /GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 32, dropped: 0, current: 30.05, average: 30.36 + handling interrupt.:99. + Interrupt: Stopping pipeline ... + Execution ended after 0:00:01.497017765 + Setting pipeline to NULL ... + Freeing pipeline ... + +After the GStreamer pipeline terminates, the last displayed frame remains on the screen. +Enable the ALWAYS_ON_DISPLAY property to keep the display pipeline powered during suspend. +The property ID 42 corresponds to the ALWAYS_ON_DISPLAY CRTC property: + +.. code-block:: console + + root@am62lxx-evm:~# modetest -M tidss -w 42:ALWAYS_ON_DISPLAY:1 # 42 is the ALWAYS_ON_DISPLAY CRTC property ID + +Configure the system to use s2idle suspend mode, which allows the display to remain powered: + +.. code-block:: console + + root@am62lxx-evm:~# echo s2idle > /sys/power/mem_sleep + +Now the SoC can be suspended using the following command: + +.. code-block:: console + + root@am62lxx-evm:~# echo mem > /sys/power/state + [ 101.964352] PM: suspend entry (s2idle) + [ 101.968392] Filesystems sync: 0.000 seconds + [ 101.973713] Freezing user space processes + [ 101.980059] Freezing user space processes completed (elapsed 0.002 seconds) + [ 101.987068] OOM killer disabled. + [ 101.990296] Freezing remaining freezable tasks + [ 101.996139] Freezing remaining freezable tasks completed (elapsed 0.001 seconds) + [ 102.027260] k3_wkup_src_notify wkup-src-notify: wakeup source:0x10000, pin:0x6d, mode:0x8 + [ 102.060012] am65-cpsw-nuss 8000000.ethernet: set new flow-id-base 96 + [ 102.080175] am65-cpsw-nuss 8000000.ethernet eth0: PHY [8000f00.mdio:00] driver [TI DP83867] (irq=POLL) + [ 102.090380] am65-cpsw-nuss 8000000.ethernet eth0: configuring for phy/rgmii-rxid link mode + [ 102.112383] am65-cpsw-nuss 8000000.ethernet eth1: PHY [8000f00.mdio:01] driver [TI DP83867] (irq=POLL) + [ 102.122586] am65-cpsw-nuss 8000000.ethernet eth1: configuring for phy/rgmii-rxid link mode + [ 102.474090] OOM killer enabled. + [ 102.477363] Restarting tasks: Starting + [ 102.499994] Restarting tasks: Done + [ 102.503505] random: crng reseeded on system resumption + [ 102.509008] PM: suspend exit + root@am62lxx-evm:~# + +Resuming from DSS plus Deep Sleep +================================= + +After the system resumes from DSS plus Deep Sleep, the static frame continues to be displayed +from the FIFO. The display does **not** automatically transition back to dynamic content. +To return to normal display operation, you must manually disable the SELF_REFRESH and +ALWAYS_ON_DISPLAY properties: + +.. code-block:: console + + root@am62lxx-evm:~# modetest -M tidss -w 35:SELF_REFRESH:0 # Disable FIFO replay + root@am62lxx-evm:~# modetest -M tidss -w 42:ALWAYS_ON_DISPLAY:0 # Allow display pipeline to be powered off + +Once these properties are disabled, the display subsystem returns to fetching framebuffers +from DDR and can display dynamic content normally. Any display manager or application can +then take control of the display again. + Memory Usage ************ The following table summarizes the usage of memory in different modes of operation of the device. -+--------+-------------+----------------------+------------------+------------+-------------------+ -| Domain | Memory | Boot Operation | Normal Operation | Deep Sleep | RTC Only + DDR | -+========+=============+======================+==================+============+===================+ -| WKUP | TIFS SRAM | TIFS load (144 KB) | TIFS (144 KB) | TIFS | TIFS (144 KB) | -| | (196 KB) | + Sec ROM (20 KB) | | (144 KB) | | -| | | | | | SEC ROM (20 KB) | -| | | | | | | -| | | | | | TIFS_STUB (32 KB) | -+--------+-------------+----------------------+------------------+------------+-------------------+ -| WKUP | WKUP PSRAM | Pub ROM (64 KB) | | A53 Stub, | Pub ROM (64 KB) | -| | (512 KB) | or (exclusively) | | TF-A Stub | | -| | | PreBL Stack & | | (64 KB) | | -| | | runtime data (64 KB) | | | | -+--------+-------------+----------------------+------------------+------------+-------------------+ -| Main | MAIN MSRAM | PreBL (64 KB) | TIFS IPC (24 KB) | TIFS IPC | PreBL (64 KB) | -| | (96 KB) | DDR initialization | | (24 KB) | Non-destructive | -| | | | | | DDR initializtion | -| | | Pub ROM (8 KB) | | | | -| | | | | | TIFS IPC + | -| | | ROM IPC (8 KB) | | | ROM IPC (24 KB) | -| | | | | | | -| | | | | | Pub ROM (8 KB) | -+--------+-------------+----------------------+------------------+------------+-------------------+ -| Main | DDR | Linux | Linux | Linux | Linux | -| | | | | | | -| | | TF-A | TF-A | TF-A | TF-A | -+--------+-------------+----------------------+------------------+------------+-------------------+ ++--------+-------------+----------------------+------------------+-------------------------+-------------------+ +| Domain | Memory | Boot Operation | Normal Operation | Deep Sleep / | RTC Only + DDR | +| | | | | DSS plus Deep Sleep | | ++========+=============+======================+==================+=========================+===================+ +| WKUP | TIFS SRAM | TIFS load (144 KB) | TIFS (144 KB) | TIFS | TIFS (144 KB) | +| | (196 KB) | + Sec ROM (20 KB) | | (144 KB) | | +| | | | | | SEC ROM (20 KB) | +| | | | | | | +| | | | | | TIFS_STUB (32 KB) | ++--------+-------------+----------------------+------------------+-------------------------+-------------------+ +| WKUP | WKUP PSRAM | Pub ROM (64 KB) | | A53 Stub, | Pub ROM (64 KB) | +| | (512 KB) | or (exclusively) | | TF-A Stub | | +| | | PreBL Stack & | | (64 KB) | | +| | | runtime data (64 KB) | | | | ++--------+-------------+----------------------+------------------+-------------------------+-------------------+ +| Main | MAIN MSRAM | PreBL (64 KB) | TIFS IPC (24 KB) | TIFS IPC | PreBL (64 KB) | +| | (96 KB) | DDR initialization | | (24 KB) | Non-destructive | +| | | | | | DDR initializtion | +| | | Pub ROM (8 KB) | | | | +| | | | | | TIFS IPC + | +| | | ROM IPC (8 KB) | | | ROM IPC (24 KB) | +| | | | | | | +| | | | | | Pub ROM (8 KB) | ++--------+-------------+----------------------+------------------+-------------------------+-------------------+ +| Main | DDR | Linux | Linux | Linux | Linux | +| | | | | | | +| | | TF-A | TF-A | TF-A | TF-A | ++--------+-------------+----------------------+------------------+-------------------------+-------------------+ diff --git a/source/linux/Foundational_Components/Power_Management/pm_overview.rst b/source/linux/Foundational_Components/Power_Management/pm_overview.rst index a24ec0102..0d447c5bd 100644 --- a/source/linux/Foundational_Components/Power_Management/pm_overview.rst +++ b/source/linux/Foundational_Components/Power_Management/pm_overview.rst @@ -72,3 +72,4 @@ supported by the Linux kernel. #. RTC Only #. RTC Only Plus DDR #. Deep Sleep + #. DSS plus Deep Sleep diff --git a/source/linux/Foundational_Components/Power_Management/pm_wakeup_sources.rst b/source/linux/Foundational_Components/Power_Management/pm_wakeup_sources.rst index ee938eaee..210b7bf0a 100644 --- a/source/linux/Foundational_Components/Power_Management/pm_wakeup_sources.rst +++ b/source/linux/Foundational_Components/Power_Management/pm_wakeup_sources.rst @@ -53,21 +53,21 @@ valid for given low power modes: .. ifconfig:: CONFIG_part_variant in ('AM62LX') - +------------------------------------------------+------------+----------------+----------+ - | Wakeup Source | Deep Sleep | RTC Only + DDR | RTC Only | - +================================================+============+================+==========+ - | Real-Time Clock (RTC) | Yes | Yes | Yes | - +------------------------------------------------+------------+----------------+----------+ - | WKUP GPIO | Yes | No | No | - +------------------------------------------------+------------+----------------+----------+ - | Main I/O Daisy Chain (Main GPIO and Main UART) | Yes | No | No | - +------------------------------------------------+------------+----------------+----------+ - | WKUP UART | Yes | No | No | - +------------------------------------------------+------------+----------------+----------+ - | USB Wakeup | Yes | No | No | - +------------------------------------------------+------------+----------------+----------+ - | RTC Ext Pin | Yes | Yes | Yes | - +------------------------------------------------+------------+----------------+----------+ + +------------------------------------------------+---------------------+------------+----------------+----------+ + | Wakeup Source | DSS plus Deep Sleep | Deep Sleep | RTC Only + DDR | RTC Only | + +================================================+=====================+============+================+==========+ + | Real-Time Clock (RTC) | Yes | Yes | Yes | Yes | + +------------------------------------------------+---------------------+------------+----------------+----------+ + | WKUP GPIO | Yes | Yes | No | No | + +------------------------------------------------+---------------------+------------+----------------+----------+ + | Main I/O Daisy Chain (Main GPIO and Main UART) | Yes | Yes | No | No | + +------------------------------------------------+---------------------+------------+----------------+----------+ + | WKUP UART | Yes | Yes | No | No | + +------------------------------------------------+---------------------+------------+----------------+----------+ + | USB Wakeup | Yes | Yes | No | No | + +------------------------------------------------+---------------------+------------+----------------+----------+ + | RTC Ext Pin | Yes | Yes | Yes | Yes | + +------------------------------------------------+---------------------+------------+----------------+----------+ ********************* Real-Time Clock (RTC) From 9d9ef33136c322f9f0132b22a09dcb21078987a3 Mon Sep 17 00:00:00 2001 From: Akashdeep Kaur Date: Fri, 3 Jul 2026 14:05:19 +0530 Subject: [PATCH 2/3] feat(linux): add DSS plus Deep Sleep power measurements Add power consumption data for DSS plus Deep Sleep mode. This mode consumes more power than standard Deep Sleep (14.07 mW) due to the active display subsystem with FIFO replay. Signed-off-by: Akashdeep Kaur --- .../AM62LX/linux/Linux_Performance_Guide.rst | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/source/devices/AM62LX/linux/Linux_Performance_Guide.rst b/source/devices/AM62LX/linux/Linux_Performance_Guide.rst index 647c1df85..fdd305d01 100644 --- a/source/devices/AM62LX/linux/Linux_Performance_Guide.rst +++ b/source/devices/AM62LX/linux/Linux_Performance_Guide.rst @@ -854,7 +854,19 @@ Power Performance ^^^^^^^^^^^^^^^^^ These are power measurements taken while the device is in various low power modes like -Deep Sleep, RTC Only + DDR, and RTC Only. +DSS plus Deep Sleep, Deep Sleep, RTC Only + DDR, and RTC Only. + +.. csv-table:: DSS plus Deep Sleep Power Performance + :header: "Rail name","Rail voltage(V)","Power (mW)" + + "vdd_core", "0.75", "44.66" + "soc_dvdd_1v8", "1.80", "1.77" + "soc_dvdd_3v3", "3.30", "3.64" + "vdda_1v8", "1.80", "18.82" + "vdd_lpddr4_pmic2", "1.10", "1.06" + "vdd_rtc", "0.75", "0.03" + "vdd_rtc_1v8", "1.80", "0.01" + "Total"," ","69.99" .. csv-table:: Deep Sleep Power Performance :header: "Rail name","Rail voltage(V)","Power (mW)" From f7d3760dfe078b193c59a6d3e542221eb12c480a Mon Sep 17 00:00:00 2001 From: Akashdeep Kaur Date: Fri, 3 Jul 2026 14:05:39 +0530 Subject: [PATCH 3/3] feat(linux): add DSS plus Deep Sleep mode to release notes Add DSS plus Deep Sleep mode to Key Release References section, highlighting the new display subsystem self-refresh capability that allows showing static images during system suspend. Signed-off-by: Akashdeep Kaur --- source/devices/AM62LX/linux/Release_Specific_Release_Notes.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/source/devices/AM62LX/linux/Release_Specific_Release_Notes.rst b/source/devices/AM62LX/linux/Release_Specific_Release_Notes.rst index d80efec34..f3ba0b1f4 100644 --- a/source/devices/AM62LX/linux/Release_Specific_Release_Notes.rst +++ b/source/devices/AM62LX/linux/Release_Specific_Release_Notes.rst @@ -83,6 +83,7 @@ What's new - U-Boot: :ref:`Key writer lite Programming ` - Kernel: :ref:`DTHEv2 Crypto Accelerator ` - RT Kernel : Real-Time Linux Interrupt Latency numbers here - :ref:`RT Interrupt Latencies ` + - Power Management: DSS plus Deep Sleep mode - Display subsystem self-refresh with static image during suspend - :ref:`Low Power Modes ` - Support for Wifi with M2 CC33xx cards - :ref:`How to Enable M.2-CC33xx in Linux ` - Out-of-Box experience based on LVGL (Light and Versatile Graphics Library) - :ref:`TI LVGL Demo - User Guide ` - Security: Post Quantum Cryptography using Module Lattice (ML) Key Encapsulation Mechanism (KEM) or ML-KEM, ML Digital Signature Algorithm (DSA) or ML-DSA, and Stateless Hash-Based (SLH) DSA or SLH-DSA - :ref:`Post Quantum Cryptography `