Port-arm archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

ARM64 ACPI status report 2



Changes since my last update:

 - Added support for 64-bit ACPI resources. This was needed to support
   UART on ThunderX.
 - Added glue for EHCI and XHCI at ACPI. I don't have access to any
   hardware that uses these, but the HIDs are defined so we will support
   them if one ever appears.
 - Added support for using UEFI runtime services in the kernel. This
   involved reserving a range of VA as the UEFI runtime code needs to
   self-relocate itself in the bootloader, before the kernel is started.
   The bootloader was extended to support it, and MD kernel code written
   to take advantage of it. According to SBSA, this is the required method
   for accessing the Real-Time Clock. In addition, it is required that the
   OS use UEFI RT services for system shutdown and reset instead of doing
   this directly via PSCI.
 - Finally got around to implementing parse_mi_bootargs on aarch64 so we
   can pass -a/-v/-x/-s/etc flags to the kernel.
 - Added MSI-X support to the MD ARM PCI code and GIC v2m driver.
   Validated this on Overdrive 1000 and QEMU with xhci and wm drivers.
 - Added GPT support to bootaa64.efi.
 - ARM FDT memory map handling code was using extent(9), which has caused
   considerable grief due to the strictness of the API. If a bootloader
   reported a reserved memory range that didn't exactly fit within a
   memory range, we would panic and there would be no indication as this
   happens before the debug console is brought online. I replaced the
   extent(9) usage here with a new module
   (sys/arch/evbarm/fdt/fdt_memory.c) that is less strict in this respect.
 - Added a "mem" command to bootaa64.efi to dump the UEFI memory map.
 - The ACPI code was extended to support multiple segments (domains),
   which is required on ThunderX. Since the segment number needs to be
   extracted from the PCI chipset tag, this requires some MD code to
   enable the functionality. The ARM MD code was committed.
 - Added GICv3 MSI/MSI-X support. This one was a doozy. It seems for
   nearly every function related to MSIs, there are two possible ways
   for it to be implemented. QEMU doesn't emulate the Interrupt
   Translation Service (ITS) hardware in software, so to test
   this in ACPI mode I had to run QEMU on a ROCKPro64 with KVM. All is
   working there, so now I am moving on to validating this on real
   hardware.
 - Set/get affinity APIs are now implemented on GICv3 for both SPIs and
   LPIs.
 - arch/arm/pic/pic.c now implements the APIs required by
   kern/subr_interrupt.c to support the intrctl(8) tool. This allows us to
   view interrupts and event counters from userland and for pic drivers
   that support the set/get affinity APIs (armgic and gicvthree) this
   allows us to change affinity of an interrupt source at runtime.

Cheers,
Jared


Home | Main Index | Thread Index | Old Index