Skip to content

[HELD 7.2.5] ASoC: preserve guarded Golden protected playback - #58

Closed
ooaklee wants to merge 46 commits into
x/sp11-tx-7.2.5-20260928from
x/sp11-golden-7.2.5-20260928
Closed

ooaklee wants to merge 46 commits into
x/sp11-tx-7.2.5-20260928from
x/sp11-golden-7.2.5-20260928

Conversation

@ooaklee

@ooaklee ooaklee commented Sep 30, 2026 •

Copy link
Copy Markdown
Owner

Current October 4 checkpoint

The exact combined v8 trial is documented in the
qualification report and combined PR #68.
Its ordinary-use report is joined by a bounded three-cycle camera/reopen/
indicator check in Power Saver with simultaneous quiet playback. This is
combined-candidate evidence, not a standalone installation or hardware
qualification of this topic head. Source, dependency base and draft state stay
unchanged. Earlier preparation text below is historical; old 7.2.2 review/test
vehicles are now closed as superseded, with history/evidence retained.

Earlier source/review checkpoint

Held 7.2.5 Golden topic — do not merge or install unattended

Review 0428f5911523c4c1f28e7748900cbe2bf158c950 against its immediate TX
dependency, x/sp11-tx-7.2.5-20260928 (7a8e9b112672). This is the dedicated
Golden topic: 38 preserved ports plus eight repair/CI replays, 46 commits in
the TX-relative review range. GPI, ABI allocation, camera and battery/profile
work are not part of this topic.

Historical review: #47, with its reviewed 7.2.2 head unchanged and held. The
latest exact-head source-build checkpoint
records bounded evidence, not approval or replacement of that older review.

Scope and provenance

Retain the coherent protected FullIO playback graph, VI/CPS feedback, speaker
load/PA sequencing, SoundWire transport, pull geometry/position/lifecycle,
calibration/configuration handling and Denali producer/runtime clock policy.
The final repair restores three qualified render-transport capabilities through
a managed instance-owned table selected for Denali protected four-ohm wiring;
the generic table and measured analog/supply guards remain unchanged.

Original authors, author dates, messages and cherry-pick source provenance are
retained. Credit the qualified transport from
geocausa/SP11X1e-audio and its
integration source.
Existing submitter sign-offs record DCO certifications; the supporting
provenance for 13 geoca-authored ports still needs targeted clarification.
This is not an established licensing violation or a blanket requirement for
new personal author approval. No sign-off is invented here. See the
kernel submission guide.

Actual offline evidence — not an audible fix

  • Exact ancestry and local integration/per-commit checks for all 46 commits.
  • This exact head's full ARM64 W=1 Image/modules/DTBs build completed.
    All 95,163 source entries match their Git blobs/modes/symlinks both before
    and after compilation; the historical GCC 13.3 configuration is unchanged.
  • All 7,816 modules pass matched vermagic/symbol/depmod closure; OLED/LCD
    and Dell DTB digests match their controls, with limited containment scope.
  • Complete 32,012 export rows retain symbols/owners/kinds/namespaces.
    Exactly 38 CRC changes, all in snd-q6apm, match the compiled-object
    records. This is not stable-ABI or runtime-equivalence acceptance.
  • All 4,033 warning bodies/locations/counts match the reference after only
    leading interleaved OpenSSL progress-prefix removal. Raw differences are
    retained; existing warnings are not waived or claimed harmless.

These are raw 7.2.5 source outputs, not installable packages. #55's separately
versioned v4 carrier includes GPI and ABI allocation, uses a different compiler/
configuration and has its own finished five-package inspection. Do not relabel
that carrier as this source build or mix their modules. V3 in #54 booted but
physically failed with static/squelching. At this standalone source-build
checkpoint, the separate v4 hardware trial was still pending; its later bounded
results are in #55 and the combined-v8 update below.

Open qualification gates

  • Supervised cold-boot stereo, volume buttons, notifications, stream cycles
    and loaded DSP/topology/protection state; desktop mute is not isolation.
  • Recording/concurrent playback, clocks, teardown/error paths and resume.
  • Shared-driver/non-Denali runtime tests, documented deviations and DCO.
  • Final beta-relative composition and integration CI after prerequisites.

