Home
Reading
Searching
Subscribe
Sponsors
Statistics
Posting
Contact
Spam
Lists
Links
About
Hosting
Filtering
Features Download
Marketing
Archives
FAQ
Blog
 
Gmane
From: Catalin Marinas <catalin.marinas <at> arm.com>
Subject: [PATCH 00/36] AArch64 Linux kernel port
Newsgroups: gmane.linux.kernel
Date: Friday 6th July 2012 21:05:41 UTC (over 4 years ago)
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(-)
 
CD: 4ms