On a Radxa Dragon Q6A (QCS6490) running the stock Radxa image with kernel 6.18.2-3-qcom, the Venus video encoder enumerates correctly but any actual encode attempt hangs in kernel uninterruptible-sleep. The driver appears to never call request_firmware for Venus — dmesg shows the binding message but no firmware-load activity, success or failure.
Environment
- Board: Radxa Dragon Q6A (QCS6490, eMMC Module V1.2)
- Image: shipped Radxa Ubuntu 24.04 (fresh boot today)
- Kernel:
Linux dragon-q6a 6.18.2-3-qcom #1 SMP PREEMPT ...
- Venus modules:
venus_core, venus_enc, venus_dec all loaded
- Firmware dirs:
/lib/firmware/qcom/venus-{1.8,4.2,5.2,5.4,6.0}/ contain only .zst-compressed venus.mbn.zst (Jan 2026 dated)
What works
v4l2-ctl --device /dev/video1 --info reports Card type: Qualcomm Venus video encoder
--list-formats-ext lists H.264 + HEVC on CAPTURE queue
- Opening the device returns successfully
What fails
Any of the following hangs in D-state indefinitely (cannot be killed with SIGKILL or `timeout`):
```bash
ffmpeg -f lavfi -i testsrc2=size=640x480:rate=15 -t 1 \
-vf format=nv12 -c:v h264_v4l2m2m -b:v 1M -y /tmp/v.h264
gst-launch-1.0 -e videotestsrc num-buffers=30 \
! "video/x-raw,format=NV12,width=640,height=480,framerate=30/1" \
! v4l2h264enc device=/dev/video1 \
! filesink location=/tmp/v.h264
```
Smoking gun: no firmware load attempt
`sudo dmesg -c >/dev/null` followed by an encode attempt — dmesg afterward shows nothing Venus-related. By contrast the WiFi chip's `aic_load_firmware` is verbose about every file it pulls. The Venus driver appears to not be reaching the firmware-request stage at all.
What I tried
- Decompressed all `/lib/firmware/qcom/venus-*/venus.mbn.zst` → `venus.mbn` (since `CONFIG_FW_LOADER_COMPRESS_ZSTD` is not set per `zcat /proc/config.gz | grep FW_LOADER`).
- Symlinked `venus.mdt` → `venus.mbn` in each dir.
- Reloaded the venus modules (failed silently because /dev/video1 was still open by udev).
- Full reboot.
No change after any of the above. The driver still binds, /dev/video1 still enumerates, encode attempts still hang, dmesg still empty for Venus.
Expected
Either firmware loads successfully (dmesg shows the load), or it fails visibly with a `request_firmware ... failed` line so we know which path to debug.
Hypothesis
The Venus probe path in this kernel build may not be wired to call `request_firmware` at all — the lazy-load on stream-start path appears to be skipping the firmware acquisition step entirely.
Happy to provide the kernel build config, full dmesg, or run any diagnostic. The board is on the bench.
On a Radxa Dragon Q6A (QCS6490) running the stock Radxa image with kernel
6.18.2-3-qcom, the Venus video encoder enumerates correctly but any actual encode attempt hangs in kernel uninterruptible-sleep. The driver appears to never callrequest_firmwarefor Venus — dmesg shows the binding message but no firmware-load activity, success or failure.Environment
Linux dragon-q6a 6.18.2-3-qcom #1 SMP PREEMPT ...venus_core,venus_enc,venus_decall loaded/lib/firmware/qcom/venus-{1.8,4.2,5.2,5.4,6.0}/contain only.zst-compressedvenus.mbn.zst(Jan 2026 dated)What works
v4l2-ctl --device /dev/video1 --inforeportsCard type: Qualcomm Venus video encoder--list-formats-extlists H.264 + HEVC on CAPTURE queueWhat fails
Any of the following hangs in D-state indefinitely (cannot be killed with SIGKILL or `timeout`):
```bash
ffmpeg -f lavfi -i testsrc2=size=640x480:rate=15 -t 1 \
-vf format=nv12 -c:v h264_v4l2m2m -b:v 1M -y /tmp/v.h264
gst-launch-1.0 -e videotestsrc num-buffers=30 \
! "video/x-raw,format=NV12,width=640,height=480,framerate=30/1" \
! v4l2h264enc device=/dev/video1 \
! filesink location=/tmp/v.h264
```
Smoking gun: no firmware load attempt
`sudo dmesg -c >/dev/null` followed by an encode attempt — dmesg afterward shows nothing Venus-related. By contrast the WiFi chip's `aic_load_firmware` is verbose about every file it pulls. The Venus driver appears to not be reaching the firmware-request stage at all.
What I tried
No change after any of the above. The driver still binds, /dev/video1 still enumerates, encode attempts still hang, dmesg still empty for Venus.
Expected
Either firmware loads successfully (dmesg shows the load), or it fails visibly with a `request_firmware ... failed` line so we know which path to debug.
Hypothesis
The Venus probe path in this kernel build may not be wired to call `request_firmware` at all — the lazy-load on stream-start path appears to be skipping the firmware acquisition step entirely.
Happy to provide the kernel build config, full dmesg, or run any diagnostic. The board is on the bench.