Skip to content

platform/surface: native profile/fan v7 qualification on battery v6 - #67

Closed
ooaklee wants to merge 2142 commits into
sp11/ubuntu-qcom-x1e-7.2.y-betafrom
x/qualification-7.2.5-profile-v7
Closed

ooaklee wants to merge 2142 commits into
sp11/ubuntu-qcom-x1e-7.2.y-betafrom
x/qualification-7.2.5-profile-v7

Conversation

@ooaklee

@ooaklee ooaklee commented Oct 3, 2026 •

Copy link
Copy Markdown
Owner

Profile dependency-group candidate — bounded v7 ordinary-use trial recorded

This draft carries 7.2.5-jg-0sp11v7 from battery-on-working-audio v6 in #65
(5a08764e1f2fb044a5d96b75cdf8fe8d7599fd83). It replays the three held native
profile/fan/CPU-policy ports from #60 without changing that review branch.
Candidate head: cb0c9895020f7b18ae54196cc4ec7924e5141ff6; tree:
248820b0cdc268287eca2d66f52a2ecb4f9fe195.

The exact-head five-package build and finished local artifact checks passed.
The separately authorized v7 installation and bounded ordinary-use trial are
now recorded below. Keep this PR draft and beta held: those results do not close
the remaining lifecycle, battery-phase, other-device or final-composition gates.
This carrier is for qualifying the dependency group, not a request to merge
all topics into beta.

Exact delta and contribution preservation

Held #60 port Replay on v6 Preserved author
4e9f1229b28fbaedc267e83175024707e7a778ef e861c20afed29729c9458609792ce70295a665ba Leon Silcott
e6c7470008a0af4315da196483d4292de30c695b 532daaf80dace011ea59c7d3abfa60a4f172577d Leon Silcott
af4d11ea94712abad563b8381ba7b05ae1937d1e 0031b6f89f35a3990ab93efea7b76418f5a8ea68 Leon Silcott

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

Only four paths differ from v6:

  • drivers/acpi/platform_profile.c: register the native class even without
    ACPI; guard legacy ACPI group notifications, updates and teardown. Do not
    manufacture a synthetic ACPI hierarchy.
  • drivers/platform/surface/surface_aggregator_registry.c: instantiate the
    Denali/SP11 profile and fan nodes with per-device low-power properties. Keep
    v6's two primary SAM battery/AC provider removals and other board groups.
  • drivers/platform/surface/surface_platform_profile.c: retain the guarded
    profile/fan/frequency-QoS implementation, CPU-policy/hotplug lifecycle and
    conservative transition-error reconciliation from held [HELD 7.2.5] platform/surface: preserve SP11 profile and fan policy #60. Boards without
    the frequency property retain the legacy TMP-then-fan route.
  • debian.qcom-x1e/changelog: allocate v7, preserving the complete v6 tail.

The final three code blobs match held #60 exactly. All other inherited kernel,
DT, packaging, audio/input and CI-policy blobs remain v6's. This is a functional
three-port replay, not just a version bump: unchanged exported symbols and
module names do not imply unchanged runtime behavior.

Boot-time policy to qualify: Denali requests low power at successful probe,
with a 2,515,000 kHz maximum-frequency ceiling when frequency-QoS setup is
available. Frequency-table rounding and existing userspace may affect the
observed state. The later bounded readback below confirms the native provider
and one low-power CPU-policy state; it does not measure every transition or
fan response. No daemon change or userspace/topology replacement is included.

Actual finished local evidence — October 3, 2026 UTC

The single normal source-mode producer completed with exit zero at 07:11:26 UTC.
Lexr 0.5.0-rc.5, commit b74247d08f7c, produced five packages with eight jobs.
Independent capture from the actual running producer matched the reviewed
416-package inventory and expected configuration. Source flags remain
do_dtbs=true, do_stubble=false: external-required DTB delivery with the
boot-support package, not an embedded Stubble image.

