AMD Based FreeBSD Desktop Reloaded

· 𝚟𝚎𝚛𝚖𝚊𝚍𝚎𝚗 ·

15 min read Original article ↗

My previous AMD Based FreeBSD Desktop is still up and running – it will now be my kids computer … so I needed a new one … but not a bigger one 🙂 I spent way too much time finding new Mini-ITX case for the next one … and after all possibilities … I got Silverstone case again :] … because nothing else was this small and with all needed features. Also … I was thinking WHAT exactly should I buy – especially in the times with AI prices. For one of my older projects that failed (I hope to also publish about that some day) I had AMD Ryzen 4750GE CPU with 35W TDP but still 8C/16T CPU on AMD4 socket … so instead of killing all price/performance efficiency with DDR5 and AM5 setup … I went to decent AM4 option.

Case

Older build used Silverstone SG05 case and this one uses Silverstone SG13 … which is almost the same.

  WHAT     SG05     SG13
 Width    218mm    222mm
Height    175mm    181mm
 Depth    276mm    285mm
Volume    10.5L    10.8L

So one can say that its just a tiny 5% increase in size … but a welcome and needed one.

Difference

The new setup is about 25% faster when it comes to CPU and 40-60% faster in GPU department … depending on the workload. The SSD/NVMe speeds will be the same as its still the same AM4 platform … and RAM would also be similar as its again DDR4 sticks.

Assembly

After having the parts laying around for about a quarter (yes I was busy) my son finally forced me to make that build … and it was a positive push – we sit down in dining room with all needed parts and I started to assembly it with my son being more then curious how it is to actually build a computer.

First CPU into the motherboard … and NVME into the M.2 slot.

Next thermal paste and fan onto the CPU.

To be honest it was easier said then done as the Thermalight AXP-90 X47 comes with install options for both AMD and Intel solutions and it took me a little time to check all needed screws to use and their accessories.

Next – motherboard into the case.

Next RAM or GPU … as GPU was measured to fit within millimeters in that case I started with the GPU.

… and no matter how I tried … no matter which angles I tried to use … GPU would just not fit into the case 😦

I found funny that the GPU name was Challenger and it was REALLY challenging to fit it into the case.

I even decided to name that system challenger after that. I am a big fan of Dodge Challenger cars … I own a Dodge personally … just not a Challenger … yet 🙂

I inspected the GPU from every possible direction and one detail caught my attention …

The plastic cover with the fans was about 1cm wider then the PCB for the card … so I decided to cut it precisely at that place.

This is how the plastic cover looked like after being cut to the PCB length.

Here is how it went with the cutting – something like 2-3 minutes of work.

… and after reattaching the cover to the GPU card.

I went back to trying to fit the GPU into the case … but the cut was not enough … it would still not fit … so I changed strategy. I dissembled the expansion slot bracket from the GPU – out that expansion slot bracket into its place in the case – and tried to fit the card again – so later I can add screws to expansion slot bracket to attach it to GPU again … but I was not able to fit all those again. So next ‘victim’ of cutting was the expansion slot bracket … before on the picture below.

… and after 🙂

Not much was needed – but without that cut – fitting that Challenger into the case was not possible.

After that I was able to finally attach the GPU to the motherboard.

It was more or less like that.

… and after the additional bracket cover.

Next for the installation were RAM sticks and SSD SATA drive – nothing spectacular about that – after also adding the PSU it was more or less complete.

Its really nice that Thermaltake Toughpower Grand 750W PSU has detachable cables … so I could have one cable less in my case :] <sarcasm/>

I generally like to build … everything – that means also building computers … but one thing always pisses me off when I build a PC – the cables from the case buttons to motherboard.

Back in 2006 when I was building a gaming PC for my friend it looked more or less like that below – starting a PC with a screw 🙂

Difference

