static int32_t SystemPowerUpdate(const scmi_caller_t *caller, uint32_t lmId,
uint32_t systemState, bool graceful, bool *noReturn)
{
int32_t status = SM_ERR_SUCCESS;
/* New state? */
switch (systemState)
{
case SYS_STATE_SHUTDOWN:
/* Shutdown */
status = LMM_SystemLmShutdown(caller->lmId, caller->instAgentId,
lmId, graceful, &g_swReason);
break;
case SYS_STATE_COLD_RESET:
/* Cold Reset */
status = LMM_SystemLmReset(caller->lmId, caller->instAgentId,
lmId, false, graceful, &g_swReason);
break;
case SYS_STATE_WARM_RESET:
/* Warm Reset */
status = LMM_SystemLmReset(caller->lmId, caller->instAgentId,
lmId, true, graceful, &g_swReason);
break;
case SYS_STATE_POWER_UP:
/* Power up */
status = SM_ERR_NOT_SUPPORTED;
break;
case SYS_STATE_SUSPEND:
case SYS_STATE_WAKE:
/* Suspend */
status = SM_ERR_NOT_SUPPORTED;
break;
case SYS_STATE_FULL_SHUTDOWN:
/* System shutdown */
status = LMM_SystemShutdown(caller->lmId,
caller->instAgentId, graceful, &g_swReason);
break;
case SYS_STATE_FULL_RESET:
/* System reset*/
status = LMM_SystemReset(caller->lmId,
caller->instAgentId, graceful, &g_swReason);
break;
case SYS_STATE_FULL_SUSPEND:
/* System suspend */
status = LMM_SystemSuspend(caller->lmId,
caller->instAgentId);
*noReturn = false;
break;
case SYS_STATE_FULL_WAKE:
/* System wake*/
status = LMM_SystemWake(caller->lmId,
caller->instAgentId);
*noReturn = false;
break;
case SYS_STATE_GRP_SHUTDOWN:
/* System shutdown */
status = LMM_SystemGrpShutdown(caller->lmId,
caller->instAgentId, graceful, &g_swReason, 0U,
noReturn);
break;
case SYS_STATE_GRP_RESET:
/* System reset*/
status = LMM_SystemGrpReset(caller->lmId,
caller->instAgentId, graceful, &g_swReason, 0U,
noReturn);
break;
default:
status = SM_ERR_INVALID_PARAMETERS;
break;
}
/* Return status */
return status;
}