Skip to content

platform/surface: battery-only v6 qualification on working v4 - #65

Closed
ooaklee wants to merge 2138 commits into
sp11/ubuntu-qcom-x1e-7.2.y-betafrom
x/qualification-7.2.5-battery-v6
Closed

ooaklee wants to merge 2138 commits into
sp11/ubuntu-qcom-x1e-7.2.y-betafrom
x/qualification-7.2.5-battery-v6

Conversation

@ooaklee

@ooaklee ooaklee commented Oct 1, 2026 •

Copy link
Copy Markdown
Owner

Battery dependency-group candidate — built, installed and booted; qualification ongoing

This draft carries 7.2.5-jg-0sp11v6 from the working v4 source in #55
(b9c141a6da73249aecb793b2ce1ac77645e6a00f), separately from the camera-on-v4
carrier in #63. Candidate head: 5a08764e1f2fb044a5d96b75cdf8fe8d7599fd83.

The exact-head build and complete local artifact checks passed. The human
authorized its installation on one Denali OLED Surface; installation and
boot-file verification passed, retaining 7.2.0-jg-0sp11v23-qcom-x1e as the
explicit default and fallback. The installation observation still showed v5;
subsequently the human selected v6 and reported no audio, microphone, touch or
pen regression and a visible charging indication. Read-only checks confirm a
new v6 boot and the intended battery provider. Active charging and charger
transitions remain unqualified; no automatic reboot or device stimulus was
performed by the diagnostic helpers.

V4's bounded audio, microphone, touch/pen, Wi-Fi, warm/cold-start and ordinary
front-camera results, and v5's bounded camera/regression trial, remain evidence
for those exact candidates only. They do not qualify this battery change.
Keep this PR draft and beta held until the remaining acceptance gates pass.

Exact delta and contribution preservation

Replay exactly the two battery ports from held #59 using cherry-pick -x,
then add a separate qualification changelog commit:

Held battery port Replay on v4 Preserved author
8ad3a3100d695a1357893f61ff099cefa60be4d1 4856403279ddbc9a5956bc64eff39ed02505c4e6 Justin White
53905a94e7352c3ba02af044e4cdba0eae79c4b9 45ca12b1c02db40a7a411b20f2bad12c8482d7fb Leon Silcott

Original author email/date, messages, existing sign-offs, attribution and
stable patch identities are retained. No contributor sign-off is invented.
The new qualification commit has only the intended Leon sign-off.

Only two paths differ from v4:

  • drivers/platform/surface/surface_aggregator_registry.c: remove only the
    Denali/SP11 group's SAM main-battery and AC provider entries. Its final blob
    equals held [HELD 7.2.5] platform/surface: preserve SP11 battery providers #59 exactly. Shared AC definitions, other board groups and the
    rest of the Denali group remain unchanged; this is not global AC removal.
  • debian.qcom-x1e/changelog: allocate the fresh v6 version, preserving the
    complete existing v4 changelog tail byte-for-byte.

Every other audio, input, DT, build-flag, camera, platform-profile and CI-policy
blob remains the v4 blob. This carrier does not add the seven camera ports from
#56/#63 or the profile/fan/CPU policy in #60. Those remain separate required
qualification tracks, not discarded features or a claim of final composition.

Source and CI boundary

This draft targets beta to expose the full inherited composition to the
existing workflow, not to request its merge. The battery-only review range
contains three commits after pinned v4; the beta-relative range covers 58
topic commits, including the exact prepared upstream refresh. Held #59/#60 and
all other reviewed source heads remain unchanged.

Checks establish the exact two-path Git delta, held registry-blob equality,
only the two Denali provider removals, contribution/message/patch preservation
and unchanged history. Eight additional out-of-scope path checks exercise the
whitelist predicate synthetically; they are not committed source mutations or
physical tests. Complete-table local validators pass the immediate v4 and beta
ranges (3/58 commits).

The inherited hosted workflow still omits two checkpatch tables. Its green
result has limited style coverage and does not replace complete local checks.
The hosted run 36929019524
passes its 58-topic-commit checks. Its inspected synthetic merge
e9ac1bb4d8ce99e0a48c200ceeaf5a11076cbc03 has the pinned beta/candidate parents
and exact candidate tree; the log confirms both table omissions. The separate
CI-only correction in #64 has an exact hosted synthetic-merge pass for its own
two commits, not this composition, and is not rolled into this carrier.

Actual build and local artifact evidence — October 3, 2026 UTC

A distinct retry completed with actual exit zero at 01:26:15 UTC, exact head
5a08764e1f2fb044a5d96b75cdf8fe8d7599fd83 and tree
82bc21ece534f079bdcdde8f98f39b43d86c89e3. An earlier attempt failed its normal
capacity gate before compilation and remains a separately retained failure;
the retry did not bypass the gate or reuse its output.

Lexr 0.5.0-rc.5 at b74247d08f7c produced five packages with eight jobs.
Source flags remain do_dtbs=true, do_stubble=false; the observed package ABI
is 7.2.5-jg-0sp11v6-qcom-x1e, with external-required DTB delivery and the
boot-support package. Independent capture from the actual running producer
matched the complete 416-package reviewed v5 inventory policy. That is not
identical full v4 inputs, image/signature bytes or hardware equivalence.

All finished local gates passed without changing their expected source pins:

  • Manifest/provenance and every package byte, original and fully relocated.
  • Internal ARM64 image/header ABI and matching configuration.
  • All 7,816 module names/order/vermagic and matched-header symbol closure.
  • All 32,012 packaged exports byte-identical to v4, with no changed exports.
  • Both rebuilt Denali OLED/LCD DTBs match the v4 artifact digests exactly;
    boot-support registry, helper/hooks and exact-ABI image triggers/postinst pass.
  • Native, fully relocated and runtime-only Lexr inspection contracts.
  • All 73 warnings match v4 after only the defined exact-version and six
    temporary-Equivs diagnostic normalizations; no blanket warning waiver.

The extraction checks did not execute package maintainer scripts or install
anything. Metadata/capture association controls remain controls, not runtime
tests. The earlier failed-attempt receipts and completed v1-v5 gates remain
intact. OpenCode challenged the actual local evidence; its advisory review is
not hardware qualification or authority to merge.

Authorized installation evidence — October 3, 2026 UTC

The complete bundle was transferred and checksum/provenance verified. Surface
Lexr's version/commit matched the producer; its Linux binary was verified
separately from the build host's binary. Root GNU-screen preflight confirmed
an absent/eligible target, clean package state, passed storage thresholds and a valid
v23 default/fallback needing no repair. The exact five-package simulation
removed nothing. --force allowed only the running-v5 versus verified-v23
fallback mismatch, not overwrite or unverified-package acceptance.

The authorized Lexr transaction completed at 01:53:15 UTC; post-install checks
and the independent receipt audit passed. Only the four new v6 kernel/header
packages and the boot-support version update from v5 to v6 changed in the full
package database. All five packages are configured; dpkg audit is clean.

The installed image/config and both packaged DTBs match the local artifact
pins. Both exact-ABI OLED boot copies match the packaged OLED digest, and all
three v6 GRUB entries bind that matching external DTB. The generated initramfs
and System.map are nonempty and recorded; initramfs equality to a build-time
artifact is not asserted.

All 39 pre-existing top-level boot payloads and 20,453 other captured
config/audio/userspace/current/fallback-tree file hashes were verified, with
unchanged preserved path/link inventories. The explicitly configured/effective
v23 default and GRUB environment settings/text are unchanged. The full GRUB
diff was verified by a manual read and deterministic revert-transform: only
two v6 submenu entries were added and the three generic
latest-kernel image/initrd/DTB paths advanced from v5 to v6; every other GRUB
byte is preserved. The generic Ubuntu entry therefore now points at v6, while
the explicit default remains v23. No one-shot selection was scheduled.

Those installation receipts establish installation/boot-file readiness only;
the later runtime observations are recorded separately below. No userspace or
topology swap, power transition, automatic reboot or beta merge was performed
by the installer. Private qualification helpers are not shipped in this carrier.

Bounded v6 runtime observations — October 3, 2026 UTC

The human reports no audio, microphone, touch or pen regression and a visible
charging indication. Test duration and warm/cold restart counts were not
specified; this is not a complete lifecycle or sustained-charging pass.
The human subsequently confirmed that the power indicator updates as expected
after briefly unplugging and reconnecting the charger. No disconnected/
reconnected raw-provider phase captures or active-charging time series were
collected; UI transitions alone do not qualify charging/discharging behavior.

Actual read-only root GNU-screen captures confirm the v6 ABI on a new boot,
with the same boot identity across both captures. The installed image,
generated initramfs, packaged OLED DTB and both exact-ABI boot DTB copies still
match the installation pins. All 21 capture-stage commands completed with exit
zero; individual property errors remain recorded and assessed, not hidden by
the collector's exit status. Property reads may issue firmware GET requests.