The difference in CPU power between older AMD Ryzen 7 1700 and AMD Ryzen 7 PRO 4750GE is about 25% percent. When it comes to GPU between 5700XT 8GB and 7700XT 12GB its somewhere between 40-60% percent.

There is almost zero ‘visual’ difference between the two – first the older one.

… and the newer one.

The most important part of this article is sharing that all of these parts – especially GPU – works very well with FreeBSD with drm-kmod and x11-drivers/xlibre-xf86-video-amdgpu XLibre AMD Radeon GPU driver. After I learned how much some Red Hat people wanted to cripple and kill the X11 … I am not going back to Xorg X11 implementation … the XLibre X11 is my home … and do not even get me started on Wayland – the details about that topic are in the 200 MB RAM FreeBSD Desktop article.

Firmware

After install and reboot I started the fwget(8) command so that all needed firmware for FreeBSD will be fetched.

challenger # fwget -v
Trying to match device 0x747e in class video and vendor amd with pci_video_amd
Trying to match device 0x8168 in class network and vendor realtek with pci_network_realtek
Trying to match device 0x24fb in class network and vendor intel with pci_network_intel
Needed firmware packages: 'wifi-firmware-iwlwifi-kmod-7000'                                                    

But as it seams it was not enough as I got these boot errors on every FreeBSD system start.

iwmbtfw: iwmbt_fw_read: open: /usr/local/share/iwmbt-firmware/ibt-hw-37.8.bseq: No such file or directory
iwmbtfw: main: Firmware download failed!                      

… so I start to dig where the problem is. For a start I checked all /etc/rc.d services for iwmbtfw name.

challenger # grep -r iwmbtfw /etc
/etc/devd/iwmbtfw.conf: action "/usr/sbin/iwmbtfw -d $cdev -f /usr/local/share/iwmbt-firmware";

challenger # ls /usr/local/share/iwmbt-firmware
ls: /usr/local/share/iwmbt-firmware: No such file or directory

So the /usr/local/share/iwmbt-firmware seems to be missing but its suppose to be there …

challenger # man iwmbtfw | grep firmware
     Firmware files are available in the comms/iwmbt-firmware port.

OK … lets install the comms/iwmbt-firmware package.

challenger # pkg search -o iwmbt
comms/iwmbt-firmware           Intel Wireless bluetooth adaptor firmwares used by iwmbtfw(8)

challenger # pkg install iwmbt-firmware
Updating FreeBSD-ports repository catalogue...
FreeBSD-ports repository is up to date.
Updating FreeBSD-ports-kmods repository catalogue...
FreeBSD-ports-kmods repository is up to date.
Updating FreeBSD-base repository catalogue...
FreeBSD-base repository is up to date.
All repositories are up to date.
The following 1 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        iwmbt-firmware: 20251111 [FreeBSD-ports]

Number of packages to be installed: 1

The process will require 15 MiB more space.
5 MiB to be downloaded.

Proceed with this action? [y/N]: y
[1/1] Fetching iwmbt-firmware-20251111: 100%  4840 KiB 619.5 kB/s    00:08
Checking integrity... done (0 conflicting)
[1/1] Installing iwmbt-firmware-20251111...
[1/1] Extracting iwmbt-firmware-20251111: 100%

After reboot I never saw that error message again – so that is the needed fix.

Hardware

This is the exact hardware I got with the prices I paid for it in EUR currency. Some were bought as new and some as used.

 TYPE  EUR  WHAT                                    
 CASE   55  Silverstone SG13
  PSU   55  Thermaltake Toughpower Grand 750W
 MOBO  100  ASRock B550M-ITX/ac
  CPU  145  AMD Ryzen 7 4750GE 8C/16T 35W TDP
  GPU  340  ASRock ATI Radeon 7700XT 12GB Challenger
PASTE   10  Grizzly Thermal Kryonaut 2g
 COOL   40  Thermalight AXP-90 X47
  FAN    5  Savio BLADEX1 120mm PWM
  SSD   45  ADATA SU650 512GB
 NVME   50  Phison ESO512GYLCT-EP3-2L 512GB
  RAM  150  2 x 16GB Goodram DDR4 3600MHz 1.35V CL18
