Intel N150 GPU passthrough

michele.scapini

New Member
Jan 11, 2025
6
0
1
Hi guys,
I recently bought a Beelink mini pc EQ14 with Intel N150 CPU.
I joined this mini pc in my 2 node cluster (with a qdevice as witness) and i want to move some VM there.
one of this VM is a debian 12.8 with plex media server and a GPU for hw transcode.
right now on the other node i have a Nvidia Quadro P620, but i'm pretty sure that the new igpu on the N150 can do the same job with less and less power (i have new devices as media player, so i can use the transcode only when i'm in mobility and i use the playback over WAN connection, so 1 or max 2 stream with transcoding).
on the node where i installed the P620 in 5 minutes i enabled the GPU passthrough without any issue, but on the new beelink is 2 days that i try commands over commands without success.
i'm trying to add the iGPU on a windows test vm, on device manager i see the intel gpu but with code 43.
on BIOS the IOMMU is enabled
i tried using the kernel 6.8 and 6.11 (now i'm on 6.11
the IOMMU is enabled on systemd-boot
root@scp-hvm02:~# dmesg | grep -e DMAR -e IOMMU
[ 0.017909] ACPI: DMAR 0x0000000075596000 000088 (v02 INTEL EDK2 00000002 01000013)
[ 0.017942] ACPI: Reserving DMAR table memory at [mem 0x75596000-0x75596087]
[ 0.070891] DMAR: IOMMU enabled
[ 0.164251] DMAR: Host address width 39
[ 0.164253] DMAR: DRHD base: 0x000000fed90000 flags: 0x0
[ 0.164261] DMAR: dmar0: reg_base_addr fed90000 ver 4:0 cap 1c0000c40660462 ecap 29a00f0505e
[ 0.164264] DMAR: DRHD base: 0x000000fed91000 flags: 0x1
[ 0.164269] DMAR: dmar1: reg_base_addr fed91000 ver 5:0 cap d2008c40660462 ecap f050da
[ 0.164272] DMAR: RMRR base: 0x0000007c000000 end: 0x000000803fffff
[ 0.164276] DMAR-IR: IOAPIC id 2 under DRHD base 0xfed91000 IOMMU 1
[ 0.164278] DMAR-IR: HPET id 0 under DRHD base 0xfed91000
[ 0.164280] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[ 0.165911] DMAR-IR: Enabled IRQ remapping in x2apic mode
[ 0.412024] pci 0000:00:02.0: DMAR: Skip IOMMU disabling for graphics
[ 0.505645] DMAR: No ATSR found
[ 0.505647] DMAR: No SATC found
[ 0.505649] DMAR: IOMMU feature fl1gp_support inconsistent
[ 0.505651] DMAR: IOMMU feature pgsel_inv inconsistent
[ 0.505653] DMAR: IOMMU feature nwfs inconsistent
[ 0.505654] DMAR: IOMMU feature dit inconsistent
[ 0.505656] DMAR: IOMMU feature sc_support inconsistent
[ 0.505658] DMAR: IOMMU feature dev_iotlb_support inconsistent
[ 0.505660] DMAR: dmar0: Using Queued invalidation
[ 0.505665] DMAR: dmar1: Using Queued invalidation
[ 0.506111] DMAR: Intel(R) Virtualization Technology for Directed I/O

this is the cmdline
root@scp-hvm02:~# cat /etc/kernel/cmdline
root=ZFS=rpool/ROOT/pve-1 boot=zfs quiet intel_iommu=on iommu=pt intel_pstate=disable initcall_blacklist=sysfb_init

this is the modprobe vfio.conf
root@scp-hvm02:~# cat /etc/modprobe.d/vfio.conf
options vfio-pcs ids=8086:46d4

this is the lspci -nnkv

root@scp-hvm02:~# lspci -nnkv
00:02.0 VGA compatible controller [0300]: Intel Corporation Alder Lake-N [Intel Graphics] [8086:46d4] (prog-if 00 [VGA controller])
DeviceName: Onboard - Video
Subsystem: Intel Corporation Alder Lake-N [Intel Graphics] [8086:7270]
Flags: bus master, fast devsel, latency 0, IRQ 144, IOMMU group 0
Memory at 6000000000 (64-bit, non-prefetchable) [size=16M]
Memory at 4000000000 (64-bit, prefetchable) [size=256M]
I/O ports at 5000 [size=64]
Expansion ROM at 000c0000 [virtual] [disabled] [size=128K]
Capabilities: [40] Vendor Specific Information: Len=0c <?>
Capabilities: [70] Express Root Complex Integrated Endpoint, MSI 00
Capabilities: [ac] MSI: Enable+ Count=1/1 Maskable+ 64bit-
Capabilities: [d0] Power Management version 2
Capabilities: [100] Process Address Space ID (PASID)
Capabilities: [200] Address Translation Service (ATS)
Capabilities: [300] Page Request Interface (PRI)
Capabilities: [320] Single Root I/O Virtualization (SR-IOV)
Kernel driver in use: vfio-pci
Kernel modules: i915

this is the vm conf

root@scp-hvm02:~# cat /etc/pve/qemu-server/100.conf
agent: 1
bios: ovmf
boot: order=sata0
cores: 4
cpu: host
efidisk0: datastoreVM:vm-100-disk-0,size=128K
hostpci0: 0000:00:02,pcie=1,x-vga=1
ide0: none,media=cdrom
machine: pc-q35-9.0
memory: 5120
meta: creation-qemu=9.0.2,ctime=1729608597
name: scp-admin1
net0: virtio=BC:24:11:C0:4D:66,bridge=vmbr1,tag=254
numa: 0
onboot: 1
ostype: win11
sata0: datastoreVM:vm-100-disk-1,size=64G
scsihw: virtio-scsi-pci
smbios1: uuid=564d64c6-58e0-4172-0c14-80e97ed86b01
sockets: 1
startup: order=4,up=10,down=10
vga: none
vmgenid: 7501b140-abbb-4fb1-b896-834e87b4fe4b

can you tell me where i'm wrong on the config?
 
I have GPU(video&audio) pass through on my N150 device HDMI port after latest kernel update. Here is my config:

Kernel: PVE 8.3 Linux 6.11.11-1-pve
file: https://github.com/gangqizai/igd
- copy gen12_gop.rom and gen12_igd.rom to /usr/share/kvm/

#nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
#update-grub

#nano /etc/modprobe.d/vfio.conf
options vfio-pci ids=8086:46d4,8086:54c8

#nano /etc/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
coretemp

#nano /etc/modprobe.d/pve-blacklist.conf
blacklist snd_hda_codec_hdmi
blacklist snd_hda_codec
blacklist snd_hda_core
blacklist i915

host config file:
args: -set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=1 -set device.hostpci0.x-igd-opregion=on
bios: ovmf
hostpci0: 0000:00:02.0,legacy-igd=1,romfile=gen12_igd.rom
hostpci1: 0000:00:1f.3,romfile=gen12_gop.rom
machine: pc-i440fx-9.0
vga: none
 
Last edited:
I tired with the indication of that link and yours.
I see the audio device on the VM, but the graphics is still in code 43.
the only difference is that i'm on kernel 6.11.0-2, where can i find the 6.11.11?
Also, i changed on the bios the memory of graphics from 64M to 1024M, do i need to put back to 64M?

thanks!
 
I am not using exact same hardware, but i believe the setting will be the same. I am using N150 with 4* 2.5port device model: N150-4L

I did not success with same config with 6.11.0-2 until i upgrade to latest 6.11.11-1 version.

Btw, I have success video pass through with 6.8.x latest firmware too but i cannot make audio pass through success with it.
 
Last edited:
I updated the kernel via apt install (is on no-subscription repo now)
But I still have the error 43
I found in the dmesg some errors
314.765772] vfio-pci 0000:00:02.0: Invalid
PCI ROM header signature: expecting 0xaa55,
got 0x886a
[ 314.765784] vfio-pci 0000:00:02.0: Invalid
PCI ROM header signature: expecting 0xaa55,
got 0x886a
[ 314.765793] vfio-pci 0000:00:02.0: Invalid
PCI ROM header signature: expecting 0xaa55,
got 0x886a
[ 314.765801] vfio-pci 0000:00:02.0: Invalid
PCI ROM header signature: expecting 0xaa55,
got 0x886a
[ 327.741602] x86/split lock detection: #AC:
CPU 0/KVM/2892 took a split_lock trap at add
ress: 0xfffff80479055a2f
[ 453.105745] x86/split lock detection: #AC:
CPU 1/KVM/2893 took a split_lock trap at add
ress: 0xfffff80479055a2f
root@scp-hvm0
 
