Public bug reported:
SUMMARY
On the Lenovo ThinkPad X13s (Qualcomm SC8280XP), the Ubuntu-only venus
video decoder enablement never votes for the MMCX power rail. The video
core's GDSCs (mvs0c/mvs0) are MMCX subdomains, and in our measurements
MMCX was held up only by the display controllers.
A hardware video decode (Firefox uses venus via V4L2-M2M; or ffmpeg
h264_v4l2m2m) then either:
(a) triggers an SMMU fault from the venus firmware, after which the firmware
hangs, runtime PM goes into "error" and the venus IRQ storms on CPU0; the
machine hard-resets later, reliably within ~1 s when the display blanks; or
(b) hard-resets the machine immediately, about 0.1 s after the decoder powers
on.
Hard resets leave no panic, no log entry and an empty pstore. Unsaved work is
lost.
With MMCX held at RPMh level NOM (256) by an out-of-tree test module, 3
of 3 decodes on fresh boots were clean, and the machine survived a 60 s
display-off in each case. Holding only MX did not help (n=1). Details
and limits are below.
Labels used: [measured] = observed on this machine in the attached logs;
[inferred] = from code reading or timing, not directly measured.
SYSTEM
Hardware: Lenovo ThinkPad X13s, 21BX001LGE, BIOS N3HET95W (1.67) 12/11/2025
[from dmesg DMI line]
Release: Ubuntu 26.04.1 LTS (resolute)
Kernel: 7.0.0-42-generic (7.0.0-42.42); the same fault is also in the
logs of 7.0.0-28 and 7.0.0-30
Cmdline: clk_ignore_unused pd_ignore_unused arm64.nopauth (plus defaults).
Note: pd_ignore_unused/clk_ignore_unused affect genpd/clock behaviour.
Firmware: qcom/sc8280xp/LENOVO/21BX/qcvss8280.mbn, linux-firmware
20260319.git217ca6e4.1ubuntu;
QC_IMAGE_VERSION_STRING=video-firmware.1.1-b158087140355883dc40b004032856a8feb5d565,
BUILD_DATE Jun 20 2023 (installed file identical to upstream linux-firmware,
sha256 187d9ebe0bb015a6...)
Browsers: Firefox 151.0.2 (snap), Chromium 150.0.7871.128 (snap); ffmpeg
7:8.0.1-3ubuntu2+esm5
Desktop: GNOME (Wayland), idle-delay 300 s (screen blanks after 5 min),
automatic suspend on AC disabled
Power: on AC with a full battery during all tests (makes a battery-side
supply problem unlikely)
Code origin: the venus SC8280XP enablement (DT node video-codec@aa00000,
sm8350_res/sc8280xp_res in drivers/media/platform/qcom/venus/core.c) is Ubuntu
SAUCE (LP: #2078929), not upstream. The X13s DT uses compatible
"qcom,sm8350-venus", so sm8350_res is the struct in use.
STEPS TO REPRODUCE
WARNING: save your work. Step 3 can hard-reset the machine immediately.
Prerequisites: ffmpeg with libx264 and h264_v4l2m2m (Ubuntu's ffmpeg has
both); a GNOME Wayland session; Firefox/Chromium closed, because they
may already have used venus.
1. Boot fresh, with no hardware video decode since boot (check: "grep venus
/proc/interrupts" shows only a handful of interrupts).
2. Create a clip:
ffmpeg -f lavfi -i testsrc2=size=1920x1080:rate=30 -t 3 -c:v libx264
-pix_fmt yuv420p clip.mp4
3. Decode it on venus:
timeout -k 5 60 ffmpeg -nostdin -c:v h264_v4l2m2m -i clip.mp4 -f null -
4. Confirm the fault:
sudo dmesg | grep -E 'context fault|idle fail'
cat /sys/bus/platform/devices/aa00000.video-codec/power/runtime_status
(shows "error")
grep venus /proc/interrupts; sleep 1; grep venus /proc/interrupts
(count rises by ~200k/s)
5. Only after a fault: blank the display, either by waiting 5 min idle or, as
the session user (not via sudo):
busctl --user set-property org.gnome.Mutter.DisplayConfig
/org/gnome/Mutter/DisplayConfig org.gnome.Mutter.DisplayConfig PowerSaveMode i 3
To watch the rails: sudo cat /sys/kernel/debug/pm_genpd/pm_genpd_summary
| grep -A12 '^mmcx'
ACTUAL RESULT
Variant (a), step 3 [measured, attachment 02]: 0 frames decoded, and
arm-smmu 15000000.iommu: Unhandled context fault: fsr=0x402,
iova=0x00000400, fsynr=0x110001, cbfrsynra=0x2a00, cb=3
qcom-venus aa00000.video-codec: wait for cpu and video core idle fail (-110)
- runtime_status becomes "error" and stays there; the firmware stays hung and
powered [measured].
- The venus IRQ (DT: GIC SPI 174 level = hwirq 206 in /proc/interrupts) fires
~207-212k/s on CPU0 (CPU0 97-98 % system time) until the reset; observed for
34-55 min [measured, attachment 08].
- Faulting iovas seen: 0x0, 0x400, 0x100000, 0x100c00, 0x99493c10 (4 times),
0x1949bc10, 0x19493c10 [measured]. The driver's own mappings start at
0xdfa00000 (top-down IOVA allocation) [measured in a traced run]. The values
near 0 lie in the CP region (cp_size 0x25800000) [inferred]. 0x1949bc10 and
0x19493c10 differ from 0x99493c10 by one or two bits [measured]; whether this
is caused by the low voltage is speculation.
Variant (b) [measured, 2 of 2 runs with ftrace and venus dynamic debug
enabled]: the machine hard-reset ~0.1 s after decoder power-on (last
trace events: venus genpd/GDSC/clock enable, "venus hw version
6.10.608", first buffer mappings). No fault line was logged, because the
logs were lost in the reset.
Step 5 [measured]: in the stock run, the machine hard-reset within ~1 s
of display-off (attachment 03; the reset came before the next 1 s rails
sample). In the MX-only run (attachment 05), the 1 s sample right after
display-off caught MMCX falling from 128 (SVS, set by the display) to 64
(LOW_SVS, videocc's own vote), and then the machine reset. Two earlier
resets that day came ~5 min after the last user activity, which matches
the GNOME idle blank [inferred from timing].
EXPECTED RESULT
The decode works, and blanking the display has no effect.
ANALYSIS
pm_genpd_summary on the stock kernel before decoding [measured, attachment 01]:
mx on 0 only aec5a00.phy attached; aa00000.video-codec is NOT
attached
mmcx on 128 aea0000.displayport-controller 128,
ae01000.display-controller 64;
videocc abf0000 suspended (votes 64 only while venus is
powered);
subdomains include mvs0c_gdsc and mvs0_gdsc
- Venus never votes MMCX: the DT node lists only "venus", "vcodec0", "mx",
and sm8350_res names only "mx" [measured + source].
- Since 7.0.0-38, MX isn't voted either. The stable backport f45fd3dbb5f6
("media: venus: scale MMCX power domain on SM8250", in the 2026-08-20 stable
update, LP: #2164666) made pm_helpers use res->opp_pmdomain_num. Ubuntu's
sm8350_res/sc8280xp_res don't set it, so it is 0 and "mx" is never attached
[source; "mx" unattached on -42 is measured]. That is a separate regression,
but not the cause here: the fault also occurs on 7.0.0-28/-30, where MX was
voted [from source, not measured].
- The fault occurred with MMCX already aggregated at SVS (128) because of the
display [measured]. So SVS was not enough, and only NOM (256) was shown to work.
EXPERIMENTS (original Ubuntu venus driver; out-of-tree test module
"venus_vote", source attached)
venus_vote holds RPMh performance votes: MX by attaching the venus
node's "mx" domain; MMCX by dev_pm_genpd_set_performance_state() on
videocc abf0000, which it also keeps runtime-active.
Votes held First HW decode Display off 60 s
(after the decode)
none (stock) SMMU fault + hang: 2 of 4 runs (12:07, hard reset: 1/1
measured (16:30:54);
16:23; neither on a fresh boot) 2 more resets
match the 5 min idle
immediate hard reset, no fault logged: blank by timing
[inferred]
2 of 4 runs (16:01, 16:06; ftrace+dyndbg)
MX+MMCX @256 clean 2/2 (90/90 frames, runtime suspend survived 2/2
OK, ~200 IRQs, no storm)
MMCX @256 only clean 1/1 survived 1/1
MX @256 only SMMU fault 1/1 (iova 0x19493c10, 0 frames) hard reset 1/1
(MMCX 128 -> 64 captured)
All voted runs and the MX-only run were on fresh boots, each with one 3 s
1080p30 H.264 clip.
Not tested: Firefox playback with the vote, long playback, VP9/HEVC/4K,
several sessions at once, suspend/resume.
Not separated: the MMCX level itself vs. videocc being kept runtime-active by
the module (no level=0/64/128 control run).
HISTORY ON THIS MACHINE [measured, attachment 09]
From /var/log/syslog*, 2026-07-28 to 2026-10-31: 13 SMMU faults with the
same signature, plus one "idle fail (-110)" without an SMMU fault
(2026-09-01 07:55), on 7.0.0-28, -30 and -42. All 14 were followed by an
unclean reset (no system shutdown before the next boot) 5-118 min later.
Four of them were preceded by qcom-battmgr "-110" property timeouts, RCU
expedited stalls and hung tasks (attachment 10). So resets also happen
during use, not only when the display blanks. The mechanism of that path
is unknown [inferred].
IMPACT
On an X13s with default GNOME settings, playing an H.264/VP8/VP9/HEVC video in
Firefox can trigger the fault: Firefox decodes through V4L2-M2M/venus because
VA-API is unavailable [verified on this machine with MOZ_LOG and
about:support]. The machine then hard-resets the next time the screen blanks,
sometimes sooner, including during use. Unsaved work is lost. This happened 14
times in 3 months on this machine.
Not verified: whether Firefox enables hardware decoding by default on a clean
profile; other browsers.
SUGGESTED FIX
- Add MMCX to the venus node (power-domains: <&rpmhpd SC8280XP_MMCX>,
power-domain-names: "mmcx"). Set .opp_pmdomain = { "mx", "mmcx" } and
.opp_pmdomain_num = 2 in sm8350_res (and sc8280xp_res), as f45fd3dbb5f6 does
for SM8250.
- Caveat: only NOM was shown to work, and SVS (128) was not enough. The current
SAUCE OPP table (720 MHz-1.332 GHz, required-opps LOW_SVS..NOM) differs from
the upstream iris SC8280XP table (240-560 MHz, up to TURBO_L1) and may need
correcting. Please verify a fix with the decode + display-off test above.
- At minimum, set .opp_pmdomain_num for the Ubuntu-only resources, to undo the
7.0.0-38 MX regression.
- Longer term: upstream enables SC8280XP video on the iris driver (v7.3-rc1,
votes MX and MMCX). Consider switching to iris instead of carrying the venus
SAUCE patches.
- Robustness: on IRIS2, venus_isr() doesn't write WRAPPER_INTR_CLEAR (this is
upstream behaviour, also for SM8250), and the watchdog status bit is never
handled. After the hang, the level IRQ fires continuously [measured]; we
suspect the watchdog interrupt stays asserted [inferred]. The driver also never
recovers a firmware that hangs without sending SYS_ERROR.
WORKAROUND
Disable venus: /etc/modprobe.d/blacklist-venus.conf containing
blacklist venus_core
blacklist venus_dec
blacklist venus_enc
install venus_core /bin/false
install venus_dec /bin/false
install venus_enc /bin/false
then "sudo update-initramfs -u" and reboot. Verified here: no venus nodes,
h264_v4l2m2m fails harmlessly, and display-off is survived. Alternatively,
disable hardware decoding in the browser (Firefox:
media.hardware-video-decoding.enabled=false).
This report was filed with venus blacklisted, so the apport logs from
the current boot contain no venus fault; the fault logs are in the
attachments.
ATTACHMENTS (personal data redacted: MACs, UUIDs, serial numbers, IPs, username)
01_pm_genpd_summary_stock_before_decode.txt rails and clocks before a
decode, stock kernel
02_dmesg_stock_fault_run.log stock fault run (iova 0x400).
Note: not a fresh boot; venus fw_level=0x3f and dyndbg on hfi_venus.c (151
empty "VenusFW :" lines); IRQ moved to CPU7 before the display-off
03_rails_stock_display_off_until_reset.log stock run: mx 0 / mmcx 128 up
to "display OFF", then reset
04_dmesg_mx-only_run.log, 05_rails_mx-only_run_until_reset.log,
05b_decode_mx-only_run.log
MX-only run: fault, 0 frames,
MMCX 128 -> 64, reset
06_dmesg_clean_run_mx+mmcx.log, 06b_decode_clean_run_mx+mmcx.log,
06c_rails_clean_run_mx+mmcx_display_off.log
clean run with both rails held:
90/90 frames, display-off survived
07_rails_mmcx-only_run_survived.log, 07b_decode_mmcx-only_run.log
MMCX-only run: clean,
display-off survived
08_irq_storm_samples.txt /proc/interrupts samples of the
IRQ storm
09_history_faults_table.txt all 14 historical events, with
criteria
10_excerpt_2026-09-01_battmgr_rcu_hung.txt reset during use, preceded by
battmgr/RCU/hung-task messages
11_venus_vote.c the test module
Related: LP: #2078929 (X13s venus enablement), LP: #2164666 (stable
update containing f45fd3dbb5f6). Similar user reports:
https://discourse.ubuntu.com/t/status-of-ubuntu-support-for-lenovo-
thinkpad-x13s/44652 (posts #299, #305/#307, #362-#366) and "X13s and
26.04LTS: opening Mouse & Touchpad settings causes instant system
crash". Upstream note on hard resets with the old venus patches on X13s:
https://lkml.iu.edu/2604.0/06208.html
TRANSPARENCY NOTE
The analysis, scripts and test module were written with the help of
Claude Code, an AI coding assistant. All measurements were made on the
affected X13s, and the logs are attached. Statements marked [inferred]
come from code reading or timing, not direct measurement.
ProblemType: Bug
DistroRelease: Ubuntu 26.04
Package: linux-image-7.0.0-42-generic 7.0.0-42.42
ProcVersionSignature: Ubuntu 7.0.0-42.42-generic 7.0.14
Uname: Linux 7.0.0-42-generic aarch64
ApportVersion: 2.34.1-0ubuntu0.1
Architecture: arm64
AudioDevicesInUse:
USER PID ACCESS COMMAND
/dev/snd/controlC0: oliver 4779 F.... pipewire
oliver 5452 F.... wireplumber
/dev/snd/seq: oliver 4779 F.... pipewire
CasperMD5CheckResult: unknown
CurrentDesktop: ubuntu:GNOME
Date: Sat Oct 31 17:59:34 2026
EcryptfsInUse: Yes
Lspci-vt:
-[0002:00]---00.0-[01-ff]----00.0 Shenzhen Unionmemory Information System
Ltd. AM630 PCIe 4.0 x4 NVMe SSD Controller
-[0004:00]---00.0-[01-ff]----00.0 Foxconn International, Inc. T99W175 5G
Modem [Snapdragon X55]
-[0006:00]---00.0-[01-ff]----00.0 Qualcomm Technologies, Inc QCNFA765
Wireless Network Adapter
MachineType: LENOVO 21BX001LGE
ProcEnviron:
LANG=en_US.UTF-8
PATH=(custom, no user)
SHELL=/bin/bash
TERM=xterm-256color
XDG_RUNTIME_DIR=<set>
ProcFB: 0 msmdrmfb
ProcKernelCmdLine: BOOT_IMAGE=/boot/vmlinuz-7.0.0-42-generic
root=UUID=abdbc5b6-1e07-49fc-958b-6f1411c26f68 ro clk_ignore_unused
pd_ignore_unused arm64.nopauth quiet splash
crashkernel=2G-4G:320M,4G-32G:512M,32G-64G:1024M,64G-128G:2048M,128G-:4096M
SourcePackage: linux
UpgradeStatus: Upgraded to resolute on 2026-07-27 (96 days ago)
acpidump:
dmi.bios.date: 12/11/2025
dmi.bios.release: 1.67
dmi.bios.vendor: LENOVO
dmi.bios.version: N3HET95W (1.67 )
dmi.board.asset.tag: Not Available
dmi.board.name: 21BX001LGE
dmi.board.vendor: LENOVO
dmi.board.version:
SDK0T76530 WIN
ptal����8
dmi.chassis.asset.tag: No Asset Information
dmi.chassis.type: 10
dmi.chassis.vendor: LENOVO
dmi.chassis.version: None
dmi.ec.firmware.release: 1.24
dmi.modalias:
dmi:bvnLENOVO:bvrN3HET95W(1.67):bd12/11/2025:br1.67:efr1.24:svnLENOVO:pn21BX001LGE:pvrThinkPadX13sGen1:rvnLENOVO:rn21BX001LGE:rvrSDK0T76530WINptal8:cvnLENOVO:ct10:cvrNone:skuLENOVO_MT_21BX_BU_Think_FM_ThinkPadX13sGen1:pfaThinkPadX13sGen1:
dmi.product.family: ThinkPad X13s Gen 1
dmi.product.name: 21BX001LGE
dmi.product.sku: LENOVO_MT_21BX_BU_Think_FM_ThinkPad X13s Gen 1
dmi.product.version: ThinkPad X13s Gen 1
dmi.sys.vendor: LENOVO
** Affects: linux (Ubuntu)
Importance: Undecided
Status: New
** Tags: arm64 resolute sc8280xp x13s
** Attachment added: "All evidence logs (redacted), see 00_INDEX.txt"
https://bugs.launchpad.net/bugs/2172673/+attachment/6013988/+files/x13s-venus-mmcx-evidence.tar.gz
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2172673
Title:
[X13s / SC8280XP] venus never votes MMCX: hardware video decode causes
SMMU fault, firmware hang and IRQ storm, followed by hard reset
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2172673/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs