UP  |  HOME
RSS | RSS Complete

neo (SimpleWAN SW302DA-NFR / PC Engines apu2c2)

Summary

A small machine with 3 NICs like the Alix devices, but a modernish 64-bit CPU.

Notes

  • cool tool-less Mini PCIe slots (some newer revs are screw mount though)
  • LR44 clock battery (1.5V)
  • 4GB versions seem to come with 9 chips and can do ECC with newer BIOS. My SimpleWAN version was 2GB, not sure if any of their units have 4GB.

Hardware

Make PC Engines
Year 2015
Model apu.2c
Chassis case1d2u orange
Power Supply 12V 2A 5.5x2.5mm
Processor AMD Embedded G series GX-412TC
Memory 2GB DDR3-1333
Ports 3x RJ-45 LAN
  DB-9 Serial
  2x USB A 3.0
Graphics -
Storage 128GB Micron M550 mSATA SSD
Display -
Int. Peripherals 3x Intel i211AT Gigabit NIC
  WLE600VX Atheros QCA9882 802.11ac Wi-Fi
Ext. Peripherals  
Dimensions  
Length/Depth 16.5 cm
Width 16.8 cm
Height/Thickness 3.1 cm
Weight 0.46 kg (16.2 oz)

Software

Operating System Debian 13
Unique applications  

Log

[2025-10-16 Thu] Finally an APU2, Debian install, and BIOS update

I finally found an APU2 at a decent price (after I ordered, the seller list another one for over double). It is the SimpleWAN SW302DA-NFR so it has their orange case, and logo. The board seems standard though.

Storage was one of the 4GB pSLC SD cards. It looks like a FreeBSD system. I only imaged it and ran fdisk to check it out though. Compressed it was only 58MB, a pretty compact system.

This is a coreboot based system. It has a memtest86+ built in, but lacks any way to update firmware. That needs the flashrom utility on a running system. From what I can see there are newer firmwares available from Dasharo project. It looks like the BIOS version remains free, but they also host a UEFI firmware behind a paid membership (might be possible to build it from source).

I stuck a 128GB mSATA drive, and threw Debian net installer on the SD card. It requires disabling the VGA output, and redirecting console to tty for the install. (per Installing Debian on the PC Engines apu2)

Edit the boot parameters like:

/install.amd/vmlinuz vga=off initrd=/install.amd/gtk/initrd.gz --- quiet console=ttyS0,115200n8

It takes a bit before there is any output.

I thought I would need to modify grub and linux serial console settings before rebooting, but it looks like Debian does a decent job of setting that correctly. Still, I made some changes so I'm not 100% sure if the stock serial config works.

dmidecode reports the bios version as 4.0.7. I got the 4.19.0.1 image from Dasharo (coreboot+SeaBIOS) v4.19.0.1.

I ran flashrom according to apu2 firmware flashing instructions. It failed saying "Multiple flash chip definitions match the detected chips. I think this document is outdated, so I switched to Firmware Flashing. This shows setting the chip type, but with a different chip than is on my board (mine is Winbond 25Q64JVS) so I stuck with one of the detected options. It also mentions the motherboard mismatch, and necessary override that I ran into next.

Here's what I ended up running:

sudo flashrom -w apu2_v4.19.0.1.rom -p internal:boardmismatch=force -c "W25Q64BV/W25Q64CV/W25Q64FV"

I shutdown, removed power, and started it again. The machine booted, and the new BIOS version is reflected in dmidecode output.

The new BIOS adds a bunch of options to the setup menu, but it is still pretty small compared to a typical BIOS.

I configured the BIOS like:

b SDCARD
c mSATA
a USB
d SATA
e mPCIe1 SATA1 and SATA2
f iPXE (disabled)