Keep the coherent pinned FullIO userspace and v23 recovery/default/fallback.
The beta-only workflow does not automatically run for this stacked draft.
The eventual target is sp11/ubuntu-qcom-x1e-7.2.y-beta, after refresh and TX
qualification. Do not merge into the TX staging branch, merge all topics,
change userspace concurrently, or bypass any hardware hold because CI is green.

Combined v8 source and ordinary use evidence

An October 3 source-closure audit maps all 46 commits in this focused
series to combined qualification PR #68, head
8ba2b75713feb5c72bbc11dd8cce4048e23cdeea, ABI 7.2.5-jg-0sp11v8-qcom-x1e.
Author identity/date, subject, message text and stable patch identity match;
actual replay trailers are checked in either recorded direction and through
intermediate qualification replays. The 46 include the existing CI-only finding disposition.

Every composed final file entry matches its owning topic's blob, mode and type.
Across all six held groups, the complete refresh-to-v8 tree delta is the 36
owned file entries and the qualification changelog. Six additional commits
touch only that changelog; no unattributed source change was found. This is traceability to the trial, not a fresh standalone
build or installation of this PR, or proof of every integration-to-port behavior.

Speakers, volume buttons, notifications and microphones are human-reported working in the combined checklist; v4 also has the separate bounded warm/cold ordinary-use report in #55. The running v8 ABI was independently read back. Authorized root
readback verifies the installed v8 image/configuration/boot DTBs, current
initramfs against the installation receipt, and owned v8/v23 boot entries;
v23 remains the default/fallback. No userspace or boot configuration was changed
for that readback.

The October 4 bounded software trace observes the successful configure/protection-enable/start path, and quiet playback coexists with three camera cycles in Power Saver. This is not physical calibration/PA/feedback-health or a fresh DSP-command proof; longer-duration, recording/concurrent/error/lifecycle cases and contributor clarification remain open. The maintainer explicitly requested a non-SP11 X1E boot before shared audio enters their release tip; a matching Dell DTB is not that runtime test.

This advances bounded combined ordinary-use evidence only. Existing deeper
checks, documented-deviation/contributor/complete-CI-policy acceptance and exact
final-composition gates remain open. Do not test the known deep-resume failure
without a separate supervised plan. Source heads, dependency bases and draft
status remain unchanged; do not merge into staging or infer beta integration.
OpenCode Zai-Codex reviews are advisory, not human contributor or maintainer tags.

October 4: coordinated camera/audio check passed (bounded)

On unchanged combined source 8ba2b75713feb5c72bbc11dd8cce4048e23cdeea, ABI
7.2.5-jg-0sp11v8-qcom-x1e, the tester confirms stable preview and quiet
built-in-speaker sound with expected indicator behavior. Metadata records three
camera active-to-suspended cycles in Power Saver; playback was running in all
47 sensor-active samples. All three stop snapshots have ECC=0, CRC=0 and zero
VFE violation/overflow/image-violation values. The sensor ended suspended and
PCM closed. No frames, audio content or microphone samples were collected.

The exact CSID680 definitions identify the final completion bits; frame-drop
information flags and undecoded RX=0x17 remain explicit limitations. These are
stop snapshots, not per-stream counter deltas or loss-free-frame proof. The
preceding owned audio trace observed successful configure/nested true-enable/
same-graph start returns with no recorded trace loss; only about 33.263 seconds
after startup were traced. This is software-path evidence, not physical PA/
calibration health or proof of a fresh DSP start command.

Actual OpenCode Zai-Codex / GLM 5.1 reviewed the supplied exact-source evidence
and agreed with the bounded pass. No repeat is needed for this check.
Durable qualification report.

No source/userspace/default changes or new shipping diagnostic harness were
made. V23 stays the default/fallback. This does not qualify every camera mode,
recording/playback coexistence, suspend/fault lifecycles or other devices; CI,
contributor provenance, deviation acceptance and final composition remain
separate. Draft/beta/stable state is unchanged.

geocausa and others added 30 commits September 28, 2026 08:12
Describe the optional WSA8845 VISENSE and CPS feedback paths, including
their DAI selectors and slave-only SoundWire transport properties. Add a
board-specific Denali sound-card compatible with the generic X1E80100
fallback.

[Leon: Split the source binding changes into a reviewable commit, rebased
them onto the current schemas, added the Denali sound-card compatible with
its generic fallback, and kept the new properties optional.]

