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
8086
denotes the device manufacturer (Intel), and 56a0
denotes 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.bin
igsc oprom-data version --device /dev/mei1 igsc oprom-data version --image dg2_d_intel_a770_oprom-data.rom
igsc oprom-code version --device /dev/mei1 igsc oprom-code version --image dg2_c_oprom.rom
igsc 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-staging
branch 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-firmware
repository in terms of firmware versioning. - Therefore, when seeking newer firmware check both the
intel-gpu-firmware
and thedrm-firmware/intel-staging
repositories and fetch appropriately (judging by theguc
version should usually suffice).
- Copy the downloaded firmware
.bin
files into the corresponding driver/lib/firmware/updates/{i915,xe}
directories - (Conditional) If your distribution uses zstd compression (indicated by files ending in
.zst
in/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
--rm
argument to delete the unnecessary.bin
files and keep only the.bin.zst
files
- 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.