Загрузка данных


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 вначале функции