Android 功耗(8)---如何找到阻止進入deep idle SODI的元凶
阿新 • • 發佈:2020-09-20
MTK idle:
如果是由於CLOCK 卡住,請參考下面的flow:
Debug節點:/sys/kernel/debug/cpuidle/
-rw-r--r-- 1 root root 0 1970-01-01 00:00 dpidle_state -rw-r--r-- 1 root root 0 1970-01-01 00:00 idle_state -rw-r--r-- 1 root root 0 1970-01-01 00:00 mcidle_state -rw-r--r-- 1 root root 0 1970-01-01 00:00 reg_dump -rw-r--r-- 1 root root 0 1970-01-01 00:00 slidle_state -rw-r--r-- 1 root root 0 1970-01-01 00:00 soidle3_state -rw-r--r-- 1 root root 0 1970-01-01 00:00 soidle_state
從節點中確認:/sys/kernel/debug/cpuidle/dpidle_state
其中dpidle_block_mask 裡面的數值對應的bit位為1的,代表對應的clock卡住系統進入省電idle了.
從上圖看:
INFRA 的CG group佔用的clock是從bit 0到bit31
PERI 的CG group 佔用的clock是從bit32 到bit63
DISP0的CG group 佔用的clock是從bit64到bit95
N版本對應平臺的clock ID:
6735/6737:
kernel-3.18/drivers/misc/mediatek/include/mt-plat/mt6735/include/mach/mt_clkmgr1_legacy.h
6735M:
kernel-3.18/drivers/misc/mediatek/include/mt-plat/mt6735/include/mach/mt_clkmgr2.h
6753:
kernel-3.18/drivers/misc/mediatek/include/mt-plat/mt6735/include/mach/mt_clkmgr3.h
enum cg_clk_id { MT_CG_INFRA_DBGCLK = 0, MT_CG_INFRA_GCE = 1, MT_CG_INFRA_TRBG = 2, MT_CG_INFRA_CPUM = 3, MT_CG_INFRA_DEVAPC = 4, MT_CG_INFRA_AUDIO = 5, MT_CG_INFRA_GCPU = 6, MT_CG_INFRA_L2C_SRAM = 7, MT_CG_INFRA_M4U = 8, MT_CG_INFRA_CLDMA = 12, ................