目的:
获取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,