Skip to content

[QUALIFICATION - DO NOT MERGE] SP11 7.2.5-v2 TX/Golden audio group - #53

Closed
ooaklee wants to merge 2125 commits into
sp11/ubuntu-qcom-x1e-7.2.y-betafrom
x/qualification-7.2.5-audio-v2
Closed

ooaklee wants to merge 2125 commits into
sp11/ubuntu-qcom-x1e-7.2.y-betafrom
x/qualification-7.2.5-audio-v2

Conversation

@ooaklee

@ooaklee ooaklee commented Sep 29, 2026 •

Copy link
Copy Markdown
Owner

Qualification only — do not merge or install unattended

This is a package/test carrier for the TX DMIC + Golden playback dependency
group
, not a full-feature integration PR. The existing topic PRs remain the
source-review records. No hardware pass, safe speaker operation or suspend fix
is claimed. Golden contributor attestation and non-SP11 qualification remain
separate gates.

Hardware qualification — audio failed (2026-09-29)

The user booted the exact v2 ABI and reported unsolicited speaker static after
login lasting at least two minutes, recurring on a volume increase. Static later
stopped; the user muted and returned to the known-good v23 kernel, then confirmed
no static since returning. V2 fails audio qualification on this unit. Do not
merge, promote, or repeat v2 playback/volume tests unattended.

Read-only capture verified the intended v2 kernel and matching OLED DTB, the
audio card and both amplifier drivers. Returning to v23 is independently verified;
v23 remains the default/fallback. All 817 commonly captured audio-file hashes,
the complete captured topology inventory, and UCM routing text are unchanged.
This proves on-disk parity, not identical effective controls or DSP state.
No runtime audio stimulus or configuration change was initiated by the investigator.

Two leads remain causally unproven:

  • The qualified v23 source resends individual calibration records after an
    unsupported aggregate response; the guarded v2 source omits that active
    diagnostic behavior. Both saved v23 boots show 107 individual records, 106
    accepted and one rejected. An offline harness running the two source-extracted
    calibration functions against the hash-verified installed topology reproduces
    108 versus 1 transport requests on the first such call, with ten mocked
    scenarios passing under address/undefined-behavior sanitizers. It also shows
    why blindly restoring the old diagnostic is unsuitable: it continues after
    an injected individual-write failure. These are mocked request-boundary tests,
    not DSP, concurrency, kernel-build or hardware acceptance.
  • V2 records 20 unregistered dynamic GPR-port messages during seconds 10.93–18.06;
    neither saved v23 boot records these messages. Packet opcodes and exact
    user-audible event times are unavailable. The drops do not prove premature
    teardown or explain the static; callback/lifetime safety guards must remain.

The timeout, aggregate-unsupported and register-cache warnings also occur in
v23 and do not distinguish this regression. Offline calibration transaction and
port-lifetime auditing continues; there is no proven audio fix. No current v2
touch, microphone or suspend pass is inferred. All contributor-attestation,
non-SP11, dependency-group and full-feature hardware gates remain.

Exact composition

  • Upstream: e57ec2987d4540fa89280d349f79c4d9bcd7cf27 (7.2.5).
  • Refresh: [QUALIFICATION - DO NOT MERGE] Refresh SP11 beta onto rebased 7.2.5 #51, bdae86ee3b4ef317df96b0e2e1b3a77c15b9a221.
  • TX then Golden: the published 41-commit stack ending at
    3cfbd3b5e025ab693df41680dcbf22154fbf51b8; every commit remains an ancestor.
  • GPI repair: the existing dmaengine: qcom: gpi: order event ring pointer reads #45 port, replayed as 23b00ef80d6f with original
    author/date/message and source attribution retained.
  • Head: 91917314b7fd14498e527fcdcb511f1c1817a2c5.
  • Tree: 1b2df4e5b152350c54ead8e67c17d2838641ddac.
  • Package version: 7.2.5-jg-0sp11v2.
  • ABI: 7.2.5-jg-0sp11v2-qcom-x1e.

