[PATCH 00/36] AArch64 Linux kernel port

From: Catalin Marinas
Date: Fri Jul 06 2012 - 17:16:41 EST


This set of patches implements the core Linux support for the AArch64
(64-bit ARM) architecture.


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.

AArch64 documentation currently available (publicly, though
click-through agreement required):

- Instruction Set Overview:
http://infocenter.arm.com/help/topic/com.arm.doc.genc010197a/index.html

- ABI (PCS, ELF, DWARF, C++):
http://infocenter.arm.com/help/topic/com.arm.doc.ihi0059a/index.html


The AArch64 Linux port follows the guidance for new architecture ports
using generic headers (including unistd.h) and as much generic code as
possible (some library functions may be later optimised, based on
benchmarking results).

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


These patches are also available on this branch:

git://git.kernel.org/pub/scm/linux/kernel/git/cmarinas/linux-aarch64.git upstream


Regards,

Catalin


Catalin Marinas (25):
atomic64_test: Simplify the #ifdef for atomic64_dec_if_positive()
test
fs: Build sys_stat64() and friends if __ARCH_WANT_COMPAT_STAT64
fdt: Add generic dt_memblock_reserve() function
AArch64: Assembly macros and definitions
AArch64: Kernel booting and initialisation
AArch64: Exception handling
AArch64: MMU definitions
AArch64: MMU initialisation
AArch64: MMU fault handling and page table management
AArch64: Process management
AArch64: CPU support
AArch64: Cache maintenance routines
AArch64: TLB maintenance functionality
AArch64: Atomic operations
AArch64: Device specific operations
AArch64: DMA mapping API
AArch64: SMP support
AArch64: ELF definitions
AArch64: System calls handling
AArch64: Signal handling support
AArch64: User access library functions
AArch64: Floating point and SIMD
AArch64: Miscellaneous header files
AArch64: Build infrastructure
AArch64: MAINTAINERS update

Marc Zyngier (3):
AArch64: IRQ handling
AArch64: Miscellaneous library functions
AArch64: Generic timers support

Will Deacon (8):
ipc: Add COMPAT_SHMLBA support
ipc: allow compat IPC version field parsing if
!ARCH_WANT_OLD_COMPAT_IPC
ipc: compat: use signed size_t types for msgsnd and msgrcv
AArch64: VDSO support
AArch64: 32-bit (compat) applications support
AArch64: Debugging support
AArch64: Performance counters support
AArch64: Loadable modules

