Subject: [PATCH 00/19] Introduce ACPI for ARM64 based on ACPI 5.1

From: [email-masked] (Hanjun Guo)
Date: Fri, 25 Jul 2014 08:46:39 +0800

Hi folks,

I included the linaro-acpi-private mail list wrongly when I was sending them
out, it will cause Delivery Status Notification (Failure) when you are not
in that mail list, sorry for the messed up, it was a little bit late for me
last night, and little bit dottiness for me too, I must be tired :(

please remove the linaro-acpi-private mail list when you replied, Thanks.

Best Regards
Hanjun

On 2014-7-24 21:00, Hanjun Guo wrote:
> ACPI 5.1 was released [1] and it fixed some major gaps to run ACPI
> on ARM, this patch just follow the ACPI 5.1 spec and prepare the
> code to run ACPI on ARM64.
> 
> ACPI 5.1 has some major changes for the following tables and
> method which are essential for ARM platforms:
> 
> 1) MADT table updates.
> New fields were introduced to cover MPIDR and virtualization in
> GICC, and introduce GICR and GIC MSI frame structure to cover
> GICv3 and GICv2m (this patch set only cover GICv2).
> 
> 2) FADT updates for PSCI
> New fields were introduced to cover PSCI and ACPI can use psci
> to boot SMP and other PSCI related functions.
> 
> 3) GTDT
> GTDT was updated to support arch timer, memory-mapped tiemr,
> SBSA watchdog timer, in this patch, only arch timer tested on
> Juno board, so only arch timer init is available.
> 
> 4) _DSD
> _DSD (Device Specific Data) will provide some key values which
> presented by FDT before, it makes possible that some devices can
> be emumerated in ACPI way, please refer to the document provided
> in this patch set for detail.
> 
> This patch set is the ARM64 ACPI core patches covered MADT, FADT
> and GTDT, _DSD is not covered in this patch set. We first introduce
> acpi.c and its related head file which are needed by ACPI core, and
> then get RSDP to extract all the ACPI boot-time tables.
> 
> When all the boot-time tables (FADT, MADT, GTDT) are ready, then
> parse them to init the sytem when booted. Specifically, 
> a) we use FADT to init PSCI and use PSCI to boot SMP;
> b) Use MADT for GIC init and SMP init;
> c) GTDT for arch timer init.
> 
> This patch set is based on the former ACPICA patches I sent, and I
> already compiled it OK with:
> a) each patch applied on ARM64 with CONFIG_ACPI=y;
> b) CONFIG_ACPI=n on ARM64;
> c) CONFIG_ACPI=y on x86.
> 
> Also this patch set was tested by Graeme on ARM64 Juno platform, it
> boot successfully with ACPI only (no device tree).
> 
> [1]
> You can download ACPI 5.1 from http://www.uefi.org/specifications
> 
> Al Stone (3):
>   ARM64 / ACPI: Get RSDP and ACPI boot-time tables
>   ARM64 / ACPI: Introduce early_param for "acpi"
>   ARM64 / ACPI: Select ACPI_REDUCED_HARDWARE_ONLY if ACPI is enabled on
>     ARM64
> 
> Ashwin Chaugule (1):
>   ACPI / table: Add new function to get table entries
> 
> Graeme Gregory (4):
>   ARM64 / ACPI: Introduce lowlevel suspend function
>   ARM64 / ACPI: If we chose to boot from acpi then disable FDT
>   ARM64 / ACPI: Enable ARM64 in Kconfig
>   Documentation: ACPI for ARM64
> 
> Hanjun Guo (10):
>   ARM64 / ACPI: Introduce arch_fix_phys_package_id() for cpu topology
>   ARM64 / ACPI: Make PCI optional for ACPI on ARM64
>   ARM64 / ACPI: Parse FADT table to get PSCI flags for PSCI init
>   ARM64 / ACPI: Parse MADT to map logical cpu to MPIDR and get
>     cpu_possible/present_map
>   ACPI / table: Print GIC information when MADT is parsed
>   ARM64 / ACPI: Move the initialization of cpu_logical_map(0) before
>     acpi_boot_init()
>   ARM64 / ACPI: Get the enable method for SMP initialization in ACPI
>     way
>   ACPI / processor: Make it possible to get CPU hardware ID via GICC
>   ARM64 / ACPI: Introduce ACPI_IRQ_MODEL_GIC and register device's gsi
>   ARM64 / ACPI: Parse GTDT to initialize arch timer
> 
> Tomasz Nowicki (1):
>   ARM64 / ACPI: Add GICv2 specific ACPI boot support
> 
>  Documentation/arm64/arm-acpi.txt     |  240 ++++++++++++++++++++
>  Documentation/kernel-parameters.txt  |    3 +-
>  arch/arm64/Kconfig                   |    3 +
>  arch/arm64/include/asm/acenv.h       |   18 ++
>  arch/arm64/include/asm/acpi.h        |   90 ++++++++
>  arch/arm64/include/asm/cpu.h         |   11 +
>  arch/arm64/include/asm/cpu_ops.h     |    9 +-
>  arch/arm64/include/asm/pci.h         |   11 +
>  arch/arm64/include/asm/smp.h         |    2 +-
>  arch/arm64/include/asm/topology.h    |    2 +
>  arch/arm64/kernel/Makefile           |    1 +
>  arch/arm64/kernel/acpi.c             |  403 ++++++++++++++++++++++++++++++++++
>  arch/arm64/kernel/cpu_ops.c          |   52 ++++-
>  arch/arm64/kernel/irq.c              |    5 +
>  arch/arm64/kernel/psci.c             |   95 +++++---
>  arch/arm64/kernel/setup.c            |   11 +-
>  arch/arm64/kernel/smp.c              |   39 +++-
>  arch/arm64/kernel/time.c             |    7 +
>  arch/arm64/kernel/topology.c         |   14 ++
>  drivers/acpi/Kconfig                 |    6 +-
>  drivers/acpi/Makefile                |    2 +-
>  drivers/acpi/bus.c                   |    3 +
>  drivers/acpi/internal.h              |    5 +
>  drivers/acpi/processor_core.c        |   36 +++
>  drivers/acpi/tables.c                |  109 +++++++--
>  drivers/clocksource/arm_arch_timer.c |  117 ++++++++--
>  drivers/irqchip/irq-gic.c            |  114 ++++++++++
>  include/linux/acpi.h                 |    5 +
>  include/linux/clocksource.h          |    6 +
>  include/linux/irqchip/arm-gic-acpi.h |   36 +++
>  include/linux/pci.h                  |   37 +++-
>  31 files changed, 1397 insertions(+), 95 deletions(-)
>  create mode 100644 Documentation/arm64/arm-acpi.txt
>  create mode 100644 arch/arm64/include/asm/acenv.h
>  create mode 100644 arch/arm64/include/asm/acpi.h
>  create mode 100644 arch/arm64/include/asm/cpu.h
>  create mode 100644 arch/arm64/include/asm/pci.h
>  create mode 100644 arch/arm64/kernel/acpi.c
>  create mode 100644 include/linux/irqchip/arm-gic-acpi.h
>