Relative to the installed v1 input carrier (#52, e89ea031c208), the entire
non-changelog diff is byte-identical to the refresh-to-TX/Golden diff: 26 paths.
The GPI file is byte-identical to v1, and no other packaging/configuration file
changes. The held camera repair, battery-provider and platform-profile ports
are excluded; their base drivers are not removed. This does not discard them
from the final parity objective.

See the published topic mapping and actual v1 hardware result.
V1's positive touch/pen observations and failed suspend are not v2 acceptance.
V1 omitted TX/Golden; its missing ALSA cards did not constitute a failure verdict
on the then-untested port. The subsequent v2 audio failure is recorded above. V23 remains the known-good recovery reference.

Completed software and package evidence — 2026-09-29

  • Exact composition/attribution audit passes; no speculative runtime fix added.
  • Integration validator passes, including per-commit checks of all 43 commits
    above the refresh. Existing aggregate baseline diagnostics remain recorded;
    this is not a warning-free whole-tree claim.
  • Actual Linux packaging rules confirm version, ABI and do_dtbs=true /
    do_stubble=false; the version sorts after v1.
  • Clean Lexr source: b74247d08f7ccf90110a291c62c5fb56d895c55f, built with
    Go 1.26.4. This is exactly the source tagged v0.5.0-rc.5; the producer's
    older descriptive label reflects the tag not being fetched when it was built.
    Build, boot-support, installer and build-helper unit tests pass.
    Build/boot-support source is unchanged from v1's rc.4 producer; installer
    ownership fixes are included.
  • Build mode: source; same pinned container and recipe as v1, fresh work
    volume/output, eight jobs. The full compile/link/modules/DTBs and Debian package
    build completed successfully, producing all five intended package roles.
  • Resolved toolchain fingerprint matches v1 exactly:
    e2b6a8df8ea0639af781da707353f7745145b5071ffbf4bec77209f275fbb974.
    The final packaged config differs from v1 only in the exact version signature.
  • Independent extraction verifies all 7,816 modules, exact ABI/vermagic,
    complete module-list agreement with the separately built source references,
    both compiled Denali DTBs, and exact-ABI boot-support/image hooks and triggers.
    The external-DTB delivery mode is expected; no .dtbauto or .dtb PE section.
    This is structural package evidence, not installed lifecycle or hardware proof.
  • Manifest/provenance, checksums, native inspection, relocated-bundle inspection
    and runtime-only selection pass. Runtime selection retains boot support.
  • All 73 existing build warnings remain recorded. The only diagnostic-text
    changes from v1 are ephemeral container hostnames in six Equivs dependency
    package warnings; no new compiler diagnostic was found. This is not a waiver
    or a warning-free claim.
  • Extracted vmlinuz SHA-256:
    496938d074ef8feffc2b09b5b6277cfc5390fb2e67a01c0af30c12db0398bfc4.
  • OLED DTB SHA-256:
    13e722f2921972dc0adb2ef705c999a08d942cac475d186233a4d68611c4072f.
  • LCD DTB SHA-256:
    50c8751319f75191a64cd1a230d8645f8e84d2f8a7da150d78dce1ec3367a343.

Surface read-only preflight — passed before installation

The verified bundle was copied with explicit user approval. A logged GNU screen
ran the reviewed read-only checks using v0.5.0-rc.5 at the same CLI commit.
Native preflight identifies v2 as absent-and-eligible, verifies all five
packages, and accepts v23 as the running/recovery kernel. Recovery doctor is
ready and resolves the default to v23 without a stale selection. The usual
multi-boot discovery warning remains; other operating systems are not certified.

Kernel/initramfs and captured GRUB/configuration hashes, CLI bytes and installed
package records matched before/after; dpkg audit was empty. No mutation was
performed during that preflight. The separately authorised installation below
supersedes the earlier not-installed status.

Historical Surface installation — passed before the hardware trial

On September 29, explicit user approval allowed installing v2 while preserving
v23 as default and fallback. The screened installation completed successfully
using Lexr v0.5.0-rc.5, with no force, overwrite or unverified-input bypass.

  • All five packages are fully configured at the expected version. Exactly four
    v2 packages were added and shared boot support advanced from v1 to v2; no
    package removal or unrelated package-record change occurred.
  • The installed kernel and both packaged Denali DTBs match the build hashes.
    All three v2 GRUB entries have matching external OLED DTB bindings. Doctor
    reports ready, GRUB syntax passes and dpkg audit is empty.
  • V23 remains running and the resolved default/fallback. Its kernel, initramfs,
    configuration, System.map and OLED DTB hashes are unchanged, as are grubenv
    and the captured GRUB default settings. Boot ID is unchanged; no rollback
    was needed.

At installation completion, v2 had not yet been booted or hardware-qualified.
No reboot or audio/suspend stimulus occurred during installation. The later
user-performed boot and failed audio qualification are recorded above; the
installation result does not establish audio, input, probe or suspend parity.

Source inspection also confirms the topology lookup name remains
qcom/x1e80100/X1E80100-Microsoft-Surface-Pro-11-tplg.bin. The Denali-specific
match does not itself require a userspace namespace rename. This does not prove
UCM control compatibility or safe audio; preserve and identify the working
userspace for the controlled hardware comparison rather than reinstalling it
speculatively. OpenCode/Zai-Codex reviewed the supplied evidence and scope;
it did not independently inspect the Surface or certify hardware behavior.

Gates before any test

  1. Local package checks, read-only preflight and the explicitly approved
    installation are complete. Post-install bindings and v23 preservation pass;
    the subsequent first boot failed audio qualification. No further v2 playback
    reproduction is needed; investigate offline and separately review any new candidate.
  2. Retain separate TX-only and TX/Golden evidence; neither source compilation nor
    a combined audio result replaces the remaining dependency-group hardware tests.
  3. Use a supervised, explicitly scoped installation/boot plan with v23 preserved.
    No automatic reboot, volume/playback/notification stimulus or repeated suspend.
    Desktop mute is not a verified speaker-isolation mechanism.
  4. Inspect the saved probe hang and collect adequate passive diagnostics before
    attempting any new suspend test. Its cause is unresolved.
  5. Qualify all intended behavioural changes, non-SP11 shared-driver containment
    and provenance before final integration. Do not merge this packaging carrier.

jglathe and others added 30 commits September 16, 2026 22:34
add rfkill, mac addresses, pcie4 pinctrl

Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
previously was /usr/lib/, /usr/share/

Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
When booting in EL2 Linux takes ownership of the SMMUv3 and needs a
40-bit address space on /soc so that PCIe (and other masters) can
actually reach RAM above 32 GB.

Add the necessary #address-cells/#size-cells + dma-ranges/ranges
inside the existing x1-el2.dtso.  Suppress the avoid_default_addr_size
warning that this naturally triggers on an overlay that touches the
SoC bus node.

Link: https://lore.kernel.org/all/aSl48gV9laFb-MR1@linaro.org/
Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
EDID:

00 ff ff ff ff ff ff 00 0d ae 76 14 00 00 00 00
1c 21 01 04 a5 1e 13 78 03 ee 95 a3 54 4c 99 26
0f 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 42 3c 80 a0 70 b0 24 40 30 20
a6 00 2d bc 10 00 00 18 00 00 00 fd 00 28 3c 4a
4a 10 01 0a 20 20 20 20 20 20 00 00 00 fe 00 43
4d 4e 0a 20 20 20 20 20 20 20 20 20 00 00 00 fe
00 4e 31 34 30 4a 43 45 2d 45 4c 31 0a 20 00 1b

Detailed Timing Descriptors:
DTD 1: 1920x1200 60.002801 Hz 8:5 74.163 kHz 154.260000 MHz (301 mm x 188 mm)
Hfront 48 Hsync 32 Hback 80 Hpol N
Vfront 10 Vsync 6 Vback 20 Vpol N

Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
Add bindings for Embedded Controller (EC) in Dell XPS 13 9345 (platform
codename 'tributo'). It may be partially or fully compatible with EC
found in Snapdragon-based Dell Latitude, Inspiron ('thena').

Signed-off-by: Aleksandrs Vinarskis <alex@vinarskis.com>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Introduce EC driver for Dell XPS 13 9345 (codename 'tributo') which may
partially of fully compatible with Snapdragon-based Dell Latitude,
Inspiron ('thena'). Primary function of this driver is unblock EC's
thermal management, specifically to provide it with necessary
information to control device fans, peripherals power.

The driver was developed primarily by analyzing ACPI DSDT's _DSM and
i2c dumps of communication between SoC and EC. Changes to Windows
driver's behavior include increasing temperature feed loop from ~50ms
to 100ms here.

While Xps's EC is rather complex and controls practically all device
peripherals including touch row's brightness and special keys such as
mic mute, these do not go over this particular i2c interface.

Not yet implemented features:
- On lid-close IRQ event is registered. Windows performs what to
  appears to be thermistor constants readout, though its not obvious
  what it used for.
- According to ACPI's _DSM there is a method to readout fans' RPM.
- Initial thermistor constants were sniffed from Windows, these can be
  likely fine tuned for better cooling performance.
- There is additional temperature reading that Windows sents to EC but
  more rare than others, likely SoC T_j / TZ98 or TZ4. This is the only
  thermal zone who's reading can exceed 115C without triggering thermal
  shutdown.
- Given similarities between 'tributo' and 'thena' platforms, including
  EC i2c address, driver can be potentially extended to support both.

Signed-off-by: Aleksandrs Vinarskis <alex@vinarskis.com>
Follow pattern of pmk8350 to add missing pmk8550 VADC to hamoa.
Register address of 0x9000 matches example schema for spmi-adc5-gen3.

Signed-off-by: Aleksandrs Vinarskis <alex@vinarskis.com>
Describe embedded controller, its interrupt and required thermal zones.
Add EC's reset GPIO to reserved range, as triggering it during device
operation leads to unrecoverable and unusable state.

Signed-off-by: Aleksandrs Vinarskis <alex@vinarskis.com>
Add support for ADC_TM part of PMIC5 Gen3.

This is an auxiliary driver under the Gen3 ADC driver, which implements the
threshold setting and interrupt generating functionalities of QCOM ADC_TM
drivers, used to support thermal trip points.

Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
Signed-off-by: Jishnu Prakash <jishnu.prakash@oss.qualcomm.com>
as found in the pcie3 node of the dsdt, using pmc8380_3 gpio 5

Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
Add embedded controller node for Glymur CRDs which adds fan control,
temperature sensors, access to EC state changes through SCI events
and suspend entry/exit notifications to the EC.

Signed-off-by: Sibi Sankar <sibi.sankar@oss.qualcomm.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Reviewed-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
Co-developed-by: Anvesh Jain P <anvesh.p@oss.qualcomm.com>
Signed-off-by: Anvesh Jain P <anvesh.p@oss.qualcomm.com>
Add embedded controller node for Hamoa/Purwa CRDs which adds fan control,
temperature sensors, access to EC internal state changes and suspend
entry/exit notifications to the EC.

Signed-off-by: Sibi Sankar <sibi.sankar@oss.qualcomm.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Reviewed-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
Co-developed-by: Anvesh Jain P <anvesh.p@oss.qualcomm.com>
Signed-off-by: Anvesh Jain P <anvesh.p@oss.qualcomm.com>
Add embedded controller node for Hamoa IOT EVK boards which adds fan
control, temperature sensors, access to EC internal state changes and
suspend entry/exit notifications to the EC.

Signed-off-by: Sibi Sankar <sibi.sankar@oss.qualcomm.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Reviewed-by: Gaurav Kohli <gaurav.kohli@oss.qualcomm.com>
Tested-by: Gaurav Kohli <gaurav.kohli@oss.qualcomm.com>
Co-developed-by: Anvesh Jain P <anvesh.p@oss.qualcomm.com>
Signed-off-by: Anvesh Jain P <anvesh.p@oss.qualcomm.com>
Add embedded controller node for Hamoa/Purwa CRDs which adds fan control,
temperature sensors, access to EC internal state changes and suspend
entry/exit notifications to the EC.

link: https://lore.kernel.org/all/20260327-add-driver-for-ec-v7-0-7684c915e42c@oss.qualcomm.com/

Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
It is apparently not available, use eusb5 until we find out which is which

also cleanup on i2c9 (keyboard) and i2c19, touchpad is no wakeup-source

Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
to avoid oddities during boot

Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
…nd DAIs

Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
…tate

The MSM DP bridge implements dp_audio_prepare and dp_audio_shutdown but
not dp_audio_startup. drm_bridge_connector_audio_startup() treats a
missing dp_audio_startup as success and allows the DPCM layer to
proceed to dp_audio_prepare even when no display is connected.
msm_dp_audio_prepare() then returns -EINVAL because power_on is false,
producing continuous dmesg spam at boot and on every PipeWire re-probe:

  ASoC error (-22): at snd_soc_dai_hw_params() on i2s-hifi
  DisplayPort2 Playback: ASoC error (-22): at __soc_pcm_hw_params()

Add a dp_audio_startup implementation that checks power_on and returns
-ENOTSUPP when no display is connected, gating the entire audio setup
sequence at startup so prepare is never reached when the DP link is not
active. -ENOTSUPP is used deliberately as snd_soc_ret() in soc-utils.c
treats it as an expected non-error condition and suppresses the log
output, avoiding unnecessary noise when no display is attached.

Signed-off-by: Steev Klimaszewski <threeway@gmail.com>
…llers

Enable the gpi_dma0..gpi_dma2 controllers

currently no clients yet

Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
Reference the reserved memory region for audio PD dynamic loading
and remote heap requirements. Add the required VMID list for memory
ownership transfers.

Signed-off-by: Ekansh Gupta <ekansh.gupta@oss.qualcomm.com>
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
…me PM

Convert the LPASS WSA macro codec driver to use the PM clock framework
for runtime power management.

The driver now relies on pm_clk helpers and runtime PM instead of
manually enabling and disabling macro, dcodec, mclk, npl, and fsgen
clocks. Runtime suspend and resume handling is delegated to the PM
core via pm_clk_suspend() and pm_clk_resume(), while existing runtime
PM callbacks continue to manage regcache state.

This ensures clocks are enabled only when the WSA macro is active,
improves power efficiency on LPASS platforms supporting LPI/island
modes, and aligns the driver with common ASoC runtime PM patterns used
across Qualcomm LPASS codec drivers.

Signed-off-by: Ajay Kumar Nandam <ajay.nandam@oss.qualcomm.com>
…e PM

Convert the LPASS VA macro codec driver to use the PM clock framework
for runtime power management.

The driver now relies on pm_clk helpers and runtime PM instead of
manually enabling and disabling macro, dcodec, mclk, and npl clocks.
All clock control during runtime suspend and resume is delegated to
the PM core via pm_clk_suspend() and pm_clk_resume().

This change ensures clocks are only enabled when the VA macro is
active, improves power efficiency on LPASS platforms supporting
LPI/island modes, and aligns the driver with common ASoC runtime PM
patterns used across Qualcomm LPASS codec drivers.

Signed-off-by: Ajay Kumar Nandam <ajay.nandam@oss.qualcomm.com>
The NPL clock is only present on some platforms.  When it is absent,
wsa->npl remains NULL, but the driver unconditionally programs its rate.

Guard clk_set_rate() for the NPL clock so platforms without NPL do not
attempt to access it.

No functional change on platforms that provide the NPL clock.

Signed-off-by: Ajay Kumar Nandam <ajay.nandam@oss.qualcomm.com>
- remove codec
- remove codec, dmic, speaker related DAIs
- remove swr config, lpass, wsa macro, va macro
- add DisplayPort related DAIs
- add DisplaPort sound names

Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
and follow-up changes re thermal zones in dell xps13 9345

Thermal zones definition on sgerhold's branch was different (newer)

Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
geocausa and others added 24 commits September 28, 2026 08:12
Have each opted-in WSA884x report a successful, error-free PA
enable to the WSA macro. Enable both protection paths after the
second confirmed PA and disable them before the first PA teardown.

Require protected feedback DAIs to have a live 2S/4-ohm
classification so VI/CPS readiness cannot outrun the PA profile.
Roll back PA and DRE state when an enable write, PA status check,
or macro lookup fails. Keep the counters, lock, and enabled state
in each WSA macro instance so non-protected cards remain unchanged.

[Leon: Replaced the source globals with per-macro state, scoped
lookup to the source card, balanced duplicate/remove events per
amp, made the helper Kconfig-safe, required a confirmed 2S/4-ohm
feedback profile, and withheld the PA event after write or FSM
errors.]

Link: geocausa/SP11X1e-audio@31466d6
Link: e72bffc
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit ed9753b)
Describe the WSA8845 VISENSE and CPS feedback links used by the protected
speaker graph. Select them only from the Denali sound card and give that
card a board-specific compatible ahead of the generic X1E80100 fallback.