Hi, I am in the same boat as you are ... however, I somehow managed to get the passthrough. But I fail to connect the passthrough to the physically connected HDMI (to e.g. get direct output to my TV).

However, I see in your VM configuration
x-igd-opregion=on
I get:
IGD OpRegion not supported
I looked through the BIOS and just do not quite understand if this feature can be turned on or not? How did you enable that? Is there a BIOS setting there? Can you guide me here? Thanks
 
can you share with me in which way you get the gpu passthrough?
I don't had any issue with IGD error, the VM is working but with error 43 on windows
 
It is pretty straigth forward - I hope this might help the one or the other with a N150 Alder Lake (QE14 Beelink Mini Computer):

  1. https://forum.proxmox.com/threads/o...e-8-available-on-test-no-subscription.156818/ (installed that but not sure if that is necessary?)
  2. installed https://github.com/strongtz/i915-sriov-dkms in the PVE - this is also excellently described in the following post: https://www.derekseaman.com/2024/07...u-vt-d-passthrough-with-intel-alder-lake.html Important do not skip or stop somewhere in the middle - if a new version is released you have to do the whole process once more (as described by Derek)
  3. Install windows: There are many tutorials out there. When successfully installed make sure that RDP is working. Then use "no display" in the VM options: Here my settings:
Kommentarbild
Note the 1f device is the audio device
According to the sriov page I should use a rom file. However, I seem not to need this (or do I need it for HDMI output!) - no clue here? Anyhow, I installed the Intel arc driver through RDP. Once more I really repeat myself. The Display has to be set to "none".