Actual extraction inspection, native/fully relocated/runtime-only Lexr
inspections and the fresh cache-independent final local audit passed:

  • Manifest/provenance and every original/relocated package byte.
  • Internal ARM64 image/header ABI 7.2.5-jg-0sp11v7-qcom-x1e and configuration.
  • All 7,816 module paths/vermagic, matched-header symbols and depmod closure;
    required audio, touch, battery, native-profile and fan modules are present.
  • All 32,012 export rows byte-identical to v6, with no export/module-set deltas.
  • Both required same-build Denali OLED/LCD DTBs, boot-support registry/helper/
    hooks and exact-ABI image triggers/rendered post-install contract.
  • All 73 warnings match v6 after only the defined candidate-version and six
    exact temporary-Equivs diagnostic normalizations; no blanket warning waiver.

The extraction inspector actually exited zero, without OOM/error, using six
read-only mounts. It never installed packages or executed their maintainer
scripts. The final audit reopens stored input evidence, raw terminal/CLI
records and package bytes and recomputes all three comparisons. Earlier failed
build/fixture results remain retained failures.

Surface installation and bounded ordinary use on October 3

The explicitly authorized five-package installation passed current-state
preflight, package simulation, installation and receipt checks in GNU screen.
The package delta contains only four new exact-version kernel/header packages
and the boot-support upgrade; no package removal or userspace/topology swap
occurred. V23 remained the verified boot default and fallback. No automatic
reboot or suspend was issued; the human subsequently selected and booted v7.

The human reports working Power Saver, Balanced and Performance transitions,
charger indication, stereo speakers, physical volume buttons and notification
audio without lingering static, microphone recording, ordinary touch and pen,
Wi-Fi and an ordinary USB connection. These are bounded manual smoke reports,
not exhaustive performance, fan, protection or lifecycle measurements.

A passive capture confirms the running v7 ABI and the native Surface Platform
Profile provider bound to the Surface Aggregator driver. The existing active
daemon, unchanged at 0.30-2+sp11.1, exposes three UI profiles; the native class
has four choices. At capture, UI power-saver maps to native low-power, and all
three SCMI/schedutil CPU policies have a 2,188,800 kHz maximum versus their
3,417,600 kHz hardware maximum. This is one current-state readback, not proof
of every transition, error reconciliation, CPU hotplug or teardown path.

The improved 10h+ battery estimate is user-observed, not measured runtime.
The saved full-battery, USB-online, noncharging snapshot does not instrument
below-full discharge or active recharge; those phase gates remain open.

The reported concurrent pen/finger canvas jumps were investigated separately.
The human confirms a smooth local Firefox control during pen hover but jumps
in AFFiNE. A corresponding source-class test reproduces a mixed-pointer panning
mechanism, making an application-side fault the probable explanation. The
deployed controller identity, exact v23 pairing, input lifetimes, one large
pen step and earlier extra-contact frames remain unresolved. This does not
universally exonerate the kernel or justify a speculative input workaround.
No driver, IPTSD, libinput, browser setting or palm-rejection policy was changed.

Source checks and CI-policy boundary

Complete-table local validation passes the four-commit immediate v6 range.
The original complete-input beta-relative validation remains a retained
failure: one historical CONST_STRUCT warning in audio commit
a5eea054c829115fd549c03a75c1a5344cfb3391, concerning a deliberately writable
private defaults copy. The separately proposed #66 disposition passes the
unchanged carrier's 62 reviewed topic-range entries locally, with the raw
warning retained. That does not replace or retroactively pass the original
policy. The approved upstream-refresh aggregate is handled separately from
those topic entries; 62 is not the total Git ancestry count, which includes
the merged upstream commits. No all-ancestry per-commit style pass is claimed.

#64 repairs the inherited workflow's missing checkpatch tables; #66 proposes
the exact bounded finding disposition. Both remain draft/unmerged and neither
is rolled into this kernel carrier. Hosted results for those CI-only PRs cover
their own ranges, not this complete carrier. A future green inherited-workflow
result alone would retain limited style coverage, not full qualification.

