Project

General

Profile

Qualcomm Linux SMD » History » Version 10

laforge, 12/26/2016 08:44 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 5 laforge
* smd_open() / smd_named_open_on_edge()
25 1 laforge
* 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 3 laforge
h3. packet ports
49 1 laforge
50 3 laforge
* Some kind of packet oriented interface towards the SMD
51
* msm_smd_pkt.c contains driver
52
** smdpkt0..7+smd22 devices, 2048 byte buffer
53
** open/release/read/write/poll syscalls implemented
54
55 8 laforge
|_.Pipe|_.Device|
56
|DATA5_CNTL|smdcntl0|
57
|DATA6_CNTL|smdcntl1|
58
|DATA7_CNTL|smdcntl2|
59
|DATA8_CNTL|smdcntl3|
60
|DATA9_CNTL|smdcntl4|
61
|DATA12_CNTL|smdcntl5|
62
|DATA13_CNTL|smdcntl6|
63
|DATA14_CNTL|smdcntl7|
64
|DATA22|smd22|
65
66
67
68 4 laforge
h3. hci_smd
69
70
Apparently used to talk HCI to a bluetooth chip on a different processor.  Not used in the modem devices we've seen.
71
72 6 laforge
h3. smd_qmi
73
74
Binds to the following channels and exposes the related devices:
75
76
|_.SMD Pipe|_.QMI Device|
77
|SMD_DATA5_CNTL|/dev/qmi0|
78
|SMD_DATA6_CNTL|/dev/qmi1|
79
|SMD_DATA7_CNTL|/dev/qmi2|
80
81 7 laforge
It seems this is an older generation of accessing [[QMI]] from the Linux application processor, which has now been replaced by qmuxd which opens @/dev/smdcntl@ devices and thus bypasses any QMI message parsing/interpretation inside the kernel?
82 4 laforge
83 9 laforge
h3. msm_rmnet
84
85 10 laforge
Implements a Linux kernel network device based on a SMD pipe.
86 1 laforge
87 10 laforge
The default SMD pipes used by the msm_rmnet driver are listed below.  There is no static mapping to a rmnetN device, as the numbers of the network devices are dynamically allocated.
88
89
|_.SMD Pipe|
90
|DATA5|
91
|DATA6|
92
|DATA7|
93
|DATA8|
94
|DATA9|
95
|DATA12|
96
|DATA13|
97
|DATA14|
98
99
Comparing this with the table from /sys/kernel/debug/smd/tbl on the [[EC20]] seems to suggest that DATA8 is the only SMD pipe used for msm_rmnet and thus the rmnet0 device.
100 9 laforge
101 1 laforge
h2. MSM IPC (Inter Process Communications) socket
102
103
Qualcomm implements a socket-based inter process communication on Linux.  It is implemented using a new address family, @AF_MSM_IPC@ (27).
104
105
The socket is used as datagram type socket (SOCK_DGRAM).
106
107
The socket address of a related socket consists of:
108
109
* the socket family (AF_MSM_IPC)
110
* a @struct msm_ipc_addr@, consisting of
111
** a single address type byte
112
** a port address (node_id, port_id)
113
** a port name (service, instance)
114
115
* arch/arm/mach-msm/ipc_socket.c
116
* AF_MSM_IPC
117
118
119
h2. available SMD pipes
120
121
h3. SMD pipes on an [[EC25]]
122
123
<pre>
124
Primary allocation table:
125
root@mdm9607-perf:~# cat /sys/kernel/debug/smd/ch
126
ID|CHANNEL NAME       |T|PROC |STATE  |FIFO SZ|RDPTR  |WRPTR  |FLAGS   |DATAPEN
127
-------------------------------------------------------------------------------
128
 4|rpm_requests       |P|APPS |OPENED |0x00400|0x001E0|0x001E0|DCCiwRsB|0x00000
129
  |                   | |RPM  |OPENED |0x00400|0x00118|0x00118|DCCiwrsB|0x00000
130
-------------------------------------------------------------------------------
131
 5|rpm_requests       |P|MDMSW| Access Restricted
132
  |                   | |RPM  | Access Restricted
133
-------------------------------------------------------------------------------
134
 6|rpm_requests       |P|WCNSS| Access Restricted
135
  |                   | |RPM  | Access Restricted
