/*--------------------------------------------------------------------------*/
/* Set CPU sleep mode */
/*--------------------------------------------------------------------------*/
bool CPU_SleepModeSet(uint32_t cpuIdx, uint32_t sleepMode)
{
bool rc = false;
if ((cpuIdx < CPU_NUM_IDX) && (sleepMode <= CPU_NUM_SLEEP_MODES))
{
/* Set targeted sleep mode */
uint32_t cmcModeCtrl = s_gpcCpuCtrlPtrs[cpuIdx]->CMC_MODE_CTRL;
cmcModeCtrl &= (~GPC_CPU_CTRL_CMC_MODE_CTRL_CPU_MODE_TARGET_MASK);
cmcModeCtrl |= GPC_CPU_CTRL_CMC_MODE_CTRL_CPU_MODE_TARGET(sleepMode);
s_gpcCpuCtrlPtrs[cpuIdx]->CMC_MODE_CTRL = cmcModeCtrl;
/* Configure sleep-hold interface */
if ((s_cpuMgmtInfo[cpuIdx].cmcMisc &
GPC_CPU_CTRL_CMC_MISC_SLEEP_HOLD_EN_MASK) != 0U)
{
/* Enable sleep-hold interface unless sleep mode is RUN */
uint32_t cmcMisc = s_gpcCpuCtrlPtrs[cpuIdx]->CMC_MISC;
if (sleepMode == CPU_SLEEP_MODE_RUN)
{
cmcMisc &= ~GPC_CPU_CTRL_CMC_MISC_SLEEP_HOLD_EN_MASK;
}
else
{
cmcMisc |= GPC_CPU_CTRL_CMC_MISC_SLEEP_HOLD_EN_MASK;
}
s_gpcCpuCtrlPtrs[cpuIdx]->CMC_MISC = cmcMisc;
}
rc = true;
}
return rc;
}