PRICE  995  TOTAL

Not sure it was worth it but I did it anyway.

In the mean time I also upgraded my older HP E221c FullHD monitor for HP E271i FullHD one … with additional HP soundbar mounted below the screen. To be honest – nothing fancy about that – the monitor was about 70 EUR and about 15 EUR for the soundbar.

XLibre X11

I installed these packages.

challenger # \
  pkg install -y \
    drm-kmod \
    xlibre \
    openbox \
    xterm \
    xinit \
    mesa-demos \
    scrot \
    radeontop \
    screen \
    lsblk \
    beadm \
    smartmontools

Next I started the XLibre X11 as usual.

vermaden@challenger % echo openbox > ~/.xinitrc

vermaden@challenger % xinit -- -dpi 75 -nolisten tcp

… and the X11 XLibre display server started as usual – but after I checked the logs … I was using the software scfb driver … and I was not in the video group – so I added myself there.

challenger # pw groupmod video -m vermaden

Next … I searched for amdgpu driver …

challenger # pkg search -o amdgpu
x11-drivers/xf86-video-amdgpu         X.Org amdgpu display driver
x11-drivers/xlibre-xf86-video-amdgpu  XLibre amdgpu display driver

Its important to install the x11-drivers/xlibre-xf86-video-amdgpu one because the other one will force You to uninstall XLibre and install Xorg.

Next I added the AMD Radeon X11 config.

challenger # cat /usr/local/etc/X11/xorg.conf.d/card.conf 
Section "Device"
  Identifier "Card0"
  Driver "amdgpu"
  Option "TearFree" "true"
EndSection

Nothing fancy but works as desired.

I also checked the /var/log/Xorg.0.log for details and …

[2026-09-05 14:48:22] (II) LoadModule: "amdgpu"
[2026-09-05 14:48:22] (II) Loading /usr/local/lib/xorg/modules/xlibre-25/drivers/amdgpu_drv.so
[2026-09-05 14:48:22] (II) Module amdgpu: vendor="X.Org Foundation"
[2026-09-05 14:48:22]   compiled for 1.25.1.9, module version = 25.1.2
[2026-09-05 14:48:22]   Module class: X.Org Video Driver
[2026-09-05 14:48:22]   ABI class: X.Org Video Driver, version 28.1
[2026-09-05 14:48:22] (II) AMDGPU: Driver for AMD Radeon:
        All GPUs supported by the amdgpu kernel driver

Yep … this is what we wanted.

This is how that GPU looks like in the pciconf(8) output.

challenger # pciconf -lv vgapci0
vgapci0@pci0:3:0:0:     class=0x030000 rev=0xff hdr=0x00 vendor=0x1002 device=0x747e subvendor=0x1849 subdevice=0x5323
    vendor     = 'Advanced Micro Devices, Inc. [AMD/ATI]'
    device     = 'Navi 32 [Radeon RX 7700 XT / 7800 XT]'
    class      = display
    subclass   = VGA

This is how resources usage looks like in X11 XLibre session on FreeBSD.


challenger # top -b -ores
last pid:  5702;  load averages:    0.08,    0.08,    0.02  up 0+00:30:16    14:35:51
34 processes:  1 running, 33 sleeping
CPU:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt, 99.9% idle
Mem: 92M Active, 101M Inact, 1512M Wired, 2056K Buf, 29G Free
ARC: 141M Total, 24M MFU, 113M MRU, 388K Anon, 670K Header, 2159K Other
     88M Compressed, 207M Uncompressed, 2.35:1 Ratio
Swap: 4096M Total, 4096M Free

  PID USERNAME    THR PRI NICE   SIZE    RES STATE    C   TIME    WCPU COMMAND
