162306a36Sopenharmony_ci.. SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) 262306a36Sopenharmony_ci.. include:: <isonum.txt> 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci================================================ 562306a36Sopenharmony_ciHDAudio multi-link extensions on Intel platforms 662306a36Sopenharmony_ci================================================ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci:Copyright: |copy| 2023 Intel Corporation 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ciThis file documents the 'multi-link structure' introduced in 2015 with 1162306a36Sopenharmony_cithe Skylake processor and recently extended in newer Intel platforms 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ciHDaudio existing link mapping (2015 addition in SkyLake) 1462306a36Sopenharmony_ci======================================================== 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ciExternal HDAudio codecs are handled with link #0, while iDISP codec 1762306a36Sopenharmony_cifor HDMI/DisplayPort is handled with link #1. 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ciThe only change to the 2015 definitions is the declaration of the 2062306a36Sopenharmony_ciLCAP.ALT=0x0 - since the ALT bit was previously reserved, this is a 2162306a36Sopenharmony_cibackwards-compatible change. 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ciLCTL.SPA and LCTL.CPA are automatically set when exiting reset. They 2462306a36Sopenharmony_ciare only used in existing drivers when the SCF value needs to be 2562306a36Sopenharmony_cicorrected. 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ciBasic structure for HDaudio codecs 2862306a36Sopenharmony_ci---------------------------------- 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci:: 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci +-----------+ 3362306a36Sopenharmony_ci | ML cap #0 | 3462306a36Sopenharmony_ci +-----------+ 3562306a36Sopenharmony_ci | ML cap #1 |---+ 3662306a36Sopenharmony_ci +-----------+ | 3762306a36Sopenharmony_ci | 3862306a36Sopenharmony_ci +--> 0x0 +---------------+ LCAP 3962306a36Sopenharmony_ci | ALT=0 | 4062306a36Sopenharmony_ci +---------------+ 4162306a36Sopenharmony_ci | S192 | 4262306a36Sopenharmony_ci +---------------+ 4362306a36Sopenharmony_ci | S96 | 4462306a36Sopenharmony_ci +---------------+ 4562306a36Sopenharmony_ci | S48 | 4662306a36Sopenharmony_ci +---------------+ 4762306a36Sopenharmony_ci | S24 | 4862306a36Sopenharmony_ci +---------------+ 4962306a36Sopenharmony_ci | S12 | 5062306a36Sopenharmony_ci +---------------+ 5162306a36Sopenharmony_ci | S6 | 5262306a36Sopenharmony_ci +---------------+ 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci 0x4 +---------------+ LCTL 5562306a36Sopenharmony_ci | INTSTS | 5662306a36Sopenharmony_ci +---------------+ 5762306a36Sopenharmony_ci | CPA | 5862306a36Sopenharmony_ci +---------------+ 5962306a36Sopenharmony_ci | SPA | 6062306a36Sopenharmony_ci +---------------+ 6162306a36Sopenharmony_ci | SCF | 6262306a36Sopenharmony_ci +---------------+ 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci 0x8 +---------------+ LOSIDV 6562306a36Sopenharmony_ci | L1OSIVD15 | 6662306a36Sopenharmony_ci +---------------+ 6762306a36Sopenharmony_ci | L1OSIDV.. | 6862306a36Sopenharmony_ci +---------------+ 6962306a36Sopenharmony_ci | L1OSIDV1 | 7062306a36Sopenharmony_ci +---------------+ 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci 0xC +---------------+ LSDIID 7362306a36Sopenharmony_ci | SDIID14 | 7462306a36Sopenharmony_ci +---------------+ 7562306a36Sopenharmony_ci | SDIID... | 7662306a36Sopenharmony_ci +---------------+ 7762306a36Sopenharmony_ci | SDIID0 | 7862306a36Sopenharmony_ci +---------------+ 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_ciSoundWire HDaudio extended link mapping 8162306a36Sopenharmony_ci======================================= 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ciA SoundWire extended link is identified when LCAP.ALT=1 and 8462306a36Sopenharmony_ciLEPTR.ID=0. 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_ciDMA control uses the existing LOSIDV register. 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ciChanges include additional descriptions for enumeration that were not 8962306a36Sopenharmony_cipresent in earlier generations. 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci- multi-link synchronization: capabilities in LCAP.LSS and control in LSYNC 9262306a36Sopenharmony_ci- number of sublinks (manager IP) in LCAP.LSCOUNT 9362306a36Sopenharmony_ci- power management moved from SHIM to LCTL.SPA bits 9462306a36Sopenharmony_ci- hand-over to the DSP for access to multi-link registers, SHIM/IP with LCTL.OFLEN 9562306a36Sopenharmony_ci- mapping of SoundWire codecs to SDI ID bits 9662306a36Sopenharmony_ci- move of SHIM and Cadence registers to different offsets, with no 9762306a36Sopenharmony_ci change in functionality. The LEPTR.PTR value is an offset from the 9862306a36Sopenharmony_ci ML address, with a default value of 0x30000. 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_ciExtended structure for SoundWire (assuming 4 Manager IP) 10162306a36Sopenharmony_ci-------------------------------------------------------- 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ci:: 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci +-----------+ 10662306a36Sopenharmony_ci | ML cap #0 | 10762306a36Sopenharmony_ci +-----------+ 10862306a36Sopenharmony_ci | ML cap #1 | 10962306a36Sopenharmony_ci +-----------+ 11062306a36Sopenharmony_ci | ML cap #2 |---+ 11162306a36Sopenharmony_ci +-----------+ | 11262306a36Sopenharmony_ci | 11362306a36Sopenharmony_ci +--> 0x0 +---------------+ LCAP 11462306a36Sopenharmony_ci | ALT=1 | 11562306a36Sopenharmony_ci +---------------+ 11662306a36Sopenharmony_ci | INTC | 11762306a36Sopenharmony_ci +---------------+ 11862306a36Sopenharmony_ci | OFLS | 11962306a36Sopenharmony_ci +---------------+ 12062306a36Sopenharmony_ci | LSS | 12162306a36Sopenharmony_ci +---------------+ 12262306a36Sopenharmony_ci | SLCOUNT=4 |-----------+ 12362306a36Sopenharmony_ci +---------------+ | 12462306a36Sopenharmony_ci | 12562306a36Sopenharmony_ci 0x4 +---------------+ LCTL | 12662306a36Sopenharmony_ci | INTSTS | | 12762306a36Sopenharmony_ci +---------------+ | 12862306a36Sopenharmony_ci | CPA (x bits) | | 12962306a36Sopenharmony_ci +---------------+ | 13062306a36Sopenharmony_ci | SPA (x bits) | | 13162306a36Sopenharmony_ci +---------------+ for each sublink x 13262306a36Sopenharmony_ci | INTEN | | 13362306a36Sopenharmony_ci +---------------+ | 13462306a36Sopenharmony_ci | OFLEN | | 13562306a36Sopenharmony_ci +---------------+ | 13662306a36Sopenharmony_ci | 13762306a36Sopenharmony_ci 0x8 +---------------+ LOSIDV | 13862306a36Sopenharmony_ci | L1OSIVD15 | | 13962306a36Sopenharmony_ci +---------------+ | 14062306a36Sopenharmony_ci | L1OSIDV.. | | 14162306a36Sopenharmony_ci +---------------+ | 14262306a36Sopenharmony_ci | L1OSIDV1 | +---+----------------------------------------------------------+ 14362306a36Sopenharmony_ci +---------------+ | | 14462306a36Sopenharmony_ci v | 14562306a36Sopenharmony_ci 0xC + 0x2 * x +---------------+ LSDIIDx +---> 0x30000 +-----------------+ 0x00030000 | 14662306a36Sopenharmony_ci | SDIID14 | | | SoundWire SHIM | | 14762306a36Sopenharmony_ci +---------------+ | | generic | | 14862306a36Sopenharmony_ci | SDIID... | | +-----------------+ 0x00030100 | 14962306a36Sopenharmony_ci +---------------+ | | SoundWire IP | | 15062306a36Sopenharmony_ci | SDIID0 | | +-----------------+ 0x00036000 | 15162306a36Sopenharmony_ci +---------------+ | | SoundWire SHIM | | 15262306a36Sopenharmony_ci | | vendor-specific | | 15362306a36Sopenharmony_ci 0x1C +---------------+ LSYNC | +-----------------+ | 15462306a36Sopenharmony_ci | CMDSYNC | | v 15562306a36Sopenharmony_ci +---------------+ | +-----------------+ 0x00030000 + 0x8000 * x 15662306a36Sopenharmony_ci | SYNCGO | | | SoundWire SHIM | 15762306a36Sopenharmony_ci +---------------+ | | generic | 15862306a36Sopenharmony_ci | SYNCPU | | +-----------------+ 0x00030100 + 0x8000 * x 15962306a36Sopenharmony_ci +---------------+ | | SoundWire IP | 16062306a36Sopenharmony_ci | SYNPRD | | +-----------------+ 0x00036000 + 0x8000 * x 16162306a36Sopenharmony_ci +---------------+ | | SoundWire SHIM | 16262306a36Sopenharmony_ci | | vendor-specific | 16362306a36Sopenharmony_ci 0x20 +---------------+ LEPTR | +-----------------+ 16462306a36Sopenharmony_ci | ID = 0 | | 16562306a36Sopenharmony_ci +---------------+ | 16662306a36Sopenharmony_ci | VER | | 16762306a36Sopenharmony_ci +---------------+ | 16862306a36Sopenharmony_ci | PTR |------------+ 16962306a36Sopenharmony_ci +---------------+ 17062306a36Sopenharmony_ci 17162306a36Sopenharmony_ci 17262306a36Sopenharmony_ciDMIC HDaudio extended link mapping 17362306a36Sopenharmony_ci================================== 17462306a36Sopenharmony_ci 17562306a36Sopenharmony_ciA DMIC extended link is identified when LCAP.ALT=1 and 17662306a36Sopenharmony_ciLEPTR.ID=0xC1 are set. 17762306a36Sopenharmony_ci 17862306a36Sopenharmony_ciDMA control uses the existing LOSIDV register 17962306a36Sopenharmony_ci 18062306a36Sopenharmony_ciChanges include additional descriptions for enumeration that were not 18162306a36Sopenharmony_cipresent in earlier generations. 18262306a36Sopenharmony_ci 18362306a36Sopenharmony_ci- multi-link synchronization: capabilities in LCAP.LSS and control in LSYNC 18462306a36Sopenharmony_ci- power management with LCTL.SPA bits 18562306a36Sopenharmony_ci- hand-over to the DSP for access to multi-link registers, SHIM/IP with LCTL.OFLEN 18662306a36Sopenharmony_ci 18762306a36Sopenharmony_ci- move of DMIC registers to different offsets, with no change in 18862306a36Sopenharmony_ci functionality. The LEPTR.PTR value is an offset from the ML 18962306a36Sopenharmony_ci address, with a default value of 0x10000. 19062306a36Sopenharmony_ci 19162306a36Sopenharmony_ciExtended structure for DMIC 19262306a36Sopenharmony_ci--------------------------- 19362306a36Sopenharmony_ci 19462306a36Sopenharmony_ci:: 19562306a36Sopenharmony_ci 19662306a36Sopenharmony_ci +-----------+ 19762306a36Sopenharmony_ci | ML cap #0 | 19862306a36Sopenharmony_ci +-----------+ 19962306a36Sopenharmony_ci | ML cap #1 | 20062306a36Sopenharmony_ci +-----------+ 20162306a36Sopenharmony_ci | ML cap #2 |---+ 20262306a36Sopenharmony_ci +-----------+ | 20362306a36Sopenharmony_ci | 20462306a36Sopenharmony_ci +--> 0x0 +---------------+ LCAP 20562306a36Sopenharmony_ci | ALT=1 | 20662306a36Sopenharmony_ci +---------------+ 20762306a36Sopenharmony_ci | INTC | 20862306a36Sopenharmony_ci +---------------+ 20962306a36Sopenharmony_ci | OFLS | 21062306a36Sopenharmony_ci +---------------+ 21162306a36Sopenharmony_ci | SLCOUNT=1 | 21262306a36Sopenharmony_ci +---------------+ 21362306a36Sopenharmony_ci 21462306a36Sopenharmony_ci 0x4 +---------------+ LCTL 21562306a36Sopenharmony_ci | INTSTS | 21662306a36Sopenharmony_ci +---------------+ 21762306a36Sopenharmony_ci | CPA | 21862306a36Sopenharmony_ci +---------------+ 21962306a36Sopenharmony_ci | SPA | 22062306a36Sopenharmony_ci +---------------+ 22162306a36Sopenharmony_ci | INTEN | 22262306a36Sopenharmony_ci +---------------+ 22362306a36Sopenharmony_ci | OFLEN | 22462306a36Sopenharmony_ci +---------------+ +---> 0x10000 +-----------------+ 0x00010000 22562306a36Sopenharmony_ci | | DMIC SHIM | 22662306a36Sopenharmony_ci 0x8 +---------------+ LOSIDV | | generic | 22762306a36Sopenharmony_ci | L1OSIVD15 | | +-----------------+ 0x00010100 22862306a36Sopenharmony_ci +---------------+ | | DMIC IP | 22962306a36Sopenharmony_ci | L1OSIDV.. | | +-----------------+ 0x00016000 23062306a36Sopenharmony_ci +---------------+ | | DMIC SHIM | 23162306a36Sopenharmony_ci | L1OSIDV1 | | | vendor-specific | 23262306a36Sopenharmony_ci +---------------+ | +-----------------+ 23362306a36Sopenharmony_ci | 23462306a36Sopenharmony_ci 0x20 +---------------+ LEPTR | 23562306a36Sopenharmony_ci | ID = 0xC1 | | 23662306a36Sopenharmony_ci +---------------+ | 23762306a36Sopenharmony_ci | VER | | 23862306a36Sopenharmony_ci +---------------+ | 23962306a36Sopenharmony_ci | PTR |-----------+ 24062306a36Sopenharmony_ci +---------------+ 24162306a36Sopenharmony_ci 24262306a36Sopenharmony_ci 24362306a36Sopenharmony_ciSSP HDaudio extended link mapping 24462306a36Sopenharmony_ci================================= 24562306a36Sopenharmony_ci 24662306a36Sopenharmony_ciA DMIC extended link is identified when LCAP.ALT=1 and 24762306a36Sopenharmony_ciLEPTR.ID=0xC0 are set. 24862306a36Sopenharmony_ci 24962306a36Sopenharmony_ciDMA control uses the existing LOSIDV register 25062306a36Sopenharmony_ci 25162306a36Sopenharmony_ciChanges include additional descriptions for enumeration and control that were not 25262306a36Sopenharmony_cipresent in earlier generations: 25362306a36Sopenharmony_ci- number of sublinks (SSP IP instances) in LCAP.LSCOUNT 25462306a36Sopenharmony_ci- power management moved from SHIM to LCTL.SPA bits 25562306a36Sopenharmony_ci- hand-over to the DSP for access to multi-link registers, SHIM/IP 25662306a36Sopenharmony_ciwith LCTL.OFLEN 25762306a36Sopenharmony_ci- move of SHIM and SSP IP registers to different offsets, with no 25862306a36Sopenharmony_cichange in functionality. The LEPTR.PTR value is an offset from the ML 25962306a36Sopenharmony_ciaddress, with a default value of 0x28000. 26062306a36Sopenharmony_ci 26162306a36Sopenharmony_ciExtended structure for SSP (assuming 3 instances of the IP) 26262306a36Sopenharmony_ci----------------------------------------------------------- 26362306a36Sopenharmony_ci 26462306a36Sopenharmony_ci:: 26562306a36Sopenharmony_ci 26662306a36Sopenharmony_ci +-----------+ 26762306a36Sopenharmony_ci | ML cap #0 | 26862306a36Sopenharmony_ci +-----------+ 26962306a36Sopenharmony_ci | ML cap #1 | 27062306a36Sopenharmony_ci +-----------+ 27162306a36Sopenharmony_ci | ML cap #2 |---+ 27262306a36Sopenharmony_ci +-----------+ | 27362306a36Sopenharmony_ci | 27462306a36Sopenharmony_ci +--> 0x0 +---------------+ LCAP 27562306a36Sopenharmony_ci | ALT=1 | 27662306a36Sopenharmony_ci +---------------+ 27762306a36Sopenharmony_ci | INTC | 27862306a36Sopenharmony_ci +---------------+ 27962306a36Sopenharmony_ci | OFLS | 28062306a36Sopenharmony_ci +---------------+ 28162306a36Sopenharmony_ci | SLCOUNT=3 |-------------------------for each sublink x -------------------------+ 28262306a36Sopenharmony_ci +---------------+ | 28362306a36Sopenharmony_ci | 28462306a36Sopenharmony_ci 0x4 +---------------+ LCTL | 28562306a36Sopenharmony_ci | INTSTS | | 28662306a36Sopenharmony_ci +---------------+ | 28762306a36Sopenharmony_ci | CPA (x bits) | | 28862306a36Sopenharmony_ci +---------------+ | 28962306a36Sopenharmony_ci | SPA (x bits) | | 29062306a36Sopenharmony_ci +---------------+ | 29162306a36Sopenharmony_ci | INTEN | | 29262306a36Sopenharmony_ci +---------------+ | 29362306a36Sopenharmony_ci | OFLEN | | 29462306a36Sopenharmony_ci +---------------+ +---> 0x28000 +-----------------+ 0x00028000 | 29562306a36Sopenharmony_ci | | SSP SHIM | | 29662306a36Sopenharmony_ci 0x8 +---------------+ LOSIDV | | generic | | 29762306a36Sopenharmony_ci | L1OSIVD15 | | +-----------------+ 0x00028100 | 29862306a36Sopenharmony_ci +---------------+ | | SSP IP | | 29962306a36Sopenharmony_ci | L1OSIDV.. | | +-----------------+ 0x00028C00 | 30062306a36Sopenharmony_ci +---------------+ | | SSP SHIM | | 30162306a36Sopenharmony_ci | L1OSIDV1 | | | vendor-specific | | 30262306a36Sopenharmony_ci +---------------+ | +-----------------+ | 30362306a36Sopenharmony_ci | v 30462306a36Sopenharmony_ci 0x20 +---------------+ LEPTR | +-----------------+ 0x00028000 + 0x1000 * x 30562306a36Sopenharmony_ci | ID = 0xC0 | | | SSP SHIM | 30662306a36Sopenharmony_ci +---------------+ | | generic | 30762306a36Sopenharmony_ci | VER | | +-----------------+ 0x00028100 + 0x1000 * x 30862306a36Sopenharmony_ci +---------------+ | | SSP IP | 30962306a36Sopenharmony_ci | PTR |-----------+ +-----------------+ 0x00028C00 + 0x1000 * x 31062306a36Sopenharmony_ci +---------------+ | SSP SHIM | 31162306a36Sopenharmony_ci | vendor-specific | 31262306a36Sopenharmony_ci +-----------------+ 313