Documentation/aarch64/booting.txt | 139 +++
Documentation/aarch64/memory.txt | 69 ++
MAINTAINERS | 6 +
arch/aarch64/Kconfig | 263 +++++
arch/aarch64/Kconfig.debug | 44 +
arch/aarch64/Makefile | 71 ++
arch/aarch64/boot/.gitignore | 2 +
arch/aarch64/boot/Makefile | 38 +
arch/aarch64/boot/install.sh | 52 +
arch/aarch64/include/asm/Kbuild | 50 +
arch/aarch64/include/asm/asm-offsets.h | 1 +
arch/aarch64/include/asm/assembler.h | 143 +++
arch/aarch64/include/asm/atomic.h | 307 +++++
arch/aarch64/include/asm/auxvec.h | 23 +
arch/aarch64/include/asm/barrier.h | 53 +
arch/aarch64/include/asm/bitops.h | 75 ++
arch/aarch64/include/asm/bitsperlong.h | 24 +
arch/aarch64/include/asm/byteorder.h | 22 +
arch/aarch64/include/asm/cache.h | 33 +
arch/aarch64/include/asm/cacheflush.h | 210 ++++
arch/aarch64/include/asm/cachetype.h | 49 +
arch/aarch64/include/asm/cmpxchg.h | 181 +++
arch/aarch64/include/asm/compat.h | 233 ++++
arch/aarch64/include/asm/compiler.h | 31 +
arch/aarch64/include/asm/cputype.h | 50 +
arch/aarch64/include/asm/debug-monitors.h | 89 ++
arch/aarch64/include/asm/device.h | 27 +
arch/aarch64/include/asm/dma-mapping.h | 134 +++
arch/aarch64/include/asm/elf.h | 177 +++
arch/aarch64/include/asm/exception.h | 24 +
arch/aarch64/include/asm/exec.h | 24 +
arch/aarch64/include/asm/fb.h | 35 +
arch/aarch64/include/asm/fcntl.h | 30 +
arch/aarch64/include/asm/fpsimd.h | 65 ++
arch/aarch64/include/asm/futex.h | 135 +++
arch/aarch64/include/asm/hardirq.h | 53 +
arch/aarch64/include/asm/hw_breakpoint.h | 138 +++
arch/aarch64/include/asm/hwcap.h | 58 +
arch/aarch64/include/asm/io.h | 260 +++++
arch/aarch64/include/asm/irq.h | 8 +
arch/aarch64/include/asm/irqflags.h | 92 ++
arch/aarch64/include/asm/memblock.h | 24 +
arch/aarch64/include/asm/memory.h | 145 +++
arch/aarch64/include/asm/mmu.h | 28 +
arch/aarch64/include/asm/mmu_context.h | 153 +++
arch/aarch64/include/asm/module.h | 24 +
arch/aarch64/include/asm/mutex.h | 132 +++
arch/aarch64/include/asm/page.h | 68 ++
arch/aarch64/include/asm/param.h | 24 +
arch/aarch64/include/asm/perf_event.h | 23 +
arch/aarch64/include/asm/pgalloc.h | 114 ++
arch/aarch64/include/asm/pgtable-2level-hwdef.h | 44 +
arch/aarch64/include/asm/pgtable-2level-types.h | 61 +
arch/aarch64/include/asm/pgtable-3level-hwdef.h | 51 +
arch/aarch64/include/asm/pgtable-3level-types.h | 67 ++
arch/aarch64/include/asm/pgtable-hwdef.h | 95 ++
arch/aarch64/include/asm/pgtable.h | 329 ++++++
arch/aarch64/include/asm/pmu.h | 83 ++
arch/aarch64/include/asm/proc-fns.h | 52 +
arch/aarch64/include/asm/processor.h | 175 +++
arch/aarch64/include/asm/procinfo.h | 45 +
arch/aarch64/include/asm/prom.h | 1 +
arch/aarch64/include/asm/ptrace.h | 207 ++++
arch/aarch64/include/asm/setup.h | 58 +
arch/aarch64/include/asm/shmparam.h | 29 +
arch/aarch64/include/asm/sigcontext.h | 70 ++
arch/aarch64/include/asm/siginfo.h | 24 +
arch/aarch64/include/asm/signal.h | 25 +
arch/aarch64/include/asm/signal32.h | 55 +
arch/aarch64/include/asm/smp.h | 70 ++
arch/aarch64/include/asm/sparsemem.h | 25 +
arch/aarch64/include/asm/spinlock.h | 200 ++++
arch/aarch64/include/asm/spinlock_types.h | 39 +
arch/aarch64/include/asm/stacktrace.h | 30 +
arch/aarch64/include/asm/stat.h | 64 ++
arch/aarch64/include/asm/statfs.h | 24 +
arch/aarch64/include/asm/syscall.h | 102 ++
arch/aarch64/include/asm/syscalls.h | 41 +
arch/aarch64/include/asm/system_misc.h | 59 +
arch/aarch64/include/asm/thread_info.h | 125 ++
arch/aarch64/include/asm/timex.h | 33 +
arch/aarch64/include/asm/tlb.h | 191 ++++
arch/aarch64/include/asm/tlbflush.h | 124 ++
arch/aarch64/include/asm/traps.h | 31 +
arch/aarch64/include/asm/uaccess.h | 378 +++++++
arch/aarch64/include/asm/ucontext.h | 31 +
arch/aarch64/include/asm/unistd.h | 28 +
arch/aarch64/include/asm/unistd32.h | 759 +++++++++++++
arch/aarch64/include/asm/vdso.h | 42 +
arch/aarch64/include/asm/vdso_datapage.h | 44 +
arch/aarch64/kernel/.gitignore | 1 +
arch/aarch64/kernel/Makefile | 27 +
arch/aarch64/kernel/aarch64ksyms.c | 56 +
arch/aarch64/kernel/asm-offsets.c | 109 ++
arch/aarch64/kernel/debug-monitors.c | 289 +++++
arch/aarch64/kernel/elf.c | 42 +
arch/aarch64/kernel/entry-fpsimd.S | 81 ++
arch/aarch64/kernel/entry.S | 696 ++++++++++++
arch/aarch64/kernel/fpsimd.c | 107 ++
arch/aarch64/kernel/head.S | 555 +++++++++
arch/aarch64/kernel/hw_breakpoint.c | 881 +++++++++++++++
arch/aarch64/kernel/io.c | 65 ++
arch/aarch64/kernel/irq.c | 85 ++
arch/aarch64/kernel/kuser32.S | 78 ++
arch/aarch64/kernel/module.c | 457 ++++++++
arch/aarch64/kernel/perf_event.c | 1369 +++++++++++++++++++++++
arch/aarch64/kernel/process.c | 417 +++++++
arch/aarch64/kernel/ptrace.c | 835 ++++++++++++++
arch/aarch64/kernel/setup.c | 419 +++++++
arch/aarch64/kernel/signal.c | 432 +++++++
arch/aarch64/kernel/signal32.c | 868 ++++++++++++++
arch/aarch64/kernel/smp.c | 471 ++++++++
arch/aarch64/kernel/stacktrace.c | 128 +++
arch/aarch64/kernel/sys.c | 139 +++
arch/aarch64/kernel/sys32.S | 284 +++++
arch/aarch64/kernel/sys_compat.c | 178 +++
arch/aarch64/kernel/time.c | 66 ++
arch/aarch64/kernel/traps.c | 371 ++++++
arch/aarch64/kernel/vdso.c | 262 +++++
arch/aarch64/kernel/vdso/.gitignore | 2 +
arch/aarch64/kernel/vdso/Makefile | 63 +
arch/aarch64/kernel/vdso/gen_vdso_offsets.sh | 15 +
arch/aarch64/kernel/vdso/gettimeofday.S | 243 ++++
arch/aarch64/kernel/vdso/note.S | 29 +
arch/aarch64/kernel/vdso/sigreturn.S | 38 +
arch/aarch64/kernel/vdso/vdso.S | 34 +
arch/aarch64/kernel/vdso/vdso.lds.S | 101 ++
arch/aarch64/kernel/vmlinux.lds.S | 146 +++
arch/aarch64/lib/Makefile | 5 +
arch/aarch64/lib/bitops.c | 27 +
arch/aarch64/lib/clear_page.S | 40 +
arch/aarch64/lib/clear_user.S | 59 +
arch/aarch64/lib/copy_from_user.S | 67 ++
arch/aarch64/lib/copy_in_user.S | 64 ++
arch/aarch64/lib/copy_page.S | 47 +
arch/aarch64/lib/copy_to_user.S | 62 +
arch/aarch64/lib/delay.c | 56 +
arch/aarch64/lib/getuser.S | 76 ++
arch/aarch64/lib/putuser.S | 74 ++
arch/aarch64/lib/strncpy_from_user.S | 51 +
arch/aarch64/lib/strnlen_user.S | 48 +
arch/aarch64/mm/Kconfig | 5 +
arch/aarch64/mm/Makefile | 6 +
arch/aarch64/mm/cache.S | 280 +++++
arch/aarch64/mm/context.c | 160 +++
arch/aarch64/mm/copypage.c | 35 +
arch/aarch64/mm/dma-mapping.c | 209 ++++
arch/aarch64/mm/extable.c | 17 +
arch/aarch64/mm/fault.c | 537 +++++++++
arch/aarch64/mm/flush.c | 133 +++
arch/aarch64/mm/init.c | 575 ++++++++++
arch/aarch64/mm/ioremap.c | 102 ++
arch/aarch64/mm/mm.h | 15 +
arch/aarch64/mm/mmap.c | 145 +++
arch/aarch64/mm/mmu.c | 464 ++++++++
arch/aarch64/mm/pgd.c | 50 +
arch/aarch64/mm/proc-macros.S | 56 +
arch/aarch64/mm/proc-syms.c | 32 +
arch/aarch64/mm/proc.S | 194 ++++
arch/aarch64/mm/tlb.S | 72 ++
arch/arm/include/asm/atomic.h | 1 +
arch/mips/include/asm/atomic.h | 1 +
arch/powerpc/include/asm/atomic.h | 1 +
arch/s390/include/asm/atomic.h | 1 +
arch/sparc/kernel/sys_sparc_64.c | 2 +-
arch/x86/include/asm/atomic64_32.h | 1 +
arch/x86/include/asm/atomic64_64.h | 1 +
arch/xtensa/kernel/syscall.c | 2 +-
drivers/clocksource/Kconfig | 5 +
drivers/clocksource/Makefile | 3 +-
drivers/clocksource/arm_generic.c | 310 +++++
drivers/of/fdt.c | 28 +
fs/stat.c | 4 +-
include/clocksource/arm_generic.h | 22 +
include/linux/compat.h | 5 +-
include/linux/of_fdt.h | 1 +
include/linux/shm.h | 6 +-
init/Kconfig | 3 +-
ipc/compat.c | 18 +-
ipc/shm.c | 9 +-
ipc/syscall.c | 2 +-
lib/Kconfig.debug | 6 +-
lib/atomic64_test.c | 3 +-
tools/perf/perf.h | 6 +
184 files changed, 22781 insertions(+), 26 deletions(-)

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/