ASoC: restore guarded SP11 Golden playback parity - #47
Conversation
|
Exact hardware qualification is tracked in disposable PR #48 at revision |
1b04cc7 to
a537efa
Compare
Message-only submission cleanupOne overlong paragraph in Leon Silcott’s protected-PA-transition commit was wrapped. Final tree |
Hardware-qualified v19 userspace/topology pinThe currently working
The distro dispatcher The topology filename is deterministic in this kernel: the Denali DTS model becomes For v9 qualification these four hashes and package version must remain unchanged. No Lexr-provided or replacement userspace should be introduced during the comparison. This closes identification and immutable-source pinning of the v19 inputs; it does not satisfy the pending v9 hardware, DCO/attestation, or non-SP11 gates. |
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>
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>
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 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>
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>
a537efa to
156115d
Compare
Summary
Supersede the failed audio candidate in #39 with a fresh guarded branch that
preserves the complete Golden v33 protected-playback series and restores one
producer-side register write that was present in the hardware-qualified v19
source but absent from the relift.
The v6/v7 hardware result was unsafe: playback could become left-only and a
volume-key or notification sound could trigger sustained loud static, including
while the userspace sink reported muted. PR #39 remains closed as the immutable
failure record. This replacement is a new draft and is not hardware-approved.
Root cause and repair
The WSA8845 cold/start/stop transaction arrays in this branch already match the
qualified v19 source byte-for-byte after symbol-name normalization. The
remaining concrete semantic delta was the missing runtime
CDC_WSA_TOP_TOP_CFG1 = 0x03write after each enabled VI feedback pair.Original integration commit
f17a678bc13bdocuments that Native Windowsmaterializes this value and that consumer-side reordering had reproduced the
right-amplifier fault/static behavior. Commit
b061bb1c6ff2restores the writeat the producer.
The repair is deliberately narrow:
protected_feedbackstate, which is set onlywhen the machine is compatible with
microsoft,denali;producer-side ordering;
0x00, so non-Denali devices retainupstream behavior;
Containment
The complete topic remains guarded by the existing Denali machine compatible,
explicit device-tree opt-ins, protected topology/profile markers, graph client
and instance IDs, 2S/4-ohm codec detection, and fail-closed AudioReach lifecycle
checks. Ordinary, compressed, non-Denali, and non-matching protected graphs keep
their existing paths.
Provenance
The 38 commits contain 13 geoca-authored source ports and 25 Leon Silcott
containment, integration, parity, and review-driven repair commits. Leon's
identity is consolidated as
Leon Silcott <leon@boasi.io>; the geoca authoridentity and source history are preserved.
The missing nominal-author sign-off on the 13 geoca-attributed rewrites is not
waived. Personal contributor attestation remains a merge gate.
The immediate TOP_CFG1 repair retains a link to original commit
f17a678bc13b8e8ca4fb9e9da5e9039d18db4230.Historical v9 software evidence
git diff --check: pass;b061bb1c6ff2: 0 errors, 0 warnings, 0 checks;protected_feedback/Denali gate, runtime placement, drvdata use, and decisionto leave the generic default unchanged;
MODPOST,vmlinux/EFI image, module signing/compression, headers, and Debian packages;6a55ca3f1a948c65504e865ae360c7f79dd9a420, source treee1612b61355e9c16f03a477fce97badff3251b0d, and pinned container/toolchainprovenance recorded in the v9 bundle;
lexr kernel inspect: pass;7.2.2-jg-0sp11v9-qcom-x1e; both declared SP11 DTBs are present;QCOM SDW, X1E80100, and Q6APM modules.
The full Ubuntu packaging build emitted only non-fatal packaging/environment
warnings already observed outside the modified source path; no warning stopped
the build or implicated this repair.
Current re-lift verification
The complete 38-commit series was re-lifted onto current beta bf631f9, producing head 156115d. Ordered stable patch IDs, author identities, and subjects match the pre-sync series, and git range-diff pairs all 38 commits in order. Its only reported difference is commit-message reflow for the protected WSA transition; the patch is unchanged. GitHub CI and a local detached-head rerun of the exact-current-head integration check pass. A fresh case-sensitive ARM64 W=1 build at exact head 156115d and tree 29b93bf812a5 passes all 13 focused shared-audio objects and all three representative DTBs. The X1E OLED, X1P LCD, and Dell hashes are bfe09db6bd9a, 31946e2f0c8d, and 7baa7f970464; the non-SP11 Dell DTB is unchanged from beta. The v9 full package build below remains historical, so a fresh exact-head Lexr full build is still mandatory before hardware qualification.
Archived v9 record — do not execute
The exact v9 bundle and the plan below are retained as historical evidence. They do not qualify the current head after the beta advanced. Do not resume v9 as qualification for this PR; build a fresh audio-only carrier from current beta only after v10 input qualification is resolved. Keep the known-good
7.2.0-jg-0sp11v19-qcom-x1ekernel and matching per-ABI DTBas fallback.
The archived plan called for cold-boot identity, low-volume left/right/stereo playback, repeated stream and volume-key cycles, a muted-notification check, VI/CPS teardown, suspend/resume, and PA/clock log review. It is retained solely to explain the intended v9 coverage. Do not execute it or treat it as current evidence. A fresh current-beta audio-only carrier must define its own exact runbook after v10 input qualification.
Merge policy
This PR must remain draft until a fresh audio-only carrier based on the current beta passes, the protected
topology/UCM inputs are pinned, geoca attestation is resolved, and the recorded
non-SP11 build/boot and failure-path gates are complete. Compile/package success
alone is insufficient.
Post-TX composition preflight
A local-only re-lift of all 38 commits onto TX head
d03713c4eb1acompletes without a content conflict at audit head29f3dc1a7af0. Ordered Golden patch IDs, authors, and subjects remain identical. The combined Denali DTSI blobd472a4eb6e82matches the previously audited aggregate; exact-head integration checks, all 15 changed C objects, both SP11 DTBs, the Dell regression DTB, and both changed sound binding schemas pass. This branch is not published or hardware-qualified. The final replacement head still waits for TX hardware qualification and merge, and all Golden DCO, full-package, userspace, SP11, and non-SP11 gates remain blocking.