!795 低功耗增加idle选项

Merge pull request !795 from zhushengle/pm
This commit is contained in:
openharmony_ci 2022-08-23 13:06:03 +00:00 committed by Gitee
commit b38f135242
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
3 changed files with 33 additions and 2 deletions

View File

@ -129,7 +129,8 @@ STATIC BOOL OsPmTickTimerStop(LosPmCB *pm)
#endif
LosPmTickTimer *tickTimer = pm->tickTimer;
if ((tickTimer == NULL) || (tickTimer->tickLock == NULL)) {
if ((tickTimer == NULL) || (tickTimer->tickLock == NULL) ||
(pm->pmMode == LOS_SYS_NORMAL_SLEEP)) {
return FALSE;
}
@ -167,7 +168,6 @@ STATIC VOID OsPmCpuResume(LosPmCB *pm)
STATIC VOID OsPmCpuSuspend(LosPmCB *pm)
{
/* cpu enter low power mode */
LOS_ASSERT(pm->sysctrl != NULL);
if (pm->sysMode == LOS_SYS_NORMAL_SLEEP) {
pm->sysctrl->normalSuspend();
@ -226,6 +226,8 @@ STATIC UINT32 OsPmSuspendCheck(LosPmCB *pm, Suspend *sysSuspendEarly, Suspend *d
return LOS_NOK;
}
LOS_ASSERT(pm->sysctrl != NULL);
pm->isWake = FALSE;
*mode = pm->sysMode;
*sysSuspendEarly = pm->sysctrl->early;
@ -260,6 +262,10 @@ STATIC UINT32 OsPmSuspendSleep(LosPmCB *pm)
goto EXIT;
}
if (pm->sysctrl->suspendCheck != NULL) {
pm->sysctrl->suspendCheck(mode);
}
tickTimerStop = OsPmTickTimerStop(pm);
if (!tickTimerStop) {
OsSchedResetSchedResponseTime(0);
@ -283,6 +289,9 @@ EXIT:
STATIC VOID OsPmNormalSleep(VOID)
{
#if (LOSCFG_KERNEL_PM_IDLE == 1)
(VOID)LOS_PmSuspend(0);
#else
UINT32 intSave;
LosPmCB *pm = &g_pmCB;
@ -293,6 +302,7 @@ STATIC VOID OsPmNormalSleep(VOID)
OsPmCpuResume(pm);
LOS_IntRestore(intSave);
#endif
}
STATIC UINT32 OsPmDeviceRegister(LosPmCB *pm, LosPmDevice *device)
@ -343,6 +353,9 @@ STATIC UINT32 OsPmSysctrlRegister(LosPmCB *pm, LosPmSysctrl *sysctrl)
if (sysctrl->late != NULL) {
pm->sysctrl->late = sysctrl->late;
}
if (sysctrl->suspendCheck != NULL) {
pm->sysctrl->suspendCheck = sysctrl->suspendCheck;
}
if (sysctrl->normalSuspend != NULL) {
pm->sysctrl->normalSuspend = sysctrl->normalSuspend;
}

View File

@ -165,6 +165,8 @@ typedef struct {
* Unlocked task scheduling.
*/
VOID (*late)(UINT32 mode);
/* Final check before low-power consumption. */
VOID (*suspendCheck)(UINT32 mode);
/* The system enters the Normal sleep mode.
* In normal mode, the value cannot be NULL.
*/

View File

@ -663,6 +663,22 @@ extern UINT8 *m_aucSysMem0;
#define LOSCFG_KERNEL_SIGNAL 0
#endif
/**
* @ingroup los_config
* Configuration item to enable kernel power module.
*/
#ifndef LOSCFG_KERNEL_PM
#define LOSCFG_KERNEL_PM 0
#endif
/**
* @ingroup los_config
* Configuration item to enable kernel power module in idle task.
*/
#ifndef LOSCFG_KERNEL_PM_IDLE
#define LOSCFG_KERNEL_PM_IDLE 0
#endif
#ifdef __cplusplus
#if __cplusplus
}