Qualification order and remaining gates

  1. Retain the completed authorized v7 installation, native-provider readback
    and bounded ordinary-use reports at their declared scope; preserve v23.
  2. Complete instrumented below-full discharge and active-recharge evidence.
    Charger indication, estimates and full/noncharging snapshots are not phase
    proof. No suspend or stress test is implied.
  3. Qualify profile/fan/CPU policy across the remaining errors, hotplug, teardown
    and separately supervised power-state cases; other-device containment remains
    unproven on this one Denali OLED unit.
  4. Next combine the seven v5 camera ports with this v7 stack on the isolated v8
    carrier. Its new build/package checks and separately authorized combined
    hardware trial must pass before any final composition can be accepted.
  • Exact four-path scope, three-port contribution/patch preservation and unchanged inherited inputs.
  • Immediate complete-table source validation.
  • Exact-head build, independent inputs and finished payload/DTB/boot-support audit.
  • Original/relocated/runtime CLI contracts and fresh export/module/warning comparisons.
  • Accepted applicable full-composition CI policy and complete-input hosted coverage.
  • Authorized v7 preflight/installation, preserved v23 default/fallback and human-selected v7 boot.
  • Native provider/daemon readback and bounded reported profile/ordinary regression smoke checks.
  • Instrumented battery phases and broader profile/fan/CPU/error/lifecycle qualification.
  • Error/hotplug/teardown, supervised power states and non-Denali containment.
  • Contributor requirements, explicitly accepted deviations and final combined candidate.

The seven camera ports in #56/#63 remain on their separate bounded-tested carrier;
v7 does not include them. V4/v5/v6 ordinary-use results are evidence for those
exact heads, not automatically v7. All feature groups remain in scope for the
eventual exact combined candidate. Diagnostic/qualification helpers are not
shipped in this kernel. No beta/default promotion, merge, reboot, suspend or
additional Surface operation is authorized by publication of this draft.

jglathe and others added 30 commits September 16, 2026 22:34
…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>
Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
enable HDMI connector like in TB16
enable DP sound-DAIs
enable fingerprint reader, too
correct usb-sbu gpios (same as TB16)

Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
Userspace can probe all HDMI/DP PCM devices exposed by an ALSA card while
building its profile set. For example, UCM-aware servers may try to open
every DP PCM even when only one connector is currently plugged in.

msm_dp_audio_prepare() currently returns -EINVAL when the DP controller is
not powered. This protects against unclocked register access, but it also
makes the inactive DP PCM fail during probing. If one such PCM is part of
a UCM profile, the whole profile can be discarded even though jack and ELD
state already mark the inactive connector as unavailable.

Keep the clock-safety check, but treat an inactive controller as a no-op:
skip the DP audio register programming and return success. Active streams
still program the hardware as before, while unplugged or disabled outputs
remain discoverable and report their availability through the usual jack
and ELD controls.

Fixes: 158b9aa ("drm/msm/dp: wait for audio notification before disabling clocks")
Signed-off-by: Xilin Wu <sophon@radxa.com>
ooaklee and others added 25 commits September 28, 2026 08:12
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>
Device-tree systems can use platform-profile providers even when ACPI is
disabled, but the framework currently declines to register its class in
that case. Register the class unconditionally and create the legacy ACPI
attribute group only after ACPI has initialized successfully.

Record that group registration and use it to guard legacy notifications
and teardown. This keeps the class path independent of ACPI while also
avoiding a stale acpi_kobj after an ACPI initialization failure.

This exposes the native /sys/class/platform-profile/ interface without
creating a synthetic /sys/firmware/acpi hierarchy. Existing ACPI systems
retain the legacy aggregate attributes unchanged.

This is a contained rework of the original SP11 non-ACPI enablement.

Link: 106ad0d
Signed-off-by: Leon Silcott <leon@boasi.io>

(cherry picked from commit ab12a0a)
(cherry picked from commit 4e9f122)
The Surface Pro 11 has active cooling and supports SAM performance
profiles, but its registry group does not instantiate the existing
platform-profile and fan-speed devices.

Add the existing fan-capable profile node and fan-speed node only to the
Denali software-node group. Other Surface device groups are unchanged.

Link: 5c513ff
Signed-off-by: Leon Silcott <leon@boasi.io>

(cherry picked from commit 6680508)
(cherry picked from commit e6c7470)
The Surface Pro 11 needs a lower CPU-frequency ceiling in its
low-power profile to match the validated cool-running baseline.
Describe the 2.515 GHz ceiling and default low-power selection on an
SP11-only software node.

Set up frequency-QoS only when that per-device property is present.
Devices without it retain the legacy TMP-then-fan write order,
including writes that repeat the current profile.

Track cpufreq policies through CREATE and REMOVE notifications plus a
per-device CPU-hotplug state, so a policy that is fully offline at
probe is capped when a CPU returns. Hold policy references while
attaching requests, clear stored raw pointers synchronously on REMOVE,
and stop hotplug callbacks before tearing down requests and the
notifier.

