Skip to content

[FAILED - DO NOT MERGE] ASoC: re-lift guarded SP11 Golden v33 playback - #39

Closed
ooaklee wants to merge 37 commits into
sp11/ubuntu-qcom-x1e-7.2.y-betafrom
sp11/beta-golden-playback
Closed

[FAILED - DO NOT MERGE] ASoC: re-lift guarded SP11 Golden v33 playback#39
ooaklee wants to merge 37 commits into
sp11/ubuntu-qcom-x1e-7.2.y-betafrom
sp11/beta-golden-playback

Conversation

@ooaklee

@ooaklee ooaklee commented Sep 2, 2026

Copy link
Copy Markdown
Owner

Summary

Re-lift the contained Golden v33 protected-playback series from upstream-review PR jglathe#89 onto the beta base without the separate TX DMIC topic. The series adds opt-in VI/CPS feedback, graph-scoped FullIO protection, 2S/4-ohm WSA884x handling, PA recovery, and Denali-only wiring.

The parity repair restores the hardware-qualified pull-ring geometry, graph-owned uncached position page, graph-client and APM command routing, media and subgraph order, persistent STOP/reprepare lifecycle, soft-pause events and timing, and the Denali PA range selected through UCM. Review-driven error paths remain fail closed.

Containment

  • shared SoundWire, WSA884x, macro, APR, and AudioReach behavior is activated only by explicit topology, DAI, codec-property, and Denali markers
  • the restored pull lifecycle requires Denali playback, a protected profile, pull instance 0x4660, and soft-pause instance 0x466b
  • ordinary, compressed, non-Denali, and non-matching protected graphs retain their existing paths
  • malformed profiles, missing completions, uncertain execution, and uncertain DMA ownership cannot enter persistent reuse; teardown either confirms a hard stop or quarantines ownership
  • generated memory-map tokens cannot collide with the qualified fixed BIT(30) position token
  • non-opted-in WSA884x devices retain their DAI table, 8-ohm/default profile, and PA lifecycle

Provenance

The 36 commits comprise 13 geoca-authored source ports and 23 Leon Silcott containment, integration, parity-restoration, and review-driven repair commits. Leon's author and committer identities use the preferred leon@boasi.io address, with the source author dates preserved and one matching sign-off per commit.

The missing nominal-author sign-off on the 13 geoca-attributed rewrites is not waived for upstream submission: personal geoca attestation remains a draft gate.

Previous software evidence\n\nAt d0b7173d9363 before the hardware A/B repair:

  • beta integration validator: pass; no errors, with the pre-existing whole-series warnings/checks left visible
  • each of the 12 parity/guardrail repair commits: strict checkpatch 0 errors, 0 warnings, 0 checks
  • git diff --check: pass
  • clean case-sensitive ARM64 build using the exported debian.qcom-x1e/config/annotations arm64-qcom-x1e configuration
  • W=1 object builds: AudioReach/Q6APM, Q6APM DAI, LPASS DAIs, and X1E80100 machine driver
  • linked snd-q6apm.o: pass, including the SP11 event and soft-pause exports
  • exact-head X1E/OLED, X1P/LCD, and non-SP11 Dell XPS 13 9345 DTBs: pass; SHA-256 prefixes bfe09db6, 31946e2f, and 7baa7f97
  • two focused OpenCode lifecycle reviews: all five concrete position-map, token, pause/reprepare, and uncertain-STOP defects resolved; no remaining code blocker reported