Link: geocausa/SP11X1e-audio@31466d6
Link: 4bcfa10
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit 336598e)
Let a slave describe optional banked registers implemented by a SIMPLE
data port, and let a stream provide slave-only transport overrides. The
new fields default to zero so existing SoundWire devices are unchanged.

[Leon: Split the zero-default slave transport metadata from the source
overlay and rebased it onto the current SoundWire types.]

Link: geocausa/SP11X1e-audio@31466d6
Link: 4bcfa10
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit 1038b04)
Give the Denali sound-card compatible a private configuration and use it
to constrain the WSA VI and CPS rate, format, and channel-map setup. Other
X1E80100 sound cards keep their existing backend behavior and speaker
volume limits.

Do not carry the source branch's global AudioReach readiness variables.
Readiness must instead be represented by the relevant card and graph
instances in the runtime part of the series.

[Leon: Replaced the source global readiness and volume changes with a
Denali-private card configuration while retaining non-Denali behavior.]

Link: geocausa/SP11X1e-audio@31466d6
Link: 4f9ac01
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit 7218819)
Let a slave describe optional banked registers implemented by a SIMPLE
data port, and let a stream provide slave-only transport overrides. The
new fields default to zero, so existing SoundWire devices keep the current
programming path.

This is the generic core portion required by the Denali WSA8845 feedback
ports; controller and codec use is added separately.

[Leon: Split the generic SIMPLE transport/register override support from
its Qualcomm controller and codec consumers and retained the current stream
API.]

Link: geocausa/SP11X1e-audio@31466d6
Link: 5cf86f7
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit 3e9731a)
Expose companion playback streams for the two Denali WSA input DAIs so
DPCM can start VI and CPS with speaker render while SoundWire keeps their
physical direction toward the master. Merge the two amplifier channels
only for Denali's shared CPS master port.

Gate both changes on the Denali machine compatible, the WSA controller,
and DAI IDs 9 and 10. Other Qualcomm SoundWire controllers retain their
existing DAI capabilities, rates, formats, direction, and port allocation.

The source branch's global diagnostic module parameters are intentionally
not carried.

[Leon: Scoped the feedback direction, shared-port merge, and companion
DAIs to Denali WSA controller IDs 9 and 10. Omitted the source diagnostic
module parameters.]

Link: geocausa/SP11X1e-audio@31466d6
Link: 5cf86f7
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit 5567d14)
Register separate VI and CPS feedback DAIs when a WSA884x instance has
the qcom,enable-cps property. Split its SoundWire sink and source ports,
apply the DT-selected VISENSE mask and CPS Offset1, and keep playback and
feedback stream state separate.

Devices without the property still register only the existing speaker DAI
and retain the existing port description and stream setup. This commit does
not include the Denali PA register profile or lifecycle changes.

[Leon: Split the WSA884x feedback DAI/port subset, made it an explicit
per-node opt-in with private stream state, and omitted the broad PA
lifecycle changes.]

Link: geocausa/SP11X1e-audio@31466d6
Link: e72bffc
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit 70f8402)
On Denali, add playback-side VI and CPS endpoints so the protected render
graph can start both feedback paths atomically. Add the associated DAPM
widgets and keep the existing VI capture endpoint intact.

Build the extended DAI table from a private copy only on Denali. Other
machines continue to register the original DAI table and DAPM graph, so the
shared WSA macro driver does not redefine their TX interfaces.

[Leon: Split the WSA macro feedback endpoints, built them from a
Denali-private DAI/DAPM copy, and preserved the existing VI capture path.]

Link: geocausa/SP11X1e-audio@31466d6
Link: e72bffc
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit b9c02af)
Add playback capabilities for the WSA TX0 and TX1 backend DAIs used by
Denali's VI and CPS protection links. Build the modified table as a
device-managed copy only for the Denali AudioReach backend provider.

Other machines and the legacy Q6AFE provider keep the existing capture-
only definitions. Propagate allocation failure from the AudioReach DAI
probe.

Link: geocausa/SP11X1e-audio@31466d6
Link: 22bdec2
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit c1c91f3)
APR receive processing can hold a service pointer after dropping
svcs_lock, while dynamic port removal used to remove and immediately
free that service. A concurrent callback could therefore use freed
memory.