90382 vermaden     16   0    0   319M   136M select   6   0:01   0.00% Xorg
92537 vermaden      2   0    0    50M    22M select  12   0:00   0.00% openbox
 1117 vermaden      1   0    0    26M    14M select  13   0:00   0.00% xterm
77479 root          1   0    0    25M    10M select  14   0:00   0.00% sshd
17882 root          1   0    0    15M  4356K select   9   0:00   0.00% devd
89878 vermaden      1   1    0    16M  3808K wait     5   0:00   0.00% xinit
 2151 vermaden      1   0    0    14M  3500K wait     2   0:00   0.00% sh
 5702 root          1   0    0    15M  3492K CPU9     9   0:00   0.00% top
 1924 root          1   0    0    14M  3280K wait     4   0:00   0.00% login

This is how the main FreeBSD /etc/rc.conf config looks like.

challenger # cat /etc/rc.conf
  hostname="challenger.local"
  ifconfig_re0="inet 10.0.0.5/24 up"
  defaultrouter="10.0.0.1"

  kld_list="${kld_list} amdgpu amdtemp"
  syslogd_flags="-ss"
  sshd_enable="YES"
  powerd_enable="YES"
  dumpdev="AUTO"
  zfs_enable="YES"

Far from fancy – just simple stuff.

Power

Power measurement seems similar to older model – but slightly smaller.

POWER  STATE                                     
  47W  IDLE without amdgpu.ko loaded
  39W  IDLE with amdgpu.ko loaded
  45W  BUSY with 16 x 100% CPU Thread(s) @ 1.4GHz
  80W  BUSY with 16 x 100% CPU Thread(s) @ 3.1GHz

The Turbo frequency for the AMD Ryzen 7 4750GE CPU is at 4.3GHz … but I am not sure its used … because for example a CPU in my laptop has two ‘final’ speeds shown as 1801/15000 1800/15000 and the one with additional 1 it the one with Turbo mode … but nothing like that for that AMD Ryzen 7 4750GE CPU.

Also … there is only C1 state supported … which is sad 😦

challenger # sysctl dev.cpu.0
dev.cpu.0.temperature: 47.0C
dev.cpu.0.cx_method: C1/hlt
dev.cpu.0.cx_usage_counters: 259234
dev.cpu.0.cx_usage: 100.00% last 19092us
dev.cpu.0.cx_lowest: C1
dev.cpu.0.cx_supported: C1/1/0
dev.cpu.0.freq_levels: 3100/3778 1700/1615 1400/1277
dev.cpu.0.freq: 1400
dev.cpu.0.%iommu: 
dev.cpu.0.%parent: acpi0
dev.cpu.0.%pnpinfo: _HID=ACPI0007 _UID=0 _CID=none
dev.cpu.0.%location: handle=\_SB_.PLTF.C000
dev.cpu.0.%driver: cpu
dev.cpu.0.%desc: ACPI CPU

This is how the sensors(8) output looks like on that box.

challenger # sensors

            BATTERY/AC/TIME/FAN/SPEED 
 ------------------------------------ 
               dev.cpu.0.cx_supported: C1/1/0 
                   dev.cpu.0.cx_usage: 100.00% last 10882us
                       dev.cpu.0.freq: 1400 
                hw.acpi.cpu.cx_lowest: C1 
                            powerd(8): running

                  SYSTEM/TEMPERATURES 
 ------------------------------------ 
                dev.cpu.0.temperature: 47.1C
                dev.cpu.1.temperature: 47.1C
                dev.cpu.2.temperature: 47.1C
                dev.cpu.3.temperature: 47.1C
                dev.cpu.4.temperature: 47.1C
                dev.cpu.5.temperature: 47.1C
                dev.cpu.6.temperature: 47.1C
                dev.cpu.7.temperature: 47.1C
                dev.cpu.8.temperature: 47.1C
                dev.cpu.9.temperature: 47.1C
               dev.cpu.10.temperature: 47.1C
               dev.cpu.11.temperature: 47.1C
               dev.cpu.12.temperature: 47.1C
               dev.cpu.13.temperature: 47.1C
               dev.cpu.14.temperature: 47.1C
               dev.cpu.15.temperature: 47.1C

                   DISKS/TEMPERATURES 
 ------------------------------------ 
       smart.ada0.temperature_celsius: 34.0C
              smart.nvme0.temperature: 39.0C