Blocking qualification gates

  • geoca personal attestation for the 13 attributed rewrites
  • pin and hash the tested FullIO topology and the exact UCM profile/verb selecting the qualified Denali PA operating point
  • complete the final aggregate package and modpost/linkage build
  • confirm on SP11 hardware that all mapping responses echo the fixed position token and that the uncached position-page counter/index layout advances correctly
  • confirm soft-pause/resume completion IDs and timing under load, persistent STOP/reprepare, timeout-to-hard-stop recovery, and the captured subgraph/media command order
  • qualify the restored full Denali PA range for speaker and thermal safety with the pinned UCM configuration
  • complete every SP11 and non-SP11 scenario recorded in ASoC: qcom: add Surface Pro 11 Golden v33 protected playback jglathe/linux_ms_dev_kit#89, including ordinary/compressed paths, protected setup and bypass failures, PA faults, clocks, PDR/recovery, reprobe, suspend/resume, and supported variants

This PR intentionally remains draft and must not merge on compile evidence alone.

Hardware A/B parity repair

Physical comparison on the same Surface Pro 11 OLED installation established that 7.2.0-jg-0sp11v19-qcom-x1e provides stable stereo while the guarded beta disables the right WSA8845 with PA status 0x6. The same public ALSA card and UCM sink remain present, so this is kernel lifecycle parity rather than a userspace namespace change.

Commits through 081baa86ef16 now:

  • restore the v19 active Offset2 value only for Denali WSA master feedback ports 10, 11, and 13, with no legacy module parameter;
  • restore the v19 cold/start/stop WSA8845 register transactions verbatim behind Denali + protected-feedback + 4-ohm + detected-2S guards;
  • restore bounded PA FSM recovery while retaining the relifted fail-closed result and protection-clock accounting;
  • retain initialized WSA state only across the guarded simple clock-stop lifecycle; and
  • defer DPCM readiness clears until a confirmed final graph stop so SoundWire teardown is not skipped while a graph still holds a start reference.

Current repair evidence: strict checkpatch reports 0 errors, 0 warnings, and 0 checks across the four-commit delta; git diff --check passes; ARM64 ubuntu_x1e_defconfig W=1 builds pass for Qualcomm SoundWire, WSA884x, Q6APM, and the X1E80100 machine driver, including linked module objects. OpenCode independently reviewed the namespace boundary, CPS baseline evidence, PA lifecycle, and DPCM readiness ordering.

The repair is not yet hardware-qualified. Keep the PR draft until left/right playback, repeated open/close, protected VI/CPS readiness, suspend/resume, fault recovery, and non-Denali build/boot gates pass.

v6 physical regression follow-up

The aggregate v6 hardware test reproduced loud static for about five seconds after volume-key feedback and previously produced left-only playback. The speaker sink has been muted for safety. Static comparison against the qualified v19 source found that the relifted protected Denali cold/start/stop transactions were followed by generic post-PMU gain/current-limit and PDM-watchdog writes that v19 explicitly bypasses.

Commit d9ce34f restores those two protected-profile guards without changing non-Denali or unprotected WSA884x behaviour. The affected ARM64 codec object builds cleanly and strict checkpatch reports zero errors and warnings. OpenCode independently confirmed this is the narrowest concrete parity repair. This remains a draft until a fresh v7 aggregate passes independent left/right, repeated open/close, idle, and suspend/resume testing without static.

geocausa and others added 20 commits September 2, 2026 19:48
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
@ooaklee

ooaklee commented Sep 2, 2026

Copy link
Copy Markdown
Owner Author

WITHDRAWN: aggregate qualification candidate

Do not install or hardware-test 7.2.2-sp11beta1 or candidate
80ecee88b749d7324e1274c0a1cf6dfd752fddfa.

A final-tree comparison against the hardware-qualified
sp11/integration-7.2.x source found active camera behavior missing from that
candidate: VFE680 MIPI RAW write-client mode, CSID680 crop/drop-engine
containment, and CAMSS partial stream-start unwind. Compile, schema, and package
success did not detect this runtime-semantic gap. A focused repair and a new,
uniquely named candidate are required before hardware testing.

This correction supersedes the build notice below; the old results are retained
only as reproducibility evidence.


Historical aggregate build record (withdrawn)