Give every service a registrar reference and take callback references
while holding svcs_lock. Remove the service from the IDR first, then wait
for admitted callbacks to drain before freeing it. Apply the same unwind
discipline to static service registration failures.

gpr_free_port() may sleep and must run in process context outside the
port's own callback. This avoids self-deadlock while preserving a simple
removal contract.

Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit a72f5aa)
Global AudioReach commands reused token zero and shared one result slot.
Late responses after a timeout could complete a later command or mutate
the wrong mapping handle. Dynamic graph clients could also disappear
while callbacks or command users still held them.

Assign unique tokens to synchronous global and per-client commands while
preserving the graph and position-buffer token fields. Claim replies only
when token and opcode match the active command, and update mapping handles
inside the same critical section.

Publish graph clients under a lifecycle lock, reject new users once
teardown begins, abort pending waits, and drain admitted users and
callbacks before releasing ports. This also corrects the position-buffer
unmap token.

Link: geocausa/SP11X1e-audio@33d5145
Link: geocausa/SP11X1e-audio@39499f0
Link: 22bdec2
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit ce5d769)
FullIO v19c topologies add raw module stage classes and data, graph
control links, extended container placement, and integrated-backend
metadata. The 7.2 parser did not retain or emit those fields.

Parse the extended tokens and build matching graph-open payloads without
hard-coded diagnostic or volume instance IDs. Use one checked iterator
for vendor arrays and known raw records, reject truncated, reordered,
duplicate, oversized, or overflowing input before packet allocation, and
preserve the historical no-op for unsupported legacy module extensions.

[Leon: ported the format to 7.2, preserved legacy-topology no-op
behavior, and hardened raw-block bounds, ordering, duplicates, ownership,
and aggregate allocation arithmetic.]

Link: geocausa/SP11X1e-audio@31466d6
Link: geocausa/SP11X1e-audio@7af8f21
Link: 4bcfa10
Link: 22bdec2
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit 12ecb27)
FullIO protection calibration can exceed the in-band SET_CFG limit, and
its storage belongs to the DSP graph rather than global card state.

Size each graph payload from topology, allocate coherent memory through
the APM DMA device, translate the address for the DSP SID, and map it
with a graph-scoped token. Serialize buffer writes and correlate MAP,
SET_CFG, and UNMAP replies to the exact command before changing mapping
state.

Close the DSP graph before unmapping its OOB buffer. If a reply leaves
ownership ambiguous, retain the coherent memory and device reference
until reboot or a future proven reset hook rather than allowing the DMA
range to be reused.

[Leon: made OOB ownership graph-scoped, keyed reply mutation to the
current command, and retained ambiguous mappings instead of reusing DMA.]

Link: geocausa/SP11X1e-audio@9de3dc9
Link: geocausa/SP11X1e-audio@af28565
Link: geocausa/SP11X1e-audio@1ca3820
Link: geocausa/SP11X1e-audio@31466d6
Link: 22bdec2
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit c749d41)
FullIO v19c describes protected-speaker calibration and runtime stages
in topology. Execute graph calibration and ordered protection or bypass
SET_CFG payloads on the owning graph instead of using global card state
or hard-coded module instance IDs.

Keep configuration, bypass proof, backend readiness, start references,
and faults per graph. Enable this path only for Denali PCM clients and a
topology-declared protected graph; reject partial profiles and mixed
ordinary or protected clients. Start only after protected configuration
or both SP and SPVI bypass commands are confirmed.

Correlate every state transition and make final close consume-on-success.
If execution, close, OOB, or mapping ownership is unconfirmed, block
reuse and retain the complete client, callback context, and DMA ownership
until reboot or a future proven reset hook.

[Leon: limited the runtime to Denali plus a topology-declared protected
graph, made malformed or unconfirmed setup fail closed, serialized
backend/readiness and start references, enforced immutable shared runtime
modes, and quarantined callbacks, clients, and DMA after unconfirmed
teardown.]

Link: geocausa/SP11X1e-audio@db2af54
Link: geocausa/SP11X1e-audio@1ca3820
Link: geocausa/SP11X1e-audio@33d5145
Link: geocausa/SP11X1e-audio@31466d6
Link: geocausa/SP11X1e-audio@7af8f21
Link: 22bdec2
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit be9c6e0)
Denali speaker protection needs both VI feedback and CPS telemetry before
the protected path can be enabled. Map those backend DAIs to the graph
that owns their topology-declared integrated backend, and publish
readiness as the SoundWire links prepare or tear down.