[Leon: Re-lifted only the common Denali VI/CPS graph and transport data,
added the board-specific compatible, and omitted the experimental board
target.]

Link: geocausa/SP11X1e-audio@31466d6
Link: 6035b3e
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit e4eb89e)
Describe both integrated WSA8845 speaker loads as 4 ohms so the codec can
select the matching PA profile after confirming the hardware 2S supply.

Link: geocausa/SP11X1e-audio@967b539
Link: 6035b3e
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit bddc915)
The SP11 FullIO topology SAL module declares ten input ports.
AR_MAX_MOD_LINKS bounds the stored output connection arrays, but it
does not bound this module metadata. Rejecting the input count prevents
the sound card from probing with -EINVAL. Keep the output-port array
bound while accepting the valid SAL declaration.

Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit 6938d2a)
The hardware-qualified Denali graph uses a 48 kHz, 16-bit, stereo
pull ring with two 1920-byte periods. Restore those ALSA constraints
and map only the page which contains the 3840-byte ring.

Keep the existing generic push/pull allocation for every other card
and topology. Fail closed if the protected Denali runtime reaches
prepare with geometry other than the qualified values.

Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit bd43421)
The qualified SP11 playback path keeps its integrated pull graph
running across ALSA STOP and reprepare, and uses the topology
soft-pause module for pause and resume. Restore the exact zero-length
parameters for instance 0x466b, register both completion events,
and retain the measured 20 ms ramp, 25 ms downstream delay, and 5 ms
completion margin.

