void spm_system_suspend_finish(void) { spm_lock_get(); spm_wake_reason = go_to_sleep_after_wfi(); INFO("spm_wake_reason=%d\n", spm_wake_reason); clear_all_ready(); spm_lock_release(); }
void spm_mcdi_wakeup_all_cores(void) { if (is_mcdi_ready() == 0) return; spm_mcdi_cpu_wake_up_event(1, 1); while (mmio_read_32(SPM_PCM_REG5_DATA) != PCM_MCDI_ALL_CORE_AWAKE) ; spm_mcdi_cpu_wake_up_event(1, 0); while (mmio_read_32(SPM_PCM_REG5_DATA) != PCM_MCDI_OFFLOADED) ; spm_clean_after_wakeup(); clear_all_ready(); }
void spm_clear_hotplug(void) { /* Inform SPM that CPU wants to program CPU_WAKEUP_EVENT and * DISABLE_CPU_DROM */ mmio_write_32(SPM_PCM_REG_DATA_INI, PCM_HANDSHAKE_SEND1); mmio_write_32(SPM_PCM_PWR_IO_EN, PCM_RF_SYNC_R6); mmio_write_32(SPM_PCM_PWR_IO_EN, 0); /* Wait SPM's response, can't use sleep api */ while ((mmio_read_32(SPM_PCM_FSM_STA) & PCM_END_FSM_STA_MASK) != PCM_END_FSM_STA_DEF) ; /* no hotplug pcm running */ clear_all_ready(); }