Recently I upgraded from FreeBSD 13.1 to 13.2. On my servers everything went smooth as silk, but on my desktop the video card gave me some issues. The video card created some issues. This was also my biggest hurdle when installing FreeBSD 13.1 originally. The AMD FirePro 3900 graphics card (Turks) I use is pretty dated—as is my entire desktop—but it’s more than suitable for my needs. Unfortunately, this means that finding decent information online can be difficult when trying to get FreeBSD running on them. This post is pretty specific but it serves two purposes: 1) help those out who are Googling this very specific issue and 2) document what I’ve done in case I forget!
Note, even if you don’t use a Turks graphics card, this issue may help you out if you use any other AMD graphics card that uses the radeonkms kernel module. There will only be one slight difference between your card and mine, which I will explain at the appropriate step.
Diagnosing the radeonkms issue
It was obvious that the 13.2 upgrade broke something when the resolution was all funky upon the restart. Fortunately, I recognized this from my initial install. First, I checked to see if the kernel module for the graphics driver was loaded (radeonkms):
# kldstat | grep radeon 5 1 0xfffffffff83210000 153c80 radeonkms.ko
That certainly looks like it’s A quick dmesg revealed the graphics driver wasn’t loading correctly:
# dmesg | grep firmware [Returned message about GPU driver fatal error—sorry, I forget exact message]
Next, I checked to see if the kernel module was still existed, which can be found in /boot/modules/:
# ls /boot/modules radeonkms.ko
So it says it’s loaded but when it attempted to load the module on boot it experienced a fatal error. Seems rather paradoxical.
Resolving the Issue
My first thought was that perhaps a newer version of the driver was released and I just missed it. So I update pkg:
# pkg update && pkg upgrade
A restart did not resolve the issue so I check out available radeon packages:
# pkg search radeon gpu-firmware-radeon-kmod-aruba-20220511 Firmware modules for aruba Radeon GPUs gpu-firmware-radeon-kmod-barts-20220511 Firmware modules for barts Radeon GPUs gpu-firmware-radeon-kmod-bonaire-20220511 Firmware modules for bonaire Radeon GPUs gpu-firmware-radeon-kmod-btc-20220511 Firmware modules for btc Radeon GPUs gpu-firmware-radeon-kmod-caicos-20220511 Firmware modules for caicos Radeon GPUs gpu-firmware-radeon-kmod-cayman-20220511 Firmware modules for cayman Radeon GPUs gpu-firmware-radeon-kmod-cedar-20220511 Firmware modules for cedar Radeon GPUs gpu-firmware-radeon-kmod-cypress-20220511 Firmware modules for cypress Radeon GPUs gpu-firmware-radeon-kmod-hainan-20220511 Firmware modules for hainan Radeon GPUs gpu-firmware-radeon-kmod-hawaii-20220511 Firmware modules for hawaii Radeon GPUs gpu-firmware-radeon-kmod-juniper-20220511 Firmware modules for juniper Radeon GPUs gpu-firmware-radeon-kmod-kabini-20220511 Firmware modules for kabini Radeon GPUs gpu-firmware-radeon-kmod-kaveri-20220511 Firmware modules for kaveri Radeon GPUs gpu-firmware-radeon-kmod-mullins-20220511 Firmware modules for mullins Radeon GPUs gpu-firmware-radeon-kmod-oland-20220511 Firmware modules for oland Radeon GPUs gpu-firmware-radeon-kmod-palm-20220511 Firmware modules for palm Radeon GPUs gpu-firmware-radeon-kmod-pitcairn-20220511 Firmware modules for pitcairn Radeon GPUs gpu-firmware-radeon-kmod-r100-20220511 Firmware modules for r100 Radeon GPUs gpu-firmware-radeon-kmod-r200-20220511 Firmware modules for r200 Radeon GPUs gpu-firmware-radeon-kmod-r300-20220511 Firmware modules for r300 Radeon GPUs gpu-firmware-radeon-kmod-r420-20220511 Firmware modules for r420 Radeon GPUs gpu-firmware-radeon-kmod-r520-20220511 Firmware modules for r520 Radeon GPUs gpu-firmware-radeon-kmod-r600-20220511 Firmware modules for r600 Radeon GPUs gpu-firmware-radeon-kmod-r700-20220511 Firmware modules for r700 Radeon GPUs gpu-firmware-radeon-kmod-redwood-20220511 Firmware modules for redwood Radeon GPUs gpu-firmware-radeon-kmod-rs600-20220511 Firmware modules for rs600 Radeon GPUs gpu-firmware-radeon-kmod-rs690-20220511 Firmware modules for rs690 Radeon GPUs gpu-firmware-radeon-kmod-rs780-20220511 Firmware modules for rs780 Radeon GPUs gpu-firmware-radeon-kmod-rv610-20220511 Firmware modules for rv610 Radeon GPUs gpu-firmware-radeon-kmod-rv620-20220511 Firmware modules for rv620 Radeon GPUs gpu-firmware-radeon-kmod-rv630-20220511 Firmware modules for rv630 Radeon GPUs gpu-firmware-radeon-kmod-rv635-20220511 Firmware modules for rv635 Radeon GPUs gpu-firmware-radeon-kmod-rv670-20220511 Firmware modules for rv670 Radeon GPUs gpu-firmware-radeon-kmod-rv710-20220511 Firmware modules for rv710 Radeon GPUs gpu-firmware-radeon-kmod-rv730-20220511 Firmware modules for rv730 Radeon GPUs gpu-firmware-radeon-kmod-rv740-20220511 Firmware modules for rv740 Radeon GPUs gpu-firmware-radeon-kmod-rv770-20220511 Firmware modules for rv770 Radeon GPUs gpu-firmware-radeon-kmod-sumo-20220511 Firmware modules for sumo Radeon GPUs gpu-firmware-radeon-kmod-sumo2-20220511 Firmware modules for sumo2 Radeon GPUs gpu-firmware-radeon-kmod-tahiti-20220511 Firmware modules for tahiti Radeon GPUs gpu-firmware-radeon-kmod-turks-20220511 Firmware modules for turks Radeon GPUs gpu-firmware-radeon-kmod-verde-20220511 Firmware modules for verde Radeon GPUs radeontool-1.5 ATI Radeon video card controlling tool useful for laptops radeontop-1.4 Program that shows AMD Radeon GPU resource utilization
I see very specific versions here rather than the single binary for everything. Okay, let’s go for my model (Turks). Here is the part where, if you have a different graphics card, you’ll have to figure it out and match it up accordingly.
# pkg install gpu-firmware-radeon-kmod-turks-20220511
I reboot and. . .FAILURE. Okay, let’s see if anything’s different:
# dmesg | grep firmware [Error message about failure to load radeon-kmod-btc]
Why did I get this? I don’t know. But I do see that the pkg gpu-firmware-radeon-kmod-btc-20220511 is available:
# pkg install gpu-firmware-radeon-kmod-btc-20220511
Reboot and success!
After writing this I realized my problem may have been pretty simple: I originally installed radeonkms from source. Since that’s the only package I installed from source, I don’t use something like portmaster to keep ports up to date. I suspect that I could have updated it and my issue would have been resolved. However, I would rather use the binary package since it will stay up to date and it would have avoided this issue in the first place.
Although it was probably a stupid mistake on my part, the only reason I installed the driver from source in the first place was because I couldn’t get the binary package to work before. It’s nice to see that it works now, and it should no longer cause problems in future upgrades because pkg will keep it up to date.