前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android功耗(9)---MTK功耗问题分析1

Android功耗(9)---MTK功耗问题分析1

作者头像
233333
发布2020-10-26 15:54:24
1.7K1
发布2020-10-26 15:54:24
举报
文章被收录于专栏:linux驱动个人学习

1、查找唤醒源

<7>[ 129.680310] -(0)[913:system_server][name:mt_sleep&][SLP] @@@Chip_pm_enter@@@

<4>[ 129.680310] -(0)[913:system_server][name:mt_spm_internal&][SPM] wake up .........................

<7>[ 129.690364] .(0)[913:system_server][name:mt_sleep&][SLP] @@@Chip_pm_finish@@@

产生EINT的channel会记录在EINT_STA状态寄存器里面,这一点所有平台都一样;只要知道这个状态寄存器的值就可以知道哪个channel发生了中断;但是不同平台的log细节会有些不同。

--->89/72/82在wakeup时,如果唤醒源是EINT,会主动打印出EINT_STA的值

--->77默认不会打印这个寄存器,需要先开启EINT_DEBUG这个宏,才能看到EINT_STA的值

kernel log分析:

【step1 - 从kernel log中找到EINT channel id】

MT6577

[Power/Sleep] wake up by EINT (0x20)(0x4)(180689) (* 这里0x20是EINT wakesrc id,0x4是sleep ISR寄存器状态,都不是channel id!)

EINT Module - EINT_STA = 0x400,--->bit[n] =1, channel id 就等于n

MT6589/MT6582

[SPM] wake up by EINT (0x20)(0x20)(370340)

EINT_STA:

3 --->这个值就是EINT channel id,不需要转换

MT6572

[PCM WAKEUP NORMAL]CPU WAKE UP BY: EINT :0x10000 --->bit[n] =1, channel id 就等于n

【step2 - 过滤PMIC触发的EINT唤醒】

pwrkey/charger/usb/这些事件发生时会有EINT产生,走的都是PMIC的EINT channel;并且89/72平台上,rtc(比如第三方APK造成的唤醒)和其他一些中断也会走PMIC的EINT;因此要先把PMIC EINT过滤掉,不需要去关注这个channel上的唤醒(当然rtc唤醒的话还是要分析的,只不过并不是去分析EINT唤醒源了)。所幸PMIC的EINT channel id是固定的,不能修改,所以可以直接看channel id来过滤,各平台的PMIC EINT channel如下:

MT6577 9 (EINT_STA=0x400)

MT6589 3 (EINT_STA=3)

MT6572 16(EINT_STA=0x10000)

MT6582 25(EINT_STA=25)

【step3 -从cust_eint.h中找到触发EINT的模块】

CUST_EINT_XXX_NUM 对应的值就是XXX模块的EINT channel id。

如果在这个文件中没有找到造成唤醒的channel id的定义,说明可能没有用DCT Tool去配置EINT,而是直接写死在代码里,那就尝试搜索所有调用mt65xx_eint_registration的代码,看有没有注册这个channel id的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-10-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档