Back to Posts

Manually Updating Intel dGPU Firmware on Linux

· 3 min read · 487 words

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.

  1. Obtain the firmware binary files

  2. 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)
  3. 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
  4. 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.

  1. mkdir -p /lib/firmware/updates/ (See kernel docs)
  2. mkdir -p /lib/firmware/updates/{i915,xe}
  3. 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 the drm-firmware/intel-staging repositories and fetch appropriately (judging by the guc version should usually suffice).
  4. Copy the downloaded firmware .bin files into the corresponding driver /lib/firmware/updates/{i915,xe} directories
  5. (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
  6. Reboot
  7. 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.