Skip to content

[Dragon Q6A] Venus H.264 encoder hangs in uninterruptible-sleep — firmware never requested (kernel 6.18.2-3-qcom) #560

@jason-dgio

Description

@jason-dgio

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

  1. 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`).
  2. Symlinked `venus.mdt` → `venus.mbn` in each dir.
  3. Reloaded the venus modules (failed silently because /dev/video1 was still open by udev).
  4. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions