Quick OOTB support of Topton GM1 on *BSD

       1822 words, 9 minutes

I bought a Topton GM1 Industrial Mini PC for my HomeLab. It is aimed at running Slackware Linux but I wanted to have a quick look at how well BSD OSes support it out-of-the-box.

Introduction

I’m usually not a big fan of unboxing but I was surprised this AliExpress purchase came in such a pretty packaging.

Hardware specifications

I didn’t have a 2.5" SATA disk for the testings. Only NVMe drives were installed.
Note that the slot tagged NVMe/SATA will host the first recognized disk on systems. The 2.5" SATA connectors are on the left hand side of the motherboard. The disk is attached on the metal cover and lies above the motherboard.

About the testings

Don’t expect a detailed review as complete as those done by joshua stein . My testings were limited to installing the OS, checking if Xorg was usable and how graphical applications run. Then I checked if the network interfaces were supported and launched a bench tool on them. Finally, I had a look at the temperature and power consumption of the machine during the testings.

The machine is not a laptop. It has no battery (except the CMOS one). The machine is plugged to AC using a Shelly Plug S .

A single RJ45 cable is connected to the first NIC. During the testings, I’ve also switched to the other one. The LAN is connected to an FTTH Livebox that announces a 500Mbps bandwidth.
The WiFi antennas are connected. The Wireless interface attaches to a tp-link AP and a POE Gigabit switch.

A 4K monitor is connected to the first HDMI port. This is the one on the further left side of the case.

A USB cable is connected to the 4K monitor USB HUB. I gain access to my USB keyboard, USB mouse and another Realtek NIC that I didn’t use here.

After the machine is started, hit <F2> to enter the BIOS or <F7> to select a temporary boot device. By default, Secure Boot is enabled in the BIOS. Don’t forget to disable it in order to be able to boot a non Windows system.

The testing “protocol” goes like this:

Testing the OSes

There is no meaning in the OS order. The OpenBSD image was already on my Ventoy USB key. The FreeBSD installer would not start from Ventoy so I had to write the image on another USB key. The NetBSD image was not on my Ventoy USB key so I has to download it later on.

OpenBSD 7.5

The installation went smooth. Everything installed straight away.

Starting XFCE via xenodm feels as usual - reference is OpenBSD 7.5 on a ThinkPad X1 Carbon Gen10. So does Firefox and glxgears.

# vblank_mode=0 glxgears
# MOZ_ACCELERATED=1 MOZ_WEBRENDER=1 firefox

I got about 7500 FPS from glxgears and about 30 FPS with 500 fishes in WebGL Aquarium. I also played fullscreen Big Buck Bunny from YouTube on Firefox ; 1080p60 and 1440p60 were ok ; I got framedrops with 2160p60.

The sound did work when I plugged my headphones.

Regarding network bandwidth, I got about 330 Mbps from fast.com using the LAN interface and about 190 Mbps using the WiFi. Not sure why but speedtest-cli announced 690 Mbps. Downloading an MOV video file from my Synology DS918p (Intel Celeron J3455) didn’t get further than 380 Mbps.

Both LAN interfaces worked at the same speed.

The machine went to sleep using zzz. When resuming, you have to have the HDMI cable connected to the left socket - if you connect it to the right one, the signal is not restored. Also the LAN interfaces lost their connectivity on resume ; the Wireless didn’t and worked properly on resume.

I’ve never seen the temperature getting above 55°C during my testings.

The power consumption was about 10W at IDLE. It was a bit less than 50W during the Firefox video testings.

Here’s a bit more detail about devices: dmesg , pcidump , sysctl , usbdevs

FreeBSD 14.0

The installation went smooth. You get the usual FreeBSD experience.

I could not run Xorg. When doing kldload i915kms, the system would freeze. Using 14.1 was slightly “better” as the OS would simply hard-reboot itself. If interested, the console message was:

