xref: /openbmc/linux/Documentation/sound/hd-audio/intel-multi-link.rst (revision 1ac731c529cd4d6adbce134754b51ff7d822b145)
1*c7a92574SPierre-Louis Bossart.. SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
2*c7a92574SPierre-Louis Bossart.. include:: <isonum.txt>
3*c7a92574SPierre-Louis Bossart
4*c7a92574SPierre-Louis Bossart================================================
5*c7a92574SPierre-Louis BossartHDAudio multi-link extensions on Intel platforms
6*c7a92574SPierre-Louis Bossart================================================
7*c7a92574SPierre-Louis Bossart
8*c7a92574SPierre-Louis Bossart:Copyright: |copy| 2023 Intel Corporation
9*c7a92574SPierre-Louis Bossart
10*c7a92574SPierre-Louis BossartThis file documents the 'multi-link structure' introduced in 2015 with
11*c7a92574SPierre-Louis Bossartthe Skylake processor and recently extended in newer Intel platforms
12*c7a92574SPierre-Louis Bossart
13*c7a92574SPierre-Louis BossartHDaudio existing link mapping (2015 addition in SkyLake)
14*c7a92574SPierre-Louis Bossart========================================================
15*c7a92574SPierre-Louis Bossart
16*c7a92574SPierre-Louis BossartExternal HDAudio codecs are handled with link #0, while iDISP codec
17*c7a92574SPierre-Louis Bossartfor HDMI/DisplayPort is handled with link #1.
18*c7a92574SPierre-Louis Bossart
19*c7a92574SPierre-Louis BossartThe only change to the 2015 definitions is the declaration of the
20*c7a92574SPierre-Louis BossartLCAP.ALT=0x0 - since the ALT bit was previously reserved, this is a
21*c7a92574SPierre-Louis Bossartbackwards-compatible change.
22*c7a92574SPierre-Louis Bossart
23*c7a92574SPierre-Louis BossartLCTL.SPA and LCTL.CPA are automatically set when exiting reset. They
24*c7a92574SPierre-Louis Bossartare only used in existing drivers when the SCF value needs to be
25*c7a92574SPierre-Louis Bossartcorrected.
26*c7a92574SPierre-Louis Bossart
27*c7a92574SPierre-Louis BossartBasic structure for HDaudio codecs
28*c7a92574SPierre-Louis Bossart----------------------------------
29*c7a92574SPierre-Louis Bossart
30*c7a92574SPierre-Louis Bossart::
31*c7a92574SPierre-Louis Bossart
32*c7a92574SPierre-Louis Bossart  +-----------+
33*c7a92574SPierre-Louis Bossart  | ML cap #0 |
34*c7a92574SPierre-Louis Bossart  +-----------+
35*c7a92574SPierre-Louis Bossart  | ML cap #1 |---+
36*c7a92574SPierre-Louis Bossart  +-----------+   |
37*c7a92574SPierre-Louis Bossart                  |
38*c7a92574SPierre-Louis Bossart                  +--> 0x0 +---------------+ LCAP
39*c7a92574SPierre-Louis Bossart                           | ALT=0         |
40*c7a92574SPierre-Louis Bossart                           +---------------+
41*c7a92574SPierre-Louis Bossart                           | S192          |
42*c7a92574SPierre-Louis Bossart                           +---------------+
43*c7a92574SPierre-Louis Bossart                           | S96           |
44*c7a92574SPierre-Louis Bossart                           +---------------+
45*c7a92574SPierre-Louis Bossart                           | S48           |
46*c7a92574SPierre-Louis Bossart                           +---------------+
47*c7a92574SPierre-Louis Bossart                           | S24           |
48*c7a92574SPierre-Louis Bossart                           +---------------+
49*c7a92574SPierre-Louis Bossart                           | S12           |
50*c7a92574SPierre-Louis Bossart                           +---------------+
51*c7a92574SPierre-Louis Bossart                           | S6            |
52*c7a92574SPierre-Louis Bossart                           +---------------+
53*c7a92574SPierre-Louis Bossart
54*c7a92574SPierre-Louis Bossart                       0x4 +---------------+ LCTL
55*c7a92574SPierre-Louis Bossart                           | INTSTS        |
56*c7a92574SPierre-Louis Bossart                           +---------------+
57*c7a92574SPierre-Louis Bossart                           | CPA           |
58*c7a92574SPierre-Louis Bossart                           +---------------+
59*c7a92574SPierre-Louis Bossart                           | SPA           |
60*c7a92574SPierre-Louis Bossart                           +---------------+
61*c7a92574SPierre-Louis Bossart                           | SCF           |
62*c7a92574SPierre-Louis Bossart                           +---------------+
63*c7a92574SPierre-Louis Bossart
64*c7a92574SPierre-Louis Bossart                       0x8 +---------------+ LOSIDV
65*c7a92574SPierre-Louis Bossart                           | L1OSIVD15     |
66*c7a92574SPierre-Louis Bossart                           +---------------+
67*c7a92574SPierre-Louis Bossart                           | L1OSIDV..     |
68*c7a92574SPierre-Louis Bossart                           +---------------+
69*c7a92574SPierre-Louis Bossart                           | L1OSIDV1      |
70*c7a92574SPierre-Louis Bossart                           +---------------+
71*c7a92574SPierre-Louis Bossart
72*c7a92574SPierre-Louis Bossart                       0xC +---------------+ LSDIID
73*c7a92574SPierre-Louis Bossart                           | SDIID14       |
74*c7a92574SPierre-Louis Bossart                           +---------------+
75*c7a92574SPierre-Louis Bossart                           | SDIID...      |
76*c7a92574SPierre-Louis Bossart                           +---------------+
77*c7a92574SPierre-Louis Bossart                           | SDIID0        |
78*c7a92574SPierre-Louis Bossart                           +---------------+
79*c7a92574SPierre-Louis Bossart
80*c7a92574SPierre-Louis BossartSoundWire HDaudio extended link mapping
81*c7a92574SPierre-Louis Bossart=======================================
82*c7a92574SPierre-Louis Bossart
83*c7a92574SPierre-Louis BossartA SoundWire extended link is identified when LCAP.ALT=1 and
84*c7a92574SPierre-Louis BossartLEPTR.ID=0.
85*c7a92574SPierre-Louis Bossart
86*c7a92574SPierre-Louis BossartDMA control uses the existing LOSIDV register.
87*c7a92574SPierre-Louis Bossart
88*c7a92574SPierre-Louis BossartChanges include additional descriptions for enumeration that were not
89*c7a92574SPierre-Louis Bossartpresent in earlier generations.
90*c7a92574SPierre-Louis Bossart
91*c7a92574SPierre-Louis Bossart- multi-link synchronization: capabilities in LCAP.LSS and control in LSYNC
92*c7a92574SPierre-Louis Bossart- number of sublinks (manager IP) in LCAP.LSCOUNT
93*c7a92574SPierre-Louis Bossart- power management moved from SHIM to LCTL.SPA bits
94*c7a92574SPierre-Louis Bossart- hand-over to the DSP for access to multi-link registers, SHIM/IP with LCTL.OFLEN
95*c7a92574SPierre-Louis Bossart- mapping of SoundWire codecs to SDI ID bits
96*c7a92574SPierre-Louis Bossart- move of SHIM and Cadence registers to different offsets, with no
97*c7a92574SPierre-Louis Bossart  change in functionality. The LEPTR.PTR value is an offset from the
98*c7a92574SPierre-Louis Bossart  ML address, with a default value of 0x30000.
99*c7a92574SPierre-Louis Bossart
100*c7a92574SPierre-Louis BossartExtended structure for SoundWire (assuming 4 Manager IP)
101*c7a92574SPierre-Louis Bossart--------------------------------------------------------
102*c7a92574SPierre-Louis Bossart
103*c7a92574SPierre-Louis Bossart::
104*c7a92574SPierre-Louis Bossart
105*c7a92574SPierre-Louis Bossart  +-----------+
106*c7a92574SPierre-Louis Bossart  | ML cap #0 |
107*c7a92574SPierre-Louis Bossart  +-----------+
108*c7a92574SPierre-Louis Bossart  | ML cap #1 |
109*c7a92574SPierre-Louis Bossart  +-----------+
110*c7a92574SPierre-Louis Bossart  | ML cap #2 |---+
111*c7a92574SPierre-Louis Bossart  +-----------+   |
112*c7a92574SPierre-Louis Bossart                  |
113*c7a92574SPierre-Louis Bossart                  +--> 0x0 +---------------+ LCAP
114*c7a92574SPierre-Louis Bossart                           | ALT=1         |
115*c7a92574SPierre-Louis Bossart                           +---------------+
116*c7a92574SPierre-Louis Bossart                           | INTC          |
117*c7a92574SPierre-Louis Bossart                           +---------------+
118*c7a92574SPierre-Louis Bossart                           | OFLS          |
119*c7a92574SPierre-Louis Bossart                           +---------------+
120*c7a92574SPierre-Louis Bossart                           | LSS           |
121*c7a92574SPierre-Louis Bossart                           +---------------+
122*c7a92574SPierre-Louis Bossart                           | SLCOUNT=4     |-----------+
123*c7a92574SPierre-Louis Bossart                           +---------------+           |
124*c7a92574SPierre-Louis Bossart                                                       |
125*c7a92574SPierre-Louis Bossart                       0x4 +---------------+ LCTL      |
126*c7a92574SPierre-Louis Bossart                           | INTSTS        |           |
127*c7a92574SPierre-Louis Bossart                           +---------------+           |
128*c7a92574SPierre-Louis Bossart                           | CPA (x bits)  |           |
129*c7a92574SPierre-Louis Bossart                           +---------------+           |
130*c7a92574SPierre-Louis Bossart                           | SPA (x bits)  |           |
131*c7a92574SPierre-Louis Bossart                           +---------------+         for each sublink x
132*c7a92574SPierre-Louis Bossart                           | INTEN         |           |
133*c7a92574SPierre-Louis Bossart                           +---------------+           |
134*c7a92574SPierre-Louis Bossart                           | OFLEN         |           |
135*c7a92574SPierre-Louis Bossart                           +---------------+           |
136*c7a92574SPierre-Louis Bossart                                                       |
137*c7a92574SPierre-Louis Bossart                       0x8 +---------------+ LOSIDV    |
138*c7a92574SPierre-Louis Bossart                           | L1OSIVD15     |           |
139*c7a92574SPierre-Louis Bossart                           +---------------+           |
140*c7a92574SPierre-Louis Bossart                           | L1OSIDV..     |           |
141*c7a92574SPierre-Louis Bossart                           +---------------+           |
142*c7a92574SPierre-Louis Bossart                           | L1OSIDV1      |       +---+----------------------------------------------------------+
143*c7a92574SPierre-Louis Bossart                           +---------------+       |                                                              |
144*c7a92574SPierre-Louis Bossart                                                   v                                                              |
145*c7a92574SPierre-Louis Bossart             0xC + 0x2 * x +---------------+ LSDIIDx    +---> 0x30000  +-----------------+  0x00030000            |
146*c7a92574SPierre-Louis Bossart                           | SDIID14       |            |              | SoundWire SHIM  |                        |
147*c7a92574SPierre-Louis Bossart                           +---------------+            |              | generic         |                        |
148*c7a92574SPierre-Louis Bossart                           | SDIID...      |            |              +-----------------+  0x00030100            |
149*c7a92574SPierre-Louis Bossart                           +---------------+            |              | SoundWire IP    |                        |
150*c7a92574SPierre-Louis Bossart                           | SDIID0        |            |              +-----------------+  0x00036000            |
151*c7a92574SPierre-Louis Bossart                           +---------------+            |              | SoundWire SHIM  |                        |
152*c7a92574SPierre-Louis Bossart                                                        |              | vendor-specific |                        |
153*c7a92574SPierre-Louis Bossart                      0x1C +---------------+ LSYNC      |              +-----------------+                        |
154*c7a92574SPierre-Louis Bossart                           | CMDSYNC       |            |                                                         v
155*c7a92574SPierre-Louis Bossart                           +---------------+            |              +-----------------+  0x00030000 + 0x8000 * x
156*c7a92574SPierre-Louis Bossart                           | SYNCGO        |            |              | SoundWire SHIM  |
157*c7a92574SPierre-Louis Bossart                           +---------------+            |              | generic         |
158*c7a92574SPierre-Louis Bossart                           | SYNCPU        |            |              +-----------------+  0x00030100 + 0x8000 * x
159*c7a92574SPierre-Louis Bossart                           +---------------+            |              | SoundWire IP    |
160*c7a92574SPierre-Louis Bossart                           | SYNPRD        |            |              +-----------------+  0x00036000 + 0x8000 * x
161*c7a92574SPierre-Louis Bossart                           +---------------+            |              | SoundWire SHIM  |
162*c7a92574SPierre-Louis Bossart                                                        |              | vendor-specific |
163*c7a92574SPierre-Louis Bossart                      0x20 +---------------+ LEPTR      |              +-----------------+
164*c7a92574SPierre-Louis Bossart                           | ID = 0        |            |
165*c7a92574SPierre-Louis Bossart                           +---------------+            |
166*c7a92574SPierre-Louis Bossart                           | VER           |            |
167*c7a92574SPierre-Louis Bossart                           +---------------+            |
168*c7a92574SPierre-Louis Bossart                           | PTR           |------------+
169*c7a92574SPierre-Louis Bossart                           +---------------+
170*c7a92574SPierre-Louis Bossart
171*c7a92574SPierre-Louis Bossart
172*c7a92574SPierre-Louis BossartDMIC HDaudio extended link mapping
173*c7a92574SPierre-Louis Bossart==================================
174*c7a92574SPierre-Louis Bossart
175*c7a92574SPierre-Louis BossartA DMIC extended link is identified when LCAP.ALT=1 and
176*c7a92574SPierre-Louis BossartLEPTR.ID=0xC1 are set.
177*c7a92574SPierre-Louis Bossart
178*c7a92574SPierre-Louis BossartDMA control uses the existing LOSIDV register
179*c7a92574SPierre-Louis Bossart
180*c7a92574SPierre-Louis BossartChanges include additional descriptions for enumeration that were not
181*c7a92574SPierre-Louis Bossartpresent in earlier generations.
182*c7a92574SPierre-Louis Bossart
183*c7a92574SPierre-Louis Bossart- multi-link synchronization: capabilities in LCAP.LSS and control in LSYNC
184*c7a92574SPierre-Louis Bossart- power management with LCTL.SPA bits
185*c7a92574SPierre-Louis Bossart- hand-over to the DSP for access to multi-link registers, SHIM/IP with LCTL.OFLEN
186*c7a92574SPierre-Louis Bossart
187*c7a92574SPierre-Louis Bossart- move of DMIC registers to different offsets, with no change in
188*c7a92574SPierre-Louis Bossart  functionality. The LEPTR.PTR value is an offset from the ML
189*c7a92574SPierre-Louis Bossart  address, with a default value of 0x10000.
190*c7a92574SPierre-Louis Bossart
191*c7a92574SPierre-Louis BossartExtended structure for DMIC
192*c7a92574SPierre-Louis Bossart---------------------------
193*c7a92574SPierre-Louis Bossart
194*c7a92574SPierre-Louis Bossart::
195*c7a92574SPierre-Louis Bossart
196*c7a92574SPierre-Louis Bossart  +-----------+
197*c7a92574SPierre-Louis Bossart  | ML cap #0 |
198*c7a92574SPierre-Louis Bossart  +-----------+
199*c7a92574SPierre-Louis Bossart  | ML cap #1 |
200*c7a92574SPierre-Louis Bossart  +-----------+
201*c7a92574SPierre-Louis Bossart  | ML cap #2 |---+
202*c7a92574SPierre-Louis Bossart  +-----------+   |
203*c7a92574SPierre-Louis Bossart                  |
204*c7a92574SPierre-Louis Bossart                  +--> 0x0 +---------------+ LCAP
205*c7a92574SPierre-Louis Bossart                           | ALT=1         |
206*c7a92574SPierre-Louis Bossart                           +---------------+
207*c7a92574SPierre-Louis Bossart                           | INTC          |
208*c7a92574SPierre-Louis Bossart                           +---------------+
209*c7a92574SPierre-Louis Bossart                           | OFLS          |
210*c7a92574SPierre-Louis Bossart                           +---------------+
211*c7a92574SPierre-Louis Bossart                           | SLCOUNT=1     |
212*c7a92574SPierre-Louis Bossart                           +---------------+
213*c7a92574SPierre-Louis Bossart
214*c7a92574SPierre-Louis Bossart                       0x4 +---------------+ LCTL
215*c7a92574SPierre-Louis Bossart                           | INTSTS        |
216*c7a92574SPierre-Louis Bossart                           +---------------+
217*c7a92574SPierre-Louis Bossart                           | CPA           |
218*c7a92574SPierre-Louis Bossart                           +---------------+
219*c7a92574SPierre-Louis Bossart                           | SPA           |
220*c7a92574SPierre-Louis Bossart                           +---------------+
221*c7a92574SPierre-Louis Bossart                           | INTEN         |
222*c7a92574SPierre-Louis Bossart                           +---------------+
223*c7a92574SPierre-Louis Bossart                           | OFLEN         |
224*c7a92574SPierre-Louis Bossart                           +---------------+           +---> 0x10000  +-----------------+  0x00010000
225*c7a92574SPierre-Louis Bossart                                                       |              | DMIC SHIM       |
226*c7a92574SPierre-Louis Bossart                       0x8 +---------------+ LOSIDV    |              | generic         |
227*c7a92574SPierre-Louis Bossart                           | L1OSIVD15     |           |              +-----------------+  0x00010100
228*c7a92574SPierre-Louis Bossart                           +---------------+           |              | DMIC IP         |
229*c7a92574SPierre-Louis Bossart                           | L1OSIDV..     |           |              +-----------------+  0x00016000
230*c7a92574SPierre-Louis Bossart                           +---------------+           |              | DMIC SHIM       |
231*c7a92574SPierre-Louis Bossart                           | L1OSIDV1      |           |              | vendor-specific |
232*c7a92574SPierre-Louis Bossart                           +---------------+           |              +-----------------+
233*c7a92574SPierre-Louis Bossart                                                       |
234*c7a92574SPierre-Louis Bossart                      0x20 +---------------+ LEPTR     |
235*c7a92574SPierre-Louis Bossart                           | ID = 0xC1     |           |
236*c7a92574SPierre-Louis Bossart                           +---------------+           |
237*c7a92574SPierre-Louis Bossart                           | VER           |           |
238*c7a92574SPierre-Louis Bossart                           +---------------+           |
239*c7a92574SPierre-Louis Bossart                           | PTR           |-----------+
240*c7a92574SPierre-Louis Bossart                           +---------------+
241*c7a92574SPierre-Louis Bossart
242*c7a92574SPierre-Louis Bossart
243*c7a92574SPierre-Louis BossartSSP HDaudio extended link mapping
244*c7a92574SPierre-Louis Bossart=================================
245*c7a92574SPierre-Louis Bossart
246*c7a92574SPierre-Louis BossartA DMIC extended link is identified when LCAP.ALT=1 and
247*c7a92574SPierre-Louis BossartLEPTR.ID=0xC0 are set.
248*c7a92574SPierre-Louis Bossart
249*c7a92574SPierre-Louis BossartDMA control uses the existing LOSIDV register
250*c7a92574SPierre-Louis Bossart
251*c7a92574SPierre-Louis BossartChanges include additional descriptions for enumeration and control that were not
252*c7a92574SPierre-Louis Bossartpresent in earlier generations:
253*c7a92574SPierre-Louis Bossart- number of sublinks (SSP IP instances) in LCAP.LSCOUNT
254*c7a92574SPierre-Louis Bossart- power management moved from SHIM to LCTL.SPA bits
255*c7a92574SPierre-Louis Bossart- hand-over to the DSP for access to multi-link registers, SHIM/IP
256*c7a92574SPierre-Louis Bossartwith LCTL.OFLEN
257*c7a92574SPierre-Louis Bossart- move of SHIM and SSP IP registers to different offsets, with no
258*c7a92574SPierre-Louis Bossartchange in functionality.  The LEPTR.PTR value is an offset from the ML
259*c7a92574SPierre-Louis Bossartaddress, with a default value of 0x28000.
260*c7a92574SPierre-Louis Bossart
261*c7a92574SPierre-Louis BossartExtended structure for SSP (assuming 3 instances of the IP)
262*c7a92574SPierre-Louis Bossart-----------------------------------------------------------
263*c7a92574SPierre-Louis Bossart
264*c7a92574SPierre-Louis Bossart::
265*c7a92574SPierre-Louis Bossart
266*c7a92574SPierre-Louis Bossart  +-----------+
267*c7a92574SPierre-Louis Bossart  | ML cap #0 |
268*c7a92574SPierre-Louis Bossart  +-----------+
269*c7a92574SPierre-Louis Bossart  | ML cap #1 |
270*c7a92574SPierre-Louis Bossart  +-----------+
271*c7a92574SPierre-Louis Bossart  | ML cap #2 |---+
272*c7a92574SPierre-Louis Bossart  +-----------+   |
273*c7a92574SPierre-Louis Bossart                  |
274*c7a92574SPierre-Louis Bossart                  +--> 0x0 +---------------+ LCAP
275*c7a92574SPierre-Louis Bossart                           | ALT=1         |
276*c7a92574SPierre-Louis Bossart                           +---------------+
277*c7a92574SPierre-Louis Bossart                           | INTC          |
278*c7a92574SPierre-Louis Bossart                           +---------------+
279*c7a92574SPierre-Louis Bossart                           | OFLS          |
280*c7a92574SPierre-Louis Bossart                           +---------------+
281*c7a92574SPierre-Louis Bossart                           | SLCOUNT=3     |-------------------------for each sublink x -------------------------+
282*c7a92574SPierre-Louis Bossart                           +---------------+                                                                     |
283*c7a92574SPierre-Louis Bossart                                                                                                                 |
284*c7a92574SPierre-Louis Bossart                       0x4 +---------------+ LCTL                                                                |
285*c7a92574SPierre-Louis Bossart                           | INTSTS        |                                                                     |
286*c7a92574SPierre-Louis Bossart                           +---------------+                                                                     |
287*c7a92574SPierre-Louis Bossart                           | CPA (x bits)  |                                                                     |
288*c7a92574SPierre-Louis Bossart                           +---------------+                                                                     |
289*c7a92574SPierre-Louis Bossart                           | SPA (x bits)  |                                                                     |
290*c7a92574SPierre-Louis Bossart                           +---------------+                                                                     |
291*c7a92574SPierre-Louis Bossart                           | INTEN         |                                                                     |
292*c7a92574SPierre-Louis Bossart                           +---------------+                                                                     |
293*c7a92574SPierre-Louis Bossart                           | OFLEN         |                                                                     |
294*c7a92574SPierre-Louis Bossart                           +---------------+           +---> 0x28000  +-----------------+  0x00028000            |
295*c7a92574SPierre-Louis Bossart                                                       |              | SSP SHIM        |                        |
296*c7a92574SPierre-Louis Bossart                       0x8 +---------------+ LOSIDV    |              | generic         |                        |
297*c7a92574SPierre-Louis Bossart                           | L1OSIVD15     |           |              +-----------------+  0x00028100            |
298*c7a92574SPierre-Louis Bossart                           +---------------+           |              | SSP IP          |                        |
299*c7a92574SPierre-Louis Bossart                           | L1OSIDV..     |           |              +-----------------+  0x00028C00            |
300*c7a92574SPierre-Louis Bossart                           +---------------+           |              | SSP SHIM        |                        |
301*c7a92574SPierre-Louis Bossart                           | L1OSIDV1      |           |              | vendor-specific |                        |
302*c7a92574SPierre-Louis Bossart                           +---------------+           |              +-----------------+                        |
303*c7a92574SPierre-Louis Bossart                                                       |                                                         v
304*c7a92574SPierre-Louis Bossart                      0x20 +---------------+ LEPTR     |              +-----------------+  0x00028000 + 0x1000 * x
305*c7a92574SPierre-Louis Bossart                           | ID = 0xC0     |           |              | SSP SHIM        |
306*c7a92574SPierre-Louis Bossart                           +---------------+           |              | generic         |
307*c7a92574SPierre-Louis Bossart                           | VER           |           |              +-----------------+  0x00028100 + 0x1000 * x
308*c7a92574SPierre-Louis Bossart                           +---------------+           |              | SSP IP          |
309*c7a92574SPierre-Louis Bossart                           | PTR           |-----------+              +-----------------+  0x00028C00 + 0x1000 * x
310*c7a92574SPierre-Louis Bossart                           +---------------+                          | SSP SHIM        |
311*c7a92574SPierre-Louis Bossart                                                                      | vendor-specific |
312*c7a92574SPierre-Louis Bossart                                                                      +-----------------+
313