• Soby Mathew's avatar
    Support PSCI SYSTEM SUSPEND on Juno · c1bb8a05
    Soby Mathew authored
    This patch adds the capability to power down at system power domain level
    on Juno via the PSCI SYSTEM SUSPEND API. The CSS power management helpers
    are modified to add support for power management operations at system
    power domain level. A new helper for populating `get_sys_suspend_power_state`
    handler in plat_psci_ops is defined. On entering the system suspend state,
    the SCP powers down the SYSTOP power domain on the SoC and puts the memory
    into retention mode. On wakeup from the power down, the system components
    on the CSS will be reinitialized by the platform layer and the PSCI client
    is responsible for restoring the context of these system components.
    
    According to PSCI Specification, interrupts targeted to cores in PSCI CPU
    SUSPEND should be able to resume it. On Juno, when the system power domain
    is suspended, the GIC is also powered down. The SCP resumes the final core
    to be suspend when an external wake-up event is received. But the other
    cores cannot be woken up by a targeted interrupt, because GIC doesn't
    forward these interrupts to the SCP. Due to this hardware limitation,
    we down-grade PSCI CPU SUSPEND requests targeted to the system power domain
    level to cluster power domain level in `juno_validate_power_state()`
    and the CSS default `plat_arm_psci_ops` is overridden in juno_pm.c.
    
    A system power domain resume helper `arm_system_pwr_domain_resume()` is
    defined for ARM standard platforms which resumes/re-initializes the
    system components on wakeup from system suspend. The security setup also
    needs to be done on resume from system suspend, which means
    `plat_arm_security_setup()` must now be included in the BL3-1 image in
    addition to previous BL images if system suspend need to be supported.
    
    Change-Id: Ie293f75f09bad24223af47ab6c6e1268f77bcc47
    c1bb8a05
css_pm.h 2.16 KB