背景
平台:SA8155,Q+A 1.2.1
8155上集成了很多IP核,其中有不少的IP本质上是arm M核或者R核,这些模块在开发或者使用过程中也是需要监控和诊断的,但是他们并没有外部的调试接口,高通设计了整套诊断框架通过APSS(application processer subsystem)用来实现对这些IP核的诊断和监控。这套诊断框架支持从上位机PC的 QPST/QXDM软件对IP core的访问,也支持从APSS直接访问。
diag_service线程信息
在查看diag_service线程信息,我们能看到,这个有几个以GLINK_IST_x命名的中断线程:
# pidin -p 32790 threadspid tid name thread name STATE Blocked 32790 1 bin/diag_service 1 RECEIVE 10 32790 2 bin/diag_service DALTimer_dispatcher RECEIVE 2 32790 3 bin/diag_service Workloop SEM fff8089e64620f94 32790 4 bin/diag_service GLINK_IST_481 INTR 32790 5 bin/diag_service GLINK_IST_188 INTR 32790 6 bin/diag_service GLINK_IST_606 INTR 32790 7 bin/diag_service glink_ssr_handler REPLY 24586 32790 8 bin/diag_service ipcr_lpass CONDVAR (0x270731be10) 32790 9 bin/diag_service ipcr_cdsp CONDVAR (0x270731bce0) 32790 10 bin/diag_service ipcr_mpss CONDVAR (0x270731bbb0) 32790 11 bin/diag_service IPC_ROUTER_RM RECEIVE 3 32790 12 bin/diag_service diag_timer_handler RECEIVE 5 32790 13 bin/diag_service diag_task CONDVAR (0x5134b3e34) 32790 14 bin/diag_service pdbg_rm RECEIVE 6 32790 15 bin/diag_service diag_resmgr RECEIVE 17 32790 16 bin/diag_service diag_fwd_task CONDVAR (0x5134bc17c) 32790 17 bin/diag_service diag_compress_task CONDVAR (0x5134bc0cc) 32790 18 bin/diag_service ssr_event_monitor REPLY 700466 32790 19 bin/diag_service diagcomm_udp CONDVAR (0x270733cac0) 32790 20 bin/diag_service GLinkSMEMlpass CONDVAR (0x27073104a4) 32790 21 bin/diag_service GLinkSMEMmpss CONDVAR (0x27073104f4) 32790 22 bin/diag_service GLinkSMEMcdsp CONDVAR (0x2707310544)
我们想了解的是这几个线程是怎么来的,如何创建的
GLINK_IST_x中断线程创建
调用时序图:
对应的dts文件以及节点信息:
target/hypervisor/host/out_8155/host_merged_8155_la.dts
smem_info {mpss@0 {id = <0x1>;interrupts = <0x1e1>;reg = <0x17c0000c 0x1000>;tx-fifo-size = <0x4000>;tx-mtu-size = <0x1000>;ss_name = "mpss";};lpass@0 {id = <0x2>;interrupts = <0xbc>;reg = <0x17c0000c 0x100>;tx-fifo-size = <0x4000>;tx-mtu-size = <0x1000>;ss_name = "lpass";};dsps@0 {id = <0x3>;interrupts = <0xca>;reg = <0x17c0000c 0x1000000>;tx-fifo-size = <0x4000>;tx-mtu-size = <0x1000>;ss_name = "dsps";};cdsp@0 {id = <0x5>;interrupts = <0x25e>;reg = <0x17c0000c 0x10>;tx-fifo-size = <0x4000>;tx-mtu-size = <0x1000>;ss_name = "cdsp";};};
interrupts = <0x25e>; --> 606 --> GLINK_IST_606
参考
80-NA157-61 Rev. YE 《Diagnostic System User Guide》