Limit the persistent lifecycle to Denali playback with both a protected
profile and a pull endpoint. Keep the existing command correlation,
uncertain-state quarantine, and final close handling around it.

Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit daec021)
The hardware-qualified Denali protected profile uses the full WSA PA
gain range and selects its operating point through UCM. Do not apply
the provisional 0 dB PA cap to that profile.

Keep the -3 dB digital-volume limit everywhere, and retain the upstream
PA cap for every X1E80100 machine without the Denali speaker-feedback
guard.

Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit c06f712)
The qualified integrated SP11 graph sends its pull-ring parameter
through the graph client port. Use that route when protection is
active so command correlation and ordering remain graph-scoped.

Preserve the existing APM service route for generic unprotected
push/pull users.

Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit 6fa0d8e)
Restore the qualified protected graph's own uncached position page and
use its DSP address for the fixed pull ring. Read the live counter
with DMA barriers and reject zero, torn, and out-of-range indices
before updating the ALSA pointer.

Identify this lifecycle only when the protected topology contains pull
instance 0x4660 and soft-pause instance 0x466b. Preserve the generic
ALSA-owned position buffer for every other push/pull graph, and retain
uncertain mappings under the existing fail-closed teardown policy.

Use the captured SP11 subgraph order for graph-client run-state
commands. Treat a lost soft-pause completion as uncertain so the
next teardown or prepare performs a confirmed graph stop instead of
claiming that playback resumed.

Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit 6bdbee1)
The hardware-qualified FullIO pull transaction proceeds from its
protected configuration directly to the ordered graph-client START. Do
not insert the generic APM GRAPH_PREPARE command for the exact SP11
topology.

