Jump to content

Samsung Exynos 7

From postmarketOS Wiki
(Redirected from Samsung Exynos 7870)
Matrix logo Exynos (ARM64) Mainlining Community on Matrix.

Samsung Exynos 7 is a family of mobile SoCs. The first SoC in this family was announced by Samsung in 2015. These SoCs power innumerable Samsung devices across all price points. There have been efforts to get the SoCs and its devices working in the upstream kernel.

SoCs

Samsung Exynos 7870

Samsung Exynos 7870
File:Exynos7870.jpg
Manufacturer Samsung
Name Exynos 7870
Codenames joshua
Architecture aarch64
CPU 8x ARM Cortex-A53 (1.6 GHz)
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
Works
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
Partial
GPS
Broken
Camera
Broken
Suspend
Broken
Note The kernel was initially distributed as a close-to-mainline kernel fork. There may be some devices which are still relying on it.

Devices

Device Codename Category
Samsung Galaxy A2 Core samsung-a2corelte testing
Samsung Galaxy A3 (2017) samsung-a3y17lte downstream
Samsung Galaxy A6 samsung-a6lte testing
Samsung Galaxy J5 (2017) samsung-j5y17lte testing
Samsung Galaxy J6 (2018) samsung-j6lte testing
Samsung Galaxy J7 (2016) samsung-j7xelte testing
Samsung Galaxy J7 Prime samsung-on7xelte testing
Samsung Galaxy J7 Pro samsung-j7y17lte archived
Samsung Galaxy Tab A 10.1 (2016) samsung-gtaxlwifi downstream

Contributors

Close-to-Mainline Linux

Note This section serves as documentation on getting started with developing on the close-to-mainline kernels.

Samsung Exynos 7870

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 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.

Modem (Shannon 315)

The driver is configured only in DT of the a6lte device, but it does not work; the driver needs to be rewritten.

Serial UART

In some Samsung devices, UART is exposed in the micro-USB connector of the device, a resistance is applied between the ID and GND pins, which makes it switch to UART mode. More information is provided at this article about serial debugging. Appropriate voltage levels to be used are defined in the MUIC page. Make sure to verify the voltages! There's a risk of frying part of the board if one happens to use the incorrect voltage.

Connect the host and the device using the USB-TTL adapter, and open up a modem terminal emulator (for instance, minicom), with a baud rate of 115200. Boot the phone by holding Power, and logs should start printing.

See also