/** @file
Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include
#include
#include
#include
#include
#include
EFI_STATUS
TestPointCheckMtrr (
IN BOOLEAN IsForDxe
);
EFI_STATUS
TestPointDumpHob (
IN BOOLEAN PhitHobOnly
);
EFI_STATUS
TestPointCheckFvInfo (
VOID
);
EFI_STATUS
TestPointCheckMemoryResource (
VOID
);
EFI_STATUS
TestPointCheckSmramHob (
VOID
);
EFI_STATUS
TestPointCheckSmmInfoPei (
VOID
);
EFI_STATUS
TestPointCheckPciBusMaster (
VOID
);
EFI_STATUS
TestPointVtdEngine (
VOID
);
GLOBAL_REMOVE_IF_UNREFERENCED ADAPTER_INFO_PLATFORM_TEST_POINT_STRUCT mTestPointStruct = {
PLATFORM_TEST_POINT_VERSION,
PLATFORM_TEST_POINT_ROLE_PLATFORM_IBV,
{TEST_POINT_IMPLEMENTATION_ID_PLATFORM_PEI},
TEST_POINT_FEATURE_SIZE,
{0}, // FeaturesImplemented
{0}, // FeaturesVerified
0,
};
UINT8 *
GetFeatureImplemented (
VOID
)
{
EFI_STATUS Status;
VOID *TestPoint;
UINTN TestPointSize;
Status = TestPointLibGetTable (
PLATFORM_TEST_POINT_ROLE_PLATFORM_IBV,
TEST_POINT_IMPLEMENTATION_ID_PLATFORM_PEI,
&TestPoint,
&TestPointSize
);
ASSERT_EFI_ERROR(Status);
return (UINT8 *)TestPoint + sizeof(ADAPTER_INFO_PLATFORM_TEST_POINT);
}
/**
This service tests debug configuration after debug device initialization.
Test subject: Debug Capability
Test overview: Dumps a struct of debug configuration parameters to the debug log.
Reporting mechanism: Serial port shows the debug log.
@retval EFI_SUCCESS The test point check was performed successfully.
@retval EFI_UNSUPPORTED The test point check is not supported on this platform.
**/
EFI_STATUS
EFIAPI
TestPointDebugInitDone (
VOID
)
{
UINT8 *FeatureImplemented;
FeatureImplemented = GetFeatureImplemented ();
//
// If code can run here, always set TEMP INIT DONE here.
//
TestPointLibSetFeaturesVerified (
PLATFORM_TEST_POINT_ROLE_PLATFORM_IBV,
NULL,
0,
TEST_POINT_BYTE0_TEMP_INIT_DONE
);
if ((FeatureImplemented[0] & TEST_POINT_BYTE0_DEBUG_INIT_DONE) == 0) {
return EFI_SUCCESS;
}
DEBUG ((DEBUG_INFO, "======== TestPointDebugInitDone - Enter\n"));
DEBUG ((DEBUG_INFO, "!!! DebugInitialized !!!\n"));
TestPointLibSetFeaturesVerified (
PLATFORM_TEST_POINT_ROLE_PLATFORM_IBV,
NULL,
0,
TEST_POINT_BYTE0_DEBUG_INIT_DONE
);
DEBUG ((DEBUG_INFO, "======== TestPointDebugInitDone - Exit\n"));
return EFI_SUCCESS;
}
/**
This service verifies MTRR settings after memory is discovered.
Test subject: MTRRs after memory is discovered.
Test overview: Verifies MTRR settings.
Reporting mechanism: Set ADAPTER_INFO_PLATFORM_TEST_POINT_STRUCT.
Dumps results to the debug log.
Examples of settings verified: No MTRR overlap, PEI data memory is writeback, and flash region is WP, MMIO is UC, etc.
@retval EFI_SUCCESS The test point check was performed successfully.
@retval EFI_UNSUPPORTED The test point check is not supported on this platform.
**/
EFI_STATUS
EFIAPI
TestPointMemoryDiscoveredMtrrFunctional (
VOID
)
{
EFI_STATUS Status;
BOOLEAN Result;
UINT8 *FeatureImplemented;
FeatureImplemented = GetFeatureImplemented ();
if ((FeatureImplemented[1] & TEST_POINT_BYTE1_MEMORY_DISCOVERED_MTRR_FUNCTIONAL) == 0) {
return EFI_SUCCESS;
}
DEBUG ((DEBUG_INFO, "======== TestPointMemoryDiscoveredMtrrFunctional - Enter\n"));
TestPointDumpHob (FALSE);
Result = TRUE;
Status = TestPointCheckMtrr (FALSE);
if (EFI_ERROR(Status)) {
Result = FALSE;
}
if (Result) {
TestPointLibSetFeaturesVerified (
PLATFORM_TEST_POINT_ROLE_PLATFORM_IBV,
NULL,
1,
TEST_POINT_BYTE1_MEMORY_DISCOVERED_MTRR_FUNCTIONAL
);
}
DEBUG ((DEBUG_INFO, "======== TestPointMemoryDiscoveredMtrrFunctional - Exit\n"));
return EFI_SUCCESS;
}
/**
This service verifies discovered memory resources after memory is discovered.
Test subject: Resource description HOBs.
Test overview: No memory resource overlap.
Reporting mechanism: Set ADAPTER_INFO_PLATFORM_TEST_POINT_STRUCT.
Dumps results to the debug log.
@retval EFI_SUCCESS The test point check was performed successfully.
@retval EFI_UNSUPPORTED The test point check is not supported on this platform.
**/
EFI_STATUS
EFIAPI
TestPointMemoryDiscoveredMemoryResourceFunctional (
VOID
)
{
EFI_STATUS Status;
BOOLEAN Result;
UINT8 *FeatureImplemented;
FeatureImplemented = GetFeatureImplemented ();
if ((FeatureImplemented[1] & TEST_POINT_BYTE1_MEMORY_DISCOVERED_MEMORY_RESOURCE_FUNCTIONAL) == 0) {
return EFI_SUCCESS;
}
DEBUG ((DEBUG_INFO, "======== TestPointMemoryDiscoveredMemoryResourceFunctional - Enter\n"));
Result = TRUE;
Status = TestPointCheckMemoryResource ();
if (EFI_ERROR(Status)) {
Result = FALSE;
}
if (Result) {
TestPointLibSetFeaturesVerified (
PLATFORM_TEST_POINT_ROLE_PLATFORM_IBV,
NULL,
1,
TEST_POINT_BYTE1_MEMORY_DISCOVERED_MEMORY_RESOURCE_FUNCTIONAL
);
}
DEBUG ((DEBUG_INFO, "======== TestPointMemoryDiscoveredMemoryResourceFunctional - Exit\n"));
return EFI_SUCCESS;
}
/**
This service verifies the validity of published firmware volume resources.
Test subject: FV HOB and FV Info PPI.
Test overview: FV HOB and FV Info PPI.
Reporting mechanism: Set ADAPTER_INFO_PLATFORM_TEST_POINT_STRUCT.
Dumps results to the debug log.
@retval EFI_SUCCESS The test point check was performed successfully.
@retval EFI_UNSUPPORTED The test point check is not supported on this platform.
**/
EFI_STATUS
EFIAPI
TestPointMemoryDiscoveredFvInfoFunctional (
VOID
)
{
EFI_STATUS Status;
BOOLEAN Result;
UINT8 *FeatureImplemented;
FeatureImplemented = GetFeatureImplemented ();
if ((FeatureImplemented[1] & TEST_POINT_BYTE1_MEMORY_DISCOVERED_FV_INFO_FUNCTIONAL) == 0) {
return EFI_SUCCESS;
}
DEBUG ((DEBUG_INFO, "======== TestPointMemoryDiscoveredFvInfoFunctional - Enter\n"));
Result = TRUE;
Status = TestPointCheckFvInfo ();
if (EFI_ERROR(Status)) {
Result = FALSE;
}
if (Result) {
TestPointLibSetFeaturesVerified (
PLATFORM_TEST_POINT_ROLE_PLATFORM_IBV,
NULL,
1,
TEST_POINT_BYTE1_MEMORY_DISCOVERED_FV_INFO_FUNCTIONAL
);
}
DEBUG ((DEBUG_INFO, "======== TestPointMemoryDiscoveredFvInfoFunctional - Exit\n"));
return EFI_SUCCESS;
}
/**
This service verifies DMA protection configuration in PEI after memory is discovered.
Test subject: DMA protection.
Test overview: DMA protection in PEI.
Reporting mechanism: Set ADAPTER_INFO_PLATFORM_TEST_POINT_STRUCT.
@retval EFI_SUCCESS The test point check was performed successfully.
@retval EFI_UNSUPPORTED The test point check is not supported on this platform.
**/
EFI_STATUS
EFIAPI
TestPointMemoryDiscoveredDmaProtectionEnabled (
VOID
)
{
EFI_STATUS Status;
BOOLEAN Result;
UINT8 *FeatureImplemented;
FeatureImplemented = GetFeatureImplemented ();
if ((FeatureImplemented[1] & TEST_POINT_BYTE1_MEMORY_DISCOVERED_DMA_PROTECTION_ENABLED) == 0) {
return EFI_SUCCESS;
}
DEBUG ((DEBUG_INFO, "======== TestPointMemoryDiscoveredDmaProtectionEnabled - Enter\n"));
Result = TRUE;
Status = TestPointVtdEngine ();
if (EFI_ERROR(Status)) {
Result = FALSE;
}
if (Result) {
TestPointLibSetFeaturesVerified (
PLATFORM_TEST_POINT_ROLE_PLATFORM_IBV,
NULL,
1,
TEST_POINT_BYTE1_MEMORY_DISCOVERED_DMA_PROTECTION_ENABLED
);
}
DEBUG ((DEBUG_INFO, "======== TestPointMemoryDiscoveredDmaProtectionEnabled - Exit\n"));
return EFI_SUCCESS;
}
/**
This service verifies system resources at the end of PEI.
Test subject: Resource HOB and SMRAM HOB.
Test overview: SMRAM configuration and no system resource overlap.
Reporting mechanism: Set ADAPTER_INFO_PLATFORM_TEST_POINT_STRUCT.
Dumps results to the debug log.
@retval EFI_SUCCESS The test point check was performed successfully.
@retval EFI_UNSUPPORTED The test point check is not supported on this platform.
**/
EFI_STATUS
EFIAPI
TestPointEndOfPeiSystemResourceFunctional (
VOID
)
{
EFI_STATUS Status;
BOOLEAN Result;
UINT8 *FeatureImplemented;
FeatureImplemented = GetFeatureImplemented ();
if ((FeatureImplemented[2] & TEST_POINT_BYTE2_END_OF_PEI_SYSTEM_RESOURCE_FUNCTIONAL) == 0) {
return EFI_SUCCESS;
}
DEBUG ((DEBUG_INFO, "======== TestPointEndOfPeiSystemResourceFunctional - Enter\n"));
TestPointDumpHob (FALSE);
Result = TRUE;
Status = TestPointCheckSmmInfoPei ();
if (EFI_ERROR(Status)) {
Result = FALSE;
}
if (Result) {
TestPointLibSetFeaturesVerified (
PLATFORM_TEST_POINT_ROLE_PLATFORM_IBV,
NULL,
2,
TEST_POINT_BYTE2_END_OF_PEI_SYSTEM_RESOURCE_FUNCTIONAL
);
}
DEBUG ((DEBUG_INFO, "======== TestPointEndOfPeiSystemResourceFunctional - Exit\n"));
return EFI_SUCCESS;
}
/**
This service verifies MTRR settings at the end of PEI.
Test subject: MTRRs after end of PEI.
Test overview: Verifies MTRR settings.
Reporting mechanism: Set ADAPTER_INFO_PLATFORM_TEST_POINT_STRUCT.
Dumps results to the debug log.
Examples of settings verified: No MTRR overlap, DXE data memory is writeback, flash region may be UC, MMIO is UC, etc.
@retval EFI_SUCCESS The test point check was performed successfully.
@retval EFI_UNSUPPORTED The test point check is not supported on this platform.
**/
EFI_STATUS
EFIAPI
TestPointEndOfPeiMtrrFunctional (
VOID
)
{
EFI_STATUS Status;
BOOLEAN Result;
UINT8 *FeatureImplemented;
FeatureImplemented = GetFeatureImplemented ();
if ((FeatureImplemented[2] & TEST_POINT_BYTE2_END_OF_PEI_MTRR_FUNCTIONAL) == 0) {
return EFI_SUCCESS;
}
DEBUG ((DEBUG_INFO, "======== TestPointEndOfPeiMtrrFunctional - Enter\n"));
Result = TRUE;
Status = TestPointCheckMtrr (TRUE);
if (EFI_ERROR(Status)) {
Result = FALSE;
}
if (Result) {
TestPointLibSetFeaturesVerified (
PLATFORM_TEST_POINT_ROLE_PLATFORM_IBV,
NULL,
2,
TEST_POINT_BYTE2_END_OF_PEI_MTRR_FUNCTIONAL
);
}
DEBUG ((DEBUG_INFO, "======== TestPointEndOfPeiMtrrFunctional - Exit\n"));
return EFI_SUCCESS;
}
/**
This service verifies bus master enable (BME) is disabled at the end of PEI.
Test subject: PCI device BME.
Test overview: Verify BME is cleared.
Reporting mechanism: Set ADAPTER_INFO_PLATFORM_TEST_POINT_STRUCT.
Dumps results to the debug log.
@retval EFI_SUCCESS The test point check was performed successfully.
@retval EFI_UNSUPPORTED The test point check is not supported on this platform.
**/
EFI_STATUS
EFIAPI
TestPointEndOfPeiPciBusMasterDisabled (
VOID
)
{
EFI_STATUS Status;
BOOLEAN Result;
UINT8 *FeatureImplemented;
FeatureImplemented = GetFeatureImplemented ();
if ((FeatureImplemented[2] & TEST_POINT_BYTE2_END_OF_PEI_PCI_BUS_MASTER_DISABLED) == 0) {
return EFI_SUCCESS;
}
DEBUG ((DEBUG_INFO, "======== TestPointEndOfPeiPciBusMasterDisabled - Enter\n"));
Result = TRUE;
Status = TestPointCheckPciBusMaster ();
if (EFI_ERROR(Status)) {
Result = FALSE;
}
if (Result) {
TestPointLibSetFeaturesVerified (
PLATFORM_TEST_POINT_ROLE_PLATFORM_IBV,
NULL,
2,
TEST_POINT_BYTE2_END_OF_PEI_PCI_BUS_MASTER_DISABLED
);
}
DEBUG ((DEBUG_INFO, "======== TestPointEndOfPeiPciBusMasterDisabled - Exit\n"));
return EFI_SUCCESS;
}
/**
Initialize feature data.
@param[in] Role The test point role being requested.
**/
VOID
InitData (
IN UINT32 Role
)
{
EFI_STATUS Status;
UINT8 FeatureImplemented[TEST_POINT_FEATURE_SIZE];
ADAPTER_INFO_PLATFORM_TEST_POINT_STRUCT TestPointStruct;
ASSERT (PcdGetSize(PcdTestPointIbvPlatformFeature) == sizeof(FeatureImplemented));
CopyMem (FeatureImplemented, PcdGetPtr(PcdTestPointIbvPlatformFeature), sizeof(FeatureImplemented));
CopyMem (&TestPointStruct, &mTestPointStruct, sizeof(TestPointStruct));
TestPointStruct.Role = Role;
CopyMem (TestPointStruct.FeaturesImplemented, FeatureImplemented, sizeof(FeatureImplemented));
Status = TestPointLibSetTable (
&TestPointStruct,
sizeof(TestPointStruct)
);
if (EFI_ERROR (Status)) {
if (Status != EFI_ALREADY_STARTED) {
ASSERT_EFI_ERROR (Status);
}
}
}
/**
The library constructor.
@param ImageHandle The firmware allocated handle for the EFI image.
@param SystemTable A pointer to the EFI System Table.
@retval EFI_SUCCESS The function always return EFI_SUCCESS.
**/
EFI_STATUS
EFIAPI
PeiTestPointCheckLibConstructor (
IN EFI_PEI_FILE_HANDLE FileHandle,
IN CONST EFI_PEI_SERVICES **PeiServices
)
{
InitData (PLATFORM_TEST_POINT_ROLE_PLATFORM_IBV);
return EFI_SUCCESS;
}