Advance the existing fail-closed prepared state locally so start still
requires successful protection configuration or confirmed bypass. All
other protected and generic graphs retain the existing PREPARE command.

Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit 4dc8837)
The qualified integrated transaction configures the pull endpoint
media format before walking the protected PCM converter and MFC
chain. Restore that order for the exact SP11 topology.

Keep the existing PCM-then-shared-memory order for every ordinary
and non-SP11 graph.

Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit a2f2c71)
Match the qualified position-map token and send the soft-pause
parameter over the APM service port used by the captured SP11
transaction. The exact protected-topology predicate still prevents
either path from serving another graph.

Keep pull-ring setup and event registration on the graph client,
matching their qualified routes and preserving graph-scoped command
correlation.

Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit c575f95)
Clear the retained-map uncertainty only when the DSP definitively
rejects the matching graph-owned position mapping. This lets the
synchronous failure path release coherent DMA without treating a
confirmed NACK like an unknown DSP outcome.

Reject a second position allocation on the same graph as a defensive
backstop against overwriting retained mapping state.

Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit 4f41d24)
A persistent Denali pull graph may reach prepare while it is still
DSP soft-paused. Resume it and require the matching completion before
reporting the reused graph as running.

Keep the stream uncertain on a missing completion so a later prepare
cannot silently reuse a potentially paused graph.

Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit 7dd3578)
The graph-owned position mapping uses the qualified fixed BIT(30)
token. Reserve that sequence value from generated mapping tokens
and classify graph-position responses by the complete non-graph-id
token class.