The primary supply binds to the qcom_battmgr.pmic_glink_power_supply auxiliary
driver and qcom_battmgr module. The two intended primary SAM battery/mains
nodes are absent. Energy, voltage, temperature and status reads succeeded.
Four charge-family reads return ENODATA; successful energy-family readings and
the unchanged driver's source are consistent with mWh-unit operation. This
does not waive transport errors, malformed replies or inconsistent future
readings. X1E's unadvertised capacity/current fields are not required here.

The snapshot has USB online, AC/wireless offline, remaining energy equal to
reported full energy and battery status Not charging. That establishes
detected USB power and readable telemetry, not an active charging cycle or a
physical charger transition. A registered wireless supply does not establish
physical wireless-charging capability.

The installed power-profile daemon is active and offers only placeholder
balanced/power-saver profiles; performance is not listed. The platform-profile
class and SP11 profile/fan nodes are absent, while SCMI CPU-frequency policies
and schedutil remain present. This matches the carrier's scope: it omits the
three held profile/fan/CPU-policy ports in #60, including the class interface
for disabled-ACPI operation. The runtime reports ACPI disabled, and this
carrier's unchanged platform-profile class initialization rejects that state.
No daemon restart, userspace replacement or profile switch was performed.

The bounded kernel journal contains no matched crash/hung-task or battmgr-error
patterns, and the task snapshot contains no D-state task. Six PMIC GLINK
supplier-device-link creation failures remain recorded as unresolved
USB/ordering observations, not silently treated as harmless. Neither these
snapshots nor the human smoke report qualify resume, teardown, other-machine
behavior or the final combined candidate.

Remaining acceptance gates

  • Exact v4-relative source scope and preserved two-port provenance.
  • Complete-table immediate and beta-relative local validators (3/58).
  • Exact-head finished five-package build and independent input/provenance/warning audit.
  • Internal ABI, complete module/header/export closure, same-build DTBs and boot support.
  • Original/relocated/runtime Lexr inspection and package-byte verification.
  • Human-authorized Surface installation, verified boot files and retained v23 default/fallback.
  • Complete-input hosted CI coverage for the applicable exact composition.
  • Human-selected v6 boot, actual running ABI/new boot identity and matching installed boot payloads.
  • Human-reported audio, microphone, touch and pen smoke checks; duration/restart counts unspecified.
  • Human-observed charger-indicator updates after unplug/reconnect.
  • Read-only baseline of primary-provider topology, energy-family telemetry and expected profile gap.
  • Instrumented charging-source transitions, active charging/discharging and provider repeatability.
  • Lifecycle, upstream battmgr interaction, non-Denali and supervised power states.
  • Dependent profile/fan/CPU policy qualification, all other feature groups,
    contributor requirements and accepted deviations before final integration.

Provider checks must identify the actual driver/auxiliary binding and the two
removed primary SAM nodes, not demand global power-supply counts or global
module absence. Charge/energy-unit-conditional ENODATA must be assessed against
the driver's source and successful peer-family telemetry; transport failures,
unknown/inconsistent units and timeouts are not automatically waived. USB-C
power may report through the USB supply rather than AC; a registered wireless
supply is not a claim of physical wireless charging support.

Publishing this evidence authorizes no additional Surface operation, reboot,
suspend, provider stimulus or merge. Keep beta and all reviewed hardware heads
held until the full qualification and final exact-composition gates pass.

jglathe and others added 30 commits September 16, 2026 22:34
Add embedded controller node for Hamoa/Purwa CRDs which adds fan control,
temperature sensors, access to EC internal state changes and suspend
entry/exit notifications to the EC.

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

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

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

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

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

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

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

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

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

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

Enable the gpi_dma0..gpi_dma2 controllers

currently no clients yet

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

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

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

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

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

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

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

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

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

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

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

