一個msm_vidc導致的系統休眠待機功耗問題

一個msm_vidc導致的系統休眠待機功耗問題

項目上出現實車和臺架由於vidc suspend失敗,導致一直無法休眠問題

02-27 12:01:00.545 I/msm_vidc( 0): warn: Failed to suspend
02-27 12:01:00.545 I/msm_vidc( 0): warn: Failed to suspend: -16
02-27 12:01:00.545 E/dpm_run_callback()( 0): platform_pm_suspend+0x0/0x58 returns -16
02-27 12:01:00.545 E/PM ( 0): Device 1d00000.qcom,vidc failed to suspend: error -16
02-27 12:01:00.545 E/PM ( 0): Some devices failed to suspend, or early wake event detected

機器屏一直不亮,除了上面的異常,暫時沒有找到與vidc相關的其他異常打出 這個問題是概率性的問題

查看代碼

int msm_vidc_suspend(int core_id)
{
	return msm_comm_suspend(core_id);
}
int msm_comm_suspend(int core_id)
{
	struct hfi_device *hdev;
	struct msm_vidc_core *core;
	int rc = 0;

	core = get_vidc_core(core_id);
	if (!core) {
		dprintk(VIDC_ERR,
			"%s: Failed to find core for core_id = %d\n",
			__func__, core_id);
		return -EINVAL;
	}

	hdev = (struct hfi_device *)core->device;
	if (!hdev) {
		dprintk(VIDC_ERR, "%s Invalid device handle\n", __func__);
		return -EINVAL;
	}

	mutex_lock(&core->lock);
	if (core->state == VIDC_CORE_INVALID) {
		dprintk(VIDC_ERR,
				"%s - fw is not in proper state, skip suspend\n",
				__func__);
		rc = -EINVAL;
		goto exit;
	}

	rc = call_hfi_op(hdev, suspend, hdev->hfi_device_data);
	if (rc)
		dprintk(VIDC_WARN, "Failed to suspend\n");

exit:
	mutex_unlock(&core->lock);
	return rc;
}

報錯就是這裏產生的調用這個操作 call_hfi_op(hdev, suspend, hdev->hfi_device_data); 返回值導致的異常。

然後通過客戶反饋:
1.屏都是正常亮。
2.看起來恢復不了,剛上車時正常的,後來休眠幾次就不行了,現在一直都這樣。
3.就是正常熄火休眠。

這個函數本身的應該是沒有問題的,所以現在要排查下,是程序中哪個代碼引起的,

log中又找到了些異常的信息:

