arm64: Add support for the architecture
commit84176f3d26c423111021bb2b97b70bf0076fb9f4
authorPetr Pavlu <setup@dagobah.cz>
Sun, 31 Mar 2019 14:09:57 +0000 (31 15:09 +0100)
committerJakub Jermář <jakub@jermar.eu>
Wed, 10 Apr 2019 15:04:17 +0000 (10 17:04 +0200)
treed41c659f7c8a13b05d12d4f78c7839e6d020f342
parentb58728fdc037c108b8477d42b1a79dc3748c5e4d
arm64: Add support for the architecture

This changeset adds basic support to run HelenOS on AArch64, targeting
the QEMU virt platform.

Boot:
* Boot relies on the EDK II firmware, GRUB2 for EFI and the HelenOS
  bootloader (UEFI application). EDK II loads GRUB2 from a CD, GRUB2
  loads the HelenOS bootloader (via UEFI) which loads OS components.
* UEFI applications use the PE/COFF format and must be relocatable. The
  first problem is solved by manually having the PE/COFF headers and
  tables written in assembler. The relocatable requirement is addressed
  by compiling the code with -fpic and having the bootloader relocate
  itself at its startup.

Kernel:
* Kernel code for AArch64 consists mostly of stubbing out various
  architecture-specific hooks: virtual memory management, interrupt and
  exception handling, context switching (including FPU lazy switching),
  support for virtual timer, atomic sequences and barriers, cache and
  TLB maintenance, thread and process initialization.
* The patch adds a kernel driver for GICv2 (interrupt controller).
* The PL011 kernel driver is extended to allow userspace to take
  ownership of the console.
* The current code is not able to dynamically obtain information about
  available devices on the underlying machine. The port instead
  implements a machine-func interface similar to the one implemented by
  arm32. It defines a machine for the QEMU AArch64 virt platform. The
  configuration (device addresses and IRQ numbers) is then baked into
  the machine definition.

User space:
* Uspace code for AArch64 similarly mostly implements
  architecture-specific hooks: context saving/restoring, syscall
  support, TLS support.

