Jump to content

Samsung Exynos 990

From postmarketOS Wiki
Samsung Exynos 990
file:Samsung-Exynos-990.png
Manufacturer Samsung
Name Exynos 990
Architecture aarch64
CPU 4x Cortex-A55
2x Cortex-A76
2x Mongoose 5
GPU Mali-G77
Year 2020
Process 7nm
Mainline yes
Components
CPU
SMP (bring up secondary CPU cores), CPU frequency scaling, CPUidle
Partial
UART
Works
Storage
eMMC, SD cards, UFS, ...
Partial
USB
Partial
Display
Partial
GPU
Partial
Pinctrl
Works
I²C
Works
Audio
Broken
Video
Hardware-accelerated video de/encoding
Broken
Thermal
Broken
WiFi
Broken
Bluetooth
Broken
Modem
Calls, SMS, Internet
Broken
Camera
Broken
Suspend
Broken

Devices

Device Codename Category
Samsung Galaxy Note 20 samsung-c1s testing
Samsung Galaxy S20 5G samsung-x1s testing
Samsung Galaxy S20 Ultra 5G samsung-z3s testing

Mainline

Initial supported added in v6.13.

Bootloaders

For mainline kernels, the stock Samsung bootloader messes up too much. It expects a lot of nodes for device tree overlays, and that is not welcomed by the mainline community. As such, some alternatives were made.

lk3rd

Note lk3rd v2.2 or earlier do not support gzip-compressed kernel images (as well as having multiple annoyances such as not adding ramdisk bootargs to the device tree. Compiling it from source is currently recommended.

Currently the best option for testing and booting mainline on this SoC, if you are familiar with lk2nd, you will feel right at home. It provides a fastboot interface as well as clean booting slate for kernels.

Installation

Download the latest boot image from the lk3rd GitHub page, and flash it using Heimdall or any similar tool. For example:

heimdall flash --BOOT <path-to-lk3rd-image>

After the device reboots, you should be greeted with a Pixel-style fastboot interface. Before you flash your shiny boot image, you need to enable the mainline-quirks feature (well, should really be called downstream-quirks, but oh well.) This is as easy as one fastboot oem command.

fastboot oem enable-mainline-quirks
Usage

lk3rd will accept header version 2 boot images with the mainline kernel. As an example:

mkbootimg --kernel .out/arch/arm64/boot/Image.gz --dtb .out/arch/arm64/boot/dts/exynos/exynos990-z3s.dtb --ramdisk /tmp/postmarketOS-export/initramfs --header 2 --out boot.img

More detailed usage/booting instructions will appear once the device packages begin getting merged to pmaports.

uniLoader

Warning WARNING: As useful as uniLoader was, lk3rd is a better alternative for this SoC. lk3rd has many more quality of life features that uniLoader misses. Obviously, as lk3rd is a "Exynos990-exclusive" bootloader, uniLoader has its place in other SoCs :)

A shim bootloader made by ivoszbg. It was used before lk3rd became a thing, and while testing lk3rd (that's where it got its name from).

Who's working on it

Current gripes

  • USI (i2c, spi, uart) - working close-to-mainline, upstreaming the patches soon.
  • Storage (UFS) - Upstream soon but has trouble with r/w on z3s. For whatever reason works on r8s and c1s normally. Can't until that is fixed.
  • USB 2.0 works. USB3 can be initialized (not public) but freezes. Cannot even send a device descriptor
  • CPU has no frequency scaling and no CPUIdle (uses weird samsung rae layer - need to research)
  • GPU can initialize however it does not have an userspace driver in Mesa. We need a panel though to try to do anything with it.
  • Display... We currently use SimpleFB. Old patches to enable the DECON block in the SoC (for Auto series) exist by SEC engineers, but seem to be abandoned.

More information

"Bleeding-edge" changes can be found under our GitHub org. exynos990-mainline GitHub org