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.

  • Purebred0880@lemmy.wtf
    link
    fedilink
    English
    arrow-up
    2
    ·
    22 hours ago

    I did this about a month ago and also had some challenges. I’m not an expert and my understanding is not good enough to troubleshoot your error messages fully, but it does say the header size is not matching the expected value. I have my Jellyfin in Docker compose on a OMV VM running in Proxmox and passed through an arc a310, so very similar. I used “Device: - /dev/dri/:/dev/dri/”, that worked fine and “renderD128” can be chosen in the Jellyfin device drop down menu. The biggest issue I had was the render group not being imported correctly into the container. So even though I added my Docker user to the render group in the Docker compose .yml, the group got a random garbage name inside the container so it didn’t match. Not the expected group “render”, but something like “video73628ds”. Ended up making a custom Jellyfin Docker compose image that has just two lines "FROM Linuxserver.io.jellyfin:latest " (I think), then a line to import the render group from the host to the container (don’t remember the command, writing this on my phone). Then I built that image and used the built image in the Docker compose .yml instead of the normal linuxserver.io image.

  • bigredgiraffe@lemmy.world
    link
    fedilink
    English
    arrow-up
    6
    ·
    edit-2
    2 days 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.