MTK 驱动开发(36)---低功耗基础知识

1、sleep /suspend
 suspend确切的说是MCU(ARM )的suspend,也就是cpu进入Wait for interrupt状态(WFI);因为对整个系统来说,CPU进WFI是整个系统睡眠的先决条件,debug也是从CPU是否进入WFI开始.

从Linux的角度来说,CPU进入suspend就是SW完全不跑了,停在suspend workqueue里面

从灭屏到CPU进入suspend的大体流程框架如下:

 

相关code路径:

/frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java

/frameworks/base/services/core/jni/com_android_server_power_PowerManagerService.cpp

/system/core/libsuspend/

/kernel-3.18/kernel/power/

2. SPM
SPM以及时钟请求信号控制流程

因为整个系统不只是AP(MCU),还包括modem、connectivity等子系统;

CPU进入WFI后,整个系统就依靠一颗SCP:SPM来控制睡眠/唤醒的流程,它会去关注各个子系统的状态

 SPM =System Power Manager,

它掌控着cpu suspend之后系统是否能掉到最小电流的关键逻辑,你可以把它理解成一个投票机制,当系统的关键资源(memory、clock)没有任何人使用的时候,它就会让系统进入一个真正的深睡状态(最小电流)只要它检测到有任何资源请求还没释放,系统就无法降到底电

所以在底电问题上的debug流程中,不仅仅要看cpu有没有suspend成功,还要看SPM的状态是否正确

SPM里面有一个可编程控制器PCM(Programmable Command Master)

CPU在进去WFI之前会把SPM的firmware写入PCM,然后PCM就依据firmware的逻辑来控制SPM的工作

 跟SPM强相关的一个东西就是系统中的时钟请求信号,也就是26M时钟开关的控制逻辑;因为系统工作在最小电流的时候,SPM只依靠32K时钟工作;因此要判断系统是不是已经到深睡状态,就要看26M有没有关闭。

26M时钟的控制逻辑概要如下图

 

 所以从上图我们就可以看到, 26M有没有关,就只要看SCLKENA这个信号有没有关闭;而SPM对这个信号的输出以及子系统的信号输入,都会记录在SPM的寄存器里面,这个就是我们通过log排查的依据

 代码路径:

/kernel-3.18/drivers/misc/mediatek/base/power/spm_vx/

3、Deep idle
基本概念

首先顾名思义,这是一种CPU进入空闲后的状态,也就是在idle进程中执行的

简单地说,Mediatek会在CPU进入空闲的情况下,再去关闭一些不必要的power domain,以达到最省电的目的,因为CPU空闲的时候,其实系统中有不少的domain也是不需要运行的,不这样做的话,就仅仅是CPU这块的电省下来 ,达不到省电的目的。

Mediatek的做法是在CPU在进入idle进程后,会去判断当前系统的状态是否满足进入更省电状态的条件,首先就会检查是否能进入deep idle,因为dpidle最省电

系统进入deep idle需要满足的条件是

单核(BY_CPU)

预设的能block deep idle的所有clock都已经关闭(BY_CLOCK)

CPU在2ms内没有从idle task调度出去的需求(BY_TMR)

BY_VTG / BY_OTH的case很少(BY_OTH在个别平台跟TEE(SPI指纹模块)有关)

我们可以从波形上检查系统是否进入deep idle

下图中电流的底部就是deep idle的状态,在MP3播放的状态大约20mA;

如果没有进deep idle,这个底部会被抬高


deep idle也是由SPM来控制它的执行逻辑,跟suspend一样, CPU在进去WFI之前会把SPM的firmware写入PCM,这个firmware跟suspend是完全不一样的。

4 背景知识---SODI


SODI跟deep idle类似,是SPM的另外一种工作模式

SODI:Screen On Deep Idle

SODI的进入条件跟deep idle是类似的,区别只是要检查的clock跟deep idle不完全一样 ,SODI对display功耗的影响相对于CMD / VDO mode是不一样的

前面讲过了CMD / VDO的差别,其实就很容易理解这一点:因为CMD mode下,CPU不用送数据出去,因此MIPI clock可以不用送,这整条clock路径上的东西(PLL/clock)都可以关闭,而且memory跟VDO相比也可以做更多省电的action;所以SODI对CMD mode的省电效果会比VDO的效果更明显

是否进入SODI也可以从波形上明显地看到:

下图示SODI  enable/disable的idle mode波形比较

CMD mode:SODI on(左) vs SODI off(右)


VDO mode:SODI on(左) vs SODI off(右)

*重点关注波形的形状,电流下降的数值不同平台不一样
 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值