NixOS on ARM/OLIMEX Teres-A64

From NixOS Wiki
Revision as of 03:14, 6 July 2023 by imported>KREYREN (Tracking for optimalizations)

Teres-1 (often referred as teres-a64) is an open-source hardware and software netbook design based on the Allwinner A64 SoC.

OLIMEX Teres-A64
The King Himself
Manufacturer OLIMEX, Ltd
Architecture AArch64
Bootloader Upstream U-Boot[1]
Boot order SD, eMMC
Maintainer KREYREN

It can boot from SD or from the included and slow af eMMC module (insane people use only).

Status

Work In Progress..

The system is bootable and seems to work, but audio is broken and has rare graphical issues that are currently being investigated, note known issues below for building on Linux 6.0~6.1 resulting in broken display.

U-boot support has been submitted on 2023-06-30, but not yet merged.

Installation instructions

To use the generic installation image for your board, you will need to copy it verbatim to an SD card.

sudo dd if=sd-image-aarch64-linux.img of=/dev/DEVICE conv=sync status=progress

This board requires the installation of u-boot at a specific location on the storage where NixOS was written to.

sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/DEVICE bs=1024 seek=8

Partitioning

All Allwinner SoCs will try to find a boot image at sector 16 (8KB) of an SD card, connected to the first MMC controller.[3]

MBR partition scheme

GPT partition scheme

The Allwinner GPT Installation instruction explains how to create a GPT partition table while allowing the isntallation of u-boot at the required offset.

Serial console

