Skip to content

Qualify camera parity ports on working 7.2.5 v4 (v5) - #63

Closed
ooaklee wants to merge 2143 commits into
sp11/ubuntu-qcom-x1e-7.2.y-betafrom
x/qualification-7.2.5-camera-v5
Closed

ooaklee wants to merge 2143 commits into
sp11/ubuntu-qcom-x1e-7.2.y-betafrom
x/qualification-7.2.5-camera-v5

Conversation

@ooaklee

@ooaklee ooaklee commented Oct 1, 2026 •

Copy link
Copy Markdown
Owner

Camera dependency-group candidate — bounded v5 functional trial passed

This separate 7.2.5-jg-0sp11v5 carrier starts from the tested v4 head in #55
(b9c141a6da73249aecb793b2ce1ac77645e6a00f). Its candidate head remains
bd255637156cbd9941c9dd8d0c609f0744e48de5, tree
d6389e6a385630271e3743ebe087bf0460c75e12. Keep this draft unmerged and do not
install or test it unattended.

The user reports working stereo/volume/notifications, both microphones, stable
touch and pen, Wi-Fi, and basic functionality after both restart and full
shutdown/power-on on v4. The front camera also works on a video-conferencing
site on v4, with its indicator on while active and, as the user subsequently
confirmed, off after closing the site. This is a normal-close observation,
not repeated-capture or failure-path lifecycle qualification. Recording and
measured layout/quality remain unqualified. These observations do not establish
speaker-protection state, suspend/resume, or acceptance of the additional
experimental camera-topic behavior. The working front camera is not a new v5
achievement. The separate bounded v5 functional trial is recorded below; it
does not establish full camera-topic qualification.

Exact delta and preserved provenance

Relative to v4, this carrier contains precisely the seven ports from #56
(7e4c2c58713ed112592e547facf1acb3ef555602), replayed using cherry-pick -x,
and one separate qualification changelog commit. Original authors, author
dates, messages, attribution and stable patch identities are retained; no
contributor sign-off is invented. All five final CAMSS blobs match #56.

Only these paths change relative to v4:

  • drivers/media/platform/qcom/camss/camss-csid-680.c
  • drivers/media/platform/qcom/camss/camss-csid.c
  • drivers/media/platform/qcom/camss/camss-csid.h
  • drivers/media/platform/qcom/camss/camss-vfe-680.c
  • drivers/media/platform/qcom/camss/camss-video.c
  • debian.qcom-x1e/changelog

The ports cover receiver crop, CSID680 keep-all state, VFE680 MIPI RAW mode,
start unwind, stop diagnostics and receiver-specific containment. Every other
audio, input, DT, build-flag and CI-policy blob is unchanged from v4. No battery
or power-profile topic is added. The existing v4 changelog history is unchanged.
The finished image, headers and complete module inventory independently confirm
the new ABI, 7.2.5-jg-0sp11v5-qcom-x1e.

Review and source-check boundaries

This draft targets beta to expose the complete inherited composition to the
existing integration workflow. It is not a request to merge that composition.
The meaningful camera-only review range is the eight commits after pinned v4;
the beta-relative local validator covers 63 topic commits, including the
explicitly approved upstream refresh. Existing held topic heads remain intact.

Source checks include the actual exact six-path Git delta, eight synthetic
out-of-scope whitelist-predicate controls, seven original/replay metadata and
patch-identity comparisons, five final-blob comparisons, and both immediate-v4
and beta-relative validators. The synthetic path controls are not independently
committed mutation builds. Source checks are not hardware qualification.

A later checkout audit found that hosted checkpatch runs omit the tracked
spelling and const-structure tables, limiting their style coverage. Restoring
those unchanged inputs locally leaves the pinned source tree unchanged; both
the eight-commit immediate-v4 and 63-commit beta ranges pass with the complete
tables. Earlier hosted green results are not retroactively strengthened.
Independent CI-only draft #64 provisions the inputs and rejects missing tables
and diagnostic-tool failures; it has its own exact hosted proof, but is not
merged or rolled into this pinned hardware carrier.

