<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&data=04%7C01%7Cbret.barkelew%40microsoft.com%7Cb365266c83cb433d1e0108d953806c83%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637632633786132182%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=gJw%2BH8Dj9lih1DNrIzbNPToJn9nH%2BHqpvpSr2JJrS4I%3D&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&data=04%7C01%7Cbret.barkelew%40microsoft.com%7Cb365266c83cb433d1e0108d953806c83%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637632633786132182%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=gJw%2BH8Dj9lih1DNrIzbNPToJn9nH%2BHqpvpSr2JJrS4I%3D&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&data=04%7C01%7Cbret.barkelew%40microsoft.com%7Cb365266c83cb433d1e0108d953806c83%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637632633786132182%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=0DbkyBJe0prgx2vSCVVsrI0GoVbCipcfmbZp83LREjo%3D&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&data=04%7C01%7Cbret.barkelew%40microsoft.com%7Cb365266c83cb433d1e0108d953806c83%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637632633786132182%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=0DbkyBJe0prgx2vSCVVsrI0GoVbCipcfmbZp83LREjo%3D&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&data=04%7C01%7Cbret.barkelew%40microsoft.com%7Cb365266c83cb433d1e0108d953806c83%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637632633786132182%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=1u3cr0MmJmjrkxtGgfOe1mb8%2F7vUXaoyUr5%2FmC1Uq%2F8%3D&reserved=0" style="color: blue; text-decoration: underline;" class="">https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgroups.io%2Fmt%2F84555304%2F1852292&data=04%7C01%7Cbret.barkelew%40microsoft.com%7Cb365266c83cb433d1e0108d953806c83%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637632633786132182%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=1u3cr0MmJmjrkxtGgfOe1mb8%2F7vUXaoyUr5%2FmC1Uq%2F8%3D&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&data=04%7C01%7Cbret.barkelew%40microsoft.com%7Cb365266c83cb433d1e0108d953806c83%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637632633786142135%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=Yr%2BSNqWHllfxHkFqBhCyP2TE4IGRLFLm%2FCCWexjB0AM%3D&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&data=04%7C01%7Cbret.barkelew%40microsoft.com%7Cb365266c83cb433d1e0108d953806c83%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637632633786142135%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=Yr%2BSNqWHllfxHkFqBhCyP2TE4IGRLFLm%2FCCWexjB0AM%3D&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>