Android 功耗(8)---如何找到阻止進入deep idle SODI的元兇

MTK idle:ui

若是是因爲CLOCK 卡住,請參考下面的flow:debug

Debug節點:/sys/kernel/debug/cpuidle/code

-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_stateci

其中dpidle_block_mask 裏面的數值對應的bit位爲1的,表明對應的clock卡住系統進入省電idle了.it

從上圖看:bug

INFRA 的CG group佔用的clock是從bit 0到bit31cpu

PERI 的CG group 佔用的clock是從bit32 到bit63di

DISP0的CG group 佔用的clock是從bit64到bit95co

N版本對應平臺的clock ID:block

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,
................