r Restore boot order defaults
n Network/PXE boot - Currently Disabled
u USB boot - Currently Enabled
t Serial console - Currently Enabled
k Redirect console output to COM2 - Currently Disabled
o UART C - Currently Enabled - Toggle UART C / GPIO
p UART D - Currently Enabled - Toggle UART D / GPIO
m Force mPCIe2 slot CLK (GPP3 PCIe) - Currently Disabled
h EHCI0 controller - Currently Disabled
l Core Performance Boost - Currently Enabled
i Watchdog - Currently Disabled
j SD 3.0 mode - Currently Enabled
g Reverse order of PCI addresses - Currently Enabled
v IOMMU - Currently Disabled
y PCIe power management features - Currently Disabled
w Enable BIOS write protect - Currently Disabled

The "Reverse order of PCI addresses" doesn't just put the Mini PCI-E slots after the NICs, it also reverses the NICs, so from the back they are now 3 2 1 (WAN LAN OPT).

Otherwise, I set the boot order, and enabled the SD 3.0 even though I currently don't use it.

I tried enabling IOMMU, but it causes a long delay for the kernel boot right after initramfs is freed. Went from 29 seconds down to 9.

[2025-11-07 Fri] Atheros QCA9882 and hostapd

Previously I played with hostapd and and an Intel WiFi adapter on yamato.

Now I got my hands on a Compex? WLE600VX (Atheros QCA9882), except mine is unbranded.

I installed it in mPCIe 1, and hooked up some SMA pigtails and a couple antennas. Initial checks connecting to my home WiFI were a bit boring. I was getting about 110 Mbps when the antennas were positioned correctly, which is better than typical for this location, but not enough to stress this card.

I decided to do a hostapd setup again. I followed the same tutorial. This time I didn't bother with hidden SSID, and I just bridged the WiFi and ethernet to act as an AP.

Initially I got quite low speeds, only about 20 Mbps. I started following the kernel docs for ath10k hostapd configuration. Things improved quite a bit (lots of restarting and testing after each step to see the effects), but then I got to enabling MU-MIMO, and I could never get the full set of vht_capab options to work.

Still, I had my laptop, with Intel AX210, achieving 480 Mbps. My phones were getting 220 Mbps. Theoretically with MU-MIMO I could achieve 867 Mbps, but I've never seen that even on my commercial WiFi devices.

Here's the config I ended up with:

Listing 1: /etc/hostapd/hostapd.conf
interface=wlp4s0
driver=nl80211
bridge=br0

ssid=neo
hw_mode=a
channel=0
auth_algs=1

country_code=US
ieee80211h=1
ieee80211d=1

ieee80211n=1
# ht_capab=[HT40+]
ht_capab=[HT40+][LDPC][SHORT-GI-20][SHORT-GI-40][TX-STBC][RX-STBC1][DSSS_CCK-40]

ieee80211ac=1
vht_oper_chwidth=1
vht_oper_centr_freq_seg0_idx=42

# I had to move short-gi-80 to the end to make this work
vht_capab=[MAX-MPDU-11454][RXLDPC][TX-STBC-2BY1][RX-STBC-1][MAX-A-MPDU-LEN-EXP7][RX-ANTENNA-PATTERN][TX-ANTENNA-PATTERN][SHORT-GI-80]

# this has the extra arguments that don't work
# taken from https://wireless.docs.kernel.org/en/latest/en/users/drivers/ath10k/configuration.html#mu-mimo-configuration
# vht_capab=[MAX-MPDU-11454][RXLDPC][SHORT-GI-80][TX-STBC-2BY1][RX-STBC-1][MAX-A-MPDU-LEN-EXP7][RX-ANTENNA-PATTERN][TX-ANTENNA-PATTERN][SU-BEAMFORMER][SU-BEAMFORMEE][MU-BEAMFORMER][MU-BEAMFORMEE][BF-ANTENNA-4][SOUNDING_DIMENSION-4]

wpa=2
wpa_passphrase=a_wpa_password
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
rsn_pairwise=CCMP
macaddr_acl=0