02-27 14:19:06.850 E/ti94x_bus_read(    0): read addr[2c] reg[20] failed reg(err -107)!
02-27 14:19:06.850 E/ti_des_get_gpio(    0): Communication Error(-107) with deserializer
./log/logcat_kernel.log.02:8489:02-27 14:16:44.966 I/msm_vidc(    0): err: Wrong codec: 1093808465
./log/logcat_kernel.log.02:8490:02-27 14:16:44.966 I/msm_vidc(    0): err: Wrong codec: 1093808465
(standard input):2511:03-16 17:51:11.700     0     0 I msm_vidc: info: Opening video instance: 00000000, 1
(standard input):4265:03-16 17:56:31.744     0     0 I msm_vidc: warn: Failed to suspend
(standard input):4266:03-16 17:56:31.744     0     0 I msm_vidc: warn: Failed to suspend: -16
./log/logcat.log.05:6031:03-17 15:31:38.874  2395  2872 W System.err: java.lang.NullPointerException: Attempt to read from field 'int com.qinggan.canbus.LightStatus.headLight' on a null object reference
./log/logcat.log.05:6033:03-17 15:31:38.875  2395  2872 W System.err: 	at com.qinggan.qingcastdisplay.CastService$14.onConnectStatusChange(CastService.java:489)
./log/logcat.log.05:6034:03-17 15:31:38.875  2395  2872 W System.err: 	at com.qinggan.common.QGManager.dispatchConnectState(QGManager.java:105)
./log/logcat.log.05:6035:03-17 15:31:38.875  2395  2872 W System.err: 	at com.qinggan.common.QGManager.-wrap1(Unknown Source:0)
./log/logcat.log.05:6036:03-17 15:31:38.875  2395  2872 W System.err: 	at com.qinggan.common.QGManager$3.run(QGManager.java:203)
./log/logcat.log.05:6037:03-17 15:31:38.875  2395  2872 W System.err: 	at java.lang.Thread.run(Thread.java:764)
./log/logcat.log.05:6568:03-17 15:31:39.061  3067  3067 W System.err: java.lang.IllegalArgumentException: params illegal!
./log/logcat.log.05:6572:03-17 15:31:39.062  3067  3067 W System.err: 	at com.qinggan.carsignal.CarSignalManager.getInstance(CarSignalManager.java:324)
./log/logcat.log.05:6573:03-17 15:31:39.062  3067  3067 W System.err: 	at com.qinggan.app.setting.base.SettingManager.<init>(SettingManager.java:53)
./log/logcat.log.05:6574:03-17 15:31:39.062  3067  3067 W System.err: 	at com.qinggan.app.setting.base.SettingManager.getInstance(SettingManager.java:37)
./log/logcat.log.05:6575:03-17 15:31:39.062  3067  3067 W System.err: 	at com.qinggan.app.setting.componement.SettingApp.onCreate(SettingApp.java:117)
./log/logcat.log.05:6576:03-17 15:31:39.062  3067  3067 W System.err: 	at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1120)
./log/logcat.log.05:6577:03-17 15:31:39.062  3067  3067 W System.err: 	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5755)
./log/logcat.log.05:6578:03-17 15:31:39.062  3067  3067 W System.err: 	at android.app.ActivityThread.-wrap1(Unknown Source:0)
./log/logcat.log.05:6579:03-17 15:31:39.062  3067  3067 W System.err: 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1659)
./log/logcat.log.05:6580:03-17 15:31:39.062  3067  3067 W System.err: 	at android.os.Handler.dispatchMessage(Handler.java:106)
./log/logcat.log.05:6581:03-17 15:31:39.062  3067  3067 W System.err: 	at android.os.Looper.loop(Looper.java:164)


./log/logcat.log.04:5518:03-17 15:31:51.472  4016  4098 W System.err: 	at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
./log/logcat.log.04:5519:03-17 15:31:51.473  4016  4098 W System.err: 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
./log/logcat.log.04:5520:03-17 15:31:51.473  4016  4098 W System.err: 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
./log/logcat.log.04:5521:03-17 15:31:51.473  4016  4098 W System.err: 	at java.lang.Thread.run(Thread.java:764)
./log/logcat.log.01:470:03-17 15:38:27.806  4016  9740 W System.err: java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 2 path $
./log/logcat.log.01:471:03-17 15:38:27.806  4016  9740 W System.err: 	at com.google.gson.stream.JsonReader.nextString(JsonReader.java:831)
./log/logcat.log.01:472:03-17 15:38:27.806  4016  9740 W System.err: 	at com.google.gson.internal.bind.TypeAdapters$16.read(TypeAdapters.java:422)
./log/logcat.log.01:473:03-17 15:38:27.806  4016  9740 W System.err: 	at com.google.gson.internal.bind.TypeAdapters$16.read(TypeAdapters.java:410)
./log/logcat.log.01:474:03-17 15:38:27.806  4016  9740 W System.err: 	at com.google.gson.TypeAdapter.fromJson(TypeAdapter.java:260)

異常log一一排查,log中也涉及到了客戶app部分,這部分讓客戶app開發人員排查,最後發現是app中調用了一個多媒體的方法,在系統休眠的時候沒有關閉導致的,問題解決

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章