Qualcomm Linux SMD » History » Version 3
laforge, 12/26/2016 07: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 | * 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 | 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 | 1 | laforge | h2. MSM IPC (Inter Process Communications) socket |
56 | |||
57 | Qualcomm implements a socket-based inter process communication on Linux. It is implemented using a new address family, @AF_MSM_IPC@ (27). |
||
58 | |||
59 | The socket is used as datagram type socket (SOCK_DGRAM). |
||
60 | |||
61 | The socket address of a related socket consists of: |
||
62 | |||
63 | * the socket family (AF_MSM_IPC) |
||
64 | * a @struct msm_ipc_addr@, consisting of |
||
65 | ** a single address type byte |
||
66 | ** a port address (node_id, port_id) |
||
67 | ** a port name (service, instance) |
||
68 | |||
69 | * arch/arm/mach-msm/ipc_socket.c |
||
70 | * AF_MSM_IPC |
||
71 | |||
72 | |||
73 | h2. available SMD pipes |
||
74 | |||
75 | h3. SMD pipes on an [[EC25]] |
||
76 | |||
77 | <pre> |
||
78 | Primary allocation table: |
||
79 | root@mdm9607-perf:~# cat /sys/kernel/debug/smd/ch |
||
80 | ID|CHANNEL NAME |T|PROC |STATE |FIFO SZ|RDPTR |WRPTR |FLAGS |DATAPEN |
||
81 | ------------------------------------------------------------------------------- |
||
82 | 4|rpm_requests |P|APPS |OPENED |0x00400|0x001E0|0x001E0|DCCiwRsB|0x00000 |
||
83 | | | |RPM |OPENED |0x00400|0x00118|0x00118|DCCiwrsB|0x00000 |
||
84 | ------------------------------------------------------------------------------- |
||
85 | 5|rpm_requests |P|MDMSW| Access Restricted |
||
86 | | | |RPM | Access Restricted |
||
87 | ------------------------------------------------------------------------------- |
||
88 | 6|rpm_requests |P|WCNSS| Access Restricted |
||
89 | | | |RPM | Access Restricted |
||
90 | ------------------------------------------------------------------------------- |
||
91 | 7|rpm_requests |P|TZ | Access Restricted |
||
92 | | | |RPM | Access Restricted |
||
93 | ------------------------------------------------------------------------------- |
||
94 | 8|rpm_requests |P|ADSP | Access Restricted |
||
95 | | | |RPM | Access Restricted |
||
96 | ------------------------------------------------------------------------------- |
||
97 | |||
98 | |||
99 | APPS <-> MDMSW Primary allocation table: |
||
100 | ID|CHANNEL NAME |T|PROC |STATE |FIFO SZ|RDPTR |WRPTR |FLAGS |DATAPEN |
||
101 | ------------------------------------------------------------------------------- |
||
102 | 0|DS |S|APPS |OPENED |0x02000|0x00000|0x00000|dcCiwrsb|0x00000 |
||
103 | | | |MDMSW|OPENED |0x02000|0x00000|0x00000|dCciwrsb|0x00000 |
||
104 | ------------------------------------------------------------------------------- |
||
105 | 1|IPCRTR |P|APPS |OPENED |0x02000|0x012E4|0x012E4|DCCiwrsB|0x00000 |
||
106 | | | |MDMSW|OPENED |0x02000|0x011F8|0x011F8|DCCiwrsB|0x00000 |
||
107 | ------------------------------------------------------------------------------- |
||
108 | 2|SSM_RTR_MODEM_APPS |P|APPS |CLOSED |0x02000|0x00000|0x00000|dcciwrsb|0x00000 |
||
109 | | | |MDMSW|OPENING|0x02000|0x00000|0x00000|DCCiwrSb|0x00000 |
||
110 | ------------------------------------------------------------------------------- |
||
111 | 3|DIAG_2_CMD |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000 |
||
112 | | | |MDMSW|OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000 |
||
113 | ------------------------------------------------------------------------------- |
||
114 | 4|DIAG_2 |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000 |
||
115 | | | |MDMSW|OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000 |
||
116 | ------------------------------------------------------------------------------- |
||
117 | 5|DIAG_CNTL |P|APPS |OPENED |0x02000|0x00062|0x00062|DCCiwrsb|0x00000 |
||
118 | | | |MDMSW|OPENED |0x02000|0x007F5|0x007F5|DCCiwrsB|0x00000 |
||
119 | ------------------------------------------------------------------------------- |
||
120 | 6|DIAG_CMD |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000 |
||
121 | | | |MDMSW|OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000 |
||
122 | ------------------------------------------------------------------------------- |
||
123 | 7|DIAG |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000 |
||
124 | | | |MDMSW|OPENED |0x02000|0x00026|0x00026|DCCiwrsB|0x00000 |
||
125 | ------------------------------------------------------------------------------- |
||
126 | 8|apr_audio_svc |P|APPS |OPENED |0x02000|0x002F0|0x002F0|DCCiwrsB|0x00000 |
||
127 | | | |MDMSW|OPENED |0x02000|0x00248|0x00248|DCCiwrsB|0x00000 |
||
128 | ------------------------------------------------------------------------------- |
||
129 | 9|apr_apps2 |P|APPS |CLOSED |0x02000|0x00000|0x00000|dcciwrsb|0x00000 |
||
130 | | | |MDMSW|OPENING|0x02000|0x00000|0x00000|DCCiwrSb|0x00000 |
||
131 | ------------------------------------------------------------------------------- |
||
132 | 10|DATA1 |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsB|0x00000 |
||
133 | | | |MDMSW|OPENED |0x02000|0x00000|0x00000|dCciwrsb|0x00000 |
||
134 | ------------------------------------------------------------------------------- |
||
135 | 11|DATA2 |P|APPS |CLOSED |0x02000|0x00000|0x00000|dcciwrsb|0x00000 |
||
136 | | | |MDMSW|OPENING|0x02000|0x00000|0x00000|dCciwrSb|0x00000 |
||
137 | ------------------------------------------------------------------------------- |
||
138 | 12|DATA3 |P|APPS |OPENED |0x02000|0x00000|0x00000|dcCiwrsb|0x00000 |
||
139 | | | |MDMSW|OPENED |0x02000|0x00000|0x00000|dCciwrsb|0x00000 |
||
140 | ------------------------------------------------------------------------------- |
||
141 | 13|DATA4 |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsB|0x00000 |
||
142 | | | |MDMSW|OPENED |0x02000|0x00000|0x00000|dCciwrsb|0x00000 |
||
143 | ------------------------------------------------------------------------------- |
||
144 | 14|DATA11 |S|APPS |OPENED |0x02000|0x00089|0x00089|dcCiwRsb|0x00000 |
||
145 | | | |MDMSW|OPENED |0x02000|0x0012B|0x0012B|dCciwrsB|0x00000 |
||
146 | ------------------------------------------------------------------------------- |
||
147 | 15|DATA40 |P|APPS |CLOSED |0x02000|0x00000|0x00000|dcciwrsb|0x00000 |
||
148 | | | |MDMSW|OPENING|0x02000|0x00000|0x00000|dcciwrSb|0x00000 |
||
149 | ------------------------------------------------------------------------------- |
||
150 | 16|DATA5_CNTL |P|APPS |CLOSED |0x00400|0x00000|0x00000|dcciwrsb|0x00000 |
||
151 | | | |MDMSW|OPENING|0x00400|0x00000|0x00000|DCCiwrSb|0x00000 |
||
152 | ------------------------------------------------------------------------------- |
||
153 | 17|DATA40_CNTL |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsB|0x00000 |
||
154 | | | |MDMSW|OPENED |0x02000|0x00100|0x00100|DCCiwrsB|0x00000 |
||
155 | ------------------------------------------------------------------------------- |
||
156 | </pre> |
||
157 | |||
158 | h3. SMD pipes on an [[EC20]]: |
||
159 | |||
160 | <pre> |
||
161 | /sys/kernel/debug/smd # cat ch |
||
162 | ch00: OPENED(0000/0000) dcCiwrsb <-> OPENED(0000/0000) dCciwrsB : 2000 |
||
163 | ch04: OPENED(27336/27336) DCCiwrsB <-> OPENED(6552/6552) DCCiwrsB : 8000 |
||
164 | ch05: OPENED(0000/0000) DCCiwrsb <-> OPENED(12568/12568) DCCiwrsB : 10000 |
||
165 | ch06: OPENED(1872/1872) DCCiwrsB <-> OPENED(0216/0216) DCCiwrsB : 2000 |
||
166 | ch07: CLOSED(0000/0000) dcciwrsb <-> OPENING(0000/0000) DCCiwrSb : 2000 |
||
167 | ch08: CLOSED(0000/0000) dcciwrsb <-> OPENING(0000/0000) DCCiwrSb : 400 |
||
168 | ch09: OPENED(0952/0952) DCCiwrsb <-> OPENED(0438/0438) DCCiwrsB : 400 |
||
169 | ch10: OPENED(0000/0000) DCCiwrsb <-> OPENED(0000/0000) DCCiwrsb : 2000 |
||
170 | ch11: CLOSED(0000/0000) dcciwrsb <-> OPENING(0000/0000) DCCiwrSb : 2000 |
||
171 | ch12: OPENED(0000/0000) DCCiwrsb <-> OPENED(0000/0000) DCCiwrsb : 2000 |
||
172 | ch13: CLOSED(0000/0000) dcciwrsb <-> OPENING(0000/0000) DCCiwrSb : 2000 |
||
173 | ch14: OPENED(0480/0480) DCCiwrsB <-> OPENED(0376/0376) DCCiwrsB : 400 |
||
174 | ch15: CLOSED(0000/0000) dcciwrsb <-> OPENING(0000/0000) DCCiwrSb : 2000 |
||
175 | ch16: CLOSED(0000/0000) dcciwrsb <-> OPENING(0000/0000) DCCiwrSb : 2000 |
||
176 | ch17: CLOSED(0000/0000) dcciwrsb <-> OPENING(0000/0000) DCCiwrSb : 400 |
||
177 | ch18: OPENED(0000/0000) DCCiwrsb <-> OPENED(0000/0000) DCCiwrsb : 2000 |
||
178 | ch19: OPENED(0952/0952) DCCiwrsb <-> OPENED(0370/0370) DCCiwrsB : 400 |
||
179 | ch20: OPENED(0021/0021) DCCiwrsb <-> OPENED(0078/0078) DCCiwrsB : 2000 |
||
180 | ch21: CLOSED(0000/0000) dcciwrsb <-> OPENING(0000/0000) DCCiwrSb : 2000 |
||
181 | ch22: CLOSED(0000/0000) dcciwrsb <-> OPENING(0000/0000) dCciwrSb : 2000 |
||
182 | ch23: OPENED(0000/0000) dcCiwrsb <-> OPENED(0000/0000) dCciwrsB : 2000 |
||
183 | ch24: OPENED(0000/0000) DCCiwrsb <-> OPENED(0000/0000) dCciwrsb : 2000 |
||
184 | ch25: CLOSED(0000/0000) dcciwrsb <-> OPENING(0000/0000) dCciwrSb : 2000 |
||
185 | ch26: CLOSED(0000/0000) dcciwrsb <-> OPENING(0000/0000) dCciwrSb : 2000 |
||
186 | ch27: CLOSED(0000/0000) dcciwrsb <-> OPENING(0000/0000) dcciwrSb : 2000 |
||
187 | ch28: OPENED(0000/0000) DCCiwrsb <-> OPENED(0000/0000) DCCiwrsB : 2000 |
||
188 | ch29: CLOSED(0000/0000) dcciwrsb <-> OPENING(0000/0000) dcciwrSb : 2000 |
||
189 | ch30: OPENED(0295/0295) DCCiwrsB <-> OPENED(0563/0563) DCCiwrsB : 400 |
||
190 | ch31: OPENED(0237/0237) DCCiwrsB <-> OPENED(0415/0415) DCCiwrsB : 400 |
||
191 | ch32: OPENED(0237/0237) DCCiwrsB <-> OPENED(0415/0415) DCCiwrsB : 400 |
||
192 | ch33: OPENED(0237/0237) DCCiwrsB <-> OPENED(0415/0415) DCCiwrsB : 400 |
||
193 | ch34: OPENED(0000/0000) DCCiwrsb <-> OPENED(0000/0000) dCciwrsb : 2000 |
||
194 | </pre> |
||
195 | |||
196 | <pre> |
||
197 | /sys/kernel/debug/smd # cat tbl |
||
198 | name=DS cid=0 ch type=0 xfer type=1 ref_count=2 |
||
199 | name= cid=0 ch type=0 xfer type=0 ref_count=0 |
||
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=MSGR_SMD_P1 cid=4 ch type=11 xfer type=2 ref_count=2 |
||
203 | name=MSGR_SMD_P0 cid=5 ch type=11 xfer type=2 ref_count=2 |
||
204 | name=IPCRTR cid=6 ch type=1 xfer type=2 ref_count=1 |
||
205 | name=IPCRTR cid=7 ch type=2 xfer type=2 ref_count=1 |
||
206 | name=sys_mon cid=8 ch type=1 xfer type=2 ref_count=1 |
||
207 | name=DIAG_CNTL cid=9 ch type=1 xfer type=2 ref_count=2 |
||
208 | name=DIAG cid=10 ch type=1 xfer type=2 ref_count=2 |
||
209 | name=apr_audio_svc cid=11 ch type=1 xfer type=2 ref_count=1 |
||
210 | name=apr_voice_svc cid=12 ch type=2 xfer type=2 ref_count=2 |
||
211 | name=apr_apps2 cid=13 ch type=1 xfer type=2 ref_count=1 |
||
212 | name=RPCRPY_CNTL cid=14 ch type=0 xfer type=2 ref_count=2 |
||
213 | name=IPCROUTER cid=15 ch type=0 xfer type=0 ref_count=1 |
||
214 | name=SSM_RTR cid=16 ch type=0 xfer type=2 ref_count=1 |
||
215 | name=sys_mon cid=17 ch type=0 xfer type=2 ref_count=1 |
||
216 | name=DIAG_2 cid=18 ch type=0 xfer type=2 ref_count=2 |
||
217 | name=DIAG_CNTL cid=19 ch type=0 xfer type=2 ref_count=2 |
||
218 | name=DIAG cid=20 ch type=0 xfer type=2 ref_count=2 |
||
219 | name=apr_voice_svc cid=21 ch type=0 xfer type=2 ref_count=1 |
||
220 | name=DATA1 cid=22 ch type=0 xfer type=2 ref_count=2 |
||
221 | name=DATA2 cid=23 ch type=0 xfer type=2 ref_count=2 |
||
222 | name=DATA3 cid=24 ch type=0 xfer type=2 ref_count=2 |
||
223 | name=DATA4 cid=25 ch type=0 xfer type=2 ref_count=2 |
||
224 | name=DATA11 cid=26 ch type=0 xfer type=1 ref_count=2 |
||
225 | name=DATA40 cid=27 ch type=0 xfer type=2 ref_count=2 |
||
226 | name=DATA40_CNTL cid=28 ch type=0 xfer type=2 ref_count=2 |
||
227 | name=DATA8 cid=29 ch type=0 xfer type=2 ref_count=2 |
||
228 | name=DATA5_CNTL cid=30 ch type=0 xfer type=2 ref_count=2 |
||
229 | name=DATA6_CNTL cid=31 ch type=0 xfer type=2 ref_count=2 |
||
230 | name=DATA7_CNTL cid=32 ch type=0 xfer type=2 ref_count=2 |
||
231 | name=DATA8_CNTL cid=33 ch type=0 xfer type=2 ref_count=2 |
||
232 | name=GPSNMEA cid=34 ch type=0 xfer type=2 ref_count=2 |
||
233 | </pre> |