Qualcomm Linux SMD » History » Version 2
laforge, 12/26/2016 07:37 PM
1 | 1 | laforge | {{>toc}} |
---|---|---|---|
2 | |||
3 | h1. Qualcomm Linux SMD (Shared Memory Device) |
||
4 | |||
5 | 2 | laforge | Individual processors / sub-systems in a multi-CPU SOC provide SMD channels. This is basically a pipe abstraction over a shared memory protocol. Each channel exists between two given CPU cores, so called _SMD sub-systems_. |
6 | 1 | laforge | |
7 | 2 | laforge | * SMD sub-systems we know of: |
8 | ** APPS (applications processor, this is the Linux system) |
||
9 | 1 | laforge | ** Modem (assumed to be hexagon with modem firmware?) |
10 | ** Q6 (formerly known as LPASS == Low Power Audio SubSystem) |
||
11 | ** DSPS |
||
12 | ** WCNSS (Wireless Connectivity Sub System) aka 'riva' |
||
13 | ** RPM (Resource Power Manager) |
||
14 | * inter-processor-interrupts for various 'edges' |
||
15 | 2 | laforge | |
16 | In the MDM9615/9x07 based devices it seems there is only the RPM, MODEM and APPS. |
||
17 | 1 | laforge | |
18 | h2. core driver |
||
19 | |||
20 | * arch/arm/mach-msm/smd.c |
||
21 | |||
22 | h3. api |
||
23 | |||
24 | * smd_open() |
||
25 | * smd_close() |
||
26 | * smd_write*() |
||
27 | * smd_read*() |
||
28 | * smsm_*() |
||
29 | |||
30 | h2. SMD based drivers |
||
31 | |||
32 | h3. smd_tty |
||
33 | |||
34 | Seems to expose tty devices (/dev/smdN) bound to SMD channels. |
||
35 | |||
36 | h3. smd_nmea |
||
37 | |||
38 | Exposes a tty device (/dev/nmea) bound to a SMD channel named "GPSNMEA". |
||
39 | |||
40 | h3. diagfwd |
||
41 | |||
42 | DIAG forwarding, see [[DIAG]] |
||
43 | |||
44 | h3. u_smd usb gadget |
||
45 | |||
46 | Used to forward data of certain USB endpoints towards other processors (mainly MDSP) |
||
47 | |||
48 | h3. |
||
49 | |||
50 | h2. MSM IPC (Inter Process Communications) socket |
||
51 | |||
52 | Qualcomm implements a socket-based inter process communication on Linux. It is implemented using a new address family, @AF_MSM_IPC@ (27). |
||
53 | |||
54 | The socket is used as datagram type socket (SOCK_DGRAM). |
||
55 | |||
56 | The socket address of a related socket consists of: |
||
57 | |||
58 | * the socket family (AF_MSM_IPC) |
||
59 | * a @struct msm_ipc_addr@, consisting of |
||
60 | ** a single address type byte |
||
61 | ** a port address (node_id, port_id) |
||
62 | ** a port name (service, instance) |
||
63 | |||
64 | * arch/arm/mach-msm/ipc_socket.c |
||
65 | * AF_MSM_IPC |
||
66 | |||
67 | h3. packet ports |
||
68 | |||
69 | * Some kind of packet oriented interface towards the SMD |
||
70 | * msm_smd_pkt.c contains driver |
||
71 | ** smdpkt0..7+smd22 devices, 2048 byte buffer |
||
72 | ** open/release/read/write/poll syscalls implemented |
||
73 | |||
74 | h2. available SMD pipes |
||
75 | |||
76 | h3. SMD pipes on an [[EC25]] |
||
77 | |||
78 | <pre> |
||
79 | Primary allocation table: |
||
80 | root@mdm9607-perf:~# cat /sys/kernel/debug/smd/ch |
||
81 | ID|CHANNEL NAME |T|PROC |STATE |FIFO SZ|RDPTR |WRPTR |FLAGS |DATAPEN |
||
82 | ------------------------------------------------------------------------------- |
||
83 | 4|rpm_requests |P|APPS |OPENED |0x00400|0x001E0|0x001E0|DCCiwRsB|0x00000 |
||
84 | | | |RPM |OPENED |0x00400|0x00118|0x00118|DCCiwrsB|0x00000 |
||
85 | ------------------------------------------------------------------------------- |
||
86 | 5|rpm_requests |P|MDMSW| Access Restricted |
||
87 | | | |RPM | Access Restricted |
||
88 | ------------------------------------------------------------------------------- |
||
89 | 6|rpm_requests |P|WCNSS| Access Restricted |
||
90 | | | |RPM | Access Restricted |
||
91 | ------------------------------------------------------------------------------- |
||
92 | 7|rpm_requests |P|TZ | Access Restricted |
||
93 | | | |RPM | Access Restricted |
||
94 | ------------------------------------------------------------------------------- |
||
95 | 8|rpm_requests |P|ADSP | Access Restricted |
||
96 | | | |RPM | Access Restricted |
||
97 | ------------------------------------------------------------------------------- |
||
98 | |||
99 | |||
100 | APPS <-> MDMSW Primary allocation table: |
||
101 | ID|CHANNEL NAME |T|PROC |STATE |FIFO SZ|RDPTR |WRPTR |FLAGS |DATAPEN |
||
102 | ------------------------------------------------------------------------------- |
||
103 | 0|DS |S|APPS |OPENED |0x02000|0x00000|0x00000|dcCiwrsb|0x00000 |
||
104 | | | |MDMSW|OPENED |0x02000|0x00000|0x00000|dCciwrsb|0x00000 |
||
105 | ------------------------------------------------------------------------------- |
||
106 | 1|IPCRTR |P|APPS |OPENED |0x02000|0x012E4|0x012E4|DCCiwrsB|0x00000 |
||
107 | | | |MDMSW|OPENED |0x02000|0x011F8|0x011F8|DCCiwrsB|0x00000 |
||
108 | ------------------------------------------------------------------------------- |
||
109 | 2|SSM_RTR_MODEM_APPS |P|APPS |CLOSED |0x02000|0x00000|0x00000|dcciwrsb|0x00000 |
||
110 | | | |MDMSW|OPENING|0x02000|0x00000|0x00000|DCCiwrSb|0x00000 |
||
111 | ------------------------------------------------------------------------------- |
||
112 | 3|DIAG_2_CMD |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000 |
||
113 | | | |MDMSW|OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000 |
||
114 | ------------------------------------------------------------------------------- |
||
115 | 4|DIAG_2 |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000 |
||
116 | | | |MDMSW|OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000 |
||
117 | ------------------------------------------------------------------------------- |
||
118 | 5|DIAG_CNTL |P|APPS |OPENED |0x02000|0x00062|0x00062|DCCiwrsb|0x00000 |
||
119 | | | |MDMSW|OPENED |0x02000|0x007F5|0x007F5|DCCiwrsB|0x00000 |
||
120 | ------------------------------------------------------------------------------- |
||
121 | 6|DIAG_CMD |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000 |
||
122 | | | |MDMSW|OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000 |
||
123 | ------------------------------------------------------------------------------- |
||
124 | 7|DIAG |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000 |
||
125 | | | |MDMSW|OPENED |0x02000|0x00026|0x00026|DCCiwrsB|0x00000 |
||
126 | ------------------------------------------------------------------------------- |
||
127 | 8|apr_audio_svc |P|APPS |OPENED |0x02000|0x002F0|0x002F0|DCCiwrsB|0x00000 |
||
128 | | | |MDMSW|OPENED |0x02000|0x00248|0x00248|DCCiwrsB|0x00000 |
||
129 | ------------------------------------------------------------------------------- |
||
130 | 9|apr_apps2 |P|APPS |CLOSED |0x02000|0x00000|0x00000|dcciwrsb|0x00000 |
||
131 | | | |MDMSW|OPENING|0x02000|0x00000|0x00000|DCCiwrSb|0x00000 |
||
132 | ------------------------------------------------------------------------------- |
||
133 | 10|DATA1 |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsB|0x00000 |
||
134 | | | |MDMSW|OPENED |0x02000|0x00000|0x00000|dCciwrsb|0x00000 |
||
135 | ------------------------------------------------------------------------------- |
||
136 | 11|DATA2 |P|APPS |CLOSED |0x02000|0x00000|0x00000|dcciwrsb|0x00000 |
||
137 | | | |MDMSW|OPENING|0x02000|0x00000|0x00000|dCciwrSb|0x00000 |
||
138 | ------------------------------------------------------------------------------- |
||
139 | 12|DATA3 |P|APPS |OPENED |0x02000|0x00000|0x00000|dcCiwrsb|0x00000 |
||
140 | | | |MDMSW|OPENED |0x02000|0x00000|0x00000|dCciwrsb|0x00000 |
||
141 | ------------------------------------------------------------------------------- |
||
142 | 13|DATA4 |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsB|0x00000 |
||
143 | | | |MDMSW|OPENED |0x02000|0x00000|0x00000|dCciwrsb|0x00000 |
||
144 | ------------------------------------------------------------------------------- |
||
145 | 14|DATA11 |S|APPS |OPENED |0x02000|0x00089|0x00089|dcCiwRsb|0x00000 |
||
146 | | | |MDMSW|OPENED |0x02000|0x0012B|0x0012B|dCciwrsB|0x00000 |
||
147 | ------------------------------------------------------------------------------- |
||
148 | 15|DATA40 |P|APPS |CLOSED |0x02000|0x00000|0x00000|dcciwrsb|0x00000 |
||
149 | | | |MDMSW|OPENING|0x02000|0x00000|0x00000|dcciwrSb|0x00000 |
||
150 | ------------------------------------------------------------------------------- |
||
151 | 16|DATA5_CNTL |P|APPS |CLOSED |0x00400|0x00000|0x00000|dcciwrsb|0x00000 |
||
152 | | | |MDMSW|OPENING|0x00400|0x00000|0x00000|DCCiwrSb|0x00000 |
||
153 | ------------------------------------------------------------------------------- |
||
154 | 17|DATA40_CNTL |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsB|0x00000 |
||
155 | | | |MDMSW|OPENED |0x02000|0x00100|0x00100|DCCiwrsB|0x00000 |
||
156 | ------------------------------------------------------------------------------- |
||
157 | </pre> |
||
158 | |||
159 | h3. SMD pipes on an [[EC20]]: |
||
160 | |||
161 | <pre> |
||
162 | /sys/kernel/debug/smd # cat ch |
||
163 | ch00: OPENED(0000/0000) dcCiwrsb <-> OPENED(0000/0000) dCciwrsB : 2000 |
||
164 | ch04: OPENED(27336/27336) DCCiwrsB <-> OPENED(6552/6552) DCCiwrsB : 8000 |
||
165 | ch05: OPENED(0000/0000) DCCiwrsb <-> OPENED(12568/12568) DCCiwrsB : 10000 |
||
166 | ch06: OPENED(1872/1872) DCCiwrsB <-> OPENED(0216/0216) DCCiwrsB : 2000 |
||
167 | ch07: CLOSED(0000/0000) dcciwrsb <-> OPENING(0000/0000) DCCiwrSb : 2000 |
||
168 | ch08: CLOSED(0000/0000) dcciwrsb <-> OPENING(0000/0000) DCCiwrSb : 400 |
||
169 | ch09: OPENED(0952/0952) DCCiwrsb <-> OPENED(0438/0438) DCCiwrsB : 400 |
||
170 | ch10: OPENED(0000/0000) DCCiwrsb <-> OPENED(0000/0000) DCCiwrsb : 2000 |
||
171 | ch11: CLOSED(0000/0000) dcciwrsb <-> OPENING(0000/0000) DCCiwrSb : 2000 |
||
172 | ch12: OPENED(0000/0000) DCCiwrsb <-> OPENED(0000/0000) DCCiwrsb : 2000 |
||
173 | ch13: CLOSED(0000/0000) dcciwrsb <-> OPENING(0000/0000) DCCiwrSb : 2000 |
||
174 | ch14: OPENED(0480/0480) DCCiwrsB <-> OPENED(0376/0376) DCCiwrsB : 400 |
||
175 | ch15: CLOSED(0000/0000) dcciwrsb <-> OPENING(0000/0000) DCCiwrSb : 2000 |
||
176 | ch16: CLOSED(0000/0000) dcciwrsb <-> OPENING(0000/0000) DCCiwrSb : 2000 |
||
177 | ch17: CLOSED(0000/0000) dcciwrsb <-> OPENING(0000/0000) DCCiwrSb : 400 |
||
178 | ch18: OPENED(0000/0000) DCCiwrsb <-> OPENED(0000/0000) DCCiwrsb : 2000 |
||
179 | ch19: OPENED(0952/0952) DCCiwrsb <-> OPENED(0370/0370) DCCiwrsB : 400 |
||
180 | ch20: OPENED(0021/0021) DCCiwrsb <-> OPENED(0078/0078) DCCiwrsB : 2000 |
||
181 | ch21: CLOSED(0000/0000) dcciwrsb <-> OPENING(0000/0000) DCCiwrSb : 2000 |
||
182 | ch22: CLOSED(0000/0000) dcciwrsb <-> OPENING(0000/0000) dCciwrSb : 2000 |
||
183 | ch23: OPENED(0000/0000) dcCiwrsb <-> OPENED(0000/0000) dCciwrsB : 2000 |
||
184 | ch24: OPENED(0000/0000) DCCiwrsb <-> OPENED(0000/0000) dCciwrsb : 2000 |
||
185 | ch25: CLOSED(0000/0000) dcciwrsb <-> OPENING(0000/0000) dCciwrSb : 2000 |
||
186 | ch26: CLOSED(0000/0000) dcciwrsb <-> OPENING(0000/0000) dCciwrSb : 2000 |
||
187 | ch27: CLOSED(0000/0000) dcciwrsb <-> OPENING(0000/0000) dcciwrSb : 2000 |
||
188 | ch28: OPENED(0000/0000) DCCiwrsb <-> OPENED(0000/0000) DCCiwrsB : 2000 |
||
189 | ch29: CLOSED(0000/0000) dcciwrsb <-> OPENING(0000/0000) dcciwrSb : 2000 |
||
190 | ch30: OPENED(0295/0295) DCCiwrsB <-> OPENED(0563/0563) DCCiwrsB : 400 |
||
191 | ch31: OPENED(0237/0237) DCCiwrsB <-> OPENED(0415/0415) DCCiwrsB : 400 |
||
192 | ch32: OPENED(0237/0237) DCCiwrsB <-> OPENED(0415/0415) DCCiwrsB : 400 |
||
193 | ch33: OPENED(0237/0237) DCCiwrsB <-> OPENED(0415/0415) DCCiwrsB : 400 |
||
194 | ch34: OPENED(0000/0000) DCCiwrsb <-> OPENED(0000/0000) dCciwrsb : 2000 |
||
195 | </pre> |
||
196 | |||
197 | <pre> |
||
198 | /sys/kernel/debug/smd # cat tbl |
||
199 | name=DS cid=0 ch type=0 xfer type=1 ref_count=2 |
||
200 | name= cid=0 ch type=0 xfer type=0 ref_count=0 |
||
201 | name= cid=0 ch type=0 xfer type=0 ref_count=0 |
||
202 | name= cid=0 ch type=0 xfer type=0 ref_count=0 |
||
203 | name=MSGR_SMD_P1 cid=4 ch type=11 xfer type=2 ref_count=2 |
||
204 | name=MSGR_SMD_P0 cid=5 ch type=11 xfer type=2 ref_count=2 |
||
205 | name=IPCRTR cid=6 ch type=1 xfer type=2 ref_count=1 |
||
206 | name=IPCRTR cid=7 ch type=2 xfer type=2 ref_count=1 |
||
207 | name=sys_mon cid=8 ch type=1 xfer type=2 ref_count=1 |
||
208 | name=DIAG_CNTL cid=9 ch type=1 xfer type=2 ref_count=2 |
||
209 | name=DIAG cid=10 ch type=1 xfer type=2 ref_count=2 |
||
210 | name=apr_audio_svc cid=11 ch type=1 xfer type=2 ref_count=1 |
||
211 | name=apr_voice_svc cid=12 ch type=2 xfer type=2 ref_count=2 |
||
212 | name=apr_apps2 cid=13 ch type=1 xfer type=2 ref_count=1 |
||
213 | name=RPCRPY_CNTL cid=14 ch type=0 xfer type=2 ref_count=2 |
||
214 | name=IPCROUTER cid=15 ch type=0 xfer type=0 ref_count=1 |
||
215 | name=SSM_RTR cid=16 ch type=0 xfer type=2 ref_count=1 |
||
216 | name=sys_mon cid=17 ch type=0 xfer type=2 ref_count=1 |
||
217 | name=DIAG_2 cid=18 ch type=0 xfer type=2 ref_count=2 |
||
218 | name=DIAG_CNTL cid=19 ch type=0 xfer type=2 ref_count=2 |
||
219 | name=DIAG cid=20 ch type=0 xfer type=2 ref_count=2 |
||
220 | name=apr_voice_svc cid=21 ch type=0 xfer type=2 ref_count=1 |
||
221 | name=DATA1 cid=22 ch type=0 xfer type=2 ref_count=2 |
||
222 | name=DATA2 cid=23 ch type=0 xfer type=2 ref_count=2 |
||
223 | name=DATA3 cid=24 ch type=0 xfer type=2 ref_count=2 |
||
224 | name=DATA4 cid=25 ch type=0 xfer type=2 ref_count=2 |
||
225 | name=DATA11 cid=26 ch type=0 xfer type=1 ref_count=2 |
||
226 | name=DATA40 cid=27 ch type=0 xfer type=2 ref_count=2 |
||
227 | name=DATA40_CNTL cid=28 ch type=0 xfer type=2 ref_count=2 |
||
228 | name=DATA8 cid=29 ch type=0 xfer type=2 ref_count=2 |
||
229 | name=DATA5_CNTL cid=30 ch type=0 xfer type=2 ref_count=2 |
||
230 | name=DATA6_CNTL cid=31 ch type=0 xfer type=2 ref_count=2 |
||
231 | name=DATA7_CNTL cid=32 ch type=0 xfer type=2 ref_count=2 |
||
232 | name=DATA8_CNTL cid=33 ch type=0 xfer type=2 ref_count=2 |
||
233 | name=GPSNMEA cid=34 ch type=0 xfer type=2 ref_count=2 |
||
234 | </pre> |