Hi, I’m trying to pass an HD770 from a i5-14600K to a jellyfin container that’s on Open Media Vault. I keep thinking I have the correct firmware downloaded but I guess that’s not the case.

The GPU is fully passed through via Proxmox.

Hypervisor: 6.14.5-1-bpo12-pve

OpenMediaVault: 6.12.32+bpo-amd64

lspci | grep -i vga:

00:10.0 VGA compatible controller: Intel Corporation Raptor Lake-S GT1 [UHD Graphics 770] (rev 04)

dmesg | grep -i drm:

[    2.084954] i915 0000:00:10.0: [drm] Failed to find VBIOS tables (VBT)
[    2.093499] i915 0000:00:10.0: [drm] *ERROR* DMC firmware has wrong CSS header length (1097158924 bytes)
[    2.093502] i915 0000:00:10.0: [drm] Failed to parse DMC firmware i915/adls_dmc_ver2_01.bin (-EINVAL). Disabling runtime power management.
[    3.998600] i915 0000:00:10.0: [drm] [ENCODER:240:DDI A/PHY A] failed to retrieve link info, disabling eDP
[    4.001294] i915 0000:00:10.0: [drm] *ERROR* GT0: GuC firmware i915/tgl_guc_70.bin: size (2134KB) exceeds max supported size (2048KB)
[    4.003303] i915 0000:00:10.0: [drm] GT0: GuC firmware i915/tgl_guc_70.1.1.bin: unexpected header size: 1841953 != 128
[    4.003305] i915 0000:00:10.0: [drm] *ERROR* GT0: GuC firmware i915/tgl_guc_70.1.1.bin: fetch failed -EPROTO
[    4.003307] i915 0000:00:10.0: [drm] GT0: GuC firmware(s) can be downloaded from https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/i915
[    4.004270] i915 0000:00:10.0: [drm] GT0: GuC firmware i915/tgl_guc_70.1.1.bin version 0.0.0
[    4.004331] i915 0000:00:10.0: [drm] *ERROR* GT0: GuC initialization failed -ENOEXEC
[    4.004333] i915 0000:00:10.0: [drm] *ERROR* GT0: Enabling uc failed (-5)
[    4.004334] i915 0000:00:10.0: [drm] *ERROR* GT0: Failed to initialize GPU, declaring it wedged!

I have adls_dmc_ver2_01.bin, tgl_guc_70.1.1.bin, and tgl_guc_70.bin all within /lib/firmware/i915/

This docker container returns this

docker run --rm \
  --device /dev/dri:/dev/dri \
  --entrypoint ffmpeg \
  ghcr.io/linuxserver/ffmpeg \
  -init_hw_device qsv=hw:/dev/dri/renderD128 \
  -hwaccel qsv -hwaccel_device hw -hwaccel_output_format qsv \
  -f lavfi -i testsrc=duration=3:size=1280x720:rate=30 \
  -vf 'format=nv12,hwupload=extra_hw_frames=64' \
  -c:v h264_qsv -f null -
[AVHWDeviceContext @ 0x56479ec06c00] libva: /usr/local/lib/x86_64-linux-gnu/dri/iHD_drv_video.so init failed
[AVHWDeviceContext @ 0x56479ec06c00] Failed to initialise VAAPI connection: 1 (operation failed).
Device creation failed: -5.
Failed to set value 'qsv=hw:/dev/dri/renderD128' for option 'init_hw_device': Input/output error
Error parsing global options: Input/output error

I’m at a loss and pulling my hair out.

  • bigredgiraffe@lemmy.world
    link
    fedilink
    English
    arrow-up
    3
    ·
    edit-2
    4 hours ago

    So I had a few thoughts. I’m not sure that you can use the docker device flag with a directory as you have there, I think it expects a device node, you can pass that directory as a volume (-v) though.

    If that doesn’t work you might also try running the VM with host-passthrough mode set on the CPU as well if it isn’t set that way already, sometimes that is also required for pass through to work from my experience. Also, make sure you passed through the whole device node, sometimes there are audio devices you have to pass through with the GPU device or you will get odd errors like those initialization ones you had. I’m not sure if this is the case for Intel iGPU though offhand though. Are you able to use intel_gpu_top on the VM to access the GPU? None of that is necessarily specific to proxmox though (but probably applies to anything libvirt powered) so YMMV.

    Edit: I realized you may not know what a “device node” is, that is the full path to the device, like /dev/dri/renderD128 vs /dev/dri which is actually a directory.