This repo is a code snapshot of the i915 and xe modules from the mainline linux kernel with SR-IOV support ported from the intel/mainline-tracking.git
Disclaimer: This repository is a community port of the mainline kernel and Intel’s mainline-tracking tree.
It includes some experimental and unstable features and is not an official Intel project.
This package is highly experimental, you should only use it when you know what you are doing.
You need to install this dkms module in both host and guest!
Required kernel: 6.12.19 ~ 6.17.x
For older versions of the kernel (v6.8 ~ v6.12), please use the 2025.07.22 release.
For v6.1 ~ v6.7, please use intel-lts-v6.1 branch instead.
It is recommended that to upgrade to a supported kernel, the older branches will no longer be maintained.
Starting from the current version, this repo provides both the i915 and xe drivers. You can switch between them by modifying the kernel parameters.
intel_iommu=on i915.enable_guc=3 i915.max_vfs=7 module_blacklist=xe
intel_iommu=on xe.max_vfs=7 xe.force_probe=${device_id} module_blacklist=i915
Xe module only supports Gen12(Alder Lake), Gen13(Raptor Lake) and Gen14(Raptor Lake Refresh) for now
Replace ${device_id} with the output from cat /sys/devices/pci0000:00/0000:00:02.0/device command
echo 1 > /sys/devices/pci0000:00/0000:00:02.0/sriov_numvfs
You can create up to 7 VFs on Intel UHD Graphics
For Arch Linux users, it is available in AUR. i915-sriov-dkms
You also can download the package from the releases page and install it with pacman -U.
For NixOS users, the i915-sriov kernel module can be directly included in your NixOS configuration without the use of DKMS. In particular, the kernel module is provided as a NixOS module that must be included in your NixOS configuration. This NixOS module places the i915-sriov kernel module via an overlay in your pkgs attribute set with the attribute name i915-sriov. This kernel module can then be included in your configuration by declaring boot.extraModulePackages = [ pkgs.i915-sriov ]; The same applies also to xe-sriov. It is recommened to set inputs.nixpkgs.follows = "nixpkgs" to avoid version mismatch.
- Install build tools:
apt install build-* dkms - Install the kernel and headers for desired version:
apt install proxmox-headers-6.14 proxmox-kernel-6.14(for unsigned kernel). - Download deb package from the releases page
wget -O /tmp/i915-sriov-dkms_2025.10.10_amd64.deb "https://github.com/strongtz/i915-sriov-dkms/releases/download/2025.10.10/i915-sriov-dkms_2025.10.10_amd64.deb" - Install the deb package with dpkg:
dpkg -i /tmp/i915-sriov-dkms_2025.10.10_amd64.deb - Once finished, the kernel commandline needs to be adjusted:
nano /etc/default/gruband changeGRUB_CMDLINE_LINUX_DEFAULTtointel_iommu=on i915.enable_guc=3 i915.max_vfs=7 module_blacklist=xe, or add to it if you have other arguments there already. - You can also use
xedriver instead ofi915as described in the Required Kernel Parameters section. - Update
grubandinitramfsby executingupdate-grubandupdate-initramfs -u - Optionally pin the kernel version and update the boot config via
proxmox-boot-tool. - In order to enable the VFs, a
sysfsattribute must be set. Installsysfsutils, then doecho "devices/pci0000:00/0000:00:02.0/sriov_numvfs = 7" > /etc/sysfs.conf. - Reboot the system.
- When the system is back up again, you should see the number of VFs under 02:00.1 - 02:00.7.
- You can passthrough the VFs to LXCs or VMs. However, never pass the PF (02:00.0) to VM which would crash all other VFs.
We will need to run the same driver under Linux guests.
-
Install build tools
apt install build-* dkms linux-headers-$(uname -r) linux-modules-extra-$(uname -r) -
Download and install the
.debwget -O /tmp/i915-sriov-dkms_2025.10.10_amd64.deb "https://github.com/strongtz/i915-sriov-dkms/releases/download/2025.10.10/i915-sriov-dkms_2025.10.10_amd64.deb" dpkg -i /tmp/i915-sriov-dkms_2025.10.10_amd64.deb -
Update kernel parameters
nano /etc/default/gruband changeGRUB_CMDLINE_LINUX_DEFAULTtoi915.enable_guc=3 module_blacklist=xe, or add to it if you have other arguments there already. -
Once that's done, update
grubandinitramfs, then reboot.update-grub update-initramfs -u -
Once the VM is back up again, do
dmesg | grep i915to see if your VF is recognized by the kernel. You should also check ifxeis blacklisted correctly by runninglspci -nnkto see which driver is in use by the VF. -
Optionally, install
vainfoby runningapt install vainfo, then dovainfoto see if the iGPU has been picked up by the VAAPI. -
If OpenCL is desired:
apt install intel-opencl-icd apt install clinfo clinfo
Windows Guest (Tested with Proxmox 8.3 + Windows 11 24H2 + Intel Driver 32.0.101.6460/32.0.101.6259)
Thanks for resiliencer and his contribution in #225.
These steps ensure compatibility across all driver versions. In theory you can install any version and won't be hit by the dreaded Code 43.
- Download UEFITools (
UEFITool_NE_A68_win64for Windows. They supply Linux and Mac binaries, too) - Download BIOS for motherboard (I suspect any motherboard BIOS would work as long as it is for Alder/Raptop Lake Desktop Platform)
- Unzip BIOS
- Use UEFITools (Run as Admin) to load the BIOS (usually
.cap) - Go to
Action - Searchor use keyboard shortcutctrl+Fand search for Hex string49006e00740065006c00280052002900200047004f0050002000440072006900760065007200 - Double click the search result in the search column, it will highlight the item found within the BIOS.
- Right click on the highlighted result and
Extract body... - Save the file, file name and extension do not matter. I used
intelgopdriver_desktopand it would save asintelgopdriver_desktop.bin. - You can also compare the checksum of the file:
- Windows Terminal Command:
Get-FileHash -Path "path-to-rom" -Algorithm SHA256 - For desktop with UHD730 and UHD770:
131c32cadb6716dba59d13891bb70213c6ee931dd1e8b1a5593dee6f3a4c2cbd - For ADL-N:
FA12486D93BEE383AD4D3719015EFAD09FC03352382F17C63DF10B626755954B
- Windows Terminal Command:
- You'll need to copy this file to
/usr/share/kvmdirectory on Proxmox host. I uploaded it to a NAS and downloaded it withwget.
- When setting up the machine, set
CPUashost. - TIPS: You can skip the Microsoft Account setup by pressing
Shift+F10at the first setup screen and typeOOBE\BYPASSNRO. The VM will reboot, and you can choose "I don't have Internet" option to set up a local account. Alternatively, you can remove the network device from the Windows VM. - When the setup process is done and you are at the Desktop, enable Remote Desktop and make sure your local account user has access. You can shut down the VM for now.
- When the VM powered off, edit the configuration file:```
# Passing the 02.1 VF, specify the romfile. ROM path is relative
hostpci0: 0000:00:02.1,pcie=1,romfile=Intelgopdriver_desktop.efi,x-vga=1
- In the
Hardwaretab, setDisplaytonone. - Start the VM. You won't be able to access it with console, so your only way in is Remote Desktop. Once you are in, download the graphics driver from Intel, any version should work.
- During install, you may experience black screen when the actual graphics drivers are being installed and applied. This black screen will persist until you restart the VM. My advice is give it a few minutes to do its thing. You can make your best judgement by looking at the VM CPU usage in Proxmox.
- After rebooting, connect with RDP once again. Go to Device Manager and verify the result. You should see the Intel Graphics is installed and working.
- Install build tools:
apt install build-essential dkms git/pacman -S base-devel dkms git. - Install the kernel and headers for desired version:
apt install linux-headers-$(uname -r)/pacman -S linux-headers. - Clone the repository:
git clone https://github.com/strongtz/i915-sriov-dkms.git. - Add the module to DKMS:
dkms add ./i915-sriov-dkms. - Install the module with DKMS:
dkms install i915-sriov-dkms/2025.10.10. - If you have secureboot enabled, and
dkms installtells you it created a self-signed certificate for MOK and you have not installed the host's certificate yet, install the certificate generated by dkms withmokutil --import /var/lib/dkms/mok.pub. - Once finished, the kernel commandline needs to be adjusted:
nano /etc/default/gruband changeGRUB_CMDLINE_LINUX_DEFAULTtointel_iommu=on i915.enable_guc=3 i915.max_vfs=7, or add to it if you have other arguments there already. - Update
grubandinitramfsby executingupdate-grubandupdate-initramfs -u/ for Arch Linuxgrub-mkconfig -o /boot/grub/grub.cfgandmkinitcpio -P. - Optionally use
sysfsutilsto set the number of VFs on boot. Installsysfsutils, then doecho "devices/pci0000:00/0000:00:02.0/sriov_numvfs = 7" > /etc/sysfs.conf, - Reboot the system.
Remove the package with dpkg -P i915-sriov-dkms
Remove the package with pacman -R i915-sriov-dkms
Remove the dkms module with dkms remove i915-sriov-dkms/2025.10.10
Major contributors to this repository are listed below.
- @strongtz Create the initial dkms module
- @zhtengw Rebase on the linux-intel-lts (v5.15, v6.1) , support for v6.1~v6.4, participation in 15+ issues
- @bbaa-bbaa Rebase on the mainline-tracking linux/v6.12 branch, support for v6.8~v6.13, participation in 10+ issues
- @pasbec Major refactor to the repo, support for (v6.2, v6.5, v6.8), participation in 20+ issues
- @shenwii Support for (v6.7, v6.9)
- @MotherOfTheGracchi Support for v6.5.3
- @michael-pptf Several updates to README.md, participation in 20+ issues