Jump to content

Samsung Exynos 7870 Octa

From postmarketOS Wiki
Matrix logo Exynos (ARM64) Mainlining Community on Matrix.
GitLab logo Exynos 7870 Mainlining Group in GitLab.

Samsung Exynos 7870 Octa is a mobile SoC announced by Samsung in 2016. It is manufactured using a 14nm process technology. The chip powers several low-end devices.

Samsung Exynos 7870
File:Exynos7870.jpg
Manufacturer Samsung
Name Exynos 7870
Codenames joshua
Architecture aarch64
CPU 8x ARM Cortex-A53 @ 1.6GHz
GPU ARM Mali-T830 MP1
Year 2016
Process 14nm
Mainline yes
Community Page
A link to a git{hub,lab} organisation/repo where development happens.
https://gitlab.com/exynos7870-mainline
Components
CPU
SMP (bring up secondary CPU cores), CPU frequency scaling, CPUidle
Works
UART
Works
Storage
eMMC, SD cards, UFS, ...
Works
USB
Works
Display
Partial
GPU
Works
Pinctrl
Works
I²C
Works
SPI
Serial Peripheral Interface
Broken
Audio
Broken
Video
Hardware-accelerated video de/encoding
Broken
Thermal
Broken
Modem
Calls, SMS, Internet
Broken
GPS
Broken
Camera
Broken
Suspend
Broken

Devices

Device Codename Category
Samsung Galaxy A2 Core samsung-a2corelte testing
Samsung Galaxy A6 (2018) samsung-a6lte testing
Samsung Galaxy J5 2017 samsung-j5y17lte testing
Samsung Galaxy J6 (2018) samsung-j6lte testing
Samsung Galaxy J7 Prime samsung-on7xelte testing

Contributors

Partial features

Display

DECON and DSI drivers have been developed, but they're not available in mainline yet. However, display is known work with simple-framebuffer with most devices.

Mainlining Linux

Compilation

Source code

Clone the git repository of the close-to-mainline fork:

$ git clone https://gitlab.com/exynos7870-mainline/linux.git
$ cd linux/

The default branch should be fine in most cases. It's usually the version which is present in upstream pmaports.

Setup a cross-compiler

This is not required if you're using a 64-bit ARM host.

For other architectures, a cross-compiler needs to be set up. Install aarch64-linux-gnu-gcc from the host's package manager (find out the corresponding package name), then run:

$ export CROSS_COMPILE=aarch64-linux-gnu-

Generate the kernel config and compile

The kernel config describes which parts of the kernel (features, drivers, etc.) are to be compiled. Generating it will require two config fragments:

  • exynos7870.config: This describes all drivers to be enabled, which are used by supported devices.
  • postmarketos.config: Or whatever your target distribution is. These config options are mandated by said distribution. In case of postmarketOS, it adheres to kconfigcheck.toml.
$ make ARCH=arm64 O=.output/ defconfig exynos7870.config postmarketos.config

Now, the kernel can be compiled:

$ make ARCH=arm64 O=.output/ -j$(nproc)

Packaging

Creating a Alpine linux package is quite simple with the envkernel utility provided in pmbootstrap. Execute the following from the root of the kernel directory:

$ pmbootstrap build --envkernel linux-postmarketos-exynos7870

Flashing

The simplest method to flash is to use sideloading. It requires the device to be connected to host via USB, and booted into postmarketOS.

$ pmbootstrap sideload linux-postmarketos-exynos7870

However, they may be certain cases where this isn't possible (for instance, a new installation, or an unbootable kernel). In such scenarios, flash it using Heimdall:

$ pmbootstrap flasher flash_kernel

Do note that this method doesn't update the modules, so there is a chance of kernel version mismatch, which renders a lot of components non-functional. USB should work though, so a sideload operation followed by a reboot should fix it.

See also