如何通过从kernel log分析AP suspend状态下的异常漏电

[DESCRIPTION]
 
 AP suspend状态下,会因为GPIO配置不当,subsys/pll/clock没关,或者其他的原因造成26M没关,而导致底电流升高;
 
这种情况,可以从kernel log中找到一些端倪,以确定进一步分析的方向
 
 
[SOLUTION]
 
【1】查找没有关闭的subsys/clock/pll
[6589/6582/6592/6595/6795]
查找关键字“PWR_STATUS”,[7:0]对应每个bit对应一个subsys
如果bit为1,代表这个子系统没关
 
每个bit的定义可以看mt_spm_mtcmos.c
比如:#define MD1_PWR_STA_MASK   (0x1 << 0)
 
 
[6732/6752/6735/6753]
查找关键字“slp_check_pm_mtcmos_pll”
如果有子系统没关,下一行可以看到类似下面的信息:
[Power/clkmgr] SYS_AUD: on
 
然后再往下看,就是各子系统的dump信息,以aud子系统为例,找到SYS_AUD对应的部分,详细解释如下:
  • cnt不等于0表示这个clock没关
  • 后面每一个括号内(可能有多个)是这个clock的其中一个user的信息
  • “audio”是使用clock的user的名字,代码里传入的参数
  • “15”表示open clock的次数,
  • “14”表示close clock的次数,两者不一样的话说明“audio”这个user使用这个clock有问题
[06][CG_AUDIO]*****
[02]state=1, cnt= 1 ( AUDIO, 15, 14)
[08]state=0, cnt=0 (AUDIO,8,8)
[09]state=0, cnt=0 (AUDIO,8,8)
[18]state=0, cnt=0 (AUDIO,8,8)
[19]state=0, cnt=0 (AUDIO,8,8)
 
【2】查看GPIO的状态
默认是关闭的,需要用下面的命令打开
 echo 1 > /sys/module/mt_sleep/parameters/slp_dump_gpio
 
然后在kernel log里就可以看到类似下面的信息:
PIN: [MODE] [PULL_SEL] [DIN] [DOUT] [PULL EN] [DIR] [IES]
 
对一下正常更异常的情况就会有帮助
*重点关注[mode][DIR][PULL_SEL],其他栏位的状态即使改变很多情况下也是正常的
*有些平台本身这块代码是注释掉的,需要更改代码才可以,搜索slp_dump_gpio可以找到相关代码
 
【3】查看26M clock是否关闭
搜索关键字“debug_flag”,跟wake up by在同一行,
bit[3:2]可以显示26M有没有关闭过,
如果bit[3:2]=0b'11,说明sleep时26M正常关闭;
如果bit[3:2]=0b'00,说明sleep时26M一直没关;
 
*如果发生这种case,需要case by case去看
* 另外,如果前面是wake up by GPU,请忽略这行log信息(deepdile状态,不是suspend状态)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值