Keep the mapping and lifecycle limited to microsoft,denali-sndcard.
Require a valid, prepared SoundWire runtime before publishing readiness,
reject readiness transitions while the graph is started, and drain the
matching FE and BE start references symmetrically. Refuse SoundWire
teardown until the graph is known stopped. Other machines and ordinary
graphs keep their existing DAI behavior.

Link: geocausa/SP11X1e-audio@31466d6
Link: geocausa/SP11X1e-audio@7af8f21
Link: 22bdec2
Link: 4f9ac01
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit 31c28cf)
Describe the optional nominal speaker load used to select board-specific
PA gain and PBR thresholds. An absent property retains the existing
8-ohm defaults.

Link: geocausa/SP11X1e-audio@967b539
Link: 40932bb
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit 430b8b9)
Read the nominal speaker load from firmware and apply the 2S 4-ohm PA
gain, PBR, class-H, VCM, and UVLO values only when the amplifier also
reports a 2S VPHX supply. Devices without the property retain the current
defaults.

[Leon: Re-lifted the profile onto the current driver, gated it by
qcom,speaker-load-ohms and a fresh hardware-confirmed 2S status, and added
explicit default restoration after failed re-attach reads.]

Link: geocausa/SP11X1e-audio@967b539
Link: 40932bb
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit ac5c2f5)
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)
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)
Derive the softclip control register from the selected codec layout instead
of combining the fixed v2.1 base with a version-dependent channel stride.

This preserves v2.1 control addresses 0x604/0x644 and selects 0x644/0x664
for v2.5 and later. Keep the existing softclip enable and event policy.
This is a register-layout correction, not a claim that softclip caused the
Denali audio regression.

Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit 7515429)
Restore the VBAT/BCL event, widgets and routes from the qualified Denali
integration source, together with its HD2 no-op and conditional primary
half-dB policy. Retain the geocausa/SP11X1e-audio provenance of that source.

Apply the seventeen cache-default differences to a private writable copy
only for Denali. These remain cache assumptions, not forced register
writes. Extend the v2.5 register access range only for Denali, and install
the driver instance before regmap access callbacks can need it.

Keep generic routes and defaults unchanged. Use separate Denali and generic
route tables because common component routes are registered after probe.
Do not change PA, VI or CPS ownership in this commit.

This restores nominal source behavior, including the inherited shared-VBAT
teardown and ignored event-write errors. Neither those behaviors nor the
new guarded composition are hardware-qualified by the source trace tests.

Link: 537d1ac
Link: geocausa/SP11X1e-audio@31466d6
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit a5eea05)
Restore the two SP/SPVI GET transactions in the qualified Denali setup
order between the tag configuration and SPVI dynamic configuration.
Derive their first-record query shape from the validated topology instead
of introducing fixed instance IDs. Zero the request before filling it.

Accept the GET response only when a pending command, opcode and token
match, and validate response bounds before reporting completion. Preserve
the existing protected-profile gate and transport error handling.

The source order comes from the geocausa/SP11X1e-audio integration port.
This does not decode calibration replies or prove that these queries
resolve the speaker regression.

Link: 537d1ac
Link: geocausa/SP11X1e-audio@31466d6
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit d0459aa)
Restore the qualified integration's per-record calibration replay when
the aggregate returns EOPNOTSUPP. Validate the entire block's framing
before sending it, retaining opaque instance IDs and query-only records.
Continue past individual EOPNOTSUPP replies, but stop on hard failures.

Serialize replay and retain its result on the persistent topology graph
information so reopening a runtime graph cannot accept a partially failed
replay. A topology reload resets this state. This intentionally replaces
the legacy global once flag with per-topology ownership and sticky errors.

The nominal replay is adapted from the geocausa/SP11X1e-audio integration
port. Do not restore the legacy hard-aggregate-error diagnostic probes.
The state and error-handling deviations still need hardware qualification.

Link: 537d1ac
Link: geocausa/SP11X1e-audio@31466d6
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit 775852e)
After both protected modules have been successfully disabled for missing
VI/CPS feedback, send the qualified gain, filter, mute and channel-mixer
tail. Reuse the same sequence for the fully configured protected path.

