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

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

 



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




[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux