{"id":13819189,"url":"https://github.com/strongtz/i915-sriov-dkms","last_synced_at":"2025-05-14T12:12:56.028Z","repository":{"id":61347324,"uuid":"541144641","full_name":"strongtz/i915-sriov-dkms","owner":"strongtz","description":"dkms module of Linux i915 driver with SR-IOV support","archived":false,"fork":false,"pushed_at":"2025-05-14T06:34:57.000Z","size":4406,"stargazers_count":1544,"open_issues_count":54,"forks_count":177,"subscribers_count":40,"default_branch":"master","last_synced_at":"2025-05-14T07:43:12.792Z","etag":null,"topics":["dkms","intel","linux"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/strongtz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-09-25T11:13:17.000Z","updated_at":"2025-05-14T06:31:14.000Z","dependencies_parsed_at":"2023-11-21T02:25:56.954Z","dependency_job_id":"dfaed65a-05d7-447e-9f14-a600f33114d4","html_url":"https://github.com/strongtz/i915-sriov-dkms","commit_stats":{"total_commits":99,"total_committers":23,"mean_commits":4.304347826086956,"dds":0.7575757575757576,"last_synced_commit":"e26ce8952e465762fc0743731aa377ec0b2889ff"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strongtz%2Fi915-sriov-dkms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strongtz%2Fi915-sriov-dkms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strongtz%2Fi915-sriov-dkms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strongtz%2Fi915-sriov-dkms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/strongtz","download_url":"https://codeload.github.com/strongtz/i915-sriov-dkms/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254140769,"owners_count":22021220,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dkms","intel","linux"],"created_at":"2024-08-04T08:00:41.958Z","updated_at":"2025-05-14T12:12:51.016Z","avatar_url":"https://github.com/strongtz.png","language":"C","funding_links":[],"categories":["C"],"sub_categories":[],"readme":"# Linux i915 driver (dkms module) with SR-IOV support for linux 6.8-6.14\n\nThis repo is a code snapshot of the i915 module from https://github.com/intel/mainline-tracking/tree/linux/v6.12 and will randomly merge patches from the linux-stable tree.\n\n## Warning\n\nThis package is **highly experimental**, you should only use it when you know what you are doing.\n\nYou need to install this dkms module in **both host and guest!**\n\nTested kernel versions: 6.12.10-zen1/6.11.9-arch1/6.10.9-arch1/6.9.10-arch1/6.8.9-arch1 with ArchLinux\n\n\n## Required Kernel Parameters\n```\nintel_iommu=on i915.enable_guc=3 i915.max_vfs=7 module_blacklist=xe\n```\n\nBesides `intel_iommu=on`, the other 3 parameters could be applied by `modprobe` by putting following content to `/etc/modprobe.d/i915-sriov-dkms.conf`\n\n```\nblacklist xe\noptions i915 enable_guc=3\noptions i915 max_vfs=7\n```\n\n## Creating Virtual Functions (VF)\n\n```\necho 1 \u003e /sys/devices/pci0000:00/0000:00:02.0/sriov_numvfs\n```\n\nYou can create up to 7 VFs on Intel UHD Graphics \n\n## Arch Linux Installation Steps (Tested Kernel 6.12.6-zen1)\n\nFor Arch Linux users, it is available in AUR. [i915-sriov-dkms](https://aur.archlinux.org/packages/i915-sriov-dkms) \n\nYou also can download the package from the [releases page](https://github.com/strongtz/i915-sriov-dkms/releases) and install it with `pacman -U`.\n\n## PVE Host Installation Steps (Tested Kernel 6.8)\n1. Install build tools: `apt install build-* dkms`\n1. Install the kernel and headers for desired version: `apt install proxmox-headers-6.8 proxmox-kernel-6.8` (for unsigned kernel).\n1. Download deb package from the [releases page](https://github.com/strongtz/i915-sriov-dkms/releases)\n   ```sh\n   wget -O /tmp/i915-sriov-dkms_2025.03.27_amd64.deb \"https://github.com/strongtz/i915-sriov-dkms/releases/download/2025.03.27/i915-sriov-dkms_2025.03.27_amd64.deb\"\n   ```\n1. Install the deb package with dpkg: `dpkg -i /tmp/i915-sriov-dkms_2025.03.27_amd64.deb`\n1. Once finished, the kernel commandline needs to be adjusted: `nano /etc/default/grub` and change `GRUB_CMDLINE_LINUX_DEFAULT` to `intel_iommu=on i915.enable_guc=3 i915.max_vfs=7 module_blacklist=xe`, or add to it if you have other arguments there already.\n1. Update `grub` and `initramfs` by executing `update-grub` and `update-initramfs -u`\n1. Optionally pin the kernel version and update the boot config via `proxmox-boot-tool`.\n1. In order to enable the VFs, a `sysfs` attribute must be set. Install `sysfsutils`, then do `echo \"devices/pci0000:00/0000:00:02.0/sriov_numvfs = 7\" \u003e /etc/sysfs.conf`, assuming your iGPU is on 00:02 bus. If not, use `lspci | grep VGA` to find the PCIe bus your iGPU is on.\n1. Reboot the system.\n1. When the system is back up again, you should see the number of VFs under 02:00.1 - 02:00.7. Again, assuming your iGPU is on 00:02 bus.\n1. 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.\n\n## Linux Guest Installation Steps (Tested Ubuntu 24.04/Kernel 6.8)\nWe will need to run the same driver under Linux guests. \n1. Install build tools\n   ```\n   apt install build-* dkms linux-headers-$(uname -r) linux-modules-extra-$(uname -r)\n   ```\n2. Download and install the `.deb`\n   ```\n   wget -O /tmp/i915-sriov-dkms_2025.03.27_amd64.deb \"https://github.com/strongtz/i915-sriov-dkms/releases/download/2025.03.27/i915-sriov-dkms_2025.03.27_amd64.deb\"\n   dpkg -i /tmp/i915-sriov-dkms_2025.03.27_amd64.deb\n   ```\n3. Update kernel parameters\n   `nano /etc/default/grub` and change `GRUB_CMDLINE_LINUX_DEFAULT` to `i915.enable_guc=3 module_blacklist=xe`, or add to it if you have other arguments there already.\n\n   Example:\n   ```conf\n   GRUB_CMDLINE_LINUX_DEFAULT=\"intel_iommu=on i915.enable_guc=3 module_blacklist=xe\"\n   ```\n\n4. Once that's done, update `grub` and `initramfs`, then reboot.\n   ```\n   update-grub\n   update-initramfs -u\n   ```\n5. Once the VM is back up again, do `dmesg | grep i915` to see if your VF is recognized by the kernel. You should also check if `xe` is blacklisted correctly by running `lspci -nnk` to see which driver is in use by the VF.\n6. Optionally, install `vainfo` by running `apt install vainfo`, then do `vainfo` to see if the iGPU has been picked up by the VAAPI.\n7. If OpenCL is desired:\n   ```\n   apt install intel-opencl-icd\n   apt install clinfo\n   clinfo\n   ```\n## Windows Guest (Tested with Proxmox 8.3 + Windows 11 24H2 + Intel Driver 32.0.101.6460/32.0.101.6259)\nThanks for [resiliencer](https://github.com/resiliencer) and his contribution in [#225](https://github.com/strongtz/i915-sriov-dkms/issues/225#issue-2687672590).\n\nThese steps ensure compatibility across all driver versions. In theory you can install any version and won't be hit by the dreaded `Code 43`.\n\n### Extract Graphics EFI Firmware\n1. Download [UEFITools](https://github.com/LongSoft/UEFITool/releases) (`UEFITool_NE_A68_win64` for Windows. They supply Linux and Mac binaries, too)\n2. Download BIOS for motherboard (I suspect any motherboard BIOS would work as long as it is for Alder/Raptop Lake Desktop Platform)\n3. Unzip BIOS\n4. Use UEFITools (Run as Admin) to load the BIOS (usually `.cap`)\n5. Go to `Action - Search` or use keyboard shortcut `ctrl+F` and search for Hex string `49006e00740065006c00280052002900200047004f0050002000440072006900760065007200`\n6. Double click the search result in the search column, it will highlight the item found within the BIOS.\n7. Right click on the highlighted result and `Extract body...`\n8. Save the file, file name and extension do not matter. I used `intelgopdriver_desktop` and it would save as `intelgopdriver_desktop.bin`.\n9. You can also compare the checksum of the file:\n\t1. Windows Terminal Command: `Get-FileHash -Path \"path-to-rom\" -Algorithm SHA256`\n\t2. For desktop with UHD730 and UHD770: `131c32cadb6716dba59d13891bb70213c6ee931dd1e8b1a5593dee6f3a4c2cbd`\n\t3. For ADL-N: `FA12486D93BEE383AD4D3719015EFAD09FC03352382F17C63DF10B626755954B`\n11. You'll need to copy this file to `/usr/share/kvm` directory on Proxmox host. I uploaded it to a NAS and downloaded it with `wget`.\n\n### Windows VM Creation\n1. When setting up the machine, set `CPU` as `host`.\n2. TIPS: You can skip the Microsoft Account setup by pressing `Shift+F10` at the first setup screen and type `OOBE\\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.\n3. 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.\n4. When the VM powered off, edit the configuration file:```\n```\n# Passing the 02.1 VF, specify the romfile. ROM path is relative\n\nhostpci0: 0000:00:02.1,pcie=1,romfile=Intelgopdriver_desktop.efi,x-vga=1\n```\n5. In the `Hardware` tab, set `Display` to `none`.\n6. 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.\n7. 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.\n8. 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.\n\n![CleanShot 2025-01-27 at 12 26 28](https://github.com/user-attachments/assets/7e48877f-2b57-42ac-bd0b-c1aa72bddc40)\n\nSee also: https://github.com/strongtz/i915-sriov-dkms/issues/8#issuecomment-1567465036\n\n## Manual Installation Steps\n1. Install build tools: `apt install build-essential dkms git` / `pacman -S base-devel dkms git`.\n1. Install the kernel and headers for desired version: `apt install linux-headers-$(uname -r)` / `pacman -S linux-headers`.\n1. Clone the repository: `git clone https://github.com/strongtz/i915-sriov-dkms.git`.\n1. Add the module to DKMS: `dkms add ./i915-sriov-dkms`.\n1. Install the module with DKMS: `dkms install i915-sriov-dkms/2025.03.27`.\n1. Once finished, the kernel commandline needs to be adjusted: `nano /etc/default/grub` and change `GRUB_CMDLINE_LINUX_DEFAULT` to `intel_iommu=on i915.enable_guc=3 i915.max_vfs=7`, or add to it if you have other arguments there already.\n1. Update `grub` and `initramfs` by executing `update-grub` and `update-initramfs -u` / for Arch Linux `grub-mkconfig -o /boot/grub/grub.cfg` and `mkinitcpio -P`.\n1. Optionally use `sysfsutils` to set the number of VFs on boot. Install `sysfsutils`, then do `echo \"devices/pci0000:00/0000:00:02.0/sriov_numvfs = 7\" \u003e /etc/sysfs.conf`, assuming your iGPU is on 00:02 bus. If not, use `lspci | grep VGA` to find the PCIe bus your iGPU is on.\n1. Reboot the system.\n\n## Uninstallation\n### dpkg\nRemove the package with `dpkg -P i915-sriov-dkms`\n### pacman\nRemove the package with `pacman -R i915-sriov-dkms`\n### manual\nRemove the dkms module with `dkms remove i915-sriov-dkms/2025.03.27`\n\n# Credits\n\nMajor contributors to this repository are listed below.\n\n* [@strongtz](https://github.com/strongtz) _Create the initial dkms module_\n* [@zhtengw](https://github.com/zhtengw) _Rebase on the linux-intel-lts (v5.15, v6.1) , support for v6.1~v6.4, participation in 15+ issues_\n* [@bbaa-bbaa](https://github.com/bbaa-bbaa) _Rebase on the mainline-tracking linux/v6.12 branch, support for v6.8~v6.13, participation in 10+ issues_\n* [@pasbec](https://github.com/pasbec) _Major refactor to the repo, support for (v6.2, v6.5, v6.8), participation in 20+ issues_\n* [@shenwii](https://github.com/shenwii) _Support for (v6.7, v6.9)_\n* [@MotherOfTheGracchi](https://github.com/MotherOfTheGracchi) _Support for v6.5.3_\n* [@michael-pptf](https://github.com/michael-pptf) _Several updates to README.md, participation in 20+ issues_\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstrongtz%2Fi915-sriov-dkms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstrongtz%2Fi915-sriov-dkms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstrongtz%2Fi915-sriov-dkms/lists"}