From ArchWiki

This page describes the steps necessary to get most of the features of the ASUS KCMA-D8 working correctly. It assumes you have already successfully installed Arch Linux, and preferrably use the GRUB bootloader.

BIOS

The manufacturers BIOS suffers from many issues and is outdated. For example, it has no NVMe boot support and fails to resume from suspend. To remedy this, a precompiled open source bios known as libreboot can be installed, replacing the stock bios.

The easiest way to install libreboot for the first time is with a raspberry pi, connecting the bios chip to the GPIO as seen here. Install flashrom on the pi with apt install flashrom, and then download, verify, and extract the latest bios images from the libreboot downloads page (must be testing release 20231021 or later). Make sure to pick the bios image with the correct RAM type, ROM size, payloads, and keyboard type, and then follow the how to use flashrom instructions to flash the bios, replacing ./flashrom with flashrom since we are using our installed version of flashrom. Make sure to clear the CMOS before reinstalling the BIOS flash chip.

The stock BIOS chip is 2MiB, and can be upgraded to a 16MiB one such as the 25Q128FVIQ, or the W25Q128FVSG with a SOP8 to DIP8 adapter PCB. This will allow more space for payloads in the future.

Previous releases of coreboot have been tested as working, however the version of seabios packaged with them does not support NVMe booting. Of course, the boot partition can be placed on a sata drive with everything else on the NVMe, but this is inconvenient. The most recent testing release to support the KCMA-D8 behind 20231021, is 20211122, and the most recent stable release is 20160907. The next stable release supporting the KCMA-D8 is anticipated greatly, as libreboot has undergone massive changes for the better and is the only coreboot distribution for the KCMA-D8 using the latest coreboot 4.11_branch, which is the most up to date coreboot release supporting the KCMA-D8.

Sensors

After running sensors detect, it loads the incorrect kernel driver w83627ehf. This can be remediated by replacing w83627ehf with w83795 in lm_sensors configuration file:

/etc/conf.d/lm_sensors
HWMON_MODULES="w83795"

The enumerated hwmon symlinks located in /sys/class/hwmon/ may vary in order after a power cycle, because the kernel modules do not load in a consistent order every boot. Something as simple as plugging in a ps4 controller could cause the order to change. Creating/editing /etc/modules-load.d/modules.conf in such a manner should create a defined order for the modules to load in, which should make the hwmon paths stay where they are and not change order upon reboot:

/etc/modules-load.d/modules.conf
# Load w83795 at boot
w83795

This method may not always work consistently, and a more reliable method should be documented and implemented.

Fan control

Fan control in this motherboard is quite unusual. There is 8 PWM fan control channels, however only 2 channels are used for controlling the fan speed of all 8 fan headers. One must use a combination of 4 pin fans (recommended for CPU), and 3 pin fans (recommended for case). One speed can be set for all of the 4 pin fans, and another speed can be set for all of the 3 pin fans. After running pwmconfig, fancontrol.service refuses to start. This is because fancontrol cannot associate more than 2 fans with PWM speed. Manually configure /etc/fancontrol so that FCFANS only has two inputs per device, and restart fancontrol.service. Here is an example configuration:

/etc/fancontrol
INTERVAL=10
DEVPATH=hwmon6=devices/pci0000:00/0000:00:14.0/i2c-8/8-002f
DEVNAME=hwmon6=w83795g
FCTEMPS=hwmon6/device/pwm2=hwmon6/device/temp1_input hwmon6/device/pwm1=hwmon6/device/temp8_input
FCFANS=hwmon6/device/pwm2=hwmon6/device/fan8_input+hwmon6/device/fan6_input hwmon6/device/pwm1=hwmon6/device/fan2_input+hwmon6/device/fan1_input
MINTEMP=hwmon6/device/pwm2=60 hwmon6/device/pwm1=40
MAXTEMP=hwmon6/device/pwm2=80 hwmon6/device/pwm1=65
MINSTART=hwmon6/device/pwm2=60 hwmon6/device/pwm1=60
MINSTOP=hwmon6/device/pwm2=0 hwmon6/device/pwm1=0


IPMI Module

This motherboard supports an ASMB4 IPMI Module. The manufacturers ROM for the IPMI module has slight incompatibilities with coreboot as is, preventing restarts from working correctly. There exists an open source replacement for the IPMI module ROM called OpenBMC, however compilation is extremely difficult as the codebase has not been updated in a long time and it requires an antiquated version of debian to compile. The developers of dasharo seem to have interest in supporting the KCMA-D8, because they already maintain and update their implementation of coreboot and OpenBMC for the very similar KGPE-D16, they just need a little bit more of a push from the community. If Dasharo decides to support the KCMA-D8, this would be massive, because the IPMI module has the ability to control fan speeds properly regardless of the state of the operating system, which could save the hardware from overheating in the unlikely event of a freeze, making the KCMA-D8 an even more legendary FOSS motherboard. However, they have declined to reply to any emails regarding this topic so it seems unlikely.

Leah Rowe, founder of libreboot, is displaying curiosity in porting dasharo to the KCMA-D8. This would let an even more modern version of coreboot run on the KCMA-D8, which would also presumably support the OpenBMC from dasharo too. Please show Leah your supportĀ :)