mirror of
https://github.com/acidanthera/audk.git
synced 2025-08-18 16:18:12 +02:00
Removes the following types from the memory type information HOBs produced in the MemoryInitPei PEIM: - `EfiBootServicesCode` - `EfiBootServicesData` - `EfiLoaderCode` - `EfiLoaderData` Our platform has a memory type information validation routine that currently expects those types to be excluded as they would not impact the UEFI memory map since they are not runtime memory types. This follows the guidance in the whitepaper "A Tour Beyond BIOS Memory Map and Practices in UEFI BIOS". https://github.com/tianocore-docs/Docs/raw/master/White_Papers/A_Tour_Beyond_BIOS_Memory_Map_And_Practices_in_UEFI_BIOS_V2.pdf "NOTE: We recommend a platform only define the ReservedMemory, ACPINvs, ACPIReclaim, RuntimeCode, RuntimeData in Memory Type Information table, because OSes only request these regions to be consistent. There is no need to add BootServicesCode, BootServicesData, LoaderCode, LoaderData in memory type information table, because these regions will not be reserved during S4 resume." Since these memory types are not tracked in memory type information any longer it also reduces the number of resets that may need to occur to update memory type buckets that are not needed. Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
96 lines
2.8 KiB
C
96 lines
2.8 KiB
C
/** @file
|
|
|
|
Copyright (c) 2011, ARM Limited. All rights reserved.
|
|
Copyright (c) 2022, Google LLC. All rights reserved.
|
|
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
**/
|
|
|
|
#include <PiPei.h>
|
|
#include <Library/ArmPlatformLib.h>
|
|
#include <Library/DebugLib.h>
|
|
#include <Library/HobLib.h>
|
|
#include <Library/PeimEntryPoint.h>
|
|
#include <Library/PeiServicesLib.h>
|
|
#include <Library/PcdLib.h>
|
|
#include <Guid/MemoryTypeInformation.h>
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
MemoryPeim (
|
|
IN EFI_PHYSICAL_ADDRESS UefiMemoryBase,
|
|
IN UINT64 UefiMemorySize
|
|
);
|
|
|
|
/**
|
|
Build the memory type information HOB that describes how many pages of each
|
|
type to preallocate when initializing the GCD memory map.
|
|
**/
|
|
VOID
|
|
EFIAPI
|
|
BuildMemoryTypeInformationHob (
|
|
VOID
|
|
)
|
|
{
|
|
EFI_MEMORY_TYPE_INFORMATION Info[6];
|
|
|
|
Info[0].Type = EfiACPIReclaimMemory;
|
|
Info[0].NumberOfPages = FixedPcdGet32 (PcdMemoryTypeEfiACPIReclaimMemory);
|
|
Info[1].Type = EfiACPIMemoryNVS;
|
|
Info[1].NumberOfPages = FixedPcdGet32 (PcdMemoryTypeEfiACPIMemoryNVS);
|
|
Info[2].Type = EfiReservedMemoryType;
|
|
Info[2].NumberOfPages = FixedPcdGet32 (PcdMemoryTypeEfiReservedMemoryType);
|
|
Info[3].Type = EfiRuntimeServicesData;
|
|
Info[3].NumberOfPages = FixedPcdGet32 (PcdMemoryTypeEfiRuntimeServicesData);
|
|
Info[4].Type = EfiRuntimeServicesCode;
|
|
Info[4].NumberOfPages = FixedPcdGet32 (PcdMemoryTypeEfiRuntimeServicesCode);
|
|
// Terminator for the list
|
|
Info[5].Type = EfiMaxMemoryType;
|
|
Info[5].NumberOfPages = 0;
|
|
|
|
BuildGuidDataHob (&gEfiMemoryTypeInformationGuid, &Info, sizeof (Info));
|
|
}
|
|
|
|
/**
|
|
Module entry point.
|
|
|
|
@param[in] FileHandle Handle of the file being invoked.
|
|
@param[in] PeiServices Describes the list of possible PEI Services.
|
|
|
|
@return EFI_SUCCESS unless the operation failed.
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
InitializeMemory (
|
|
IN EFI_PEI_FILE_HANDLE FileHandle,
|
|
IN CONST EFI_PEI_SERVICES **PeiServices
|
|
)
|
|
{
|
|
UINTN UefiMemoryBase;
|
|
EFI_STATUS Status;
|
|
|
|
ASSERT (FixedPcdGet64 (PcdSystemMemoryBase) < (UINT64)MAX_ALLOC_ADDRESS);
|
|
|
|
//
|
|
// Put the permanent PEI memory in the first 128 MiB of DRAM so that
|
|
// it is covered by the statically configured ID map.
|
|
//
|
|
UefiMemoryBase = (UINTN)FixedPcdGet64 (PcdSystemMemoryBase) + SIZE_128MB
|
|
- FixedPcdGet32 (PcdSystemMemoryUefiRegionSize);
|
|
|
|
Status = PeiServicesInstallPeiMemory (
|
|
UefiMemoryBase,
|
|
FixedPcdGet32 (PcdSystemMemoryUefiRegionSize)
|
|
);
|
|
ASSERT_EFI_ERROR (Status);
|
|
|
|
Status = MemoryPeim (
|
|
UefiMemoryBase,
|
|
FixedPcdGet32 (PcdSystemMemoryUefiRegionSize)
|
|
);
|
|
ASSERT_EFI_ERROR (Status);
|
|
|
|
return Status;
|
|
}
|