Getting the Intel Arc 770m to work on Fedora 37

By Kevin, December 11th, 2022

A month ago, I put in an order for a new machine that I had waited all year for - the Intel NUC 12 Enthusiast. 

This model is a major upgrade from my daily driver for the last few years, the Intel NUC 8 Enthusiast. The NUC 8 was a great machine for development, and still is. But I desired a little more horsepower and video capability, as I was running on integrated graphics. The NUC 12 technical specs are great. The main thing I was looking forward to however was the new Intel Arc 770 graphics card. Nvidia support in Linux has been lackluster if not nearly nonexistent for several years, not to mention difficult to obtain these days. When Intel announced their own line of GPU cards, I was all for it. They get the job done and the pricing is very reasonable compared to other vendors.

Image
intel nuc

So when the unit finally hit shelves this fall, I put an order in as soon as I could. Then it arrived - I added 64GB of RAM and a 1TB SSD NVME and set out to install Fedora 37. I soon learned the pain (and joy) of being an early adopter who also prefers using Linux versus Windows or MacOS.

Fedora 37 / Linux Kernel 6.0.x will not boot on the Intel NUC 12. The system will freeze during the boot procedure. It seems that Arc cards and DG2 (discrete graphics) won't be fully supported until Linux kernel 6.2, which is not slated for release until next April. It would also take a few months for Fedora and other distros to adopt it. I did not feel like waiting that long. I spent several weeks and several dozens of attempts troubleshooting and trying to diagnose what the issue is, and spent a lot of time in Linux issue queues. The community is very helpful.

This weekend I had a breakthrough. I was able to see two log errors from journalctl from a failed boot:

pci ... 0000:02:00.0 can't change power state from D3cold to D0 (device inaccessible)

Based on this, I decided to take one last attempt at troubleshooting the machine.

I grabbed the updated BIOS from Intel for this device and flashed the hardware. Even though the BIOS was updated, the machine still froze on boot, which gave me a better idea of where the problem likely is (based on the log above). The next step I took was to go into the BIOS and disable both the ACPI and PCIe power management features, figuring this interferes or is currently not compatible with Fedora. After that point, everything worked.

Image
neofetch

Is this the proper ultimate solution? Maybe, maybe not. The real solution is likely to wait for updated drivers, firmware and kernel - but that could be another six months or more. I can't wait that long with a machine just sitting here.

Here is what you can do right now to get your Intel NUC 12 running Fedora 37 and load the Intel Arc GPU card. I successfully tested this twice through from scratch - and you do not need to be running Fedora Rawhide as some suggest.

  1. Update your Intel NUC BIOS with the latest release.
  2. Flash a USB drive, format it as GPT (do not do MBR/DOS).
  3. Using the latest version of Ventoy, add the Fedora 36 Live USB Image to the USB (it must be Fedora 36, 37 will not work due to a current bug). Make sure you format it for secure boot with UEFI support.
  4. Set USB as the first bootable device in your BIOS so the live installation can boot.
  5. Also in the BIOS, disable ACPI and PCIe power management features.
  6. Reboot and enter the Fedora 36 installation. Install Fedora 36.
  7. Using dnf, update the machine in full.
  8. Before you reboot, you need to edit grub and bypass modestting for now - so sudo nano /etc/default/grub and add nomodeset at the end of the GRUB_CMDLINE_LINUX_DEFAULT line. Save, and run sudo grub2-mkconfig to re-generate grub2 configuration.
  9. After you reboot, upgrade the machine to Fedora 37.
  10. Reboot to complete the upgrade to Fedora 37.
  11. In terminal, run sudo nano /etc/modprobe.d/i915.conf and add options i915 force_probe=5690, and save the file. If you have an Arc GPU other than the 770, you need to look up the corresponding PCI ID instead of 5690 here.
  12. In terminal, run sudo dracut -f to update initramfs from the change in step 11.
  13. Now, sudo nano /etc/default/grub and remove nomodeset. Save, and run sudo grub2-mkconfig to re-generate grub2 configuration.
  14. At this point, you should be able to shutdown and power on the machine from a cold boot with the Arc GPU loaded and in use.

If you also have no sound coming through HDMI/Display Port to the monitor, you can also do this:

  1. In terminal, run sudo nano /etc/modprobe.d/intel-hdmi-audio-fix.conf and add options snd_hda_codec_hdmi enable_silent_stream=N, and save the file.
  2. In terminal, run sudo dracut -f to update initramfs from the change in step 1.
  3. Reboot.

At this point, I now have Fedora and Arc GPU running without any issues whatsoever.

Image
fedora 37 and intel arc

My only guess why the procedure is longer for Intel NUCs versus machines people put together with their own parts is that the BIOS is finely tuned end to end for the device that ships. Others with non-NUC machines did not mention having to do this. I suppose this may be something that is supposed to be fixed in the kernel or Fedora, though I am not certain of this. Users not using an Intel NUC only had to add the conf file that sets the force_probe kernel parameter. YMMV. Right now Intel only seems like they are interested in supporting Ubuntu, I am stubborn and want to stick with trusty Fedora.

On the upside, I got to learn a ton about the Linux kernel, boot process, grub2 configuration, kernel modules, debugging failed boots, and other aspects of the kernel and operating system that I had not had to do before. Now I know way more than I did before and have a very powerful machine to last me the next several years.