The held qualification branch sp11/ubuntu-qcom-x1e-7.2.y-beta-qualification
at 80ecee88b749 combined the provisional beta with draft PRs #36#39 in
dependency order.

  • clean full ARM64 ubuntu_x1e_defconfig build: passed through modules,
    MODPOST, vmlinux, Image, vmlinuz, and vmlinuz.efi
  • aggregate touched-object W=1 build: passed
  • X1E/OLED, X1P/LCD, and representative non-SP11 DTBs: passed
  • all six changed binding families: passed; only two unrelated pre-existing
    schema warnings remained
  • complete bindeb-pkg: passed with unique kernel release
    7.2.2-sp11beta1
  • image package SHA-256:
    acc6368a15b5fcb4e0eb2059e5c401b14e87a5c2b3178fea73acdeed11f75ee4

The #37/#38 registry overlap was combined without simplifying either feature:
SP11 SAM battery/AC nodes remained omitted, and only the SP11 profile/fan nodes
were added.

These are historical composition and packaging results, not hardware
acceptance. They do not change any PR's draft status or waive any listed device,
non-SP11, userspace, provenance, or contributor-attestation gate.

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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
@ooaklee

ooaklee commented Sep 2, 2026

Copy link
Copy Markdown
Owner Author

Aggregate hardware qualification is tracked in #41 at exact candidate
08249986a3f4efd7e0826c29e830601bfde928ed (tree
da7479fbffe997cdc980a147b4cb929d71253185).

This topic remains draft. A green aggregate build or CI result does not satisfy
its topic-specific hardware, dependency, provenance, or non-SP11 gates. Record
full-system evidence in #41 and link the relevant result back here before this
topic leaves draft state.

PR #41 is a test-only aggregate and must close without merge.

@ooaklee
ooaklee force-pushed the sp11/beta-golden-playback branch from 1cba783 to 081baa8 Compare September 3, 2026 02:01
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>
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>
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>
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>
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 hardware-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>
@ooaklee ooaklee changed the title ASoC: re-lift guarded SP11 Golden v33 playback [FAILED - DO NOT MERGE] ASoC: re-lift guarded SP11 Golden v33 playback Sep 3, 2026
@ooaklee

ooaklee commented Sep 3, 2026

Copy link
Copy Markdown
Owner Author

The exact v7 qualification aggregate included this PR tip plus the follow-up protected-PA transition guard and still failed audio qualification. A volume-key change produced sustained loud static; later, a low-battery notification produced crackling even while the default userspace sink reported muted. Further audio testing stopped for hardware and hearing safety.

The exact v7 ABI and per-ABI DTB were verified, and the live FDT contains the Denali sound-card compatible plus both WSA CPS opt-ins and 4-ohm speaker properties. The common APM timeout and AR_EUNSUPPORTED calibration messages also occur on known-good v19, so they are not sufficient explanations. The remaining comparison must focus on concrete protected-graph, SoundWire, WSA macro, and PA lifecycle semantic deltas. This PR remains unmergeable, independently of its unresolved contributor provenance/DCO gate and required non-SP11 testing.

@ooaklee

ooaklee commented Sep 3, 2026

Copy link
Copy Markdown
Owner Author

Closing this failed audio qualification PR to prevent accidental integration. Its complete commit history, authorship, software evidence, v6/v7 hardware symptoms, and diagnostic discussion remain preserved here. The loud-static and left-only regressions mean no commit in this aggregate is hardware-approved for beta; any replacement must use a fresh, ABI-distinct, independently qualified branch.

@ooaklee

ooaklee commented Sep 3, 2026

Copy link
Copy Markdown
Owner Author

The replacement guarded source series is now draft PR #47. Its exact, ABI-distinct audio-only hardware candidate is disposable qualification PR #48 (7.2.2-jg-0sp11v9-qcom-x1e, revision 6a55ca3f1a94). This closed PR remains the immutable v6/v7 failure record; neither the replacement nor its candidate is hardware-approved.

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