//\r
ASSERT (FeaturePcdGet (PcdSmmSmramRequire));\r
\r
+ InitQ35TsegMbytes ();\r
GetStates (&mAccess2.LockState, &mAccess2.OpenState);\r
return gBS->InstallMultipleProtocolInterfaces (&ImageHandle,\r
&gEfiSmmAccess2ProtocolGuid, &mAccess2,\r
[FeaturePcd]\r
gUefiOvmfPkgTokenSpaceGuid.PcdSmmSmramRequire\r
\r
+[Pcd]\r
+ gUefiOvmfPkgTokenSpaceGuid.PcdQ35TsegMbytes\r
+\r
[Depex]\r
TRUE\r
//\r
// Set TSEG Memory Base.\r
//\r
+ InitQ35TsegMbytes ();\r
PciWrite32 (DRAMC_REGISTER_Q35 (MCH_TSEGMB),\r
- (TopOfLowRamMb - FixedPcdGet16 (PcdQ35TsegMbytes)) << MCH_TSEGMB_MB_SHIFT);\r
+ (TopOfLowRamMb - mQ35TsegMbytes) << MCH_TSEGMB_MB_SHIFT);\r
\r
//\r
// Set TSEG size, and disable TSEG visibility outside of SMM. Note that the\r
// *restricted* to SMM.\r
//\r
EsmramcVal &= ~(UINT32)MCH_ESMRAMC_TSEG_MASK;\r
- EsmramcVal |= FixedPcdGet16 (PcdQ35TsegMbytes) == 8 ? MCH_ESMRAMC_TSEG_8MB :\r
- FixedPcdGet16 (PcdQ35TsegMbytes) == 2 ? MCH_ESMRAMC_TSEG_2MB :\r
+ EsmramcVal |= mQ35TsegMbytes == 8 ? MCH_ESMRAMC_TSEG_8MB :\r
+ mQ35TsegMbytes == 2 ? MCH_ESMRAMC_TSEG_2MB :\r
MCH_ESMRAMC_TSEG_1MB;\r
EsmramcVal |= MCH_ESMRAMC_T_EN;\r
PciWrite8 (DRAMC_REGISTER_Q35 (MCH_ESMRAMC), EsmramcVal);\r
[FeaturePcd]\r
gUefiOvmfPkgTokenSpaceGuid.PcdSmmSmramRequire\r
\r
-[FixedPcd]\r
+[Pcd]\r
gUefiOvmfPkgTokenSpaceGuid.PcdQ35TsegMbytes\r
\r
[Ppis]\r
gPeiSmmAccessPpiGuid ## PRODUCES\r
\r
[Depex]\r
- TRUE\r
+ gEfiPeiMemoryDiscoveredPpiGuid\r
#include <Guid/AcpiS3Context.h>\r
#include <IndustryStandard/Q35MchIch9.h>\r
#include <Library/DebugLib.h>\r
+#include <Library/PcdLib.h>\r
#include <Library/PciLib.h>\r
\r
#include "SmramInternal.h"\r
\r
+//\r
+// The value of PcdQ35TsegMbytes is saved into this variable at module startup.\r
+//\r
+UINT16 mQ35TsegMbytes;\r
+\r
+/**\r
+ Save PcdQ35TsegMbytes into mQ35TsegMbytes.\r
+**/\r
+VOID\r
+InitQ35TsegMbytes (\r
+ VOID\r
+ )\r
+{\r
+ mQ35TsegMbytes = PcdGet16 (PcdQ35TsegMbytes);\r
+}\r
+\r
/**\r
Read the MCH_SMRAM and ESMRAMC registers, and update the LockState and\r
OpenState fields in the PEI_SMM_ACCESS_PPI / EFI_SMM_ACCESS2_PROTOCOL object,\r
DescIdxCount = 2\r
} DESCRIPTOR_INDEX;\r
\r
+//\r
+// The value of PcdQ35TsegMbytes is saved into this variable at module startup.\r
+//\r
+extern UINT16 mQ35TsegMbytes;\r
+\r
+/**\r
+ Save PcdQ35TsegMbytes into mQ35TsegMbytes.\r
+**/\r
+VOID\r
+InitQ35TsegMbytes (\r
+ VOID\r
+ );\r
+\r
/**\r
Read the MCH_SMRAM and ESMRAMC registers, and update the LockState and\r
OpenState fields in the PEI_SMM_ACCESS_PPI / EFI_SMM_ACCESS2_PROTOCOL object,\r