Intel’s dGPU stack consists of hardware-resident firmware and OS-resident firmware. In this post, I’ll guide you through updating both on Linux. Proceed at your own risk.
“For whatever reason, Intel only bundles firmware updates with their Windows driver packages. Leaving us Linux users to either periodically boot into Windows just for firmware updates or manually update firmware.” — TheDreadPirate, forum.jellyfin.org
Updating Hardware-resident firmware
To flash firmware, you’ll need the Intel Graphics System Firmware Update Library (short: IGSC).
On Arch Linux it’s available via the igsc package. Alternatively, you can compile it yourself.
-
Obtain the firmware binary files
- Solaris17, a staff member from the well-known TechPowerUp hardware forums maintains a GitHub repository with the binary files extracted from each Windows driver release.
- The latest firmware files can be downloaded as a ZIP file from Solaris17’s Arc-Firmware repository
-
Identify your device:
igsc list-devices- This command should output something like:
Device [1] '/dev/mei1': 8086:56a0 8086:1020 0000:09:00.00- where
8086denotes the device manufacturer (Intel), and 56a0denotes the device model, (Arc A770 16GB LE)
-
Check your current device firmware against the downloaded binary files:
igsc fw version --device /dev/mei1 igsc fw version --image dg2_gfx_fwupdate_SOC1.binigsc oprom-data version --device /dev/mei1 igsc oprom-data version --image dg2_d_intel_a770_oprom-data.romigsc oprom-code version --device /dev/mei1 igsc oprom-code version --image dg2_c_oprom.romigsc fw-data version --device /dev/mei1 igsc fw-data version --image fwdata/dg2_intel_a770_config-data.bin -
If an upgrade is possible, flash the firmware using:
igsc <fw|oprom-data|oprom-code|fw-data> update --device /dev/mei1 --image $fw.bin
And that’s it.
Alternatively, you can update the firmware using Intel’s xpu-smi tool.
Updating OS-resident firmware
On Arch Linux, the shipped i915 and xe firmware is considerably out of date. This can lead to issues. For example, I experienced kernel hangs during boot while trying to load the experimental xe driver.
Fortunately, Linux provides a straightforward way for users with outdated firmware to update their OS-resident firmware.
mkdir -p /lib/firmware/updates/(See kernel docs)mkdir -p /lib/firmware/updates/{i915,xe}- Download the latest firmware files
- On Arch Linux, the firmware files provided by the linux-firmware package are, as mentioned, often outdated. The package pulls from an upstream kernel repository.
- An adjacent repository under the same GitLab org, drm-firmware, contains an
intel-stagingbranch that packages more up-to-date drivers compared to the main upstream repository. - Additionally, Intel maintains its own intel-gpu-firmware repository, which currently contains even newer firmware. However, be aware that this repository can occasionally fall behind the
drm-firmwarerepository in terms of firmware versioning. - Therefore, when seeking newer firmware check both the
intel-gpu-firmwareand thedrm-firmware/intel-stagingrepositories and fetch appropriately (judging by thegucversion should usually suffice).
- Copy the downloaded firmware
.binfiles into the corresponding driver/lib/firmware/updates/{i915,xe}directories - (Conditional) If your distribution uses zstd compression (indicated by files ending in
.zstin/lib/firmware/{i915,xe}directories - as is the case on Arch Linux), then the firmware files will have to be compressed, otherwise the kernel will ignore them.- This is easy to do:
zstd -19 /lib/firmware/updates/**/*.bin - Additionally, you can use the
--rmargument to delete the unnecessary.binfiles and keep only the.bin.zstfiles
- This is easy to do:
- Reboot
- Verify that the updated firmware is loaded by checking the output:
dmesg | grep 'i915/'
OS-resident firmware updates can be reverted by removing the /lib/firmware/updates/{i915,xe} directories.