mbox series

[0/6] firmware: ti_sci: Introduce system suspend support

Message ID 20220421203659.27853-1-d-gerlach@ti.com (mailing list archive)
Headers show
Series firmware: ti_sci: Introduce system suspend support | expand

Message

Dave Gerlach April 21, 2022, 8:36 p.m. UTC
Hi,

This series introduces necessary ti_sci driver functionality in
preparation of supporting DeepSleep mode for suspend to mem on TI K3
AM62 [1]. This series applies on top of [2], which is also required for
proper system suspend operation.

Deep Sleep mode is described in section "5.2.4.4 DeepSleep" of the AM62
Technical Reference Manual: https://www.ti.com/lit/pdf/spruiv7

The kernel triggers entry to Deep Sleep mode through the mem suspend
transition with the following:

* Use a TF-A binary that supports PSCI_SYSTEM_SUSPEND call, which is
  enabled by the pending patches here [3]. This causes system to use
  PSCI system suspend as last step of mem sleep.

* 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. (Patch 3)

* A memory carveout address must be provided to the firmware using
  the above message, which is passed through device tree to the
  driver. (Patches 1 and 4)

* System must load firmware to a specific location before Deep Sleep is
  entered, and this is accomplished using an lpm memory region in device
  tree to indicate where this firmware should be loaded, and also a
  "ti,lpm-firmware-name" property to indicate the name of the firmware
  to load. The ti_sci driver checks in its suspend handler to see if
  the firmware has been loaded and if not, loads it. (Patches 2 and 5)

* 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 6)

This is tested on am625-sk using a ramdisk with all devices disabled
apart from cpu0, main_uart0, dmsc, and secure_proxy_main.

Regards,
Dave

[1] https://lore.kernel.org/lkml/20220225120239.1303821-1-vigneshr@ti.com/
[2] https://lore.kernel.org/lkml/20220412192138.31189-1-d-gerlach@ti.com/
[3] https://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/14714/3

Dave Gerlach (6):
  dt-bindings: ti,sci: Add ti,ctx-memory-region property
  dt-bindings: ti,sci: Add lpm region and ti,lpm-firmware-name
  firmware: ti_sci: Introduce Power Management Ops
  firmware: ti_sci: Introduce ti,ctx-memory-region for reserved LPM
    memory
  firmware: ti_sci: Use dt provided fw name and address to load at
    suspend time
  firmware: ti_sci: Introduce prepare system suspend call

 .../bindings/arm/keystone/ti,sci.yaml         |  30 ++-
 drivers/firmware/ti_sci.c                     | 207 +++++++++++++++++-
 drivers/firmware/ti_sci.h                     |  32 ++-
 include/linux/soc/ti/ti_sci_protocol.h        |   6 +
 4 files changed, 269 insertions(+), 6 deletions(-)