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