static int32_t LmmEvent(scmi_msg_id_t msgId,
const lmm_rpc_trigger_t *trigger)
{
int32_t status = SM_ERR_SUCCESS;
printf("%s(%d)\n",__FUNCTION__,__LINE__);
/* Loop over all agents */
for (uint32_t dstAgent = 0U; dstAgent < SM_SCMI_NUM_AGNT; dstAgent++)
{
/* Agent belong to instance? */
if (g_scmiAgentConfig[dstAgent].scmiInst == trigger->rpcInst)
{
uint32_t event = trigger->parm[0];
uint32_t lmId = trigger->parm[1];
uint32_t eventLm = trigger->parm[2];
msg_rlmm64_t out;
printf("%s(%d) lmId=%d event=0x%X\n",__FUNCTION__,__LINE__,lmId,event);
if ((event == LMM_TRIGGER_PARM_LM_BOOT)
&& (LMM_NOTIFY_BOOT(s_lmmNotify[eventLm][dstAgent]) != 0U))
{
/* Fill in data */
out.lmId = lmId;
out.eventLm = eventLm;
out.flags = LMM_EVENT_BOOT(1U);
/* Queue notification */
RPC_SCMI_P2aTxQ(dstAgent, msgId, (uint32_t*) &out,
sizeof(out), SCMI_NOTIFY_Q);
}
if ((event == LMM_TRIGGER_PARM_LM_SHUTDOWN)
&& (LMM_NOTIFY_SHUTDOWN(s_lmmNotify[eventLm][dstAgent]) != 0U))
{
/* Fill in data */
out.lmId = lmId;
out.eventLm = eventLm;
out.flags = LMM_EVENT_SHUTDOWN(1U);
/* Queue notification */
RPC_SCMI_P2aTxQ(dstAgent, msgId, (uint32_t*) &out,
sizeof(out), SCMI_NOTIFY_Q);
}
if ((event == LMM_TRIGGER_PARM_LM_SUSPEND)
&& (LMM_NOTIFY_SUSPEND(s_lmmNotify[eventLm][dstAgent]) != 0U))
{
/* Fill in data */
out.lmId = lmId;
out.eventLm = eventLm;
out.flags = LMM_EVENT_SUSPEND(1U);
/* Queue notification */
RPC_SCMI_P2aTxQ(dstAgent, msgId, (uint32_t*) &out,
sizeof(out), SCMI_NOTIFY_Q);
}
if ((event == LMM_TRIGGER_PARM_LM_WAKE)
&& (LMM_NOTIFY_WAKE(s_lmmNotify[eventLm][dstAgent]) != 0U))
{
/* Fill in data */
out.lmId = lmId;
out.eventLm = eventLm;
out.flags = LMM_EVENT_WAKE(1U);
/* Queue notification */
RPC_SCMI_P2aTxQ(dstAgent, msgId, (uint32_t*) &out,
sizeof(out), SCMI_NOTIFY_Q);
}
}
}
/* Return status */
return status;
}
M33 command line:
>$ suspend
MONITOR_Dispatch(251) sub=15
>$ LmmEvent(1504)
LmmEvent(1516) lmId=1 event=0x4
LmmEvent(1504)
LmmEvent(1516) lmId=1 event=0x4
LmmEvent(1516) lmId=1 event=0x4
LmmEvent(1504)
LmmEvent(1516) lmId=2 event=0x4
LmmEvent(1504)
LmmEvent(1516) lmId=2 event=0x4
LmmEvent(1516) lmId=2 event=0x4
>$ wake
MONITOR_Dispatch(251) sub=16
>$ LmmEvent(1504)
LmmEvent(1516) lmId=1 event=0x80000000
LmmEvent(1504)
LmmEvent(1516) lmId=1 event=0x80000000
LmmEvent(1516) lmId=1 event=0x80000000
LmmEvent(1504)
LmmEvent(1516) lmId=2 event=0x80000000
LmmEvent(1504)
LmmEvent(1516) lmId=2 event=0x80000000
LmmEvent(1516) lmId=2 event=0x80000000
При этом функция DEV_SM_SystemSleep не вызывается: я поставил там printf вначале функции