This prevents a generic fixed-region mapping from becoming
indistinguishable after the sequence counter reaches the reserved
value while preserving the qualified DSP transaction.

Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit aaa5c46)
Do not let a later STOP overwrite the fail-closed state left by
a missing soft-pause completion. Confirm a hard graph stop first,
then clear persistent pull state so the next prepare performs the
complete setup.

Also clear the soft-pause marker after hw_free confirms the same
recovery, preventing stale pause state from surviving into a rebuilt
graph.

Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit f0d9f69)
The hardware-qualified SP11 v19 image clears Offset2 while enabling
the WSA VI and CPS master ports. The guarded 7.2.2 relift dropped that
behavior.

Apply the active value automatically only to WSA controller ports 10,
11 and 13 on Microsoft Denali. Keep the inactive transport
configuration unchanged and leave generic controllers untouched.

This restores the qualified behavior without exposing SP11 policy
through a module parameter or making SP11 naming part of the public
userspace contract.

Link: 537d1ac

Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit 618b3e1)
The guarded 7.2.2 port kept the 2S 4-ohm final values but dropped the
hardware-qualified Denali WSA8845 cold, start and stop transactions.
The right amplifier consequently reports PA status 0x6 and remains
disabled during playback.

Restore the v19 register sequences verbatim and select them only when
the machine is Microsoft Denali, protected feedback is described, the
speaker load is 4 ohms and the codec reports a 2S supply. Generic
WSA884x devices retain the upstream lifecycle.