The unchanged standalone camera head already passed a full raw ARM64
Image/modules/DTBs build. That separate result is not an installable v5 bundle
or a v5 hardware pass; it was not rebuilt merely to repeat the same result.

Finished local bundle — October 1 UTC

The single normal exact-head Lexr build completed with exit status zero at
23:33:27 UTC. Lexr v0.5.0-rc.5, commit b74247d08f7c, used the same immutable
container and recipe as v4, normal source-mode packaging, and distinct work,
volume and output identities. No control output was reset or reused, and the
40 GiB admission threshold was not lowered.

The five finished packages are image, modules, architecture headers, common
headers and generic boot support. Their metadata, sizes and checksums match
the exact source revision/tree and independently recorded recipe/inventory.
The effective delivery is external-required: zero embedded DTBs and two
required, same-build Denali OLED/LCD DTBs. The two required DTB digests are
identical to v4's same-build outputs.

Isolated extraction-only inspection passed:

  • Internal ARM64 image ABI and every observed kernel-version banner; matching
    header release/config and common-header root.
  • All 7,816 modules, exact independently recorded module-name set,
    modules.order closure and every module's v5 vermagic.
  • Matching-header symbol/depmod closure and all 32,012 unique export rows;
    the finished packaged Module.symvers is byte-identical to v4.
  • Both DTB digests/compatibles, support registry, helper/hook syntax,
    source-rendered image post-install script and exact-ABI trigger contract.
  • Original, fully relocated and runtime-only Lexr inspection; original and
    relocated manifest/package bytes were checked again afterward.
  • Seventy-three build warnings match v1/v2/v3/v4 controls after normalizing
    only exact candidate versions and six exact temporary Equivs email
    diagnostics. No blanket warning waiver was added.

Maintainer scripts were extracted and checked, not executed. These local
results do not establish installation, boot, camera behavior, protection,
resume, non-Denali containment or full dependency-group acceptance.

The actual packaged config differs from v4 only in the explicit
CONFIG_VERSION_SIGNATURE change. The actual build-host inventory differs
in exactly five packages: libssl-dev:arm64, libssl3t64:arm64,
openssl-provider-legacy and openssl update from 3.5.5-1ubuntu3.6 to
3.5.5-1ubuntu3.7; linux-libc-dev:arm64 updates from 7.0.0-34.34 to
7.0.0-38.38. Every other installed package version matches v4. The independently
captured inventory matches the finished provenance fingerprint. This is not an
identical-full-inventory, byte-identical-image or signing-byte claim. Host
userspace headers do not change the target kernel version. The artifact checks
above passed under this explicit input drift; they do not prove hardware
equivalence or waive later runtime qualification.

Recorded digests:

  • Extracted image payload: 92db6f09252d761daa6009fe4e2f0f4b7d1bb7f896aa6992076f18b82211b97a.
  • Packaged exports: 549604a049f4359d8e4faa832704e04ed95bb2e4fb03ca6162a21660680552ee.
  • Build provenance: 085ca74ad2631b744516d5a51ae1c96ad8ea3a6a9d99515e7cf1209c3f8b254c.
  • Build-host inventory: c390edbf007a8759acb82b21b674d8836b26b0a39c471af488c2f3c20b2ed6a9.

Surface installation and ordinary-use trial — October 2

The explicitly authorized five-package installation completed successfully
using the existing Lexr v0.5.0-rc.5 binary, source b74247d08f7c. A root
GNU-screen session performed current-state preflight and package simulation,
then installation and post-install checks. The simulation and actual package
delta contain only four new exact-version kernel/header packages and the
boot-support upgrade. No package removal or userspace/topology swap occurred.
The verified v23 fallback differs from the then-running v4 kernel, so the
explicit --force acknowledges that mismatch; no overwrite or unverified
package allowance was used. The v23 boot default/fallback and existing boot
payloads were preserved. No automatic reboot or hardware stimulus was issued.

The user subsequently reported on v5:

  • Stable camera preview and several close/reopen cycles.
  • Indicator on during capture and off after each close.
  • Successful brief audio, microphone, touch and pen regression checks.

