(Remember to) Update your Intel Arc Firmware on Linux!

TL;DR: Intel does NOT update the GPU firmware on Linux and asks you to install Windows. Workaround below.

If you are like me, you might have an Intel Arc A380 or something similar that is used for a host GPU on Linux. However there’s one caveat that Intel does not explicitly tell you - They do not update the firmware on the GPU whatsoever on Linux. Not even their official Ubuntu package will update the firmware.

They have a help article about that here: https://www.intel.com/content/www/us/en/support/articles/000096950/graphics.html which is something you need to dig deep to find. Intel kindly asks you to install Windows to update critical firmware on the device which in all honesty should have been done through fwupd like most other firmware. In fact, the A380 and others do “support” fwupd, but they don’t have updates posted there which ruins the entire point.

I bought the ASRock Challenger A380 at launch and while I haven’t had any problems using it day-to-day, the fans on it acted weirdly so I checked the firmware on it. The firmware installed at the factory was 2.2243, a beta version of the initial firmware from May 2022! No wonder the fans were acting strangely, I am honestly amazed that the drivers haven’t been acting up more than it has.

I am kind of shocked Intel doesn’t talk about this more openly. I bet a lot of Linux users who have Arc GPUs are on ancient firmwares and have never even thought about updating their firmware thinking it is shipped with the kernel or automatically installed through fwupd.

Installing firmware on Linux:

I am not going to passthrough the card to a Windows installation just to get critical firmware updates, so I looked for a more Linux-oriented way of getting them. The usual suspect would be fwupd, however since Intel doesn’t post updates through it we need another way. Luckily, Solaris17 at TechPowerUp has made a wrapper Windows tool for this and has filled a matrix of GPU firmware for the different Arc cards which was critical to getting this working. Intel provides the source code for igsc, their graphics firmware updater and can be built from scratch.

There’s no firmware backup functionality yet, so write down your current firmware information in case of emergency. According to Solaris17, Intel has heavy safeguards regarding flashing, so flashing something wrong and bricking the GPU is quite hard. Thus you should be pretty safe doing this considering Intel’s tool checks a lot of boxes first. Just don’t come blaming me if something goes wrong, you’re on your own.

The requirements are as follows:

  1. Download the latest firmware files for your GPU from the matrix. You want the SOC firmware for your specific Arc card.
  2. Download the latest OPROM from the matrix. Make sure to choose the correct vendor and model of your card.
  3. Download the latest FW Data Pack from the matrix. It should be below all the vendors in the OPROM column.
  4. Unzip the FW Data pack
  5. Compile igsc or download Solaris17’s pre-built binaries for igsc, ensure it is executable using chmod +x on the executable.

Everything below is done in superuser mode.

Flashing the firmware:

# Find the device path. Should be something like /dev/mei1
./igsc list-devices

# See current GPU Firmware (optional)
./igsc fw version --device /dev/xxxx

# See file's firmware  (optional)
./igsc fw version --image dg2_my_soc_file_that_I_downloaded.bin

# Flashing the firmware - Might take a while or get stuck, just wait.
./igsc fw update --device /dev/xxxx --image dg2_my_soc_file_that_I_downloaded.bin

# See new GPU Firmware (optional)
./igsc fw version --device /dev/xxxx

Flashing the OPROM-Data:

# Using the same device path as above applies here

# See current OPROM-Data version  (optional)
./igsc oprom-data version --device /dev/xxxx

# Flashing the oprom-data.rom
./igsc oprom-data update --device /dev/xxxx --image dgX_d_my_vendor-model-aXXX_oprom-data.rom

# See new OPROM-Data version (optional)
./igsc oprom-data version --device /dev/xxxx

Flashing the OPROM-Code:

Note: In most cases this is the exact same file as oprom-data. This is mentioned in Solaris17’s flashing guide that they can differ, but are likely the same file.

# See current version of OPROM-Code (optional)
./igsc oprom-code version --device /dev/xxxx

# Flashing the oprom-data.rom (this is correct!)
./igsc oprom-code update --device /dev/xxxx --image dgX_d_my_vendor-model-aXXX_oprom-data.rom

# See new OPROM-Code version  (optional)
./igsc oprom-code version --device /dev/xxxx

Flashing FW-Data:

Note: Remember to unzip the fwdata.zip file!

# See current version of FW-Data (optional)
./igsc fw-data version --device /dev/xxxx

# Flashing the FW-Data 
./igsc fw-data update --device /dev/xxxx --image fwdata/dgX-myvendor-aXXX_config-data.bin

# See current version of FW-Data (optional)
./igsc fw-data version --device /dev/xxxx

If everything went OK you can reboot and see if things are good. Once you’re back in, fwupdmgr get-devices should now tell you that your GPU firmware is the newly flashed version. Now my fans and card ran much smoother.

Hopefully this will help or remind other Intel Arc Linux users that they need to update your GPU firmware manually. Intel is not going to do it for you. That’s being an early adopter for you. Good luck!

Thanks to Solaris17 and the TechPowerUp forum for posting the firmware files and information to get this working. Without them I wouldn’t be able to find this so easily.
Sources: Guide: Flashing Intel ARC GPUs, Intel ARC Firmware Compilation Matrix

6 Likes

Great looking guide! I’m am thinking about purchasing an Arc GPU for my NAS and found this guide. My CPU doesn’t have Quick Sync.