The patchset allows to boot the system but user interaction with the OS
is not yet possible.
124 files changed:
.gitignore
HelenOS.config
abi/arch/arm64/include/abi/arch/elf.h [copied from boot/genarch/src/efi.c with 78% similarity]
abi/doc/doxygroups.h
abi/include/abi/elf.h
boot/Makefile.build
boot/Makefile.grub
boot/arch/amd64/Makefile.inc
boot/arch/arm64/Makefile.inc [copied from boot/arch/amd64/Makefile.inc with 51% similarity]
boot/arch/arm64/_link.ld.in [new file with mode: 0644]
boot/arch/arm64/include/arch/arch.h [copied from boot/genarch/src/efi.c with 78% similarity]
boot/arch/arm64/include/arch/asm.h [copied from boot/genarch/src/efi.c with 76% similarity]
boot/arch/arm64/include/arch/barrier.h [new symlink]
boot/arch/arm64/include/arch/boot.h [new symlink]
boot/arch/arm64/include/arch/main.h [copied from boot/genarch/src/efi.c with 80% similarity]
boot/arch/arm64/include/arch/regutils.h [new symlink]
boot/arch/arm64/include/arch/relocate.h [copied from boot/genarch/src/efi.c with 80% similarity]
boot/arch/arm64/include/arch/types.h [copied from boot/genarch/src/efi.c with 78% similarity]
boot/arch/arm64/src/asm.S [new file with mode: 0644]
boot/arch/arm64/src/main.c [new file with mode: 0644]
boot/arch/arm64/src/relocate.c [copied from kernel/arch/arm32/include/arch/mm/as.h with 52% similarity]
boot/doc/doxygroups.h
boot/genarch/include/genarch/efi.h
boot/genarch/src/efi.c
boot/generic/include/align.h
contrib/qemu/build-from-scratch.sh
defaults/arm64/Makefile.config [new file with mode: 0644]
defaults/arm64/output [new file with mode: 0644]
defaults/arm64/virt/Makefile.config [new file with mode: 0644]
doxygen/doxygen.cfg.diff
kernel/arch/abs32le/include/arch/mm/as.h
kernel/arch/amd64/include/arch/mm/as.h
kernel/arch/arm32/include/arch/mm/as.h
kernel/arch/arm64/Makefile.inc [copied from boot/arch/amd64/Makefile.inc with 55% similarity]
kernel/arch/arm64/_link.ld.in [new file with mode: 0644]
kernel/arch/arm64/include/arch/arch.h [copied from boot/genarch/src/efi.c with 78% similarity]
kernel/arch/arm64/include/arch/asm.h [new file with mode: 0644]
kernel/arch/arm64/include/arch/barrier.h [copied from kernel/arch/ppc32/include/arch/mm/as.h with 56% similarity]
kernel/arch/arm64/include/arch/boot/boot.h [copied from boot/genarch/include/genarch/efi.h with 51% similarity]
kernel/arch/arm64/include/arch/context.h [copied from boot/generic/include/align.h with 71% similarity]
kernel/arch/arm64/include/arch/context_struct.h [copied from kernel/arch/arm32/include/arch/mm/as.h with 58% similarity]
kernel/arch/arm64/include/arch/cpu.h [copied from boot/genarch/src/efi.c with 75% similarity]
kernel/arch/arm64/include/arch/cycle.h [copied from boot/genarch/src/efi.c with 74% similarity]
kernel/arch/arm64/include/arch/exception.h [new file with mode: 0644]
kernel/arch/arm64/include/arch/faddr.h [copied from boot/genarch/src/efi.c with 78% similarity]
kernel/arch/arm64/include/arch/fpu_context.h [copied from boot/genarch/src/efi.c with 78% similarity]
kernel/arch/arm64/include/arch/fpu_context_struct.h [copied from boot/genarch/src/efi.c with 73% similarity]
kernel/arch/arm64/include/arch/interrupt.h [copied from boot/generic/include/align.h with 65% similarity]
kernel/arch/arm64/include/arch/istate.h [copied from kernel/arch/ppc32/include/arch/mm/as.h with 56% similarity]
kernel/arch/arm64/include/arch/istate_struct.h [new file with mode: 0644]
kernel/arch/arm64/include/arch/mach/virt/virt.h [copied from boot/genarch/src/efi.c with 78% similarity]
kernel/arch/arm64/include/arch/machine_func.h [copied from kernel/arch/arm32/include/arch/mm/as.h with 60% similarity]
kernel/arch/arm64/include/arch/mm/as.h [copied from kernel/arch/riscv64/include/arch/mm/as.h with 84% similarity]
kernel/arch/arm64/include/arch/mm/asid.h [copied from boot/genarch/src/efi.c with 74% similarity]
kernel/arch/arm64/include/arch/mm/frame.h [copied from boot/generic/include/align.h with 73% similarity]
kernel/arch/arm64/include/arch/mm/km.h [copied from kernel/arch/ia64/include/arch/mm/as.h with 63% similarity]
kernel/arch/arm64/include/arch/mm/page.h [new file with mode: 0644]
kernel/arch/arm64/include/arch/mm/tlb.h [copied from boot/genarch/src/efi.c with 78% similarity]
kernel/arch/arm64/include/arch/proc/task.h [copied from boot/genarch/src/efi.c with 78% similarity]
kernel/arch/arm64/include/arch/proc/thread.h [copied from boot/genarch/src/efi.c with 78% similarity]
kernel/arch/arm64/include/arch/regutils.h [new file with mode: 0644]
kernel/arch/arm64/include/arch/stack.h [copied from boot/genarch/src/efi.c with 78% similarity]
kernel/arch/arm64/include/arch/types.h [copied from boot/genarch/src/efi.c with 78% similarity]
kernel/arch/arm64/src/arm64.c [new file with mode: 0644]
kernel/arch/arm64/src/asm.S [new file with mode: 0644]
kernel/arch/arm64/src/context.S [new file with mode: 0644]
kernel/arch/arm64/src/cpu/cpu.c [new file with mode: 0644]
kernel/arch/arm64/src/debug/stacktrace.c [copied from kernel/arch/ppc32/include/arch/mm/as.h with 57% similarity]
kernel/arch/arm64/src/debug/stacktrace_asm.S [copied from boot/genarch/src/efi.c with 78% similarity]
kernel/arch/arm64/src/exception.c [new file with mode: 0644]
kernel/arch/arm64/src/fpu.S [new file with mode: 0644]
kernel/arch/arm64/src/fpu_context.c [new file with mode: 0644]
kernel/arch/arm64/src/interrupt.c [new file with mode: 0644]
kernel/arch/arm64/src/mach/virt/virt.c [new file with mode: 0644]
kernel/arch/arm64/src/machine_func.c [new file with mode: 0644]
kernel/arch/arm64/src/mm/as.c [copied from kernel/arch/arm32/include/arch/mm/as.h with 60% similarity]
kernel/arch/arm64/src/mm/frame.c [new file with mode: 0644]
kernel/arch/arm64/src/mm/km.c [copied from boot/generic/include/align.h with 71% similarity]
kernel/arch/arm64/src/mm/page.c [copied from kernel/arch/mips32/include/arch/mm/as.h with 65% similarity]
kernel/arch/arm64/src/mm/tlb.c [new file with mode: 0644]
kernel/arch/arm64/src/smc.c [copied from boot/genarch/src/efi.c with 78% similarity]
kernel/arch/arm64/src/smp/ipi.c [copied from boot/genarch/src/efi.c with 79% similarity]
kernel/arch/arm64/src/smp/smp.c [copied from boot/genarch/src/efi.c with 79% similarity]
kernel/arch/arm64/src/start.S [new file with mode: 0644]
kernel/arch/ia32/include/arch/mm/as.h
kernel/arch/ia64/include/arch/mm/as.h
kernel/arch/mips32/include/arch/mm/as.h
kernel/arch/ppc32/include/arch/mm/as.h
kernel/arch/riscv64/include/arch/mm/as.h
kernel/arch/sparc64/include/arch/mm/sun4u/as.h
kernel/arch/sparc64/include/arch/mm/sun4v/as.h
kernel/doc/doxygroups.h
kernel/genarch/Makefile.inc
kernel/genarch/include/genarch/drivers/gicv2/gicv2.h [new file with mode: 0644]
kernel/genarch/include/genarch/drivers/pl011/pl011.h
kernel/genarch/src/drivers/gicv2/gicv2.c [new file with mode: 0644]
kernel/genarch/src/drivers/pl011/pl011.c
kernel/genarch/src/mm/as_pt.c
kernel/generic/include/mm/as.h
tools/autotool.py
tools/ew.py
uspace/lib/c/arch/arm64/Makefile.common [copied from boot/arch/amd64/Makefile.inc with 65% similarity]
uspace/lib/c/arch/arm64/Makefile.inc [copied from boot/arch/amd64/Makefile.inc with 65% similarity]
uspace/lib/c/arch/arm64/include/libarch/config.h [copied from boot/genarch/src/efi.c with 78% similarity]
uspace/lib/c/arch/arm64/include/libarch/ddi.h [copied from kernel/arch/mips32/include/arch/mm/as.h with 64% similarity]
uspace/lib/c/arch/arm64/include/libarch/elf_linux.h [new file with mode: 0644]
uspace/lib/c/arch/arm64/include/libarch/faddr.h [copied from boot/genarch/src/efi.c with 78% similarity]
uspace/lib/c/arch/arm64/include/libarch/fibril.h [copied from kernel/arch/arm32/include/arch/mm/as.h with 60% similarity]
uspace/lib/c/arch/arm64/include/libarch/fibril_context.h [copied from kernel/arch/arm32/include/arch/mm/as.h with 57% similarity]
uspace/lib/c/arch/arm64/include/libarch/istate.h [new symlink]
uspace/lib/c/arch/arm64/include/libarch/istate_struct.h [new symlink]
uspace/lib/c/arch/arm64/include/libarch/regutils.h [new symlink]
uspace/lib/c/arch/arm64/include/libarch/syscall.h [copied from boot/genarch/src/efi.c with 78% similarity]
uspace/lib/c/arch/arm64/include/libarch/thread.h [copied from boot/genarch/src/efi.c with 78% similarity]
uspace/lib/c/arch/arm64/include/libarch/tls.h [copied from boot/generic/include/align.h with 67% similarity]
uspace/lib/c/arch/arm64/src/entry.S [copied from boot/arch/amd64/Makefile.inc with 65% similarity]
uspace/lib/c/arch/arm64/src/entryjmp.S [copied from boot/arch/amd64/Makefile.inc with 65% similarity]
uspace/lib/c/arch/arm64/src/fibril.S [new file with mode: 0644]
uspace/lib/c/arch/arm64/src/stacktrace.c [copied from boot/generic/include/align.h with 69% similarity]
uspace/lib/c/arch/arm64/src/stacktrace_asm.S [copied from boot/arch/amd64/Makefile.inc with 65% similarity]
uspace/lib/c/arch/arm64/src/syscall.c [copied from kernel/arch/arm32/include/arch/mm/as.h with 51% similarity]
uspace/lib/c/arch/arm64/src/thread_entry.S [copied from boot/arch/amd64/Makefile.inc with 65% similarity]
uspace/lib/c/arch/arm64/src/tls.c [copied from boot/genarch/src/efi.c with 80% similarity]
uspace/lib/c/doc/doxygroups.h