Only confirm bypass after every required transaction succeeds. A failed
disable or volume-tail transaction faults the graph and prevents prepare
and start from treating partial configuration as success. Leave the
unavailable/uncertain guard path's disable-only behavior unchanged.

The nominal sequence is adapted from the geocausa/SP11X1e-audio integration
port. Preserving it does not qualify bypass acoustics or speaker safety;
the guarded error behavior and complete composition remain test candidates.

Link: 537d1ac
Link: geocausa/SP11X1e-audio@31466d6
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit 32e344b)
Keep Denali's macro and dcodec votes for the device lifetime and cycle
only mclk, optional npl and fsgen through runtime PM, in that order on
resume and in reverse on suspend. This matches its qualified integration
clock ownership instead of applying the newer all-clock PM policy.

Retain the PM-clock framework path for all other devices. On Denali,
propagate clock-enable failures and unwind partial acquisition. Clear
cache-only only once the clocks are ready; on regcache-sync failure restore
cache-only/dirty and release runtime references before returning the error.
That sync-error handling deliberately differs from the legacy ignored error.

Register a managed release action before the component and output clock so
they are torn down first. Track acquired runtime references independently
of PM status and disable PM before cleanup on remove or probe failure.
Keep the three-second autosuspend delay and system-sleep policy unchanged.

This is a Denali qualification candidate, not proof of physical power
collapse or of the speaker regression's cause. The VA fsgen dependency and
real PM/CCF/DAPM behavior still need qualification.

Link: 537d1ac
Link: jglathe@4d49f24
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit ac713f9)
The Denali producer repair deliberately mutates a private reg_default copy
before passing it to regmap. Its argument cannot be const; the generic
CONST_STRUCT heuristic is not applicable to this use.

Retain the diagnostic in the log, but accept it only when the complete
patch has the reviewed stable patch ID, the resulting source blob matches
exactly, and this exact warning is the sole diagnostic. The blob check is
necessary because patch IDs also ignore significant whitespace in string
literals. Do not ignore CONST_STRUCT globally or waive other findings in
the same patch. Any source change requires a renewed review.

This is a source-style exception, not a hardware or provenance waiver.
All qualification and contributor-attestation gates remain unchanged.

Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit acb0406)
Restore the DAC BLOCKCTRL3 and COMP/BOOST OFFSETCTRL2 SIMPLE-port
capabilities from the qualified SP11 Golden transport originating in
geocausa/SP11X1e-audio and carried by the integration source below.
SoundWire can then write the existing master-derived banked values.

Select the capabilities only for the Denali protected-feedback wiring
with a four-ohm speaker description. Copy the sink properties into
managed per-instance storage and leave the shared generic table unchanged.
Return allocation failure before reset deassertion and component setup.

Select transport from board wiring, not the VPHX status first read after
attachment. Keep the measured supply and analog protection guards, gain,
source ports, master tables, PCM lifecycle and userspace unchanged.

This restores nominal source behavior, not proof that retained register
values caused static. Require fresh package and hardware qualification
before integration; compilation and host tests do not establish safety.

Link: 537d1ac
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit 54bbea2)
@ooaklee

ooaklee commented Oct 20, 2026

Copy link
Copy Markdown
Owner Author

Closed as an inactive/consolidated review vehicle during the 20 October kernel queue cleanup—not merged, newly hardware-qualified or accepted for upstream by this closure.

Previously recorded v8 acceptance evidence stands unchanged; this closure only retires the review vehicle.

The original source head and contributor history remain retained. Where a closed topic branch is removed, its verified archive/pr-58-20261020 tag preserves the exact head for recovery. Released/recovery/dependency branches remain untouched.

The separate tested-source staging route and all outstanding upstream reconstruction, provenance, fork-CI and deviation/promotion gates are tracked in OE #33. Experimental reverse-engineering PRs remain separate and unmerged. Beta/default branches and installed kernels are unchanged.

Retained exact source: 0428f5911523c4c1f28e7748900cbe2bf158c950.
Dated consolidation record: ooaklee/linux-surface-pro-11-oe#33 (comment)

@ooaklee ooaklee closed this Oct 20, 2026
@ooaklee
ooaklee deleted the x/sp11-golden-7.2.5-20260928 branch October 20, 2026 19:58
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.

2 participants