Laszlo, The PCD setting for TSEG size needs to be set for both IA32 and X64 modules in OvmfPkg/OvmfPkgIa32X64.dsc. The this current patch, TSEG PCD is set to DEC default value for PEIMs of 1MB and 2MB for DXE/SMM phase. This causes SMM Core to only see 1MB SMRAM area.
I found this when trying to verify large number of VCPUs with OvmfPkg/OvmfPkgIa32X64.dsc build. In order to test large VCPU numbers, we may also want to increase SMRAM size to more than 2 MB. Thanks, Mike >-----Original Message----- >From: edk2-devel [mailto:[email protected]] On Behalf Of >Laszlo Ersek >Sent: Wednesday, October 14, 2015 3:27 PM >To: [email protected] >Subject: [edk2] [PATCH v3 51/52] OvmfPkg: double the SMRAM (TSEG) size for >the 64-bit DXE phase builds > >When building OVMF with -D SMM_REQUIRE -D SECURE_BOOT_ENABLE, using >gcc-4.8, for the DEBUG build target, and with DEBUG_VERBOSE enabled in >PcdDebugPrintErrorLevel, the build report files report the following >binary sizes for the SMM_CORE and SMM modules, in kilobytes: > > Driver Ia32 X64 > ------------------------ ------ ------- > PiSmmCore 56.75 98.22 > CpuIo2Smm 13.47 22.72 > SmmLockBox 24.62 39.69 > PiSmmCpuDxeSmm 66.06 123.03 > FvbServicesSmm 22.22 37.06 > SmmFaultTolerantWriteDxe 35.19 60.06 > VariableSmm 356.88 640.28 > ------------------------ ------ ------- > Total 575.19 1021.06 > >The 1 MB default for PcdQ35TsegMbytes, from OvmfPkg.dec, is insufficient >for loading the privileged half of the variable driver (VariableSmm) on >X64. This results in many warnings about the dependent drivers being >impossible to dispatch, and ultimately a DXE core assertion failure. > >PcdQ35TsegMbytes can assume the values 1, 2 or 8; set it to 2 for the DSC >files with 64-bit DXE phases. For consistency between the DSC files, spell >out 1 in OvmfPkgIa32.dsc too. > >Contributed-under: TianoCore Contribution Agreement 1.0 >Signed-off-by: Laszlo Ersek <[email protected]> >--- > >Notes: > v3: > - new in v3 > > OvmfPkg/OvmfPkgIa32.dsc | 1 + > OvmfPkg/OvmfPkgIa32X64.dsc | 1 + > OvmfPkg/OvmfPkgX64.dsc | 1 + > 3 files changed, 3 insertions(+) > >diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc >index 9040bdc..660a645 100644 >--- a/OvmfPkg/OvmfPkgIa32.dsc >+++ b/OvmfPkg/OvmfPkgIa32.dsc >@@ -401,6 +401,7 @@ [PcdsFixedAtBuild] > > !if $(SMM_REQUIRE) == TRUE > gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmSyncMode|0x01 >+ gUefiOvmfPkgTokenSpaceGuid.PcdQ35TsegMbytes|1 > !endif > > !if $(SECURE_BOOT_ENABLE) == TRUE >diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc >index 4aa7ba5..16dd785 100644 >--- a/OvmfPkg/OvmfPkgIa32X64.dsc >+++ b/OvmfPkg/OvmfPkgIa32X64.dsc >@@ -407,6 +407,7 @@ [PcdsFixedAtBuild] > [PcdsFixedAtBuild.X64] > !if $(SMM_REQUIRE) == TRUE > gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmSyncMode|0x01 >+ gUefiOvmfPkgTokenSpaceGuid.PcdQ35TsegMbytes|2 > !endif Move PcdQ35TsegMbytes setting above [PcdsFixedAtBuild.X64] !if $(SMM_REQUIRE) == TRUE gUefiOvmfPkgTokenSpaceGuid.PcdQ35TsegMbytes |2 !endif [PcdsFixedAtBuild.X64] !if $(SMM_REQUIRE) == TRUE gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmSyncMode|0x01 !endif > > !if $(SECURE_BOOT_ENABLE) == TRUE >diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc >index 6ea135d..fe4889a 100644 >--- a/OvmfPkg/OvmfPkgX64.dsc >+++ b/OvmfPkg/OvmfPkgX64.dsc >@@ -406,6 +406,7 @@ [PcdsFixedAtBuild] > > !if $(SMM_REQUIRE) == TRUE > gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmSyncMode|0x01 >+ gUefiOvmfPkgTokenSpaceGuid.PcdQ35TsegMbytes|2 > !endif > > !if $(SECURE_BOOT_ENABLE) == TRUE >-- >1.8.3.1 > > >_______________________________________________ >edk2-devel mailing list >[email protected] >https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

