Samsung Exynos 7870 Octa
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.
|
| |
| 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 |
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.