Also restore the bounded PA FSM reset and retry path. Retain the
relifted protection-clock accounting and keep a failed recovery as a
hard playback error.

Link: e72bffc

Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit d1edbc8)
The WSA8845 devices remain powered and advertise simple clock-stop
support on Microsoft Denali. Treating each transient SoundWire detach
as context loss dirties the full register cache and replays the cold
transaction on attachment, unlike the hardware-qualified v19
lifecycle.

Keep the initialized codec state across the Denali protected 2S 4-ohm
detach and sync only writes queued while cache-only. Preserve the
existing context-loss path, including full dirty-cache restore, for
every other device and profile.

Link: e72bffc

Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit 09a3f4e)
DPCM releases the Denali VI and CPS backends before the front end
performs its final protected graph stop. The graph correctly rejects
those ready-to-not-ready transitions while start_count is nonzero, but
the machine driver then aborts SoundWire hw_free and shutdown. This
produces four -EBUSY warnings and can retain the stream runtime on every
close.

Treat only a busy readiness clear as deferred so SoundWire teardown
continues. Complete both deferred clears after a confirmed final
protected graph stop, under the existing protection lock. Keep ready
transitions into a running graph rejected, and do not clear state after
an uncertain or failed stop.

Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit cceb155)
The Denali cold, start, and stop transactions already carry their own
gain, current-limit, and watchdog state. Running the generic speaker
post-PMU and PDM watchdog writes afterwards changes that qualified
transition and can leave the paired amplifiers asymmetric.

