<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><meta http-equiv="Content-Type" content="text/html; charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><meta http-equiv="Content-Type" content="text/html; charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><meta http-equiv="Content-Type" content="text/html; charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class=""><div class=""><br class=""><blockquote type="cite" class=""><div class="">On Jul 30, 2021, at 12:34 PM, Bret Barkelew via <a href="http://groups.io/" class="">groups.io</a> <<a href="mailto:bret.barkelew=microsoft.com@groups.io" class="">bret.barkelew=microsoft.com@groups.io</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><meta charset="UTF-8" class=""><div class="WordSection1" style="page: WordSection1; caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;"><div style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">I don’t think this is a good dependency. StandaloneMmCore shouldn’t require anything from EmbeddedPkg, and if it does there’s probably some more generalization necessary.</div><div style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div><div style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">Further, we can’t require the MmCore (which should be considered generic at the level of PEI Core or DXE Core) include some external library like Libfdt without significant justification.</div><div style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div></div></div></blockquote><div class=""><br class=""></div><div class="">I think we should understand if this is being driven by some kind of standard? Maybe the Flat Device Tree lib should be part of the MdePkg? Or maybe MdeModulePkg?</div><div class=""><br class=""></div><div class="">Thanks,</div><div class=""><br class=""></div><div class="">Andrew Fish</div><br class=""><blockquote type="cite" class=""><div class=""><div class="WordSection1" style="page: WordSection1; caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;"><div style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">- Bret<span class="Apple-converted-space"> </span><o:p class=""></o:p></div><div style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div><div style="border-style: solid none none; border-top-width: 1pt; border-top-color: rgb(225, 225, 225); padding: 3pt 0in 0in;" class=""><div style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif; border: none; padding: 0in;" class=""><b class="">From:<span class="Apple-converted-space"> </span></b><a href="mailto:sayanta.pattanayak=arm.com@groups.io" style="color: blue; text-decoration: underline;" class="">Sayanta Pattanayak via groups.io</a><br class=""><b class="">Sent:<span class="Apple-converted-space"> </span></b>Friday, July 30, 2021 10:36 AM<br class=""><b class="">To:<span class="Apple-converted-space"> </span></b><a href="mailto:devel@edk2.groups.io" style="color: blue; text-decoration: underline;" class="">devel@edk2.groups.io</a><br class=""><b class="">Cc:<span class="Apple-converted-space"> </span></b><a href="mailto:ardb+tianocore@kernel.org" style="color: blue; text-decoration: underline;" class="">Ard Biesheuvel</a>;<span class="Apple-converted-space"> </span><a href="mailto:sami.mujawar@arm.com" style="color: blue; text-decoration: underline;" class="">Sami Mujawar</a>;<span class="Apple-converted-space"> </span><a href="mailto:achin.gupta@arm.comw" style="color: blue; text-decoration: underline;" class="">Achin Gupta</a><br class=""><b class="">Subject:<span class="Apple-converted-space"> </span></b>[EXTERNAL] [edk2-devel] [edk2][PATCH v1 1/1] StandaloneMmPkg: add support to populate StMM boot data from device tree</div></div><div style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div><p class="MsoNormal" style="margin: 0in 0in 12pt; font-size: 11pt; font-family: Calibri, sans-serif;">Introduce support to populate StMM boot data via DTS parsing. The DTB is<br class="">passed as a boot argument by a binary of higer exception level.<br class="">Previously it was achieved by placing the boot data structure in a<br class="">shared buffer and the address of this shared buffer was passed by the<br class="">binary of higher exception level. Now either of the option can be used<br class="">for populating StMM boot info.<br class=""><br class="">StMM boot information structure binding in device tree can be of following<br class="">prototype. Property values are not mentioned here.<br class=""><br class="">bootarg {<br class="">  compatible = "bootargs";<br class="">  h_type  = <..>;<br class="">  h_version = <..>;<br class="">  h_size    = <..>;<br class="">  h_attr    = <..>;<br class="">  sp_mem_base         = <..>;<br class="">  sp_mem_limit        = <..>;<br class="">  sp_image_base       = <..>;<br class="">  sp_stack_base       = <..>;<br class="">  sp_heap_base        = <..>;<br class="">  sp_ns_comm_buf_base = <..>;fc<br class="">  sp_shared_buf_base  = <..>;<br class="">  sp_image_size       = <..>;<br class="">  sp_pcpu_stack_size  = <..>;<br class="">  sp_heap_size        = <..>;<br class="">  sp_ns_comm_buf_size = <..>;<br class="">  sp_shared_buf_size  = <..>;<br class="">  num_sp_mem_regions  = <..>;<br class="">  num_cpus            = <..>;<br class="">};<br class=""><br class="">Addition of DTS supoort involves a dependency on FdtLib from EmbeddedPkg.<br class=""><br class="">Signed-off-by: Sayanta Pattanayak <<a href="mailto:sayanta.pattanayak@arm.com" style="color: blue; text-decoration: underline;" class="">sayanta.pattanayak@arm.com</a>><br class="">---<br class=""> Link to github branch with this patch -<br class=""> <a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FSayantaP-arm%2Fedk2%2Ftree%2Fstmm-dts&amp;data=04%7C01%7Cbret.barkelew%40microsoft.com%7Cb365266c83cb433d1e0108d953806c83%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637632633786132182%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sdata=gJw%2BH8Dj9lih1DNrIzbNPToJn9nH%2BHqpvpSr2JJrS4I%3D&amp;reserved=0" style="color: blue; text-decoration: underline;" class="">https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FSayantaP-arm%2Fedk2%2Ftree%2Fstmm-dts&amp;data=04%7C01%7Cbret.barkelew%40microsoft.com%7Cb365266c83cb433d1e0108d953806c83%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637632633786132182%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sdata=gJw%2BH8Dj9lih1DNrIzbNPToJn9nH%2BHqpvpSr2JJrS4I%3D&amp;reserved=0</a><br class=""><br class=""> StandaloneMmPkg/StandaloneMmPkg.dsc                                                     |   1 +<br class=""> StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf       |   3 +<br class=""> StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/AArch64/StandaloneMmCoreEntryPoint.c | 153 ++++++++++++++++++--<br class=""> 3 files changed, 143 insertions(+), 14 deletions(-)<br class=""><br class="">diff --git a/StandaloneMmPkg/StandaloneMmPkg.dsc b/StandaloneMmPkg/StandaloneMmPkg.dsc<br class="">index 0c45df95e2dd..e3a3a6ee3ba1 100644<br class="">--- a/StandaloneMmPkg/StandaloneMmPkg.dsc<br class="">+++ b/StandaloneMmPkg/StandaloneMmPkg.dsc<br class="">@@ -49,6 +49,7 @@<br class="">   HobLib|StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.inf<br class="">   IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf<br class="">   MemLib|StandaloneMmPkg/Library/StandaloneMmMemLib/StandaloneMmMemLib.inf<br class="">+  FdtLib|EmbeddedPkg/Library/FdtLib/FdtLib.inf<br class="">   MemoryAllocationLib|StandaloneMmPkg/Library/StandaloneMmCoreMemoryAllocationLib/StandaloneMmCoreMemoryAllocationLib.inf<br class="">   MmServicesTableLib|MdePkg/Library/StandaloneMmServicesTableLib/StandaloneMmServicesTableLib.inf<br class="">   PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf<br class="">diff --git a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf<br class="">index 4fa426f58ef4..0a2e519dd664 100644<br class="">--- a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf<br class="">+++ b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf<br class="">@@ -30,6 +30,7 @@<br class="">   X64/StandaloneMmCoreEntryPoint.c<br class=""> <br class=""> [Packages]<br class="">+  EmbeddedPkg/EmbeddedPkg.dec<br class="">   MdePkg/MdePkg.dec<br class="">   MdeModulePkg/MdeModulePkg.dec<br class="">   StandaloneMmPkg/StandaloneMmPkg.dec<br class="">@@ -40,10 +41,12 @@<br class=""> [LibraryClasses]<br class="">   BaseLib<br class="">   DebugLib<br class="">+  FdtLib<br class=""> <br class=""> [LibraryClasses.AARCH64]<br class="">   StandaloneMmMmuLib<br class="">   ArmSvcLib<br class="">+  FdtLib<br class=""> <br class=""> [Guids]<br class="">   gMpInformationHobGuid<br class="">diff --git a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/AArch64/StandaloneMmCoreEntryPoint.c b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/AArch64/StandaloneMmCoreEntryPoint.c<br class="">index 6c50f470aa35..cc09d75dac36 100644<br class="">--- a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/AArch64/StandaloneMmCoreEntryPoint.c<br class="">+++ b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/AArch64/StandaloneMmCoreEntryPoint.c<br class="">@@ -16,6 +16,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent<br class=""> #include <Guid/MmramMemoryReserve.h><br class=""> #include <Guid/MpInformation.h><br class=""> <br class="">+#include <libfdt.h><br class=""> #include <Library/ArmMmuLib.h><br class=""> #include <Library/ArmSvcLib.h><br class=""> #include <Library/DebugLib.h><br class="">@@ -45,33 +46,31 @@ STATIC CONST UINT32 mSpmMinorVerFfa = SPM_MINOR_VERSION_FFA;<br class=""> PI_MM_ARM_TF_CPU_DRIVER_ENTRYPOINT      CpuDriverEntryPoint = NULL;<br class=""> <br class=""> /**<br class="">-  Retrieve a pointer to and print the boot information passed by privileged<br class="">-  secure firmware.<br class="">+  Prints boot information.<br class=""> <br class="">-  @param  [in] SharedBufAddress   The pointer memory shared with privileged<br class="">-                                  firmware.<br class="">+  This function prints the boot information, which is passed by privileged<br class="">+  secure firmware through shared buffer or other mechanism.<br class=""> <br class="">+  @param  [in] PayloadBootInfo   Pointer to StandaloneMM Boot Info structure.<br class=""> **/<br class="">-EFI_SECURE_PARTITION_BOOT_INFO *<br class="">-GetAndPrintBootinformation (<br class="">-  IN VOID                      *SharedBufAddress<br class="">+VOID<br class="">+PrintBootinformation (<br class="">+  IN EFI_SECURE_PARTITION_BOOT_INFO *PayloadBootInfo<br class=""> )<br class=""> {<br class="">-  EFI_SECURE_PARTITION_BOOT_INFO *PayloadBootInfo;<br class="">   EFI_SECURE_PARTITION_CPU_INFO  *PayloadCpuInfo;<br class="">   UINTN                          Index;<br class=""> <br class="">-  PayloadBootInfo = (EFI_SECURE_PARTITION_BOOT_INFO *) SharedBufAddress;<br class=""> <br class="">   if (PayloadBootInfo == NULL) {<br class="">     DEBUG ((DEBUG_ERROR, "PayloadBootInfo NULL\n"));<br class="">-    return NULL;<br class="">+    return;<br class="">   }<br class=""> <br class="">   if (PayloadBootInfo->Header.Version != BOOT_PAYLOAD_VERSION) {<br class="">     DEBUG ((DEBUG_ERROR, "Boot Information Version Mismatch. Current=0x%x, Expected=0x%x.\n",<br class="">             PayloadBootInfo->Header.Version, BOOT_PAYLOAD_VERSION));<br class="">-    return NULL;<br class="">+    return;<br class="">   }<br class=""> <br class="">   DEBUG ((DEBUG_INFO, "NumSpMemRegions - 0x%x\n", PayloadBootInfo->NumSpMemRegions));<br class="">@@ -96,7 +95,7 @@ GetAndPrintBootinformation (<br class=""> <br class="">   if (PayloadCpuInfo == NULL) {<br class="">     DEBUG ((DEBUG_ERROR, "PayloadCpuInfo NULL\n"));<br class="">-    return NULL;<br class="">+    return;<br class="">   }<br class=""> <br class="">   for (Index = 0; Index < PayloadBootInfo->NumCpus; Index++) {<br class="">@@ -105,7 +104,7 @@ GetAndPrintBootinformation (<br class="">     DEBUG ((DEBUG_INFO, "Flags           - 0x%x\n", PayloadCpuInfo[Index].Flags));<br class="">   }<br class=""> <br class="">-  return PayloadBootInfo;<br class="">+  return;<br class=""> }<br class=""> <br class=""> /**<br class="">@@ -194,6 +193,119 @@ DelegatedEventLoop (<br class="">   }<br class=""> }<br class=""> <br class="">+/**<br class="">+  Populates StandAloneMM boot information structure.<br class="">+<br class="">+  This function receives dtb Address, where StMM Boot information specific<br class="">+  properties will be looked out to form the booting structure of type<br class="">+  EFI_SECURE_PARTITION_BOOT_INFO. At first, the properties for StandAloneMM<br class="">+  ConfigSize and  Memory limit will be checked out. Boot information will<br class="">+  be stored at address (Memory Limit - ConfigSize). Thereafter all boot<br class="">+  information specific properties will be parsed and corresponding values<br class="">+  will be obtained.<br class="">+<br class="">+  @param  [out] BootInfo   Pointer, where Boot Info structure will be populated.<br class="">+  @param  [in] DtbAddress  Address of the Device tree from where Boot<br class="">+                           information will be fetched.<br class="">+**/<br class="">+VOID<br class="">+PopulateBootinformation (<br class="">+  OUT EFI_SECURE_PARTITION_BOOT_INFO **BootInfo,<br class="">+  IN VOID   *DtbAddress<br class="">+)<br class="">+{<br class="">+  INT32           Offset;<br class="">+  CONST UINT32    *Property;<br class="">+  CONST UINT64    *Property64;<br class="">+  UINT32          ConfigSize;<br class="">+  UINT64          SpMemLimit;<br class="">+  EFI_SECURE_PARTITION_BOOT_INFO *PayloadBootInfo;<br class="">+<br class="">+  Offset = fdt_node_offset_by_compatible (DtbAddress, -1, "config-size");<br class="">+  if (Offset < 0) {<br class="">+    DEBUG ((DEBUG_WARN, "Total Config Size is not  defined\n"));<br class="">+  } else {<br class="">+    Property = fdt_getprop (DtbAddress, Offset, "size", NULL);<br class="">+    if (Property) {<br class="">+      ConfigSize = fdt32_to_cpu (*Property);<br class="">+      DEBUG ((DEBUG_INFO, "stmm dtb config-size  = 0x%x \n", ConfigSize));<br class="">+    }<br class="">+  }<br class="">+<br class="">+  Offset = fdt_node_offset_by_compatible (DtbAddress, -1, "bootargs");<br class="">+  if (Offset >= 0) {<br class="">+    Property64 =  fdt_getprop (DtbAddress, Offset, "sp_mem_limit", NULL);<br class="">+    SpMemLimit = fdt64_to_cpu (*Property64);<br class="">+  }<br class="">+<br class="">+  if (SpMemLimit && ConfigSize)<br class="">+    PayloadBootInfo =<br class="">+      (EFI_SECURE_PARTITION_BOOT_INFO *)(SpMemLimit - ConfigSize);<br class="">+<br class="">+  if (PayloadBootInfo) {<br class="">+    PayloadBootInfo->SpMemLimit = SpMemLimit;<br class="">+<br class="">+    Property =  fdt_getprop (DtbAddress, Offset, "h_type", NULL);<br class="">+    PayloadBootInfo->Header.Type = (UINT8) fdt32_to_cpu(*Property);<br class="">+<br class="">+    Property =  fdt_getprop (DtbAddress, Offset, "h_version", NULL);<br class="">+    PayloadBootInfo->Header.Version = (UINT8) fdt32_to_cpu(*Property);<br class="">+<br class="">+    Property =  fdt_getprop (DtbAddress, Offset, "h_size", NULL);<br class="">+    PayloadBootInfo->Header.Size = (UINT8) fdt32_to_cpu(*Property);<br class="">+<br class="">+    Property =  fdt_getprop (DtbAddress, Offset, "h_attr", NULL);<br class="">+    PayloadBootInfo->Header.Attr = fdt32_to_cpu(*Property);<br class="">+<br class="">+    Property64 =  fdt_getprop (DtbAddress, Offset, "sp_mem_base", NULL);<br class="">+    PayloadBootInfo->SpMemBase = fdt64_to_cpu(*Property64);<br class="">+<br class="">+    Property64 =  fdt_getprop (DtbAddress, Offset, "sp_image_base", NULL);<br class="">+    PayloadBootInfo->SpImageBase = fdt64_to_cpu(*Property64);<br class="">+<br class="">+    Property64 =  fdt_getprop (DtbAddress, Offset, "sp_stack_base", NULL);<br class="">+    PayloadBootInfo->SpStackBase = fdt64_to_cpu(*Property64);<br class="">+<br class="">+    Property64 =  fdt_getprop (DtbAddress, Offset, "sp_heap_base", NULL);<br class="">+    PayloadBootInfo->SpHeapBase = fdt64_to_cpu(*Property64);<br class="">+<br class="">+    Property64 =  fdt_getprop (DtbAddress, Offset, "sp_ns_comm_buf_base", NULL);<br class="">+    PayloadBootInfo->SpNsCommBufBase = fdt64_to_cpu(*Property64);<br class="">+<br class="">+    Property64 =  fdt_getprop (DtbAddress, Offset, "sp_shared_buf_base", NULL);<br class="">+    PayloadBootInfo->SpSharedBufBase = fdt64_to_cpu(*Property64);<br class="">+<br class="">+    Property64 =  fdt_getprop (DtbAddress, Offset, "sp_image_size", NULL);<br class="">+    PayloadBootInfo->SpImageSize = fdt64_to_cpu(*Property64);<br class="">+<br class="">+    Property64 =  fdt_getprop (DtbAddress, Offset, "sp_pcpu_stack_size", NULL);<br class="">+    PayloadBootInfo->SpPcpuStackSize = fdt64_to_cpu(*Property64);<br class="">+<br class="">+    Property64 =  fdt_getprop (DtbAddress, Offset, "sp_heap_size", NULL);<br class="">+    PayloadBootInfo->SpHeapSize = fdt64_to_cpu(*Property64);<br class="">+<br class="">+    Property64 =  fdt_getprop (DtbAddress, Offset, "sp_ns_comm_buf_size", NULL);<br class="">+    PayloadBootInfo->SpNsCommBufSize = fdt64_to_cpu(*Property64);<br class="">+<br class="">+    Property64 =  fdt_getprop (DtbAddress, Offset, "sp_shared_buf_size", NULL);<br class="">+    PayloadBootInfo->SpPcpuSharedBufSize = fdt64_to_cpu(*Property64);<br class="">+<br class="">+    Property =  fdt_getprop (DtbAddress, Offset, "num_sp_mem_regions", NULL);<br class="">+    PayloadBootInfo->NumSpMemRegions = fdt32_to_cpu(*Property);<br class="">+<br class="">+    Property =  fdt_getprop (DtbAddress, Offset, "num_cpus", NULL);<br class="">+    PayloadBootInfo->NumCpus = fdt32_to_cpu(*Property);<br class="">+<br class="">+    PayloadBootInfo->CpuInfo =<br class="">+      (EFI_SECURE_PARTITION_CPU_INFO *)((UINT64)PayloadBootInfo +<br class="">+                                        sizeof(EFI_SECURE_PARTITION_BOOT_INFO));<br class="">+  }<br class="">+<br class="">+  *BootInfo = PayloadBootInfo;<br class="">+<br class="">+  return;<br class="">+}<br class="">+<br class=""> /**<br class="">   Query the SPM version, check compatibility and return success if compatible.<br class=""> <br class="">@@ -313,6 +425,7 @@ _ModuleEntryPoint (<br class="">   VOID                                    *TeData;<br class="">   UINTN                                   TeDataSize;<br class="">   EFI_PHYSICAL_ADDRESS                    ImageBase;<br class="">+  VOID                                    *DtbAddress;<br class=""> <br class="">   // Get Secure Partition Manager Version Information<br class="">   Status = GetSpmVersion ();<br class="">@@ -320,12 +433,24 @@ _ModuleEntryPoint (<br class="">     goto finish;<br class="">   }<br class=""> <br class="">-  PayloadBootInfo = GetAndPrintBootinformation (SharedBufAddress);<br class="">+  // In cookie1 the DTB address is passed. With reference to DTB, Boot<br class="">+  // info structure can be populated.<br class="">+  // If cookie1 doesn't have any value, then Boot info is copied from<br class="">+  // Sharedbuffer.<br class="">+  if (cookie1) {<br class="">+    DtbAddress = (void *)cookie1;<br class="">+    PopulateBootinformation (&PayloadBootInfo, DtbAddress);<br class="">+  } else {<br class="">+    PayloadBootInfo = (EFI_SECURE_PARTITION_BOOT_INFO *)SharedBufAddress;<br class="">+  }<br class="">+<br class="">   if (PayloadBootInfo == NULL) {<br class="">     Status = EFI_UNSUPPORTED;<br class="">     goto finish;<br class="">   }<br class=""> <br class="">+  PrintBootinformation (PayloadBootInfo);<br class="">+<br class="">   // Locate PE/COFF File information for the Standalone MM core module<br class="">   Status = LocateStandaloneMmCorePeCoffData (<br class="">              (EFI_FIRMWARE_VOLUME_HEADER *) PayloadBootInfo->SpImageBase,<br class="">--<span class="Apple-converted-space"> </span><br class="">2.17.1<br class=""><br class=""><br class=""><br class="">-=-=-=-=-=-=<br class=""><a href="http://groups.io/" style="color: blue; text-decoration: underline;" class="">Groups.io</a><span class="Apple-converted-space"> </span>Links: You receive all messages sent to this group.<br class="">View/Reply Online (#78449):<span class="Apple-converted-space"> </span><a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fedk2.groups.io%2Fg%2Fdevel%2Fmessage%2F78449&amp;data=04%7C01%7Cbret.barkelew%40microsoft.com%7Cb365266c83cb433d1e0108d953806c83%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637632633786132182%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sdata=0DbkyBJe0prgx2vSCVVsrI0GoVbCipcfmbZp83LREjo%3D&amp;reserved=0" style="color: blue; text-decoration: underline;" class="">https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fedk2.groups.io%2Fg%2Fdevel%2Fmessage%2F78449&amp;data=04%7C01%7Cbret.barkelew%40microsoft.com%7Cb365266c83cb433d1e0108d953806c83%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637632633786132182%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sdata=0DbkyBJe0prgx2vSCVVsrI0GoVbCipcfmbZp83LREjo%3D&amp;reserved=0</a><br class="">Mute This Topic:<span class="Apple-converted-space"> </span><a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgroups.io%2Fmt%2F84555304%2F1852292&amp;data=04%7C01%7Cbret.barkelew%40microsoft.com%7Cb365266c83cb433d1e0108d953806c83%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637632633786132182%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sdata=1u3cr0MmJmjrkxtGgfOe1mb8%2F7vUXaoyUr5%2FmC1Uq%2F8%3D&amp;reserved=0" style="color: blue; text-decoration: underline;" class="">https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgroups.io%2Fmt%2F84555304%2F1852292&amp;data=04%7C01%7Cbret.barkelew%40microsoft.com%7Cb365266c83cb433d1e0108d953806c83%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637632633786132182%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sdata=1u3cr0MmJmjrkxtGgfOe1mb8%2F7vUXaoyUr5%2FmC1Uq%2F8%3D&amp;reserved=0</a><br class="">Group Owner:<span class="Apple-converted-space"> </span><a href="mailto:devel+owner@edk2.groups.io" style="color: blue; text-decoration: underline;" class="">devel+owner@edk2.groups.io</a><br class="">Unsubscribe:<span class="Apple-converted-space"> </span><a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fedk2.groups.io%2Fg%2Fdevel%2Funsub&amp;data=04%7C01%7Cbret.barkelew%40microsoft.com%7Cb365266c83cb433d1e0108d953806c83%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637632633786142135%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sdata=Yr%2BSNqWHllfxHkFqBhCyP2TE4IGRLFLm%2FCCWexjB0AM%3D&amp;reserved=0" style="color: blue; text-decoration: underline;" class="">https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fedk2.groups.io%2Fg%2Fdevel%2Funsub&amp;data=04%7C01%7Cbret.barkelew%40microsoft.com%7Cb365266c83cb433d1e0108d953806c83%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637632633786142135%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sdata=Yr%2BSNqWHllfxHkFqBhCyP2TE4IGRLFLm%2FCCWexjB0AM%3D&amp;reserved=0</a><span class="Apple-converted-space"> </span>[<a href="mailto:bret.barkelew@microsoft.com" style="color: blue; text-decoration: underline;" class="">bret.barkelew@microsoft.com</a>]<br class="">-=-=-=-=-=-=<br class=""><br class=""><o:p class=""></o:p></p><div style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div></div></div></blockquote></div><br class=""></div></div></div></div></div></body></html>


 <div width="1" style="color:white;clear:both">_._,_._,_</div> <hr>   Groups.io Links:<p>   You receive all messages sent to this group.    <p> <a target="_blank" href="https://edk2.groups.io/g/devel/message/78461">View/Reply Online (#78461)</a> |    |  <a target="_blank" href="https://groups.io/mt/84557564/1813853">Mute This Topic</a>  | <a href="https://edk2.groups.io/g/devel/post">New Topic</a><br>    <a href="https://edk2.groups.io/g/devel/editsub/1813853">Your Subscription</a> | <a href="mailto:devel+owner@edk2.groups.io">Contact Group Owner</a> |  <a href="https://edk2.groups.io/g/devel/unsub">Unsubscribe</a>  [edk2-devel-archive@redhat.com]<br> <div width="1" style="color:white;clear:both">_._,_._,_</div>