mbox series

[v3,0/4] Implement Platform Runtime Mechanism plumbing

Message ID 20210322223707.1838823-1-erik.kaneda@intel.com (mailing list archive)
Headers show
Series Implement Platform Runtime Mechanism plumbing | expand

Message

Erik Kaneda March 22, 2021, 10:37 p.m. UTC
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@intel.com>
Cc: Ashok Raj <ashok.raj@intel.com>
Cc: Rafael Wysocki <rafael.j.wysocki@intel.com>

Signed-off-by: Erik Kaneda <erik.kaneda@intel.com>


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