AArch64 UEFI driver for AMD GPUs (for graphics output during boot)

As people are probably aware, there’s an issue on Arm systems that video output from discrete (PCIe) graphics cards isn’t available during boot. That’s because the driver in the option ROM that the host needs to load and run only contains x86 code.

For a few years however, AMD has provided an AArch64 version of that driver for download that people can either load manually at the UEFI Shell or flash onto the card to replace the x86 code.

The process of replacing the driver in the onboard flash can be found at AArch64 option ROMs for AMD GPUs – Work Of Ard.

However it looks like the link to download the driver has changed - it can now be found at AMD AARCH64 GOP Driver.

I had a go at reflashing a card a couple of years ago and failed, but maybe somebody else will have better luck!

2 Likes

Confirming that this procedure works and gets boot screen. I’ve done it on both an R9 Nano and Vega generation gpus.

3 Likes

I have AMD WX2100 card with both x86-64 and aarch64 Option ROM drivers in flash.

Worked fine in Honeycomb. Did not had a chance to check it in other AArch64 UEFI system.

2 Likes

Does loading the driver from the UEFI shell work for you?

It didn’t when I tried a couple of years ago.

Do UEFI implementations have functionality to auto-load EFI drivers from the EFI partition? That would be easier than flashing in hardware. In particular because there is one driver for (allmost) all AMD GPU’s.

3 Likes

Some of them do: for example EDK2 allows you to add drivers loaded from the filesystem during boot. However I haven’t seen anything similar on AMI’s Aptiov.

Yes it can be done on the ASRock Rack board.

There are two ways to do it.

From the OS:

# cd /boot/efi/EFI
# mkdir AMD
# cd AMD
# wget https://download.amd.com/drivers/Arm64Gop_1_68.efi
# efibootmgr -r -c -d /dev/nvme0n1 -p 1 -L amdgop -l "\EFI\AMD\Arm64Gop_1_68.efi"

This is assuming that your EFI partition is the first on /dev/nvme0n1

Using the UEFI Shell, after having downloaded the driver like above:

fs0:
cd \EFI\AMD
bcfg driver add 0 Arm64Gop_1_68.efi "amdgop" 

This worked for me with a Sapphire Pulse AMD Radeon RX 6400.
It did not work with an AMD Radeon WX3200 Pro.

With the WX3200 Pro, the driver would show when running the “drivers” command in the UEFI shell, but it would not activate until running the “connect” command manually.

3 Likes

On AsrockRack I need to load 1.68 GOP driver by hand (using load command) despite whatever is in bcfg driver dump output.

Looks like VGA monitor will need to be present on my desk as long as I use AMI firmware.

This works really well on a secondary HDMI port of my 4K monitor (in 2K).

1 Like

Situation stays the same - VGA is still in use. Very annoying.

  • System starts, nothing on VGA nor DP.
  • BIOS appears on VGA
  • I can go into EFI Shell at that stage and load GOP driver but that makes no change
  • Grub appears on VGA
  • System boot messages appear on VGA (I use ‘console=tty1’ in kernel cmdline)
  • LUKS password prompt appears on VGA
  • SDDM appears on both DP and VGA
  • KDE session starts with VGA disabled in KDE Settings
  • all text consoles are on VGA only

I already blacklisted ‘ast’, but looks like now it is time to blacklist simple-framebuffer as well.

Adding initcall_blacklist=sysfb_init to kernel cmdline gets rid of AST.

And brings that lovely ‘we cannot into pcie’ effect:

So it looks like I should maybe reconsider pains of AST as there were no artifacts eaerlier.