+ //\r
+ // Get necessary PPI\r
+ //\r
+ Status = PeiServicesLocatePpi (\r
+ &gEfiPeiReadOnlyVariable2PpiGuid, // GUID\r
+ 0, // INSTANCE\r
+ NULL, // EFI_PEI_PPI_DESCRIPTOR\r
+ (VOID **)&VariableServices // PPI\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ //\r
+ // Detect MOR request by the OS.\r
+ //\r
+ MorControl = 0;\r
+ DataSize = sizeof (MorControl);\r
+ Status = VariableServices->GetVariable (\r
+ VariableServices,\r
+ MEMORY_OVERWRITE_REQUEST_VARIABLE_NAME,\r
+ &gEfiMemoryOverwriteControlDataGuid,\r
+ NULL,\r
+ &DataSize,\r
+ &MorControl\r
+ );\r
+ //\r
+ // If OS requested a memory overwrite perform it now for Embedded SRAM\r
+ //\r
+ if (MOR_CLEAR_MEMORY_VALUE (MorControl)) {\r
+ DEBUG ((EFI_D_INFO, "Clear Embedded SRAM per MOR request.\n"));\r
+ if (PcdGet32 (PcdESramMemorySize) > 0) {\r
+ if (PcdGet32 (PcdEsramStage1Base) == 0) {\r
+ //\r
+ // ZeroMem() generates an ASSERT() if Buffer parameter is NULL.\r
+ // Clear byte at 0 and start clear operation at address 1.\r
+ //\r
+ *(UINT8 *)(0) = 0;\r
+ ZeroMem ((VOID *)1, (UINTN)PcdGet32 (PcdESramMemorySize) - 1);\r
+ } else {\r
+ ZeroMem (\r
+ (VOID *)(UINTN)PcdGet32 (PcdEsramStage1Base),\r
+ (UINTN)PcdGet32 (PcdESramMemorySize)\r
+ );\r
+ }\r
+ }\r
+ }\r
+\r