Samsung Exynos 990
![]() | |
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 |
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
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: 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
- halal-beef Support for x1s series boards
- Denzeel Oliva r8s support, USI, UFS.
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