Documentation/sound/hd-audio/intel-multi-link.rst
.. SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) .. include:: <isonum.txt>
:Copyright: |copy| 2023 Intel Corporation
This file documents the 'multi-link structure' introduced in 2015 with the Skylake processor and recently extended in newer Intel platforms
External HDAudio codecs are handled with link #0, while iDISP codec for HDMI/DisplayPort is handled with link #1.
The only change to the 2015 definitions is the declaration of the LCAP.ALT=0x0 - since the ALT bit was previously reserved, this is a backwards-compatible change.
LCTL.SPA and LCTL.CPA are automatically set when exiting reset. They are only used in existing drivers when the SCF value needs to be corrected.
::
+-----------+ | ML cap #0 | +-----------+ | ML cap #1 |---+ +-----------+ | | +--> 0x0 +---------------+ LCAP | ALT=0 | +---------------+ | S192 | +---------------+ | S96 | +---------------+ | S48 | +---------------+ | S24 | +---------------+ | S12 | +---------------+ | S6 | +---------------+
0x4 +---------------+ LCTL
| INTSTS |
+---------------+
| CPA |
+---------------+
| SPA |
+---------------+
| SCF |
+---------------+
0x8 +---------------+ LOSIDV
| L1OSIVD15 |
+---------------+
| L1OSIDV.. |
+---------------+
| L1OSIDV1 |
+---------------+
0xC +---------------+ LSDIID
| SDIID14 |
+---------------+
| SDIID... |
+---------------+
| SDIID0 |
+---------------+
A SoundWire extended link is identified when LCAP.ALT=1 and LEPTR.ID=0.
DMA control uses the existing LOSIDV register.
Changes include additional descriptions for enumeration that were not present in earlier generations.
::
+-----------+ | ML cap #0 | +-----------+ | ML cap #1 | +-----------+ | ML cap #2 |---+ +-----------+ | | +--> 0x0 +---------------+ LCAP | ALT=1 | +---------------+ | INTC | +---------------+ | OFLS | +---------------+ | LSS | +---------------+ | SLCOUNT=4 |-----------+ +---------------+ | | 0x4 +---------------+ LCTL | | INTSTS | | +---------------+ | | CPA (x bits) | | +---------------+ | | SPA (x bits) | | +---------------+ for each sublink x | INTEN | | +---------------+ | | OFLEN | | +---------------+ | | 0x8 +---------------+ LOSIDV | | L1OSIVD15 | | +---------------+ | | L1OSIDV.. | | +---------------+ | | L1OSIDV1 | +---+----------------------------------------------------------+ +---------------+ | | v | 0xC + 0x2 * x +---------------+ LSDIIDx +---> 0x30000 +-----------------+ 0x00030000 | | SDIID14 | | | SoundWire SHIM | | +---------------+ | | generic | | | SDIID... | | +-----------------+ 0x00030100 | +---------------+ | | SoundWire IP | | | SDIID0 | | +-----------------+ 0x00036000 | +---------------+ | | SoundWire SHIM | | | | vendor-specific | | 0x1C +---------------+ LSYNC | +-----------------+ | | CMDSYNC | | v +---------------+ | +-----------------+ 0x00030000 + 0x8000 * x | SYNCGO | | | SoundWire SHIM | +---------------+ | | generic | | SYNCPU | | +-----------------+ 0x00030100 + 0x8000 * x +---------------+ | | SoundWire IP | | SYNPRD | | +-----------------+ 0x00036000 + 0x8000 * x +---------------+ | | SoundWire SHIM | | | vendor-specific | 0x20 +---------------+ LEPTR | +-----------------+ | ID = 0 | | +---------------+ | | VER | | +---------------+ | | PTR |------------+ +---------------+
A DMIC extended link is identified when LCAP.ALT=1 and LEPTR.ID=0xC1 are set.
DMA control uses the existing LOSIDV register
Changes include additional descriptions for enumeration that were not present in earlier generations.
multi-link synchronization: capabilities in LCAP.LSS and control in LSYNC
power management with LCTL.SPA bits
hand-over to the DSP for access to multi-link registers, SHIM/IP with LCTL.OFLEN
move of DMIC registers to different offsets, with no change in functionality. The LEPTR.PTR value is an offset from the ML address, with a default value of 0x10000.
::
+-----------+ | ML cap #0 | +-----------+ | ML cap #1 | +-----------+ | ML cap #2 |---+ +-----------+ | | +--> 0x0 +---------------+ LCAP | ALT=1 | +---------------+ | INTC | +---------------+ | OFLS | +---------------+ | SLCOUNT=1 | +---------------+
0x4 +---------------+ LCTL
| INTSTS |
+---------------+
| CPA |
+---------------+
| SPA |
+---------------+
| INTEN |
+---------------+
| OFLEN |
+---------------+ +---> 0x10000 +-----------------+ 0x00010000
| | DMIC SHIM |
0x8 +---------------+ LOSIDV | | generic |
| L1OSIVD15 | | +-----------------+ 0x00010100
+---------------+ | | DMIC IP |
| L1OSIDV.. | | +-----------------+ 0x00016000
+---------------+ | | DMIC SHIM |
| L1OSIDV1 | | | vendor-specific |
+---------------+ | +-----------------+
|
0x20 +---------------+ LEPTR |
| ID = 0xC1 | |
+---------------+ |
| VER | |
+---------------+ |
| PTR |-----------+
+---------------+
A DMIC extended link is identified when LCAP.ALT=1 and LEPTR.ID=0xC0 are set.
DMA control uses the existing LOSIDV register
Changes include additional descriptions for enumeration and control that were not present in earlier generations:
::
+-----------+ | ML cap #0 | +-----------+ | ML cap #1 | +-----------+ | ML cap #2 |---+ +-----------+ | | +--> 0x0 +---------------+ LCAP | ALT=1 | +---------------+ | INTC | +---------------+ | OFLS | +---------------+ | SLCOUNT=3 |-------------------------for each sublink x -------------------------+ +---------------+ | | 0x4 +---------------+ LCTL | | INTSTS | | +---------------+ | | CPA (x bits) | | +---------------+ | | SPA (x bits) | | +---------------+ | | INTEN | | +---------------+ | | OFLEN | | +---------------+ +---> 0x28000 +-----------------+ 0x00028000 | | | SSP SHIM | | 0x8 +---------------+ LOSIDV | | generic | | | L1OSIVD15 | | +-----------------+ 0x00028100 | +---------------+ | | SSP IP | | | L1OSIDV.. | | +-----------------+ 0x00028C00 | +---------------+ | | SSP SHIM | | | L1OSIDV1 | | | vendor-specific | | +---------------+ | +-----------------+ | | v 0x20 +---------------+ LEPTR | +-----------------+ 0x00028000 + 0x1000 * x | ID = 0xC0 | | | SSP SHIM | +---------------+ | | generic | | VER | | +-----------------+ 0x00028100 + 0x1000 * x +---------------+ | | SSP IP | | PTR |-----------+ +-----------------+ 0x00028C00 + 0x1000 * x +---------------+ | SSP SHIM | | vendor-specific | +-----------------+