No functional change on platforms that provide the NPL clock.

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

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

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

Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
required for the ufs_mem_hc node.

Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
Add status = "disabled" to ice@1d88000, cryptobam and general crypto
nodes in hamoa.dtsi to avoid probe failures on platforms that don't
use them.

Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
ICE is used by the UFS controller.

Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
Add the dp altmode wiring from Denali. This consists of
pmic-glink, ps883x retimers, and accompanying vregs and gpios.

Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
- re-enable scm compatible for obvious reasons
- some sorting
- pcie4 pinctrl
- MAC hack

Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
preliminary hack

Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
To support sound over DisplayPort on the type-c ports, add the necessary DAI
links and port naming.

Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
remove standalone _dwc3 statements, integrate in the usb_ block

Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
Commit 47c88db ("arm64: dts: qcom: hamoa: Add remoteproc IOMMUS
in EL2 device trees") added IOMMU stream configuration for the ADSP and
CDSP remote processors directly into x1-el2.dtso.

This configuration is only needed when Linux at EL2 is responsible for
fully managing remote processor loading and IOMMU setup via PAS
(Peripheral Authentication Service). Other EL2 configurations do not
require these properties in the same way.

Introduce a small dedicated overlay (x1-el2-pas.dtso) that includes the
base EL2 overlay and provides the remoteproc IOMMU configuration. This
keeps the generic x1-el2.dtso suitable for the configurations it was
originally intended for.

Fixes: 47c88db ("arm64: dts: qcom: hamoa: Add remoteproc IOMMUS in EL2 device trees")

Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
Checked against dsdt.dsl and AeoB file: its PMICGPIO 3 3, which translates
to pmc8380_3 gpio3. Go figure. pmc8380_3 gpio3 is protected, though, and
can't be claimed by backlight. And surprise: without it defined backlight
adjustment  works after suspend, too.

Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
ooaklee and others added 26 commits September 28, 2026 08:12
Match the qualified position-map token and send the soft-pause
parameter over the APM service port used by the captured SP11
transaction. The exact protected-topology predicate still prevents
either path from serving another graph.

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

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

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

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

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

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

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

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

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

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

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

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

Link: 537d1ac

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

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

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

Link: e72bffc

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

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

Link: e72bffc

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

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

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

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

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

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

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

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

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

Fixes: 5d0c353 ("dmaengine: qcom: Add GPI dma driver")
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit bd9f5e2)
(cherry picked from commit f9c68b9)
Signed-off-by: Leon Silcott <leon@boasi.io>
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>
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>
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>
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>
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>
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>
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>
Allocate 7.2.5-jg-0sp11v3 for the guarded audio repair series. Keep its
packages and modules distinct from the failed v2 hardware candidate;
the calibration state changes exported AudioReach symbol checksums.

Retain the prior v2 entry and existing source DTB/non-Stubble policy.
No other packaging, configuration or kernel source is changed here.
Compilation and linkage checks are not audio safety or hardware parity
qualification. Preserve the known-good recovery kernel and keep this
test carrier out of the integration target until its gates are met.

Signed-off-by: Leon Silcott <leon@boasi.io>
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>
Allocate 7.2.5-jg-0sp11v4 for the guarded render port extension repair.
Keep this candidate's packages and modules separate from the v3 hardware
test, which still produced audible static after volume changes.

Retain both previous qualification changelog entries, the GPI ordering
repair and the existing source DTB/non-Stubble packaging policy. No other
source or packaging changes are made by this version-only commit.

Offline tests do not establish audible parity or physical speaker safety.
Preserve the known-good recovery kernel and hold integration until fresh
package, cold-boot audio and broader hardware qualification are complete.

Signed-off-by: Leon Silcott <leon@boasi.io>
Qualcomm battmgr is the authoritative battery provider on the Surface
Pro 11. Do not instantiate the primary Surface Aggregator Module battery
device in the Denali-specific software-node group, avoiding a duplicate
battery provider without adding a machine quirk to the shared driver.

Keep the separate SAM AC-adapter node registered. This extracts and
narrows the Denali battery fix from the original combined touchscreen and
battery commit.

Link: 3fc7c52
Signed-off-by: Justin White <kyjus25@gmail.com>
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit 9074c73)
(cherry picked from commit 8ad3a31)
The X1E Qualcomm battery manager registers qcom-battmgr-ac as the
authoritative mains supply. Retaining the Surface Aggregator ADP1 node
creates a second mains interface for the same Denali power source.

Follow the upstream Surface Laptop 7 precedent and omit the SAM AC node
from the Denali-only registry group. Keep this correction separate from
the Justin White battery-node extraction so its original authorship and
sign-off remain intact.

Link: torvalds@0488073
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit 4eadf8d)
(cherry picked from commit 53905a9)
Compose the two preserved Denali battery and AC-registry ports on the
working v4 audio/input carrier. Keep platform-profile policy and the
experimental camera group separate so each dependency has its own
qualification path.

Allocate a fresh test ABI and retain the prior changelog history and
source DTB delivery policy. This source preparation does not establish
provider telemetry, AC transitions, power-state behavior or acceptance
for beta integration.

Signed-off-by: Leon Silcott <leon@boasi.io>
@ooaklee

ooaklee commented Oct 4, 2026

Copy link
Copy Markdown
Owner Author

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

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

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

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.