关于分析系统suspend的底电流异常的方法

关于分析系统suspend的底电流异常的方法

关于如何分析飞行模式下底电流高的问题的方法:

1)硬件是否下电、
2)clock src是否没关、
3)gpio是否状态不对导致漏电、
4)压根没有suspend、AP suspend了但modem等其他子系统没有suspend
5)其他文档(硬件是否下电、clock src是否没关、gpio是否状态不对导致漏电、压根没有suspend、APsuspend了但modem等其他子系统没有suspend)

高通通过trace脚本,dump出来在AP cpu核系统suspend的情况下SOC的gpio状态。因为JTAG可以读取这些map好的寄存器的值。

关于suspend的注意事项

1)驱动suspend时,一般会对外设芯片置于省电模式,或者对外设芯片断电。断电前可能需要读取并保存寄存器的当前状态值,以便resume时需要恢复。
2)驱动suspend时,需要对gpio状态设置为防止漏电模式,根据硬件要求。
3)驱动resume时,根据设备是否被open了,需要修改gpio状态回外设工作的模式。
4)驱动resume时,根据设备是否被open了,需要重新恢复外设为工作状态,或者上电,但上电后,需要重新初始化外设寄存器,甚至需要恢复回suspend时的寄存器状态值。

另外关于系统功耗,一定要在所有功能外设模块都打开过一遍,或所有功能外设模块正在使用时,按power key进入suspend,然后等suspend时,测试功耗,这样可以检查哪些模块的驱动在suspend时没有关闭电源、clock和恢复gpio状态。如果没有使用此功能或者至少没有使用过此功能,那么此设备就没有打开过,那么即使suspend时漏了关闭电源、clock、漏了修改gpio状态,因为之前就没有打开,所以也就不会检查出来问题。这样测试功耗低,也发现不了什么驱动的bug。

具体参见我的《如何编写linux设备驱动》视频课程:
https://edu.51cto.com/course/17132.html

另外我的相关培训视频请看:
欢迎观看我发布的各个课程: https://edu.51cto.com/lecturer/8896847.html

猜你喜欢

转载自blog.51cto.com/8906847/2367966