136
-------------------------------------------------------------------------------
137
 7|rpm_requests       |P|TZ   | Access Restricted
138
  |                   | |RPM  | Access Restricted
139
-------------------------------------------------------------------------------
140
 8|rpm_requests       |P|ADSP | Access Restricted
141
  |                   | |RPM  | Access Restricted
142
-------------------------------------------------------------------------------
143
144
145
APPS <-> MDMSW Primary allocation table:
146
ID|CHANNEL NAME       |T|PROC |STATE  |FIFO SZ|RDPTR  |WRPTR  |FLAGS   |DATAPEN
147
-------------------------------------------------------------------------------
148
 0|DS                 |S|APPS |OPENED |0x02000|0x00000|0x00000|dcCiwrsb|0x00000
149
  |                   | |MDMSW|OPENED |0x02000|0x00000|0x00000|dCciwrsb|0x00000
150
-------------------------------------------------------------------------------
151
 1|IPCRTR             |P|APPS |OPENED |0x02000|0x012E4|0x012E4|DCCiwrsB|0x00000
152
  |                   | |MDMSW|OPENED |0x02000|0x011F8|0x011F8|DCCiwrsB|0x00000
153
-------------------------------------------------------------------------------
154
 2|SSM_RTR_MODEM_APPS |P|APPS |CLOSED |0x02000|0x00000|0x00000|dcciwrsb|0x00000
155
  |                   | |MDMSW|OPENING|0x02000|0x00000|0x00000|DCCiwrSb|0x00000
156
-------------------------------------------------------------------------------
157
 3|DIAG_2_CMD         |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000
158
  |                   | |MDMSW|OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000
159
-------------------------------------------------------------------------------
160
 4|DIAG_2             |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000
161
  |                   | |MDMSW|OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000
162
-------------------------------------------------------------------------------
163
 5|DIAG_CNTL          |P|APPS |OPENED |0x02000|0x00062|0x00062|DCCiwrsb|0x00000
164
  |                   | |MDMSW|OPENED |0x02000|0x007F5|0x007F5|DCCiwrsB|0x00000
165
-------------------------------------------------------------------------------
166
 6|DIAG_CMD           |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000
167
  |                   | |MDMSW|OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000
168
-------------------------------------------------------------------------------
169
 7|DIAG               |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000
170
  |                   | |MDMSW|OPENED |0x02000|0x00026|0x00026|DCCiwrsB|0x00000
171
-------------------------------------------------------------------------------
172
 8|apr_audio_svc      |P|APPS |OPENED |0x02000|0x002F0|0x002F0|DCCiwrsB|0x00000
173
  |                   | |MDMSW|OPENED |0x02000|0x00248|0x00248|DCCiwrsB|0x00000
174
-------------------------------------------------------------------------------
175
 9|apr_apps2          |P|APPS |CLOSED |0x02000|0x00000|0x00000|dcciwrsb|0x00000
176
  |                   | |MDMSW|OPENING|0x02000|0x00000|0x00000|DCCiwrSb|0x00000
177
-------------------------------------------------------------------------------
178
10|DATA1              |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsB|0x00000
179
  |                   | |MDMSW|OPENED |0x02000|0x00000|0x00000|dCciwrsb|0x00000
180
-------------------------------------------------------------------------------
181
11|DATA2              |P|APPS |CLOSED |0x02000|0x00000|0x00000|dcciwrsb|0x00000
182
  |                   | |MDMSW|OPENING|0x02000|0x00000|0x00000|dCciwrSb|0x00000
183
-------------------------------------------------------------------------------
184
12|DATA3              |P|APPS |OPENED |0x02000|0x00000|0x00000|dcCiwrsb|0x00000
185
  |                   | |MDMSW|OPENED |0x02000|0x00000|0x00000|dCciwrsb|0x00000
186
-------------------------------------------------------------------------------
187
13|DATA4              |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsB|0x00000
188
  |                   | |MDMSW|OPENED |0x02000|0x00000|0x00000|dCciwrsb|0x00000
189
-------------------------------------------------------------------------------
190
14|DATA11             |S|APPS |OPENED |0x02000|0x00089|0x00089|dcCiwRsb|0x00000
191
  |                   | |MDMSW|OPENED |0x02000|0x0012B|0x0012B|dCciwrsB|0x00000
