[android][sensor][cts] ctsv device suspend test fail —— qrtr改为非唤醒模式

文章分析了在设备休眠测试中由于qrtr(AP与modem间通信)唤醒源导致无法进入suspendmode的问题。提出了修改qrtr通信为非唤醒模式的解决方案,涉及kernel源码的多处变更,包括qrtr_haven_probe、qcom_mhi_qrtr_probe、qrtr_get_service_id等函数的更新,并建议通过配置选项CONFIG_QRTR_GKI来区分不同产品的唤醒需求。

cts-verifier device suspend test fail —— qrtr改为非唤醒模式

device suspend test

设备休眠测试

install CtsVerifier.apk

手动执行device suspend test项:
按要求设置相应环境后开始测试,测试时需要灭屏,待几分钟后会有测试结束提示音

结果

testAccelBatchingInAPSuspendZeroReportLatency 该项测试失败
显示:

[TestExecution] Device did not go into suspend during test execution

分析

ap侧无法进入suspend mode

从log中可以看到如下内容:

Abort: Last active Wakeup Source: qrtr_ws PM: suspend exit

在测试过程中,灭屏后ap侧被唤醒源qrtr_ws持续唤醒,即qrtr通信(ap与modem之间通信)唤醒kernel,导致无法进入suspend mode

修改

据了解,该问题为高通老平台共性问题,需要修改qrtr通信改为非唤醒模式

原理:增加对从子系统接收数据时过滤的服务支持,如果service id在白名单中,它将不会持有唤醒源。

修改参考(kernel-5.4,system t,chip t):
kernel/msm-5.4/net/qrtr/haven.c

static int qrtr_haven_probe(struct platform_device *pdev)
{
   
   
...
 	qdev->ep.xmit = qrtr_haven_send;
-	ret = qrtr_endpoint_register(&qdev->ep, QRTR_EP_NET_ID_AUTO, false);
+	ret = qrtr_endpoint_register(&qdev->ep, QRTR_EP_NET_ID_AUTO, false, NULL);
 	if (ret)
 		goto register_fail;
...

kernel/msm-5.4/net/qrtr/mhi.c

static int qcom_mhi_qrtr_probe(struct mhi_device *mhi_dev,
			       const struct mhi_device_id *id)
{
   
   
 ...
 	dev_set_drvdata(&mhi_dev->dev, qdev);
 
-	rc = qrtr_endpoint_register(&qdev->ep, net_id, rt);
+	rc = qrtr_endpoint_register(&qdev->ep, net_id, rt, NULL);
 	if (rc)
 		return rc;
 ...

kernel/msm-5

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霁之鸢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值