Hi,
I tried to to read as many pages and manuals as I could but I came down to the conclusion that my motherboard doesn't support IOMMU. If someone here could help me it will be great, but after 2 days of searching and trying I have to say I'm giving up a bit.
I bought my new MinisForum NAB6 16 x 12th Gen Intel(R) Core(TM) i7-12650H (1 Socket) and installed ProxMox on it. So far so good. All drivers are detected, all looks more than okay. I can spin up VMs an CTs.
I'm using it as a home server and I wanted to install Emby and of course I thought about GPU acceleration to give an extra boost to the decoding. The model I got doesn't have a super powerful GPU but it's better than nothing.
I tried to follow all the tutorials and guides to enable IOMMU. After a lot of pain and tests I found a command that checks for a lot of virtualisation capabitlities of your hardware `virt-host-validate` part of package `libvirt-clients`.
Output:
I tried many combinations
/etc/kernel/cmdline
So after some of these tests I came to the conclusion that SR-IOV worked but not IOMMU. I don't know if it makes much sense but it seems to be the case for this computer. I ended up being able to see the 7 devices under the GPU 02.00.[1-7] but still I was unable to assign it to a VM due to IOMMU not being detected and it failing every time I tried (even when I set it to RAW device or PCI-E, etc).
I tried to filter a bit the output to make the post more readable. If anybody has any idea of how to do more tests I'm all ears, if not at least I hope this post saves valuable hours to the next guy that buys MinisForum NAB6 and finds that passtrhought doesn't work because of IOMMU.
I tried to to read as many pages and manuals as I could but I came down to the conclusion that my motherboard doesn't support IOMMU. If someone here could help me it will be great, but after 2 days of searching and trying I have to say I'm giving up a bit.
I bought my new MinisForum NAB6 16 x 12th Gen Intel(R) Core(TM) i7-12650H (1 Socket) and installed ProxMox on it. So far so good. All drivers are detected, all looks more than okay. I can spin up VMs an CTs.
I'm using it as a home server and I wanted to install Emby and of course I thought about GPU acceleration to give an extra boost to the decoding. The model I got doesn't have a super powerful GPU but it's better than nothing.
I tried to follow all the tutorials and guides to enable IOMMU. After a lot of pain and tests I found a command that checks for a lot of virtualisation capabitlities of your hardware `virt-host-validate` part of package `libvirt-clients`.
Output:
Bash:
root@pve1:~# virt-host-validate
QEMU: Checking for hardware virtualization : PASS
QEMU: Checking if device /dev/kvm exists : PASS
QEMU: Checking if device /dev/kvm is accessible : PASS
QEMU: Checking if device /dev/vhost-net exists : PASS
QEMU: Checking if device /dev/net/tun exists : PASS
QEMU: Checking for cgroup 'cpu' controller support : PASS
QEMU: Checking for cgroup 'cpuacct' controller support : PASS
QEMU: Checking for cgroup 'cpuset' controller support : PASS
QEMU: Checking for cgroup 'memory' controller support : PASS
QEMU: Checking for cgroup 'devices' controller support : PASS
QEMU: Checking for cgroup 'blkio' controller support : PASS
QEMU: Checking for device assignment IOMMU support : WARN (No ACPI DMAR table found, IOMMU either disabled in BIOS or not supported by this hardware platform)
QEMU: Checking for secure guest support : WARN (Unknown if this platform has Secure Guest support)
LXC: Checking for Linux >= 2.6.26 : PASS
LXC: Checking for namespace ipc : PASS
LXC: Checking for namespace mnt : PASS
LXC: Checking for namespace pid : PASS
LXC: Checking for namespace uts : PASS
LXC: Checking for namespace net : PASS
LXC: Checking for namespace user : PASS
LXC: Checking for cgroup 'cpu' controller support : PASS
LXC: Checking for cgroup 'cpuacct' controller support : PASS
LXC: Checking for cgroup 'cpuset' controller support : PASS
LXC: Checking for cgroup 'memory' controller support : PASS
LXC: Checking for cgroup 'devices' controller support : PASS
LXC: Checking for cgroup 'freezer' controller support : FAIL (Enable 'freezer' in kernel Kconfig file or mount/enable cgroup controller in your system)
LXC: Checking for cgroup 'blkio' controller support : PASS
LXC: Checking if device /sys/fs/fuse/connections exists : PASS
I tried many combinations
/etc/kernel/cmdline
boot=zfs intel_iommu=on iommu=pt nox2apic intremap=no_x2apic_optout video=efifb:off,vesafb:off
Bash:
pve1 kernel: DMAR: IOMMU enabled
pve1 kernel: iommu: Default domain type: Passthrough (set via kernel command line)
pve1 kernel: i915 0000:00:02.0: vgaarb: deactivate vga console
pve1 kernel: i915 0000:00:02.0: [drm] Using Transparent Hugepages
pve1 kernel: i915 0000:00:02.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=io+mem
pve1 kernel: i915 0000:00:02.0: [drm] Finished loading DMC firmware i915/adlp_dmc_ver2_16.bin (v2.16)
pve1 kernel: i915 0000:00:02.0: [drm] GuC firmware i915/adlp_guc_70.bin version 70.5.1
pve1 kernel: i915 0000:00:02.0: [drm] HuC firmware i915/tgl_huc.bin version 7.9.3
pve1 kernel: i915 0000:00:02.0: [drm] HuC authenticated
pve1 kernel: i915 0000:00:02.0: [drm] GuC submission enabled
pve1 kernel: i915 0000:00:02.0: [drm] GuC SLPC enabled
pve1 kernel: i915 0000:00:02.0: [drm] GuC RC: enabled
pve1 kernel: i915 0000:00:02.0: [drm] Protected Xe Path (PXP) protected content support initialized
pve1 kernel: [drm] Initialized i915 1.6.0 20201103 for 0000:00:02.0 on minor 0
pve1 kernel: ACPI: video: Video Device [GFX0] (multi-head: yes rom: no post: no)
pve1 kernel: i915 0000:00:02.0: [drm] Cannot find any crtc or sizes
boot=zfs intel_iommu=on i915.enable_guc=3 i915.max_vfs=7
Bash:
pve1 kernel: Reserving Intel graphics memory at [mem 0x4c800000-0x503fffff]
pve1 kernel: DMAR: IOMMU enabled
pve1 kernel: pci 0000:00:02.0: DMAR: Skip IOMMU disabling for graphics
pve1 kernel: i915 0000:00:02.0: vgaarb: deactivate vga console
pve1 kernel: i915 0000:00:02.0: [drm] Using Transparent Hugepages
pve1 kernel: i915 0000:00:02.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=io+mem
pve1 kernel: i915 0000:00:02.0: [drm] Finished loading DMC firmware i915/adlp_dmc_ver2_16.bin (v2.16)
pve1 kernel: i915 0000:00:02.0: [drm] GuC firmware i915/adlp_guc_70.bin version 70.5.1
pve1 kernel: i915 0000:00:02.0: [drm] HuC firmware i915/tgl_huc.bin version 7.9.3
pve1 kernel: i915 0000:00:02.0: [drm] HuC authenticated
pve1 kernel: i915 0000:00:02.0: [drm] GuC submission enabled
pve1 kernel: i915 0000:00:02.0: [drm] GuC SLPC enabled
pve1 kernel: i915 0000:00:02.0: [drm] GuC RC: enabled
pve1 kernel: i915 0000:00:02.0: [drm] Protected Xe Path (PXP) protected content support initialized
pve1 kernel: [drm] Initialized i915 1.6.0 20201103 for 0000:00:02.0 on minor 0
pve1 kernel: ACPI: video: Video Device [GFX0] (multi-head: yes rom: no post: no)
pve1 kernel: i915 0000:00:02.0: driver does not support SR-IOV configuration via sysfs
boot=zfs intel_iommu=on iommu=pt i915.max_vfs=7
Bash:
pve1 kernel: DMAR: IOMMU enabled
pve1 kernel: ACPI: Enabled 7 GPEs in block 00 to 7F
pve1 kernel: pci 0000:00:02.0: DMAR: Skip IOMMU disabling for graphics
pve1 kernel: pci 0000:00:02.0: vgaarb: setting as boot VGA device
pve1 kernel: pci 0000:00:02.0: vgaarb: bridge control possible
pve1 kernel: pci 0000:00:02.0: vgaarb: VGA device added: decodes=io+mem,owns=io+mem,locks=none
pve1 kernel: pnp: PnP ACPI: found 7 devices
pve1 kernel: Disabling lock debugging due to kernel taint
pve1 kernel: vfio-pci 0000:00:02.0: vgaarb: deactivate vga console
pve1 kernel: vfio-pci 0000:00:02.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=io+mem
pve1 kernel: vfio-pci: probe of 0000:00:02.0 failed with error -22
pve1 kernel: i915 0000:00:02.0: Running in SR-IOV PF mode
pve1 kernel: i915 0000:00:02.0: vgaarb: deactivate vga console
pve1 kernel: i915 0000:00:02.0: [drm] Using Transparent Hugepages
pve1 kernel: i915 0000:00:02.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=io+mem
pve1 kernel: i915 0000:00:02.0: Direct firmware load for i915/adlp_dmc.bin failed with error -2
pve1 kernel: i915 0000:00:02.0: [drm] Finished loading DMC firmware i915/adlp_dmc_ver2_16.bin (v2.16)
pve1 kernel: intel_rapl_msr: PL4 support detected.
pve1 kernel: intel_rapl_common: Found RAPL domain package
pve1 kernel: intel_rapl_common: Found RAPL domain core
pve1 kernel: intel_rapl_common: Found RAPL domain uncore
pve1 kernel: i915 0000:00:02.0: [drm] GT0: GuC firmware i915/adlp_guc_70.bin version 70.5.1
pve1 kernel: i915 0000:00:02.0: [drm] GT0: HuC firmware i915/tgl_huc.bin version 7.9.3
pve1 kernel: i915 0000:00:02.0: [drm] GT0: HuC: authenticated for all workloads!
pve1 kernel: i915 0000:00:02.0: [drm] GT0: GUC: submission enabled
pve1 kernel: i915 0000:00:02.0: [drm] GT0: GUC: SLPC enabled
pve1 kernel: i915 0000:00:02.0: [drm] GuC RC: enabled
pve1 kernel: i915 0000:00:02.0: [drm] Protected Xe Path (PXP) protected content support initialized
pve1 kernel: [drm] Initialized i915 1.6.0 20201103 for 0000:00:02.0 on minor 0
pve1 kernel: ACPI: video: Video Device [GFX0] (multi-head: yes rom: no post: no)
So after some of these tests I came to the conclusion that SR-IOV worked but not IOMMU. I don't know if it makes much sense but it seems to be the case for this computer. I ended up being able to see the 7 devices under the GPU 02.00.[1-7] but still I was unable to assign it to a VM due to IOMMU not being detected and it failing every time I tried (even when I set it to RAW device or PCI-E, etc).
I tried to filter a bit the output to make the post more readable. If anybody has any idea of how to do more tests I'm all ears, if not at least I hope this post saves valuable hours to the next guy that buys MinisForum NAB6 and finds that passtrhought doesn't work because of IOMMU.