Not great. Not terrible.

PKGBASE Upgrade

As I installed stock 15.1-RELEASE I will now upgrade to latest 15.1-pX release available.

challenger # pkg upgrade -r FreeBSD-base
Updating FreeBSD-base repository catalogue...
FreeBSD-base repository is up to date.
FreeBSD-base is up to date.
Checking for upgrades (53 candidates): 100%
Processing candidates (53 candidates): 100%
The following 52 package(s) will be affected (of 0 checked):

Installed packages to be UPGRADED:
        FreeBSD-audit: 15.1 -> 15.1p2 [FreeBSD-base]
        FreeBSD-autofs: 15.1 -> 15.1p2 [FreeBSD-base]
        FreeBSD-bhyve: 15.1 -> 15.1p2 [FreeBSD-base]
        FreeBSD-bsnmp: 15.1 -> 15.1p1 [FreeBSD-base]
        FreeBSD-clang: 15.1 -> 15.1p2 [FreeBSD-base]
        FreeBSD-clang-dev: 15.1 -> 15.1p1 [FreeBSD-base]
        FreeBSD-clibs: 15.1 -> 15.1p2 [FreeBSD-base]
        FreeBSD-clibs-dev: 15.1 -> 15.1p3 [FreeBSD-base]
        FreeBSD-clibs-dev-lib32: 15.1 -> 15.1p2 [FreeBSD-base]
        FreeBSD-clibs-lib32: 15.1 -> 15.1p2 [FreeBSD-base]
        FreeBSD-console-tools: 15.1 -> 15.1p2 [FreeBSD-base]
        FreeBSD-ctl: 15.1 -> 15.1p2 [FreeBSD-base]
        FreeBSD-jail: 15.1 -> 15.1p2 [FreeBSD-base]
        FreeBSD-kernel-generic: 15.1 -> 15.1p3 [FreeBSD-base]
        FreeBSD-kernel-generic-dbg: 15.1 -> 15.1p3 [FreeBSD-base]
        FreeBSD-lib9p: 15.1 -> 15.1p2 [FreeBSD-base]
        FreeBSD-lib9p-dev: 15.1 -> 15.1p2 [FreeBSD-base]
        FreeBSD-lib9p-dev-lib32: 15.1 -> 15.1p2 [FreeBSD-base]
        FreeBSD-lib9p-lib32: 15.1 -> 15.1p2 [FreeBSD-base]
        FreeBSD-libevent1: 15.1 -> 15.1p2 [FreeBSD-base]
        FreeBSD-libevent1-dev: 15.1 -> 15.1p2 [FreeBSD-base]
        FreeBSD-libevent1-dev-lib32: 15.1 -> 15.1p2 [FreeBSD-base]
        FreeBSD-libevent1-lib32: 15.1 -> 15.1p2 [FreeBSD-base]
        FreeBSD-mtree: 15.1 -> 15.1p2 [FreeBSD-base]
        FreeBSD-natd: 15.1 -> 15.1p1 [FreeBSD-base]
        FreeBSD-natd-dev: 15.1 -> 15.1p1 [FreeBSD-base]
        FreeBSD-natd-dev-lib32: 15.1 -> 15.1p1 [FreeBSD-base]
        FreeBSD-natd-lib32: 15.1 -> 15.1p1 [FreeBSD-base]
        FreeBSD-ntp: 15.1 -> 15.1p2 [FreeBSD-base]
        FreeBSD-openssl-dev: 15.1 -> 15.1p3 [FreeBSD-base]
        FreeBSD-openssl-dev-lib32: 15.1 -> 15.1p3 [FreeBSD-base]
        FreeBSD-openssl-lib: 15.1 -> 15.1p3 [FreeBSD-base]
        FreeBSD-openssl-lib32: 15.1 -> 15.1p3 [FreeBSD-base]
        FreeBSD-pmc: 15.1 -> 15.1p2 [FreeBSD-base]
        FreeBSD-ppp: 15.1 -> 15.1p3 [FreeBSD-base]
        FreeBSD-rescue: 15.1 -> 15.1p3 [FreeBSD-base]
        FreeBSD-runtime: 15.1 -> 15.1p3 [FreeBSD-base]
        FreeBSD-runtime-dev: 15.1 -> 15.1p1 [FreeBSD-base]
        FreeBSD-runtime-dev-lib32: 15.1 -> 15.1p1 [FreeBSD-base]
        FreeBSD-runtime-lib32: 15.1 -> 15.1p1 [FreeBSD-base]
        FreeBSD-src: 15.1 -> 15.1p3 [FreeBSD-base]
        FreeBSD-src-sys: 15.1 -> 15.1p3 [FreeBSD-base]
        FreeBSD-syslogd: 15.1 -> 15.1p2 [FreeBSD-base]
        FreeBSD-utilities: 15.1 -> 15.1p2 [FreeBSD-base]
        FreeBSD-utilities-dev: 15.1 -> 15.1p1 [FreeBSD-base]
        FreeBSD-utilities-dev-lib32: 15.1 -> 15.1p1 [FreeBSD-base]
        FreeBSD-utilities-lib32: 15.1 -> 15.1p1 [FreeBSD-base]
        FreeBSD-zfs-dev: 15.1 -> 15.1p1 [FreeBSD-base]
        FreeBSD-zfs-dev-lib32: 15.1 -> 15.1p1 [FreeBSD-base]
        FreeBSD-zfs-lib: 15.1 -> 15.1p1 [FreeBSD-base]
        FreeBSD-zfs-lib32: 15.1 -> 15.1p1 [FreeBSD-base]
        FreeBSD-zoneinfo: 15.1 -> 15.1p2 [FreeBSD-base]