Cycle counts, durations and v5 warm/cold trial details were not specified.
These are ordinary-use reports on one Denali OLED unit, not measured quality,
buffer-layout, failure-injection or full stability results.

A separately authorized passive root-screen capture confirms the running v5
ABI, matching installed image/initramfs/OLED DTB hashes, ready boot doctor,
unchanged v23 default/fallback, clean package audit and unchanged boot identity
during collection. All seventeen captures returned zero and their saved
checksums were validated. The bounded snapshot shows taint zero, no deferred
probes or D-state tasks and no BUG/Oops/Call-trace/hung-task-pattern matches.
All 863 collected audio userspace path/digest pairs match v4. File identity
does not attest the loaded image, DSP topology, calibration or protection.

One camera stop snapshot records the VFE MIPI RAW enable/mode value, 4800-byte
stride and corresponding frame increment. ECC/CRC and sampled VFE violation/
overflow counters are zero. The sampled CSID horizontal-crop bit is absent;
this supports the native-3840-compatible path, not a 3844-to-3840 crop pass or
captured-buffer packing/layout proof. Pending IRQ values require separate
hardware interpretation. A single snapshot does not independently verify
every close/reopen cycle or the indicator's failure-path lifecycle.

Known APM command timeout, unsupported calibration, DSP error and GPR-port
diagnostics remain unresolved. Legacy ignored options and the CAMSS test-
generator entity warning are also present; the journal is not declared clean.
No protection, suspend/resume or non-SP11 pass is claimed.

An advisory OpenCode Zai-Codex / GLM-5.1 review concluded that ordinary camera
use plus regression smoke checks passed at their declared scope. This is not
an acceptance authority or contributor sign-off. Battery-only qualification
is the next separate track; the review does not authorize a merge or replace
the remaining camera/acceptance gates.

Qualification checklist

  • Exact v4-relative source scope and preserved camera-port provenance.
  • Immediate-v4 and complete beta-relative local source validators.
  • Normal Lexr build dry-run with distinct work/volume/output identities.
  • Hosted exact beta-relative integration check:
    exact beta/candidate parents and candidate tree; all 63 topic commits
    pass, with the limited hosted style coverage described above.
  • Exact-head five-package build and actual source/config/toolchain inventory.
  • Full internal ABI, all modules, matched headers/export/symbol closure,
    same-build DTBs and boot-support hook/trigger contract inspection.
  • Original, relocated and runtime-only Lexr bundle inspections.
  • Separately authorized Surface preflight/installation and passive running-
    ABI/installed-artifact checks, with v23 default/fallback preserved.
  • User-observed stable preview, several close/reopen cycles and normal
    indicator on/off, plus brief audio/microphone/touch/pen smoke checks.
  • RAW packing/layout, 3844 crop controls, sustained capture and indicator
    failure-path lifecycle.
  • Teardown/errors/lifetime, resume and shared-CAMSS/non-Denali behavior.
  • Documented deviations, contributor requirements and explicit acceptance.
  • Final dependency-group qualification and beta-relative composition.

Keep v23 as the recovery reference and boot default. Publishing this evidence
does not authorize further installations, camera stimulus, reboot or suspend.
Retain #56 and historical camera review #40 as separate held reviews;
working front-camera functionality on v4 is not grounds to discard their
additional behavior, nor proof that every port is necessary or qualified.

steev and others added 30 commits September 16, 2026 22:34
…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>
Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
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>
The CSID680 RDI path enables horizontal and vertical crop/drop without
programming the corresponding configuration. Leave these optional
operations disabled while retaining the timestamp, packing and interrupt
setup. Do not add drop-pattern writes or sensor-specific crop geometry.

Adapt the enable-bit correction from Jeroen Karsies' SP11 camera bring-up
snapshot b08f76f40b8d7b715bd4da6aef484f86142cc147. This guarded
adaptation is based on Jeroen's original CAMSS implementation in commit
ae8ce1d84841a526644991ceb9b0e98c0bab36d3. Limit the change to receiver
setup.

This remains experimental groundwork: stream counters, capture layout
and repeated starts still need validation on the target hardware.

