diff options
author | YuanhaoXie <yuanhao.xie@intel.com> | 2023-09-12 11:24:47 +0800 |
---|---|---|
committer | mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> | 2023-10-09 08:22:02 +0000 |
commit | 1d0fd0bb3d182a699b07129a2560acf14bf669ab (patch) | |
tree | 9743c209dcb4c765a679023c3cd5b45740a237d1 /UefiCpuPkg/Library | |
parent | 1217f59d23b7c1cc6fa3be658f9ec00bfe0854c0 (diff) | |
download | edk2-1d0fd0bb3d182a699b07129a2560acf14bf669ab.zip edk2-1d0fd0bb3d182a699b07129a2560acf14bf669ab.tar.gz edk2-1d0fd0bb3d182a699b07129a2560acf14bf669ab.tar.bz2 |
UefiCpuPkg/MtrrUnitTest: Update UnitTestMtrrSetAllMtrrs().
Update UnitTestMtrrSetAllMtrrs() for the case that fixed MtrrLib
is not always supported.
Signed-off-by: Yuanhao Xie <yuanhao.xie@intel.com>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Rahul Kumar <rahul1.kumar@intel.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Ray Ni <ray.ni@intel.com>
Reviewed-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
Diffstat (limited to 'UefiCpuPkg/Library')
-rw-r--r-- | UefiCpuPkg/Library/MtrrLib/UnitTest/MtrrLibUnitTest.c | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/UefiCpuPkg/Library/MtrrLib/UnitTest/MtrrLibUnitTest.c b/UefiCpuPkg/Library/MtrrLib/UnitTest/MtrrLibUnitTest.c index b42edb0..339e95c 100644 --- a/UefiCpuPkg/Library/MtrrLib/UnitTest/MtrrLibUnitTest.c +++ b/UefiCpuPkg/Library/MtrrLib/UnitTest/MtrrLibUnitTest.c @@ -799,13 +799,10 @@ UnitTestMtrrGetAllMtrrs ( /**
Unit test of MtrrLib service MtrrSetAllMtrrs()
-
@param[in] Context Ignored
-
@retval UNIT_TEST_PASSED The Unit test has completed and the test
case was successful.
@retval UNIT_TEST_ERROR_TEST_FAILED A test case assertion has failed.
-
**/
UNIT_TEST_STATUS
EFIAPI
@@ -814,35 +811,43 @@ UnitTestMtrrSetAllMtrrs ( )
{
MTRR_SETTINGS *Result;
- MTRR_SETTINGS Mtrrs;
+ MTRR_SETTINGS ExpectedMtrrs;
UINT32 Index;
MSR_IA32_MTRR_DEF_TYPE_REGISTER Default;
MTRR_LIB_SYSTEM_PARAMETER SystemParameter;
MTRR_LIB_TEST_CONTEXT *LocalContext;
+ UINTN MsrIndex;
+ UINTN ByteIndex;
+ UINT64 MsrValue;
LocalContext = (MTRR_LIB_TEST_CONTEXT *)Context;
-
CopyMem (&SystemParameter, LocalContext->SystemParameter, sizeof (SystemParameter));
InitializeMtrrRegs (&SystemParameter);
-
Default.Uint64 = 0;
Default.Bits.E = 1;
Default.Bits.FE = 1;
Default.Bits.Type = GenerateRandomCacheType ();
-
- ZeroMem (&Mtrrs, sizeof (Mtrrs));
- Mtrrs.MtrrDefType = Default.Uint64;
+ ZeroMem (&ExpectedMtrrs, sizeof (ExpectedMtrrs));
+ ExpectedMtrrs.MtrrDefType = Default.Uint64;
for (Index = 0; Index < SystemParameter.VariableMtrrCount; Index++) {
- GenerateRandomMtrrPair (SystemParameter.PhysicalAddressBits, GenerateRandomCacheType (), &Mtrrs.Variables.Mtrr[Index], NULL);
+ GenerateRandomMtrrPair (SystemParameter.PhysicalAddressBits, GenerateRandomCacheType (), &ExpectedMtrrs.Variables.Mtrr[Index], NULL);
}
- Result = MtrrSetAllMtrrs (&Mtrrs);
- UT_ASSERT_EQUAL ((UINTN)Result, (UINTN)&Mtrrs);
+ for (MsrIndex = 0; MsrIndex < ARRAY_SIZE (mFixedMtrrsIndex); MsrIndex++) {
+ MsrValue = 0;
+ for (ByteIndex = 0; ByteIndex < sizeof (UINT64); ByteIndex++) {
+ MsrValue = MsrValue | LShiftU64 (GenerateRandomCacheType (), ByteIndex * 8);
+ }
+
+ ExpectedMtrrs.Fixed.Mtrr[MsrIndex] = MsrValue;
+ }
- UT_ASSERT_EQUAL (AsmReadMsr64 (MSR_IA32_MTRR_DEF_TYPE), Mtrrs.MtrrDefType);
+ Result = MtrrSetAllMtrrs (&ExpectedMtrrs);
+ UT_ASSERT_EQUAL ((UINTN)Result, (UINTN)&ExpectedMtrrs);
+ UT_ASSERT_EQUAL (AsmReadMsr64 (MSR_IA32_MTRR_DEF_TYPE), ExpectedMtrrs.MtrrDefType);
for (Index = 0; Index < SystemParameter.VariableMtrrCount; Index++) {
- UT_ASSERT_EQUAL (AsmReadMsr64 (MSR_IA32_MTRR_PHYSBASE0 + (Index << 1)), Mtrrs.Variables.Mtrr[Index].Base);
- UT_ASSERT_EQUAL (AsmReadMsr64 (MSR_IA32_MTRR_PHYSMASK0 + (Index << 1)), Mtrrs.Variables.Mtrr[Index].Mask);
+ UT_ASSERT_EQUAL (AsmReadMsr64 (MSR_IA32_MTRR_PHYSBASE0 + (Index << 1)), ExpectedMtrrs.Variables.Mtrr[Index].Base);
+ UT_ASSERT_EQUAL (AsmReadMsr64 (MSR_IA32_MTRR_PHYSMASK0 + (Index << 1)), ExpectedMtrrs.Variables.Mtrr[Index].Mask);
}
return UNIT_TEST_PASSED;
|