Restore the protected-profile bypass used by the qualified v19 path.
Non-Denali and unprotected WSA884x users retain the generic programming.

Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit e0fe0c6)
The hardware-qualified SP11 v19 path materializes TOP_CFG1 after each
enabled VI feedback pair. The guarded 7.2.2 relift retained the feedback
clocks but dropped this producer-side write, leaving the physical lane
order inconsistent with the qualified V,I,V,I stream.

Restore the write at the original lifecycle boundary and gate it with
the existing protected-feedback profile. This is equivalent to the
original Denali check while preserving upstream defaults and behavior
on every other machine.

Link: f17a678
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit 156115d)
The device writes event elements into coherent memory before publishing
its event ring read pointer. Both gpi_process_events() and
gpi_mark_stale_events() read that pointer through readl_relaxed() and then
consume the event memory without an ordering guarantee.

On architectures such as arm64, this can expose a published event before
all its fields are visible. Denali QSPI exposed this as an accepted
completion whose length was observed as zero.

Use ordered MMIO reads only for the event pointer. Keep all other register
accesses relaxed. This follows the ordered ioread32() pattern used by the
Qualcomm IPA GSI event-ring consumer.

Fixes: 5d0c353 ("dmaengine: qcom: Add GPI dma driver")
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit bd9f5e2)
(cherry picked from commit f9c68b9)
Signed-off-by: Leon Silcott <leon@boasi.io>
@ooaklee

ooaklee commented Oct 4, 2026

Copy link
Copy Markdown
Owner Author

Closing this superseded review/qualification vehicle without merging. Current review work is tracked in ooaklee/linux_ms_dev_kit-sp11#57, ooaklee/linux_ms_dev_kit-sp11#58, ooaklee/linux_ms_dev_kit-sp11#68; ooaklee/linux_ms_dev_kit-sp11#68 is the single combined 7.2.5 qualification candidate. This does not discard the original feature intent or close any outstanding acceptance gate.

The current combined source is 8ba2b75713feb5c72bbc11dd8cce4048e23cdeea, ABI 7.2.5-jg-0sp11v8-qcom-x1e; see the experimental v8 release. Ordinary-use results on one X1E/OLED unit are recorded, but the release remains experimental and the detailed hardware, lifecycle, deviation, CI and provenance gates in ooaklee/linux_ms_dev_kit-sp11#68 remain open.

This PR's branch and exact head 91917314b7fd, authored history, discussion and test evidence are retained unchanged. Closing is administrative supersession, not a merge, an acceptance decision, or a claim that the old and current trees are identical. Beta and the repository default are unchanged.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.