Platform Runtime Mechanism (PRM) is a firmware interface that exposes a set of binary executables that can either be called from the AML interpreter or device drivers by bypassing the AML interpreter. This mechanism offers a more performant way to execute native code than ASL and a less disruptive approach than ASL invoking SMI by writing to the SMI command port. This patch seies adds linux support to invoke PRM through a new ACPI OperationRegion address type. The native code is ran as if it were a UEFI runtime service by calling efi_call_virt_pointer to function pointers exposed in the PRMT ACPI table. According to the PRM specification, the PRM binary should only consist of unprivleged instructions. Code that enables Linux to run PRM in CPL3 is currently in-progress and will be released in the future. The code follows the PRM specification and has been tested on QEMU running an OVMF image that was integrated with a sample implementation in Michael Kubacki's EDK2 staging branch. Links: PRM specification: https://uefi.org/sites/default/files/resources/Platform%20Runtime%20Mechanism%20-%20with%20legal%20notice.pdf The EDK2 staging branch: https://github.com/tianocore/edk2-staging/tree/PlatformRuntimeMechanism/PrmPkg Cc: Dan Williams <dan.j.williams@xxxxxxxxx> Cc: Ashok Raj <ashok.raj@xxxxxxxxx> Cc: Rafael Wysocki <rafael.j.wysocki@xxxxxxxxx> Signed-off-by: Erik Kaneda <erik.kaneda@xxxxxxxxx> Erik Kaneda (4): ACPICA: iASL: add disassembler support for PRMT ACPICA: Add support for PlatformRtMechanism OperationRegion handler PRM: implement OperationRegion handler for the PlatformRtMechanism subtype ACPI: Add \_SB._OSC bit for PRM drivers/acpi/Kconfig | 5 + drivers/acpi/Makefile | 1 + drivers/acpi/acpica/acutils.h | 2 + drivers/acpi/acpica/exfield.c | 8 +- drivers/acpi/acpica/exserial.c | 12 ++ drivers/acpi/acpica/utuuid.c | 41 +++++ drivers/acpi/bus.c | 3 + drivers/acpi/prmt.c | 302 +++++++++++++++++++++++++++++++++ drivers/acpi/tables.c | 9 + include/acpi/acconfig.h | 2 + include/acpi/actbl2.h | 40 +++++ include/linux/acpi.h | 2 + include/linux/prmt.h | 7 + 13 files changed, 432 insertions(+), 2 deletions(-) create mode 100644 drivers/acpi/prmt.c create mode 100644 include/linux/prmt.h -- 2.29.2