Re: [edk2] [PATCH v4 10/41] OvmfPkg: pull in the SMM IPL and SMM core
Reviewed-by: Jordan JustenOn 2015-11-03 13:00:46, Laszlo Ersek wrote: > "MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf" (a DXE_RUNTIME_DRIVER) > implements the SMM Initial Program Loader. It produces > EFI_SMM_BASE2_PROTOCOL and EFI_SMM_COMMUNICATION_PROTOCOL, relying on: > - EFI_SMM_ACCESS2_PROTOCOL > (provided by OvmfPkg/SmmAccess/SmmAccess2Dxe.inf), > - EFI_SMM_CONTROL2_PROTOCOL > (provided by OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf). > > (The SMM IPL also depends on EFI_SMM_CONFIGURATION_PROTOCOL_GUID, but this > dependency is not enforced in the entry point. A protocol notify callback > is registered instead, hence we can delay providing that protocol via the > PiSmmCpuDxeSmm driver that is (to be) imported from > Quark_EDKII_v1.1.0/IA32FamilyCpuBasePkg/.) > > The SMM IPL loads the SMM core into SMRAM and executes it from there. > Therefore we add the SMM core to the build as well. > > For the SMM core, a number of library classes need to be resolved. > Furthermore, each FDF file must provide the GenFds.py BaseTools utility > with a build rule for SMM_CORE; we copy the DXE_CORE's rule. > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Laszlo Ersek > --- > OvmfPkg/OvmfPkgIa32.dsc| 21 > OvmfPkg/OvmfPkgIa32X64.dsc | 21 > OvmfPkg/OvmfPkgX64.dsc | 21 > OvmfPkg/OvmfPkgIa32.fdf| 9 + > OvmfPkg/OvmfPkgIa32X64.fdf | 9 + > OvmfPkg/OvmfPkgX64.fdf | 9 + > 6 files changed, 90 insertions(+) > > diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc > index c71a2f4..ca3be30 100644 > --- a/OvmfPkg/OvmfPkgIa32.dsc > +++ b/OvmfPkg/OvmfPkgIa32.dsc > @@ -296,6 +296,17 @@ [LibraryClasses.common.DXE_SMM_DRIVER] > [LibraryClasses.common.SMM_CORE] >PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf >TimerLib|OvmfPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.inf > + > SmmCorePlatformHookLib|MdeModulePkg/Library/SmmCorePlatformHookLibNull/SmmCorePlatformHookLibNull.inf > + > MemoryAllocationLib|MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/PiSmmCoreMemoryAllocationLib.inf > + > ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf > + HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf > + SmmMemLib|MdePkg/Library/SmmMemLib/SmmMemLib.inf > + > SmmServicesTableLib|MdeModulePkg/Library/PiSmmCoreSmmServicesTableLib/PiSmmCoreSmmServicesTableLib.inf > +!ifdef $(DEBUG_ON_SERIAL_PORT) > + DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf > +!else > + DebugLib|OvmfPkg/Library/PlatformDebugLibIoPort/PlatformDebugLibIoPort.inf > +!endif > > > > # > @@ -676,4 +687,14 @@ [Components] > !if $(SMM_REQUIRE) == TRUE >OvmfPkg/SmmAccess/SmmAccess2Dxe.inf >OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf > + > + # > + # SMM Initial Program Load (a DXE_RUNTIME_DRIVER) > + # > + MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf > + > + # > + # SMM_CORE > + # > + MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf > !endif > diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc > index a1e8f0d..60f085a 100644 > --- a/OvmfPkg/OvmfPkgIa32X64.dsc > +++ b/OvmfPkg/OvmfPkgIa32X64.dsc > @@ -301,6 +301,17 @@ [LibraryClasses.common.DXE_SMM_DRIVER] > [LibraryClasses.common.SMM_CORE] >PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf >TimerLib|OvmfPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.inf > + > SmmCorePlatformHookLib|MdeModulePkg/Library/SmmCorePlatformHookLibNull/SmmCorePlatformHookLibNull.inf > + > MemoryAllocationLib|MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/PiSmmCoreMemoryAllocationLib.inf > + > ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf > + HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf > + SmmMemLib|MdePkg/Library/SmmMemLib/SmmMemLib.inf > + > SmmServicesTableLib|MdeModulePkg/Library/PiSmmCoreSmmServicesTableLib/PiSmmCoreSmmServicesTableLib.inf > +!ifdef $(DEBUG_ON_SERIAL_PORT) > + DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf > +!else > + DebugLib|OvmfPkg/Library/PlatformDebugLibIoPort/PlatformDebugLibIoPort.inf > +!endif > > > > # > @@ -683,4 +694,14 @@ [Components.X64] > !if $(SMM_REQUIRE) == TRUE >OvmfPkg/SmmAccess/SmmAccess2Dxe.inf >OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf > + > + # > + # SMM Initial Program Load (a DXE_RUNTIME_DRIVER) > + # > + MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf > + > + # > + # SMM_CORE > + # > + MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf > !endif > diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc > index 1176629..0621292 100644 > --- a/OvmfPkg/OvmfPkgX64.dsc > +++ b/OvmfPkg/OvmfPkgX64.dsc > @@ -301,6 +301,17 @@ [LibraryClasses.common.DXE_SMM_DRIVER]
[edk2] [PATCH v4 10/41] OvmfPkg: pull in the SMM IPL and SMM core
"MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf" (a DXE_RUNTIME_DRIVER) implements the SMM Initial Program Loader. It produces EFI_SMM_BASE2_PROTOCOL and EFI_SMM_COMMUNICATION_PROTOCOL, relying on: - EFI_SMM_ACCESS2_PROTOCOL (provided by OvmfPkg/SmmAccess/SmmAccess2Dxe.inf), - EFI_SMM_CONTROL2_PROTOCOL (provided by OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf). (The SMM IPL also depends on EFI_SMM_CONFIGURATION_PROTOCOL_GUID, but this dependency is not enforced in the entry point. A protocol notify callback is registered instead, hence we can delay providing that protocol via the PiSmmCpuDxeSmm driver that is (to be) imported from Quark_EDKII_v1.1.0/IA32FamilyCpuBasePkg/.) The SMM IPL loads the SMM core into SMRAM and executes it from there. Therefore we add the SMM core to the build as well. For the SMM core, a number of library classes need to be resolved. Furthermore, each FDF file must provide the GenFds.py BaseTools utility with a build rule for SMM_CORE; we copy the DXE_CORE's rule. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek--- OvmfPkg/OvmfPkgIa32.dsc| 21 OvmfPkg/OvmfPkgIa32X64.dsc | 21 OvmfPkg/OvmfPkgX64.dsc | 21 OvmfPkg/OvmfPkgIa32.fdf| 9 + OvmfPkg/OvmfPkgIa32X64.fdf | 9 + OvmfPkg/OvmfPkgX64.fdf | 9 + 6 files changed, 90 insertions(+) diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc index c71a2f4..ca3be30 100644 --- a/OvmfPkg/OvmfPkgIa32.dsc +++ b/OvmfPkg/OvmfPkgIa32.dsc @@ -296,6 +296,17 @@ [LibraryClasses.common.DXE_SMM_DRIVER] [LibraryClasses.common.SMM_CORE] PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf TimerLib|OvmfPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.inf + SmmCorePlatformHookLib|MdeModulePkg/Library/SmmCorePlatformHookLibNull/SmmCorePlatformHookLibNull.inf + MemoryAllocationLib|MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/PiSmmCoreMemoryAllocationLib.inf + ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf + HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf + SmmMemLib|MdePkg/Library/SmmMemLib/SmmMemLib.inf + SmmServicesTableLib|MdeModulePkg/Library/PiSmmCoreSmmServicesTableLib/PiSmmCoreSmmServicesTableLib.inf +!ifdef $(DEBUG_ON_SERIAL_PORT) + DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf +!else + DebugLib|OvmfPkg/Library/PlatformDebugLibIoPort/PlatformDebugLibIoPort.inf +!endif # @@ -676,4 +687,14 @@ [Components] !if $(SMM_REQUIRE) == TRUE OvmfPkg/SmmAccess/SmmAccess2Dxe.inf OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf + + # + # SMM Initial Program Load (a DXE_RUNTIME_DRIVER) + # + MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf + + # + # SMM_CORE + # + MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf !endif diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc index a1e8f0d..60f085a 100644 --- a/OvmfPkg/OvmfPkgIa32X64.dsc +++ b/OvmfPkg/OvmfPkgIa32X64.dsc @@ -301,6 +301,17 @@ [LibraryClasses.common.DXE_SMM_DRIVER] [LibraryClasses.common.SMM_CORE] PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf TimerLib|OvmfPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.inf + SmmCorePlatformHookLib|MdeModulePkg/Library/SmmCorePlatformHookLibNull/SmmCorePlatformHookLibNull.inf + MemoryAllocationLib|MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/PiSmmCoreMemoryAllocationLib.inf + ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf + HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf + SmmMemLib|MdePkg/Library/SmmMemLib/SmmMemLib.inf + SmmServicesTableLib|MdeModulePkg/Library/PiSmmCoreSmmServicesTableLib/PiSmmCoreSmmServicesTableLib.inf +!ifdef $(DEBUG_ON_SERIAL_PORT) + DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf +!else + DebugLib|OvmfPkg/Library/PlatformDebugLibIoPort/PlatformDebugLibIoPort.inf +!endif # @@ -683,4 +694,14 @@ [Components.X64] !if $(SMM_REQUIRE) == TRUE OvmfPkg/SmmAccess/SmmAccess2Dxe.inf OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf + + # + # SMM Initial Program Load (a DXE_RUNTIME_DRIVER) + # + MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf + + # + # SMM_CORE + # + MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf !endif diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc index 1176629..0621292 100644 --- a/OvmfPkg/OvmfPkgX64.dsc +++ b/OvmfPkg/OvmfPkgX64.dsc @@ -301,6 +301,17 @@ [LibraryClasses.common.DXE_SMM_DRIVER] [LibraryClasses.common.SMM_CORE] PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf TimerLib|OvmfPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.inf + SmmCorePlatformHookLib|MdeModulePkg/Library/SmmCorePlatformHookLibNull/SmmCorePlatformHookLibNull.inf +