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

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

被折叠的 条评论
为什么被折叠?