Number of packages to be upgraded: 52

579 MiB to be downloaded.

Proceed with this action? [y/N]: y

… and it all went well. After the upgrade finished I rebooted and everything worked like a charm.

Offtopic

Fast forward half a year later after the build happened in that dining room – my 10 years old son comes to me a month ago and says ‘Hey dad I just wrote this PC Builder game with ChatGPT do You want to play it?’ … and after I checked it I was really shocked … positively. I mean … when I was 10 years old I did not even had my AMIGA 600 … I was playing various games on Pegasus – which is a cheap Polish NES clone … I would get AMIGA 600 when I was more or less like 12 years old (speaking from foggy memories) … and I was still playing games like Sensible World od Soccer or Cannon Fodder instead of creating anything. This is how this (after many iterations with AI) PC Builder game looks like.

Yes – its in Polish – but I believe its just one prompt away from making it English/Polish when needed 🙂

My son also surprised me because one of the times I told him that ‘its not only ChatGPT out there – there are others like Perplexity or Claude or Gemini or … and several times he said ‘Dad I run out of tokens and just copied that I had and put that into other AI and it picked up my work and added the changes I wanted …’ – when I look at my son doing this stuff – being literally a Vibe Coder (still at the beginning of his route but still) … I feel like the schooling system is just one big fucking joke … I mean Mathematics/Physics/English/… are needed and useful … bot others? Optional to say the least … and I felt (and act accordingly) when I was in the school. Its just such a fucking waste of time to cram for some exam and forgot all that shit to get a grade.

What I find funny is that my son never played a game I wrote … and I already played two games of his … I wish every parent to have the same.

EOF