背景
平台: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 threads
pid 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》