Jun  4 01:05:34 test kernel: drmn0: <drmn> on vgapci0
Jun  4 01:05:34 test kernel: vgapci0: child drmn0 requested pci_enable_io
Jun  4 01:05:34 test syslogd: last message repeated 1 times
Jun  4 01:05:34 test kernel: drmn0: [drm] Incompatible option enable_guc=-1 - undocumented flag
Jun  4 01:05:34 test kernel: [drm] Unable to create a private tmpfs mount, hugepage support will be disabled(-19).
Jun  4 01:05:34 test kernel: [drm] Got stolen memory base 0x4c800000, size 0x3c00000
Jun  4 01:05:34 test kernel: lkpi_iic0: <LinuxKPI I2C> on drmn0
Jun  4 01:05:34 test kernel: iicbus0: <Philips I2C bus> on lkpi_iic0
Jun  4 01:05:34 test kernel: iic0: <I2C generic I/O> on iicbus0
Jun  4 01:05:34 test kernel: lkpi_iic1: <LinuxKPI I2C> on drmn0
Jun  4 01:05:34 test kernel: iicbus1: <Philips I2C bus> on lkpi_iic1
Jun  4 01:05:34 test kernel: iic1: <I2C generic I/O> on iicbus1
Jun  4 01:05:34 test kernel: lkpi_iic2: <LinuxKPI I2C> on drmn0
Jun  4 01:05:34 test kernel: iicbus2: <Philips I2C bus> on lkpi_iic2
Jun  4 01:05:34 test kernel: iic2: <I2C generic I/O> on iicbus2
Jun  4 01:05:34 test kernel: lkpi_iic3: <LinuxKPI I2C> on drmn0
Jun  4 01:05:34 test kernel: iicbus3: <Philips I2C bus> on lkpi_iic3
Jun  4 01:05:34 test kernel: iic3: <I2C generic I/O> on iicbus3
Jun  4 01:05:34 test kernel: lkpi_iic4: <LinuxKPI I2C> on drmn0
Jun  4 01:05:34 test kernel: iicbus4: <Philips I2C bus> on lkpi_iic4
Jun  4 01:05:34 test kernel: iic4: <I2C generic I/O> on iicbus4
Jun  4 01:05:34 test kernel: lkpi_iic5: <LinuxKPI I2C> on drmn0
Jun  4 01:05:34 test kernel: iicbus5: <Philips I2C bus> on lkpi_iic5
Jun  4 01:05:34 test kernel: iic5: <I2C generic I/O> on iicbus5
Jun  4 01:05:34 test kernel: lkpi_iic6: <LinuxKPI I2C> on drmn0
Jun  4 01:05:34 test kernel: iicbus6: <Philips I2C bus> on lkpi_iic6
Jun  4 01:05:34 test kernel: iic6: <I2C generic I/O> on iicbus6
Jun  4 01:05:34 test kernel: lkpi_iic7: <LinuxKPI I2C> on drmn0
Jun  4 01:05:34 test kernel: iicbus7: <Philips I2C bus> on lkpi_iic7
Jun  4 01:05:34 test kernel: iic7: <I2C generic I/O> on iicbus7
Jun  4 01:05:34 test kernel: lkpi_iic8: <LinuxKPI I2C> on drmn0
Jun  4 01:05:34 test kernel: iicbus8: <Philips I2C bus> on lkpi_iic8
Jun  4 01:05:34 test kernel: iic8: <I2C generic I/O> on iicbus8
Jun  4 01:05:34 test kernel: drmn0: successfully loaded firmware image 'i915/adlp_dmc_ver2_10.bin'
Jun  4 01:05:34 test kernel: drmn0: [drm] Finished loading DMC firmware i915/adlp_dmc_ver2_10.bin (v2.10)

No Xorg, Firefox, GLX, DRM tests could be performed.

Regarding network bandwidth, both LAN interfaces performed the same. speedtest-go announced about 930.79Mbps download and 488.76Mbps upload. This is weird as Orange announces only 500Mbps for my FTTH ; but I’m eligible for a 2Gbps deal… Using the Wireless interface, speedtest-go announced about 22Mbps download and 4Mbps upload. It is expected as 802.11g is the best mode one can get out of this driver for the moment.

The machine went to sleep using zzz. On resume, I got my SSH connection back but the HDMI console output never went back. I could issue a blind reboot with the USB keyboard. The SSH connection then died but the machine did not power off ; I had to use the power switch.

I couldn’t get temperature by default. Only when I learned I needed kldload coretemp could I have a look at those. At the end of all my testings, it was about 40°C.

The power consumption was about 13W when IDLE and a bit less than 40W when doing the various network testings. There may be additionnal kernel modules to load to improve power consumption but I didn’t look at those.

Here’s a bit more detail about devices: dmesg , pciconf , sysctl , usbconfig

NetBSD 10.0

During installation, the internal NIC didn’t get an IPv4 address via DHCP the first time. After a retry, it did and the whole installation went ok.

Xorg started blazing fast ; like I got the XFCE desktop ready in less than 2 seconds. But… the resolution was limited to 1024x768. According to the logs, there is no accelerated driver for this Intel Iris Xe device.

genfb0 at pci0 dev 2 function 0: Intel Alder Lake Graphics (rev. 0x0c)
genfb0: framebuffer at 0x4000000000, size 1024x768, depth 32, stride 4096
genfb0: shadow framebuffer enabled, size 3072 KB
wsdisplay0 at genfb0 kbdmux 1: console (default, vt100 emulation)
wsmux1: connecting to wsdisplay0
drm at genfb0 not configured

Using

# Xorg -configure
# mv ~/xorg.conf.new /etc/X11/xorg.conf

did not work better. That said, glxgears displayed about 1700 FPS. When using WebGL Aquarium on Firefox, 22 FPS were displayed for 500 fishes.

Both LAN interfaces worked the same. fast.com announced 870 Mbps. Using speedtest-go, the results were about 900Mbps download and 470Mbps upload. The wireless card is not recognized at all.

Suspend worked using sysctl -w hw.acpi.sleep.state=3.
Resuming had the machine hard reboot on its own.

Temperature was around 45°C during testings.

The power consumption was about 18W when IDLE and maxed around 40W.

Here’s a bit more detail about devices: dmesg , lspci , sysctl , usbdevs

Summary

Disclaimer: this is not a “which BSD is the best”…

OpenBSDFreeBSDNetBSD
Xorg (Intel Iris Xe)☀️ Accelerated🌧️ Reboots⛅ Unaccelerated
Audio (Intel 600 Series HD Audio)☀️ Need headphones☁️ untested☁️ untested
Ethernet (Intel I226-V)☀️ Both work☀️ Both work☀️ Both work
Wireless (Intel Wi-Fi 6 AX211)☀️ Up to 802.11n⛅ Up to 802.11g🌧️ Unsupported
I would use this machine as a…Server or WorkstationServerServer

Power consumption and temperature are roughly the same. Due to the differences in Xorg/DRM support, a comparison is probably not relevant. It seems though that OpenBSD and FreeBSD use a bit less power when IDLE than NetBSD.