(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

22 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.

Is this still an issue?

Hi @ Mechanical
I just stumbled over this thread since my Sparkle Intel Arc A770 will not work in Debian actually,
and I am amazed on your work on this. Thank you.
So, I tried to follow your instructions and I am slowed down at the point executing the igsc wit this error:
’ ./igsc: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.38’ not found (required by libigsc.so.0) ’
which seems correct since I only have:
’ ldd --version : ldd (Debian GLIBC 2.36-9+deb12u9) 2.36 ’
Do you have an Idea what to do in this case?

  • Is there a way to ‘only’ upgrade the glibc and its dependancies?
  • Is there a way/switch/option to run igsc with version 2.36?
    You help/response on this will be highly appreciated.
    Regards,
    Roger
1 Like

Old Glibc issues usually you get around by running your stuff in a docker with more recent/older versions of things, including glibc. I sometimes use --privileged dockers as a poor man’s chroot

Alternatively, you could grab the source from intel’s github and build it using the instructions here: GitHub - intel/igsc: Intel graphics system controller firmware update library.
You need the libudev-dev , ninja-build, gcc and cmake packages installed for this to work. The resulting binary is under builddir/src and you can run it from there if you don’t want to install it.

This would allow you to use the existing older version of glibc.

@mpdarkguy : Thanks for u’r response: unfortunately I am not running in Docker. Nevertheles, thanks for Your effort here.
@CWin
Also big thanks to u for u’r resp. I will give it a try since I am a complete noop on SW compiling. Will be a big step for me and a little step for others. :slight_smile:
Thanks and regards,
Roger

I’ve been considering buying an a380 for my new Kubuntu plex server build, so this info is very helpful. Does updating the firmware help with the unusually high idle power consumption of the arc cards? That’s the only thing I’ve been waiting for them to fix before pickup one up. Maybe I should just wait for the battlemage gen card to replace the a380.

I have updated firmware few days ago on A750 in my desktop and it was still ~40w idle… but from what I read you can get it very low (<5W idle) without display connected… which would likely be the case for server. But did not test it myself since I don’t have iGPU

also… the idle power of current battlemage cards is not much better according to GN testing

Have you tried playing with ASPM settings? I’ve heard Intel said it can help.

How do I know which SOC file to use? I have an Asrock A770

Just have to give a hat-tip for this info. I had an issue where I’d lose hardware transcoding in jellyfin if I did a warm boot. Had to cold boot for it to work again. This looks to have fixed it.

Intel B580 Jupgrade

For anyone else who stumbles across this in the future, my Arc B580 shipped with a Firmware older than what Solaris17 describes as the GA version released with the cards.

So if you’ve got a B580 make sure to check your FIrmware Version even though there is only one available for flashing from Intel.

1 Like

I’m having some trouble getting my Sparkle ARC A380 to do hardware ML in OpenVINO (GPU not detected), while hardware transcoding works just fine, so I figured let’s do a firmware upgrade, what could possibly go wrong.

I’m having difficult understanding the guide in how to select the correct OPROM, and if I should update it at all? Any specific help would be appreciated.

I am running Proxmox 8.4 with a Sparkle ARC A380 ELF (SA380E-6G) and I compiled igsc on the host.

$ lspci -nn | grep -Ei "3d|display|vga"
43:00.0 VGA compatible controller [0300]: Intel Corporation DG2 [Arc A380] [8086:56a5] (rev 05)
c6:00.0 VGA compatible controller [0300]: ASPEED Technology, Inc. ASPEED Graphics Family [1a03:2000] (rev 52)
$ sudo igsc list-devices
Device [1] '/dev/mei1': 8086:56a5 172f:3943 0000:43:00.00
$ sudo igsc fw version --device /dev/mei1
sudo igsc fw-data version --device /dev/mei1
sudo igsc oprom-code version --device /dev/mei1
sudo igsc oprom-data version --device /dev/mei1
Device: FW Version: DG02_2.2345
Device: Fw Data Version: Format 1, Major Version: 101, OEM Manufacturing Data Version: 0, Major VCN: 1
OEM Manufacturing Data Version FITB: 999999, Flags: 0X00000000, ARB SVN: 999999, ARB SVN FITB: 999999
OPROM CODE Version: 14 00 28 04 00 00 00 00
OPROM DATA Version: 14 00 28 04 00 00 00 00

Looking at the matrix my firmware is old, mine is DG02_2.2345 latest is DG02_2.2357.

But, I see many matches for OPROM 14 00 28 04 00 00 00 00, e.g. Acer Predator Bifrost A770: 14 00 28 04 00 00 00 00, and per the FAQ the Sparkle is a vanilla Intel card and I do find a DG2: 14 00 28 04 00 00 00 00 entry for driver version 101.4900 dating back to 23 Oct 2023.

Can somebody help explain if I am supposed to update the OPROM at all, or just the firmware, I’m confused? (alternatively I can just temporarily pass the card to a Windows VM and install the ARC drivers and see if it updates the firmware for me).

Interesting. My Asrock low-profile a380 doesn’t appear to have a firmware data file.

Thank you for the remainder!

I have Sparkle Intel Arc B580 TITAN OC 12GB bougth May 31st 2025. The card had 21.1098 FW, I flashed to 21.1174 FW. The flashing went smoothly.

I did not flash the OPROM’s or FW-Data because I was unsure if those files existed :person_shrugging: I tried my best to read the provided links but to no avail. In the OG post, the oprom file(s) are .rom but all I did find was a .bin file named bmg_OpromCode - I chose to be careful and did not try to force the issue. Someone with better understanding could nudge us toward the proper path.

I built igsc with meson as described in their git. The binaries provided by Solaris17 were committed 2 years ago. I’d suggest anyone looking to flash your cards to compile igsc yourself.

Did you only flash the main firmware, no OPROM’s, any issues?

Only the main firmware, called bmg_g21_fwupdate.bin

No OPROM’s or FW-Data flashed as per my earlier post:

I did not flash the OPROM’s or FW-Data because I was unsure if those files existed :person_shrugging:

No issues so far, played a few games. Though I haven’t rebooted yet after flashing :sweat_smile:

Sparkle A310 ECO bought for transcoding in a VM on a Proxmox host.

I have never restarted this host as much as I did over the past few days trying to have this card work!

What seems ok:
I can see the device listed on the host;

31:00.0 VGA compatible controller [0300]: Intel Corporation DG2 [Arc A310] [8086:56a6] (rev 05) (prog-if 00 [VGA controller])
        Subsystem: Device [172f:4019]
        Flags: bus master, fast devsel, latency 0, IOMMU group 33
        Capabilities: [40] Vendor Specific Information: Len=0c <?>
        Capabilities: [70] Express Endpoint, IntMsgNum 0
        Capabilities: [ac] MSI: Enable- Count=1/1 Maskable+ 64bit+
        Capabilities: [d0] Power Management version 3
        Capabilities: [100] Alternative Routing-ID Interpretation (ARI)
        Capabilities: [420] Physical Resizable BAR
        Capabilities: [400] Latency Tolerance Reporting
        Kernel driver in use: vfio-pci
--
32:00.0 Audio device [0403]: Intel Corporation DG2 Audio Controller [8086:4f92]
        Subsystem: Device [172f:4019]
        Flags: fast devsel, IOMMU group 34
        Memory at fc100000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: [50] Power Management version 3
        Capabilities: [60] MSI: Enable- Count=1/1 Maskable- 64bit+
        Capabilities: [70] Express Endpoint, IntMsgNum 0
        Capabilities: [100] Latency Tolerance Reporting
        Kernel driver in use: vfio-pci
        Kernel modules: snd_hda_intel

But that’s pretty much it. I upgraded Proxmox to 9.1.2 just now in hopes that maybe this tool would work, but no. The tool lists no device:

root@proxmox:~/a310# ./igsc list-devices
No device found

ROM-BAR is enabled in Bios (and working afaik), CMS is disabled (UEFI-only), IOMMU seems allright, the card is in it’s own group… I have no clue where to look from here.

Any pointer?

Did you try with intel_gpu_top??

sudo apt install -y intel-opencl-icd intel-gpu-tools
$:~$ sudo intel_gpu_top -L
card1                    Intel Dg2 (Gen12)                 pci:vendor=8086,device=56A5,card=0
└─renderD128
card0                    1a03:2000                         pci:vendor=1A03,device=2000,card=0