Link: karsies-wq/sp11-imx681-linux@ae8ce1d
Link: https://github.com/karsies-wq/sp11-imx681-linux/blob/b08f76f40b8d7b715bd4da6aef484f86142cc147/camss/camss-csid-680.c
Link: b910f68
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit 72184c5)
(cherry picked from commit 27fe066)
Select the MIPI_RAW write-client mode used in Jeroen Karsies' SP11 camera
bring-up snapshot b08f76f40b8d7b715bd4da6aef484f86142cc147. Name the mode
bit and set it together with the existing write-client enable bit.

Keep stride, image configuration, packing, frame increment, interrupts
and stream lifecycle unchanged. This does not establish alignment padding
for unaligned packed RAW widths and does not enable any sensor.

This guarded adaptation is based on Jeroen's original CAMSS implementation
in the first linked commit. It remains experimental
until VFE680 stream status and capture layout are validated on the target
hardware.

Link: karsies-wq/sp11-imx681-linux@ae8ce1d
Link: https://github.com/karsies-wq/sp11-imx681-linux/blob/b08f76f40b8d7b715bd4da6aef484f86142cc147/camss/camss-vfe-680.c
Link: 651e711
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit bdda2ab)
(cherry picked from commit 036db4b)
Restore the CSID-specific part of the qualified camera path: detect the
one-trio C-PHY RAW10 3844x2640 sink format, decode it for the receiver
crop,
program a 3840-pixel horizontal crop, and expose 3840 pixels on the CSID
source pad.

Keep the final source branch's exact 3840-or-3844 IMX681 signature helper
so the standalone 3840x2640 driver can use the same guarded diagnostics.
C-PHY routing itself is already carried by the preceding beta camera
topic, so it is intentionally not duplicated here.

This extracts the remaining receiver-crop and standalone-signature
behavior from the two linked hardware-qualified source commits while
preserving their author.

Link: 73960c7
Link: 6621d73
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit ed5610b)
(cherry picked from commit fcf78c6)
Program period 1 and pattern 0 for the frame, pixel, and line drop
engines.
This preserves every RDI sample explicitly instead of relying on reset
values, while the independently configured IMX681 horizontal crop remains
enabled only for its exact C-PHY RAW10 geometry.

Extract the CSID portion of the hardware-qualified source commit and
preserve its author. Sensor, PHY, device-tree, and packaging changes from
that original multi-area commit are already represented by the preceding
beta camera topic.

Link: 1592ec3
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit 3760fbf)
(cherry picked from commit 37a2c79)
Track the last subdevice that accepted stream start. If a later subdevice
fails, stop only the subdevices that were successfully started before
tearing down the media pipeline. Reuse the same helper for normal stream
stop and keep teardown going after nonfatal stop errors.

This preserves the CAMSS portion of the hardware-qualified source commit.
Its sensor, CCS, and packaging changes are not copied because the beta
already uses the validated standalone IMX681 driver and focused packaging.

Link: 0097c12
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit b8bcbfa)
(cherry picked from commit 21735e3)
Sample read-only CSID680 receiver, packet, error, IRQ, crop, and linked-
RDI state while its clocks are still running. Sample matching VFE680
write-master and IRQ state before disabling the writer.

Keep the source branch's narrow activation signature: X1E80100,
one-trio C-PHY RAW10, 3840x2640 or its 3844-pixel pre-crop form, and the
exact packed VFE output geometry. Other SoCs, D-PHY routes, formats, and
VFE Lite remain unchanged.

This extracts the active CAMSS diagnostics from the hardware-qualified
source commit and preserves its author. The old CCS sensor diagnostics are
not copied: the qualified final tree replaced that unbound path with the
standalone IMX681 driver.

Link: 4d190bc
Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit 11ae21d)
(cherry picked from commit 3b0058e)
The qualified integration source applied its CSID680 keep-all state and
VFE680 MIPI RAW write mode to every user of those shared blocks. Preserve
the observed behavior for the X1E80100 C-PHY RAW10 IMX681 route while
restoring the existing programming for all other formats and SoCs.