Serial console can be accessed by default on BAUM 115200 using the TERES-USB-DEBUG cable (or make one it's 3 pole jack with pl2303 converter, can be made work off of single board computer, etc..) in headphone jack port and accessed through:

$ picocom -b BAUM /dev/SERIAL-DEVICE # Often set as /dev/ttyUSB0

Currently the sdcard has set this by fault, but if you use custom configuration and want to maintain the serial console functionality then you need to append it to the kernel CLI through:

boot.kernelParams = [
    "console=ttyS0,115200n8"
    "console=ttyAMA0,115200n8"
    "console=tty0"
  ];

Compatibility notes

Mainline kernel on NixOS
HDMI
  • Hasn't been tested.
Display
  • Works outside of Linux 6.0~6.1
WiFi/Bluetooth
  • Work, Requires non-libre firmware for RTL8723BS
Audio (reproductors)
  • Broken, investigating..
Audio (audio jack)
  • Unknown
3D Acceleration
  • Works
Webcam
  • Unknown
Touchpad
  • Works
Keyboard
  • Works
SdCard reader
  • Works
FOSS Bootloader
  • Works - U-Boot

Downstream kernel

Note: Keep in mind that using non-upstream forks of the kernel always incurs some risk as far as security goes.

USB booting with u-boot

You will need to either have mainline U-Boot installed to the eMMC or to an SD card.

Stop the boot process when prompted (by pressing a key). Then, do the following:

Hit any key to stop autoboot:  0
=> setenv boot_targets usb0
=> boot

This sets the boot order for this boot only. U-Boot can boot (among others) either of the NixOS sd-image or EFI iso from USB.

Known issues

Broken rendering on Linux <6.0.X;6.1.X>

Building the bootloader and the configuration on linux 6.0~6.1 will result in broken display rendering due to "DRM_IOCTL_MODE_CREATE_DUMB failed: Cannot allocate memory' caused by insufficient Quality Assurance at mesa upstream tracked on https://gitlab.freedesktop.org/mesa/mesa/-/issues/8198.

The fix has been merged in https://gitlab.freedesktop.org/mesa/mesa/-/commit/c426e5677f36c3b0b8e8ea199ed4f2c7fad06d47 and is part of Linux 6.2 so as long as you build ""and use"" this kernel the display should work without an issue.

Note that if you boot and build on broken kernel then you can use serial console on BAUM 115200 to fix the issue.

As of 03/07/2023-EU NixOS 23.05 is shipped with LTS kernel which is 6.1 to get non-broken kernel you can use the following configuration:

# configuration.nix
boot.kernelPackages = pkgs.linuxPackages_6_3;

Please let me know if you encounter this issue outside of known broken linux release. -- KREYREN

Unable to detect cache hierarchy

 [  +0,002092] cacheinfo: Unable to detect cache hierarchy for CPU 0

Is currently being investigated..

KASLR disabled due to lack of seed

 [  +0,028609] KASLR disabled due to lack of seed

Cause unknown

Static allocation of GPIO base is deprecated, use dynamic allocation.

 [  +0,006568] gpio gpiochip0: Static allocation of GPIO base is deprecated, use dynamic allocation.
 [  +0,004633] gpio gpiochip1: Static allocation of GPIO base is deprecated, use dynamic allocation.


TBD

Failed to find 'trips' node

 [  +0,015136] thermal_sys: Failed to find 'trips' node
 [  +0,000050] thermal_sys: Failed to find trip points for thermal-sensor id=1

TBD

thermal-sensor failed err -22

 [  +0,000025] sun8i-thermal: probe of 1c25000.thermal-sensor failed with error -22

TBD

Dummy regulators

 [  +0,004699] sun50i-a64-r-pinctrl 1f02c00.pinctrl: supply vcc-pl not found, using dummy regulator
 [  +0,002064] sun50i-a64-pinctrl 1c20800.pinctrl: supply vcc-pb not found, using dummy regulator


TBD

plymouth quit failed

 [  +0,082794] systemd[1]: plymouth-quit.service: Service has no ExecStart=, ExecStop=, or SuccessAction=. Refusing.

TBD

lima complaints

 [  +0,045280] lima 1c40000.gpu: gp - mali400 version major 1 minor 1
 [  +0,000097] lima 1c40000.gpu: pp0 - mali400 version major 1 minor 1
 [  +0,000082] lima 1c40000.gpu: pp1 - mali400 version major 1 minor 1
 [  +0,000045] lima 1c40000.gpu: l2 cache 64K, 4-way, 64byte cache line, 64bit external bus
 [  +0,017881] lima 1c40000.gpu: bus rate = 200000000
 [  +0,000044] lima 1c40000.gpu: mod rate = 297000000
 [  +0,000189] lima 1c40000.gpu: error -ENODEV: _opp_set_regulators: no regulator (mali) found

TBD

DMA Mask Not Set

 [  +0,026846] axp20x-battery-power-supply axp20x-battery-power-supply: DMA mask not set
 [  +0,002934] axp20x-gpio axp20x-gpio: DMA mask not set
 [  +0,020608] axp20x-gpio axp20x-gpio: AXP209 pinctrl and GPIO driver loaded
 [  +0,024144] [drm] Initialized lima 1.1.0 20191231 for 1c40000.gpu on minor 0
 [  +0,010950] input: axp20x-pek as /devices/platform/soc/1f03400.rsb/sunxi-rsb-3a3/axp221-pek/input/input3
 [  +0,028111] axp20x-adc axp813-adc: DMA mask not set
 [  +0,018871] axp20x-ac-power-supply axp20x-ac-power-supply: DMA mask not set
 [  +0,005514] [drm] Found ANX6345 (ver. 170) eDP Transmitter
 [  +0,029170] onboard-usb-hub 1-1: reset high-speed USB device number 2 using ehci-platform

TBD

r8723bs quality unknown

 [  +0,101511] r8723bs: module is from the staging directory, the quality is unknown, you have been warned.

TBD

Wifi thing

 [ +16,686444] warning: `.dleyna-rendere' uses wireless extensions which will stop working for Wi-Fi 7 hardware; use nl80211

TBD

Resources

1. Official product page

2. linux-sunxi wiki page

3. U-Boot documentation for the SoC

4. Armbian product page for Teres

5. Teres-A64 section on the OLIMEX forum