diff options
author | Michael Kubacki <michael.kubacki@microsoft.com> | 2020-04-13 16:38:19 -0700 |
---|---|---|
committer | mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> | 2022-04-05 00:42:38 +0000 |
commit | e846797662bd968cf9bf67ff04957ad80e5a9c6c (patch) | |
tree | 0be48d6936ba0018e1671dec6a6ae8c9bfe63efc /PrmPkg/Readme.md | |
parent | d2cb6e67a4325904fef8822dd724e314b851e711 (diff) | |
download | edk2-e846797662bd968cf9bf67ff04957ad80e5a9c6c.zip edk2-e846797662bd968cf9bf67ff04957ad80e5a9c6c.tar.gz edk2-e846797662bd968cf9bf67ff04957ad80e5a9c6c.tar.bz2 |
PrmPkg: Add ALLOCATE_CONTEXT_BUFFER_IN_FW build option
There's currently two approaches being considered for how to allocate the
context buffer passed to PRM handlers:
1. The context buffer is allocated and populated in firmware. As such, the
FW converts all pointers internal to the buffer to virtual memory
addresses at the virtual address change event. A single context buffer
pointer is given to the OS via the PRM ACPI table and the OS converts
this single physical address to a virtual address when it passes the
context buffer as a pointer to PRM handlers.
2. The context buffer is allocated and populated in the OS. The OS gets
all the information needed to populate the context buffer from other
pre-existing resources (mainly physical addresses in the PRM ACPI
table). The OS converts all the physical addresses to virtual addresses,
allocates the context buffer instances, and fills in the information.
The OS passes the context buffer virtual address to PRM handlers.
The prior behavior was (1). The current POR behavior has moved to (2).
Until (2) is used more widely, it can be kept around with fairly minimal
overhead via a build flag in a few places.
So the default behavior is now (2) (the expected permanent behavior) with
(1) easily enabled by defining "ALLOCATE_CONTEXT_BUFFER_IN_FW" in the
compiler defined macros. A DSC define was added in PrmPkg.dsc to set this
compiler macro in the package build.
At some point in the future, all code (and some peripheral code)
surrounded with this build flag can be removed if (2) is fully
decided upon.
Cc: Andrew Fish <afish@apple.com>
Cc: Kang Gao <kang.gao@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Michael Kubacki <michael.kubacki@microsoft.com>
Cc: Leif Lindholm <leif@nuviainc.com>
Cc: Benjamin You <benjamin.you@intel.com>
Cc: Liu Yun <yun.y.liu@intel.com>
Cc: Ankit Sinha <ankit.sinha@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
Acked-by: Michael D Kinney <michael.d.kinney@intel.com>
Acked-by: Liming Gao <gaoliming@byosoft.com.cn>
Acked-by: Leif Lindholm <quic_llindhol@quicinc.com>
Reviewed-by: Ankit Sinha <ankit.sinha@intel.com>
Diffstat (limited to 'PrmPkg/Readme.md')
-rw-r--r-- | PrmPkg/Readme.md | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/PrmPkg/Readme.md b/PrmPkg/Readme.md index b67b3a3..00ef41b 100644 --- a/PrmPkg/Readme.md +++ b/PrmPkg/Readme.md @@ -68,6 +68,18 @@ record (POR) configuration. The following list are the currently defined build flags (if any) that may be passed to the `build` command
(e.g. -D FLAG=VALUE).
+* `ALLOCATE_CONTEXT_BUFFER_IN_FW` - Allocates the context buffer for each PRM handler in the firmware instead of
+ the operating system (OS).
+
+ Additional detail: The context buffer structure is defined in [PrmContextBuffer.h](PrmPkg/Include/PrmContextBuffer.h).
+ This structure can be instantiated by either firmware with a physical pointer to the buffer placed in the
+ `PRM_HANDLER_INFORMATION_STRUCT` for each handler wherein the OS would convert that physical pointer and pass it
+ as a virtual address pointer to each PRM handler. Alternatively, the context buffer can be allocated and populated
+ by the OS where it would get all the information to populate the context buffer from other structures.
+
+ The default is for the OS to allocate and populate the buffer. The alternative option of the firmware doing this
+ work is kept in the source code until broader OS testing is completed.
+
## Overview
At a high-level, PRM can be viewed from three levels of granularity:
|