MTK获取AP休眠总时间

目的:
获取AP总共的休眠时间,debug一些休眠问题。

实现的基本原理:
根据已有的代码中只可获取最近一次休眠的函数,使用累加,获取AP总共的休眠时间。高通也是累加算出来的。

PATCH:

diff --git a/drivers/misc/mediatek/base/power/spm/common/mtk_sleep.c b/drivers/misc/mediatek/base/power/spm/common/mtk_sleep.c
index d24fac770850..fbe6a3550178 100644
--- a/drivers/misc/mediatek/base/power/spm/common/mtk_sleep.c
+++ b/drivers/misc/mediatek/base/power/spm/common/mtk_sleep.c
@@ -364,6 +364,8 @@ static ssize_t suspend_state_read(char *ToUserBuf, size_t sz, void *priv)
    return p - ToUserBuf;
 }
 
+extern uint64_t total_sleep_time_in_s;
+extern uint64_t total_spm_26M_off_in_s;
 static ssize_t sleep_info_read(char *ToUserBuf, size_t sz, void *priv)
 {
    char *p = ToUserBuf;
@@ -381,7 +383,8 @@ static ssize_t sleep_info_read(char *ToUserBuf, size_t sz, void *priv)
    sleep_time=get_sleep_time_in_sec();
    t_26m_off_in_sec = get_spm_26M_off_in_sec();
 
-   log("R13[0x%x] sleep_time=[%u]sec 26M_off_time=[%u]sec\n",r13,sleep_time,t_26m_off_in_sec);
+   log("R13[0x%x] sleep_time=[%u]sec 26M_off_time=[%u]sec total_sleep_time=[%u]sec total_26M_off_time=[%u]sec\n",r13,sleep_time,t_26m_off_in_sec,
+           total_sleep_time_in_s, total_spm_26M_off_in_s);
    return p - ToUserBuf;
 }
 
diff --git a/drivers/misc/mediatek/base/power/spm/mt6765/mtk_spm_internal.c b/drivers/misc/mediatek/base/power/spm/mt6765/mtk_spm_internal.c
index a8105aa3246a..aebef636d4c3 100644
--- a/drivers/misc/mediatek/base/power/spm/mt6765/mtk_spm_internal.c
+++ b/drivers/misc/mediatek/base/power/spm/mt6765/mtk_spm_internal.c
@@ -130,6 +130,7 @@ void __spm_sync_pcm_flags(struct pwr_ctrl *pwrctrl)
        pwrctrl->pcm_flags1 |= pwrctrl->pcm_flags1_cust_set;
 }
 
+
 void __spm_get_wakeup_status(struct wake_status *wakesta)
 {
    /* get PC value if PCM assert (pause abort) */
@@ -168,6 +169,9 @@ void __spm_get_wakeup_status(struct wake_status *wakesta)
    wakesta->isr = spm_read(SPM_IRQ_STA);
 }
 
+uint64_t total_sleep_time_in_s = 0;
+uint64_t total_spm_26M_off_in_s = 0;
+
 unsigned int __spm_output_wake_reason(
    const struct wake_status *wakesta, bool suspend, const char *scenario)
 {
@@ -247,6 +251,9 @@ unsigned int __spm_output_wake_reason(
                        / wakesta->timer_out;
        }
 
+       total_sleep_time_in_s += wakesta->timer_out/(32*1024);
+       total_spm_26M_off_in_s += spm_read(SPM_PASR_DPD_0)/(32*1024);
+
        log_size += sprintf(log_buf + log_size,
            "raw_ext_sta = 0x%x, wake_misc = 0x%x, pcm_flag = 0x%x 0x%x, req = 0x%x, ",
            wakesta->raw_ext_sta,
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容