ARM Delivers 64-bit ARMv8 Linux Kernel Support (AArch64)

Written by Michael Larabel in Linux Kernel on 6 July 2012 at 06:41 PM EDT. 14 Comments
LINUX KERNEL
ARM has today posted their set of patches that implements core Linux kernel support for AArch64, the ARM 64-bit architecture.

Catalin Marinas of ARM posted to the Linux kernel mailing list a set of 36 patches that provides this initial 64-bit ARMv8 architecture support. "ARM introduced AArch64 as part of the ARMv8 architecture and consists of a substantially revised exception model (with 4 exception levels: EL0 - user, EL1 - kernel, EL2 - hypervisor, EL3 - secure monitor), new A64 instruction set based on larger register file, new FP/SIMD instructions. The new ABI is LP64 and takes advantage of the larger register file and mandates FP."

ARM previously published the AArch64 documentation concerning the instruction set and ABI but now it's met by nearly 23,000 lines of new arch/ code for the Linux kernel.

For some additional information from the mailing list announcement:
There is no hardware platform available at this point. From a kernel perspective, the aim is to minimise (or even completely remove) the platform code from the architecture specific directory. FDT is currently mandated and there are ongoing discussions for ACPI support.

In terms of MMU, it currently supports 39-bit address space for user and kernel (each) with 3-level page table and 4KB pages or 2-level page table and 64KB pages (see Documentation/aarch64/memory.txt). The virtual address space can be extended to 48-bit.

Compat (32-bit) user applications (ARM EABI only) are supported with the 4KB page configuration. There is no interworking between AArch32 and AArch64 code (the architecture requires an exception entry/exit to change the mode).

Linux Test Project (LTP) and LAMP stack have been used to test and validate this code against ARM simulation model throughout the development. Compilation requires a new aarch64-none-linux-gnu-toolchain (http://gcc.gnu.org/ml/gcc-patches/2012-05/msg01694.html).
For some additional information about 32-bit ARMv7 compatibility on ARMv8 hardware with the Linux AArch64 kernel, one of the patches mentions:
This patch adds support for 32-bit applications. The vectors page is a binary blob mapped into the application user space at 0xffff0000 (the AArch64 toolchain does not support compilation of AArch32 code). Full compatibility with ARMv7 user space is supported. The use of deprecated ARMv7 functionality (SWP, CP15 barriers) has been disabled by default on AArch64 kernels and unaligned LDM/STM is not supported.
Those wishing to examine the ARMv8 64-bit AArch64 Linux kernel support can find the patches on the kernel mailing list. Assuming the patches are in good shape, the support could be merged for the Linux 3.6 kernel when that merge window is open.
Related News
About The Author
Michael Larabel

Michael Larabel is the principal author of Phoronix.com and founded the site in 2004 with a focus on enriching the Linux hardware experience. Michael has written more than 20,000 articles covering the state of Linux hardware support, Linux performance, graphics drivers, and other topics. Michael is also the lead developer of the Phoronix Test Suite, Phoromatic, and OpenBenchmarking.org automated benchmarking software. He can be followed via Twitter, LinkedIn, or contacted via MichaelLarabel.com.

Popular News This Week