Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • FLUSH_SIZE. Indicates twice the size of the largest cache in bytes.

  • FLUSH_STRIDE. Indicates the smallest line size of the caches in bytes.

...

Low Power Idle (LPI)

ACPI System Low Power States

This work as is since it's directly PSCI linked. However, this is not
connected remotely to existing ACPI methods (7.4.2 _Sx (System
States)). It could be problematic without that as wakeup events need
to be linked to appropriate states as per specification.

Wake Events/Sources

When controlling power to devices that must wake the system
during a system sleeping state, ACPI defines system wake sources
under 7.4.3 _SWS (System Wake Source) and other related sections v6.0 introduced Low Power Idle mode in S0. S0 Idle could achieve savings similar to or better than those typically achieved in S3. OSPM can keep the system in S0 idle for its low-latency response rather than transitioning to a system sleep state.

Linux ACPI Suspend Flow

Image Added

acpi_enter_sleep_state uses hardware sleep control and status register to put the system to sleep and wake up.

PSCI-based suspend for Arm platforms

Arm platforms implement PSCI standards (mandated by BSA spec) and rather than introducing the sleep control and status register could make use of the PSCI standard for putting CPU and platform to suspend state.

...

Linux commands to test ACPI suspend states

Disable console suspend to get full suspend traces

Code Block
echo N >  /sys/module/printk/parameters/console_suspend

S1

Code Block
echo standby > /sys/power/state

S3

Code Block
echo deep > /sys/power/mem_sleep
echo mem > /sys/power/state

S4

Code Block
echo disk > /sys/power/state

S2Idle

Code Block
echo freeze > /sys/power/state

Linux testing status for ACPI suspend using PSCI

Suspend State

Wake Up event

Status

Notes

S2Idle

Lid

OK

S2Idle

RTC Alarm

OK

Linux kernel uses few ACPI GPE functions to determine if the device can wake up. They return wrong values for Arm64 implementation and had to be disabled during the testing.

S1

Lid

OK

S1

RTC Alarm

OK

S3

TF-A hack to wake up immediately after suspend

OK

This works only with single processor suspend, for SMP the wake up sequence crashes. The same behaviour is observed for DT as well.