When entering low power, apply the cap before fan and TMP changes; when
leaving, restore fan and TMP before dropping the cap. If a SAM write
fails, read TMP back and reconcile fan and cap conservatively. An
unavailable cpufreq subsystem degrades to profile-only operation.

Omit the staging implementation’s no-op power-supply notifier. This is
a contained rework of the original SP11 low-power implementation.

Link: 30972bd

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

(cherry picked from commit a89959a)
(cherry picked from commit af4d11e)
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#60, 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 cb0c9895020f, 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.

@ooaklee ooaklee closed this Oct 4, 2026
kyjus25 pushed a commit to kyjus25/linux_ms_dev_kit-sp11 that referenced this pull request Oct 14, 2026
[ Upstream commit 1cdfe2f ]

When shared_tags is enabled, null_setup_tagset() makes the device use the
global tag_set, whose driver_data stays NULL. null_map_queues() therefore
falls back to the module-wide g_submit_queues/g_poll_queues instead of any
per-device value.

Resizing submit_queues or poll_queues via configfs on such a device calls
blk_mq_update_nr_hw_queues() on the shared set, shrinking
set->nr_hw_queues.  __blk_mq_realloc_hw_ctxs() only grows the
q->queue_hw_ctx[] allocation, so on shrink it merely exits and NULLs the
now-excess hctx slots. null_map_queues(), however, keeps mapping CPUs with
the unchanged g_submit_queues/g_poll_queues, so mq_map[] ends up pointing
at those NULLed hctx slots. blk_mq_map_swqueue() then dereferences the NULL
hctx (hctx->cpumask), crashing the kernel:

[  460.218374] KASAN: null-ptr-deref in range [0x0000000000000098-0x000000000000009f]
[  460.219003] CPU: 24 UID: 0 PID: 1492 Comm: sh Not tainted 7.2.0-rc2+ ooaklee#67 PREEMPT(full)
[  460.219792] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.17.0-4.fc41 04/01/2014
[  460.220452] RIP: 0010:blk_mq_map_swqueue+0x4db/0x1430
......
[  460.228977] Call Trace:
[  460.229175]  <TASK>
[  460.229354]  blk_mq_update_nr_hw_queues+0xd49/0x11c0
[  460.229779]  ? __pfx_blk_mq_update_nr_hw_queues+0x10/0x10
[  460.230200]  nullb_update_nr_hw_queues+0x1a9/0x370 [null_blk]
[  460.230694]  nullb_device_submit_queues_store+0xd9/0x170 [null_blk]
[  460.231190]  ? __pfx_nullb_device_submit_queues_store+0x10/0x10 [null_blk]
[  460.231776]  ? configfs_write_iter+0x35c/0x4e0
[  460.232122]  configfs_write_iter+0x286/0x4e0
[  460.232460]  vfs_write+0x52d/0xd00
[  460.232779]  ? __x64_sys_openat+0x108/0x1d0
[  460.233106]  ? __pfx_vfs_write+0x10/0x10
[  460.233413]  ? fdget_pos+0x1cf/0x4c0
[  460.233745]  ? fput_close+0x133/0x190
[  460.234038]  ? __pfx_expand_files+0x10/0x10
[  460.234368]  ksys_write+0xfc/0x1d0

Reproducer:
modprobe null_blk shared_tags=1 submit_queues=64 poll_queues=1
mkdir /sys/kernel/config/nullb/dev
echo 1 > /sys/kernel/config/nullb/dev/power
echo 1 > /sys/kernel/config/nullb/dev/submit_queues

A per-device resize of a shared tag set is meaningless anyway, so reject it
with -EINVAL in nullb_update_nr_hw_queues() when the device is bound to the
global tag_set.

Fixes: 45919fb ("null_blk: Enable modifying 'submit_queues' after an instance has been configured")
Suggested-by: Nilay Shroff <nilay@linux.ibm.com>
Assisted-by: Claude-Code:GLM-5.2
Signed-off-by: Zizhi Wo <wozizhi@huawei.com>
Reviewed-by: Nilay Shroff <nilay@linux.ibm.com>
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Link: https://patch.msgid.link/20260725022509.714271-8-wozizhi@huaweicloud.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
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.