lkml.org 
[lkml]   [2023]   [Aug]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
SubjectRe: [PATCH V6 0/4] firmware: ti_sci: Introduce system suspend support
From
On 8/3/23 1:42 AM, Dhruva Gole wrote:
> Abstract
> ********
>
> This series introduces necessary ti_sci driver functionality to support
> DeepSleep mode (suspend to mem) on TI K3 AM62x. DeepSleep mode is
> described in section "6.2.4.4 DeepSleep" of the AM62x Technical Reference
> Manual [0].
>
> Summary
> *******
>
> This V6 series is a fixup and rebase of the patch series by
> Dave Gerlach [1]. It applies on top of next-20230731.
>
> The kernel triggers entry to DeepSleep mode through the mem suspend
> transition with the following:
>
> * At the bootloader stage, one is expected to package the TIFS stub
> which then gets pulled into the Tightly coupled memory of the Device Mgr
> R5 when it starts up. If using U-Boot, then it requires tispl.bin to
> contain the TIFS stub. Refer to ti-u-boot patch [3] for further
> details. The supported firmware version is from TI Processor SDK
> >= 09.00 ie. tag 09.00.00.006 from ti-linux-firmware [4].
>
> * Use a TF-A binary that supports PSCI_SYSTEM_SUSPEND call. This causes
> system to use PSCI system suspend as last step of mem sleep.

What happens if we do not have this TIFS stub or not using a TF-A that
supports PSCI_SYSTEM_SUSPEND (or mistakenly thinks it does due to firmware
bugs (this is a known issue for AM64, I'm only phrasing it like a hypothetical :)
)), can we safely return if suspend fails here?

Andrew

>
> * The firmware requires that the OS sends a TISCI_MSG_PREPARE_SLEEP
> message in order to provide details about suspend, so we must add the
> ability to send this message. We also add TISCI_MSG_LPM_WAKE_REASON
> and TISCI_MSG_SET_IO_ISOLATION messages as part of a new PM ops. These
> messages are part of the TISCI PM Low Power Mode API [2]. (Patch 2)
>
> * A memory address must be provided to the firmware using the above
> message, which is allocated and managed by dma_alloc_attrs()
> and friends. This memory address can be used by the firmware to
> save necessary context at that physical location in the DDR RAM. (Patch 3)
>
> * While entering DeepSleep, it's also good to take precautions inorder to
> prevent any external current from directly entering the internal IPs and
> potentially damaging them. Hence, we send a ti_sci_cmd_set_io_isolation
> which essentially tells the DM R5 Firmware to isolate all the I/O's or pads
> from the IPs that they were connected to in active state. This is also
> something that is required when for example we want an I/O daisychain wakeup
> to wake the system from DeepSleep. More on this in the AM62x Processors TRM [0]
> under section "6.2.4.11 I/O Power Management and Daisy Chaining" (Patch 1)
>
> * Finally, the ti_sci driver must actually send TISCI_MSG_PREPARE_SLEEP
> message to firmware with the above information included, which it
> does during the driver suspend handler when PM_MEM_SUSPEND is the
> determined state being entered. (Patch 4)
>
> It currently enables only DeepSleep mode, but even if any additional
> modes are needed to be supported in future, they would not require any
> changes to the TISCI LPM APIs [2]. The enabling of additional modes
> would be done via GenPD changes that is currently in the works.
>
> Testing:
> *******
>
> In can be tested with the following branch:
> https://github.com/DhruvaG2000/v-linux/commits/lpm-upstream-6.5
>
> Tested on SK-AM62B [6] here:
> https://gist.github.com/DhruvaG2000/8410fac048c677c40cd94f5169b5b0b4
>
> Limitations:
> ************
>
> Currently, DeepSleep is only supported on SK-AM62B with DDR4.
> Boards with LPDDR part like Beagle Play and AM62x LP have a known FW issue.
>
> Base commit:
> ************
>
> commit ec8939156379 (tag: next-20230731) ("Add linux-next specific files for 20230731")
>
> origin:
> linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
>
> Changelog:
> **********
>
> v6:
> - Loading of FS Stub from linux no longer needed, hence drop that patch,
> - Drop 1/6 and 5/6 from the previous series [4].
> - Add system suspend resume callbacks which were removed in
> commit 9225bcdedf16297a346082e7d23b0e8434aa98ed ("firmware: ti_sci: Use
> system_state to determine polling")
> - Use IO isolation while putting the system in suspend to RAM
>
> v5:
> - link [5]
> - Add support (patch 3) for detecting the low power modes (LPM) of the
> FW/SoC with a recently introduced core TISCI_MSG_QUERY_FW_CAPS message.
> - Use TISCI_MSG_QUERY_FW_CAPS instead of misusing the TISCI_MSG_PREPARE_SLEEP
> to detect the FW/SoC low power caps (patch 4).
> - Take into account the supported LPMs in ti_sci_prepare_system_suspend()
> and handle the case when CONFIG_SUSPEND is not enabled (patch 6) that
> was reported by Roger Quadros and LKP.
> - Pick up Rob Herring's "Reviewed-by" tag for the binding patch.
>
> v4:
> - Fix checkpacth warnings in patches 2 and 3.
> - Drop the links with anchors in patch 2.
>
> v3:
> - Fix the compile warnings on 32-bit platforms reported by the kernel
> test robot in patches (3,5).
> - Pick up Roger's "Tested-by" tags.
>
> v2:
> - Addressed comments received for v1 series [1].
> - Updated v1 patch 5 to use pm notifier to avoid firmware loading
> issues.
> - Dropped the reserved region requirement and allocate DMA memory
> instead. The reserved region binding patch is also removed.
> - Introduce two more TISCI LPM messages that are supported in SysFW.
> - Fixes in error handling.
>
> References:
> ***********
>
> [0] https://www.ti.com/lit/pdf/spruiv7
> [1] https://lore.kernel.org/lkml/20220421203659.27853-1-d-gerlach@ti.com
> [2] https://software-dl.ti.com/tisci/esd/latest/2_tisci_msgs/pm/lpm.html
> [3] https://git.ti.com/cgit/ti-u-boot/ti-u-boot/commit/?h=ti-u-boot-2023.04&id=91886b68025c7ad121e62d1fc1fa4601eeb736cd
> [4] https://git.ti.com/cgit/processor-firmware/ti-linux-firmware/commit/?h=ti-linux-firmware-next&id=905eb58564581d951d148f45828e8c8a142a5938
> [5] https://lore.kernel.org/all/20221128140522.49474-1-g-vlaev@ti.com/
> [6] https://www.ti.com/tool/SK-AM62B
>
>
> Cc: Vibhore <vibhore@ti.com>
> Cc: Kevin Hilman <khilman@baylibre.com>
> Cc: Vignesh R <vigneshr@ti.com>
> Cc: Tony Lindgren <tony@atomide.com>
>
> Dave Gerlach (2):
> firmware: ti_sci: Introduce Power Management Ops
> firmware: ti_sci: Allocate memory for Low Power Modes
>
> Dhruva Gole (1):
> firmware: ti_sci: Introduce system suspend resume support
>
> Georgi Vlaev (1):
> firmware: ti_sci: Add support for querying the firmware caps
>
> drivers/firmware/ti_sci.c | 336 +++++++++++++++++++++++++
> drivers/firmware/ti_sci.h | 90 ++++++-
> include/linux/soc/ti/ti_sci_protocol.h | 44 ++++
> 3 files changed, 469 insertions(+), 1 deletion(-)
>

\
 
 \ /
  Last update: 2023-08-03 17:19    [W:0.063 / U:1.556 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site