https://www.intel.com/content/www/us/en/download/785597/intel-arc-iris-xe-graphics-windows.html

Thats basically all. Checking with intel_gpu_top -d sriov I can monitor that windows is actually quite nicely using the GPU

However, can you do me a favor and check your dmsg. I get this:
[ 2.054240] i915 0000:00:02.0: [drm] *ERROR* DMC firmware has wrong CSS header length (1097158924 bytes)

Which is NOT good. But I cant resolve.

And as I said: when I try to start my VM with

args: -set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=1 -set device.hostpci0.x-igd-opregion=on

Then it fails
 
  • Like
Reactions: kotzebuedog
Hi there

I have a FIREBAT Mini PC N150 and I have first tried without success this guide https://github.com/gangqizai/igd

However, following this guide https://github.com/strongtz/i915-sriov-dkms worked for me to get iGPU video transcoding in my VM running a plex media server (and openmediavault). I have proxmox is on Linux pve 6.11.11-2-pve, and my debian vm is on 6.12.12+bpo-amd64. It's important to use UEFI bios and also to disable the secure boot in the bios of the VM otherwise the i915 module won't load (Key was rejected by service).

I haven't tested a windows guest.

Here is my VM configuration in proxmox.
 

Attachments

  • Screenshot 2025-03-27 at 3.19.44 PM.png
    Screenshot 2025-03-27 at 3.19.44 PM.png
    117 KB · Views: 19
I made it working on a Linux VM following the guide on GitHub.
The important thing is the kernel on the guest VM. With the N150 must be 6.11 +. The reason is simply, the driver for N150 is present from that kernel.
In any case my Beelink had some trouble, so I give it back and I bought a minis forum with i5-12600h and the gpu passthrough worked at first time (also using sr-iov but on plex with that configuration it doesn’t recognize the video card)