Use the already exact transport and geometry signature for containment.
For that route, keep crop/drop disabled unless the 3844-to-3840 horizontal
crop is selected, explicitly program all drop engines to keep every
sample, and select the MIPI RAW VFE write-client mode. Other routes retain
their prior RDI flags, reset-value drop state, and VFE mode.

This is an intentional guardrail relative to the qualified source, not a
claim of cross-device equivalence. The SP11 path and a non-SP11 VFE680 RDI
path both require hardware qualification before integration.

Signed-off-by: Leon Silcott <leon@boasi.io>
(cherry picked from commit f1ee66a)
(cherry picked from commit 7e4c2c5)
Allocate 7.2.5-jg-0sp11v5 for the seven held camera ports replayed onto
the pinned v4 audio/input reference. Keep the previous changelog entries,
audio/input source, device trees and packaging flags unchanged.

This is a separate experimental dependency-group carrier, not a replacement
for the held camera topic or a complete integration branch. RAW layout,
continuous capture, controls, LED, teardown/error recovery, resume and
non-Denali qualification remain open. No build result establishes protection
state or author attestation, and no installation or merge is authorized here.

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#56, 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 bd255637156c, 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.

The bounded v5 installation and ordinary camera preview/reopen/indicator trial remain recorded in this PR's description. The seven camera ports were replayed into v8 and mapped back to ooaklee/linux_ms_dev_kit-sp11#56; the separate v5 ABI/changelog and build-input history remain here, rather than being relabelled as v8 results.

@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
commit c9e9bb7 upstream.

nvmet_pci_epf_exec_iod_work() submits an I/O command with req->execute()
and then waits for the command to complete and transfers the data back
to the host. This wait is not needed for commands that do not transfer
data from the device to the host. To decide whether that wait is needed,
it reads iod->data_len and iod->dma_dir after calling req->execute().

However, once req->execute() is called, the command may complete
asynchronously on another CPU. For commands that do not require a
device-to-host data transfer, nvmet_pci_epf_queue_response() calls
nvmet_pci_epf_complete_iod() directly, which can free the iod before it
reads iod->data_len and iod->dma_dir, resulting in the KFENCE use-after-
free:

 BUG: KFENCE: use-after-free read in nvmet_pci_epf_exec_iod_work+0x288/0x798 [nvmet_pci_epf]

 Use-after-free read at 0x00000000fdfa6d03 (in kfence-ooaklee#63):
  nvmet_pci_epf_exec_iod_work+0x288/0x798 [nvmet_pci_epf]
  process_one_work+0x15c/0x4f0
  worker_thread+0x18c/0x30c
  kthread+0x130/0x140
  ret_from_fork+0x10/0x20

 kfence-ooaklee#63: 0x00000000e3de0e71-0x00000000c938ad62, size=712, cache=kmalloc-1k

 allocated by task 10 on cpu 0 at 73.995480s (0.005122s ago):
  mempool_kmalloc+0x1c/0x28
  mempool_alloc_noprof+0x40/0x9c
  nvmet_pci_epf_poll_sqs_work+0xd4/0x344 [nvmet_pci_epf]
  process_one_work+0x15c/0x4f0
  worker_thread+0x18c/0x30c
  kthread+0x130/0x140
  ret_from_fork+0x10/0x20

 freed by task 131 on cpu 3 at 73.995521s (0.008385s ago):
  mempool_kfree+0x10/0x20
  mempool_free+0x44/0x64
  nvmet_pci_epf_free_iod+0x88/0x98 [nvmet_pci_epf]
  nvmet_pci_epf_cq_work+0xfc/0x280 [nvmet_pci_epf]
  process_one_work+0x15c/0x4f0
  worker_thread+0x18c/0x30c
  kthread+0x130/0x140
  ret_from_fork+0x10/0x20

Fix this by referring to iod->data_len and iod->dma_dir before calling
req->execute(). The remaining iod accesses such as iod->status are only
reached on the device-to-host read path. In this case,
nvmet_pci_epf_queue_response() signals iod->done instead of freeing the
iod, so the iod stays valid.

Fixes: 0faa0fe ("nvmet: New NVMe PCI endpoint function target driver")
Cc: stable@vger.kernel.org
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.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.