192
-------------------------------------------------------------------------------
193
15|DATA40             |P|APPS |CLOSED |0x02000|0x00000|0x00000|dcciwrsb|0x00000
194
  |                   | |MDMSW|OPENING|0x02000|0x00000|0x00000|dcciwrSb|0x00000
195
-------------------------------------------------------------------------------
196
16|DATA5_CNTL         |P|APPS |CLOSED |0x00400|0x00000|0x00000|dcciwrsb|0x00000
197
  |                   | |MDMSW|OPENING|0x00400|0x00000|0x00000|DCCiwrSb|0x00000
198
-------------------------------------------------------------------------------
199
17|DATA40_CNTL        |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsB|0x00000
200
  |                   | |MDMSW|OPENED |0x02000|0x00100|0x00100|DCCiwrsB|0x00000
201
-------------------------------------------------------------------------------
202
</pre>
203
204
h3. SMD pipes on an [[EC20]]:
205
206
<pre>
207
/sys/kernel/debug/smd # cat ch 
208
ch00:   OPENED(0000/0000) dcCiwrsb <->   OPENED(0000/0000) dCciwrsB :  2000
209
ch04:   OPENED(27336/27336) DCCiwrsB <->   OPENED(6552/6552) DCCiwrsB :  8000
210
ch05:   OPENED(0000/0000) DCCiwrsb <->   OPENED(12568/12568) DCCiwrsB : 10000
211
ch06:   OPENED(1872/1872) DCCiwrsB <->   OPENED(0216/0216) DCCiwrsB :  2000
212
ch07:   CLOSED(0000/0000) dcciwrsb <->  OPENING(0000/0000) DCCiwrSb :  2000
213
ch08:   CLOSED(0000/0000) dcciwrsb <->  OPENING(0000/0000) DCCiwrSb :   400
214
ch09:   OPENED(0952/0952) DCCiwrsb <->   OPENED(0438/0438) DCCiwrsB :   400
215
ch10:   OPENED(0000/0000) DCCiwrsb <->   OPENED(0000/0000) DCCiwrsb :  2000
216
ch11:   CLOSED(0000/0000) dcciwrsb <->  OPENING(0000/0000) DCCiwrSb :  2000
217
ch12:   OPENED(0000/0000) DCCiwrsb <->   OPENED(0000/0000) DCCiwrsb :  2000
218
ch13:   CLOSED(0000/0000) dcciwrsb <->  OPENING(0000/0000) DCCiwrSb :  2000
219
ch14:   OPENED(0480/0480) DCCiwrsB <->   OPENED(0376/0376) DCCiwrsB :   400
220
ch15:   CLOSED(0000/0000) dcciwrsb <->  OPENING(0000/0000) DCCiwrSb :  2000
221
ch16:   CLOSED(0000/0000) dcciwrsb <->  OPENING(0000/0000) DCCiwrSb :  2000
222
ch17:   CLOSED(0000/0000) dcciwrsb <->  OPENING(0000/0000) DCCiwrSb :   400
223
ch18:   OPENED(0000/0000) DCCiwrsb <->   OPENED(0000/0000) DCCiwrsb :  2000
224
ch19:   OPENED(0952/0952) DCCiwrsb <->   OPENED(0370/0370) DCCiwrsB :   400
225
ch20:   OPENED(0021/0021) DCCiwrsb <->   OPENED(0078/0078) DCCiwrsB :  2000
226
ch21:   CLOSED(0000/0000) dcciwrsb <->  OPENING(0000/0000) DCCiwrSb :  2000
227
ch22:   CLOSED(0000/0000) dcciwrsb <->  OPENING(0000/0000) dCciwrSb :  2000
228
ch23:   OPENED(0000/0000) dcCiwrsb <->   OPENED(0000/0000) dCciwrsB :  2000
229
ch24:   OPENED(0000/0000) DCCiwrsb <->   OPENED(0000/0000) dCciwrsb :  2000
230
ch25:   CLOSED(0000/0000) dcciwrsb <->  OPENING(0000/0000) dCciwrSb :  2000
231
ch26:   CLOSED(0000/0000) dcciwrsb <->  OPENING(0000/0000) dCciwrSb :  2000
232
ch27:   CLOSED(0000/0000) dcciwrsb <->  OPENING(0000/0000) dcciwrSb :  2000
233
ch28:   OPENED(0000/0000) DCCiwrsb <->   OPENED(0000/0000) DCCiwrsB :  2000
234
ch29:   CLOSED(0000/0000) dcciwrsb <->  OPENING(0000/0000) dcciwrSb :  2000
235
ch30:   OPENED(0295/0295) DCCiwrsB <->   OPENED(0563/0563) DCCiwrsB :   400
236
ch31:   OPENED(0237/0237) DCCiwrsB <->   OPENED(0415/0415) DCCiwrsB :   400
237
ch32:   OPENED(0237/0237) DCCiwrsB <->   OPENED(0415/0415) DCCiwrsB :   400
238
ch33:   OPENED(0237/0237) DCCiwrsB <->   OPENED(0415/0415) DCCiwrsB :   400
239
ch34:   OPENED(0000/0000) DCCiwrsb <->   OPENED(0000/0000) dCciwrsb :  2000
240
</pre>
241
242
<pre>
243
/sys/kernel/debug/smd # cat tbl
244
name=DS cid=0 ch type=0 xfer type=1 ref_count=2
245
name= cid=0 ch type=0 xfer type=0 ref_count=0
246
name= cid=0 ch type=0 xfer type=0 ref_count=0
247
name= cid=0 ch type=0 xfer type=0 ref_count=0
248
name=MSGR_SMD_P1 cid=4 ch type=11 xfer type=2 ref_count=2
249
name=MSGR_SMD_P0 cid=5 ch type=11 xfer type=2 ref_count=2
250
name=IPCRTR cid=6 ch type=1 xfer type=2 ref_count=1
251
name=IPCRTR cid=7 ch type=2 xfer type=2 ref_count=1
252
name=sys_mon cid=8 ch type=1 xfer type=2 ref_count=1
253
name=DIAG_CNTL cid=9 ch type=1 xfer type=2 ref_count=2
254
name=DIAG cid=10 ch type=1 xfer type=2 ref_count=2
255
name=apr_audio_svc cid=11 ch type=1 xfer type=2 ref_count=1
256
name=apr_voice_svc cid=12 ch type=2 xfer type=2 ref_count=2
257
name=apr_apps2 cid=13 ch type=1 xfer type=2 ref_count=1
258
name=RPCRPY_CNTL cid=14 ch type=0 xfer type=2 ref_count=2
259
name=IPCROUTER cid=15 ch type=0 xfer type=0 ref_count=1
260
name=SSM_RTR cid=16 ch type=0 xfer type=2 ref_count=1
261
name=sys_mon cid=17 ch type=0 xfer type=2 ref_count=1
262
name=DIAG_2 cid=18 ch type=0 xfer type=2 ref_count=2
263
name=DIAG_CNTL cid=19 ch type=0 xfer type=2 ref_count=2
264
name=DIAG cid=20 ch type=0 xfer type=2 ref_count=2
265
name=apr_voice_svc cid=21 ch type=0 xfer type=2 ref_count=1
266
name=DATA1 cid=22 ch type=0 xfer type=2 ref_count=2
267
name=DATA2 cid=23 ch type=0 xfer type=2 ref_count=2
268
name=DATA3 cid=24 ch type=0 xfer type=2 ref_count=2
269
name=DATA4 cid=25 ch type=0 xfer type=2 ref_count=2
270
name=DATA11 cid=26 ch type=0 xfer type=1 ref_count=2
271
name=DATA40 cid=27 ch type=0 xfer type=2 ref_count=2
272
name=DATA40_CNTL cid=28 ch type=0 xfer type=2 ref_count=2
273
name=DATA8 cid=29 ch type=0 xfer type=2 ref_count=2
274
name=DATA5_CNTL cid=30 ch type=0 xfer type=2 ref_count=2
275
name=DATA6_CNTL cid=31 ch type=0 xfer type=2 ref_count=2
276
name=DATA7_CNTL cid=32 ch type=0 xfer type=2 ref_count=2
277
name=DATA8_CNTL cid=33 ch type=0 xfer type=2 ref_count=2
278
name=GPSNMEA cid=34 ch type=0 xfer type=2 ref_count=2
279
</pre>
Add picture from clipboard (Maximum size: 48.8 MB)