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 majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/