]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commit
arm64: kernel: implement ACPI parking protocol
authorLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Tue, 26 Jan 2016 11:10:38 +0000 (11:10 +0000)
committerKleber Sacilotto de Souza <kleber.souza@canonical.com>
Fri, 13 Apr 2018 14:00:39 +0000 (16:00 +0200)
commit58dc86e4b3ecfd9eb2686e6e7fa29ef44bd3fc23
tree82708aa8a0a73f8fa13ce61f2a6a2a96b5339e36
parent2e39b4696de38395d7c79cfff2f9a9534d74b9c0
arm64: kernel: implement ACPI parking protocol

BugLink: http://bugs.launchpad.net/bugs/1547047
The SBBR and ACPI specifications allow ACPI based systems that do not
implement PSCI (eg systems with no EL3) to boot through the ACPI parking
protocol specification[1].

This patch implements the ACPI parking protocol CPU operations, and adds
code that eases parsing the parking protocol data structures to the
ARM64 SMP initializion carried out at the same time as cpus enumeration.

To wake-up the CPUs from the parked state, this patch implements a
wakeup IPI for ARM64 (ie arch_send_wakeup_ipi_mask()) that mirrors the
ARM one, so that a specific IPI is sent for wake-up purpose in order
to distinguish it from other IPI sources.

Given the current ACPI MADT parsing API, the patch implements a glue
layer that helps passing MADT GICC data structure from SMP initialization
code to the parking protocol implementation somewhat overriding the CPU
operations interfaces. This to avoid creating a completely trasparent
DT/ACPI CPU operations layer that would require creating opaque
structure handling for CPUs data (DT represents CPU through DT nodes, ACPI
through static MADT table entries), which seems overkill given that ACPI
on ARM64 mandates only two booting protocols (PSCI and parking protocol),
so there is no need for further protocol additions.

Based on the original work by Mark Salter <msalter@redhat.com>

[1] https://acpica.org/sites/acpica/files/MP%20Startup%20for%20ARM%20platforms.docx

Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Tested-by: Loc Ho <lho@apm.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Hanjun Guo <hanjun.guo@linaro.org>
Cc: Sudeep Holla <sudeep.holla@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Mark Salter <msalter@redhat.com>
Cc: Al Stone <ahs3@redhat.com>
[catalin.marinas@arm.com: Added WARN_ONCE(!acpi_parking_protocol_valid() on the IPI]
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
(backported from linux-next commit b518dc969cea61100ec7a7692716a0e82a189b2d)
Signed-off-by: Craig Magina <craig.magina@canonical.com>
Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>
arch/arm64/Kconfig
arch/arm64/include/asm/acpi.h
arch/arm64/include/asm/hardirq.h
arch/arm64/include/asm/smp.h
arch/arm64/kernel/Makefile
arch/arm64/kernel/acpi_parking_protocol.c [new file with mode: 0644]
arch/arm64/kernel/cpu_ops.c
arch/arm64/kernel/smp.c