Laszlo Ersek
2015-06-27 01:08:07 UTC
In
<http://thread.gmane.org/gmane.comp.bios.tianocore.devel/16088/focus=16146>,
kick the EndOfDxe event group (which is where the entire discussion has
come from -- Ard started it because ArmVirtPkg lacked EndOfDxe).
The series is organized carefully. It is bisectable, plus it has
another, "orthogonal" dimension (see below). The structure is:
- Patches #1 and #2 make IntelFrameworkModulePkg/AcpiS3SaveDxe act upon
EndOfDxe *in addition to* the usual S3Save() protocol member call.
- Patches #3 and #4 do the same to OvmfPkg's clone of the driver.
(Before anyone asks: yes, that clone needs to remain separate.)
- Patch #5 modifies Vlv2TbltDevicePkg. That package is the only one
in the edk2 tree that uses IntelFrameworkModulePkg/AcpiS3SaveDxe.
Because I'm implementing Jiewen's idea in
IntelFrameworkModulePkg/AcpiS3SaveDxe, I must migrate the driver's
clients, and Vlv2TbltDevicePkg is one client. (The only one.)
So patch #5 flips Vlv2TbltDevicePkg from calling the S3Save() protocol
member to kicking the EndOfDxe event group. Unfortunately, I couldn't
even *compile* this package, let alone test it. Thus, I need help with
this patch.
Importantly, because Vlv2TbltDevicePkg has its own clone of
GenericBdsLib, Ard's patch (patch #7) below does *not* affect it.
Therefore the Vlv2TbltDevicePkg changes are completely isolated to
patch #5.
- Patch #6 switches over OvmfPkg from depending on the S3Save() protocol
member call (inside IntelFrameworkModulePkg/GenericBdsLib) to kicking
EndOfDxe explicitly.
- Patch #7 is the one from Ard. It eliminates the S3Save() protocol
member call in IntelFrameworkModulePkg/GenericBdsLib.
- After patch #5, nothing in the edk2 tree depends on the
EFI_ACPI_S3_SAVE_PROTOCOL interface exported by
IntelFrameworkModulePkg/AcpiS3SaveDxe, so that interface is removed in
patch #8.
- After patches #6 and #7, nothing in the edk2 tree depends on the
EFI_ACPI_S3_SAVE_PROTOCOL interface exported by OvmfPkg/AcpiS3SaveDxe.
Therefore that interface is removed in patch #9.
Now here comes the "orthogonal" dimension: the sub-series consisting of
patches #3, #4, #6, #7 and #9 implements Jiewen's idea for OvmfPkg
*only*. It does affect central code in one patch (in Ard's patch #7),
but that central code is actually not used by anything except OvmfPkg,
because Vlv2TbltDevicePkg has its own clone of GenericBdsLib.
So, if patches #1, #2, #5 and #8 look problematic, then I'm completely
fine dropping them. Then IntelFrameworkModulePkg/AcpiS3SaveDxe and
Vlv2TbltDevicePkg won't be touched at all, and Jiewen's idea (and the
kicking of EndOfDxe) will only be implemented for OvmfPkg.
I regression tested OVMF with these changes: S3 continues to work fine
with Fedora and Windows Server 2012 R2, and they also boot okay (and
reject S3 suspend attempts) when S3 is disabled in QEMU.
Public branch:
https://github.com/lersek/edk2/commits/drop_efi_acpi_s3_save_proto
Cc: Yao Jiewen <***@intel.com>
Cc: Jeff Fan <***@intel.com>
Cc: Jordan Justen <***@intel.com>
Cc: Ard Biesheuvel <***@linaro.org>
Cc: David Wei <***@intel.com>
Cc: Tim He <***@intel.com>
Thanks
Laszlo
Ard Biesheuvel (1):
IntelFrameworkModulePkg/GenericBdsLib: remove AcpiS3->S3Save() call
Laszlo Ersek (8):
IntelFrameworkModulePkg: AcpiS3SaveDxe: prepare for End-of-Dxe
callback
IntelFrameworkModulePkg: AcpiS3SaveDxe: call S3Ready() at End-of-Dxe
OvmfPkg: AcpiS3SaveDxe: prepare for End-of-Dxe callback
OvmfPkg: AcpiS3SaveDxe: call S3Ready() at End-of-Dxe
Vlv2TbltDevicePkg: replace AcpiS3Save->S3Save() with End-of-Dxe signal
OvmfPkg: reorganize (but don't reorder) S3 save state sequence
IntelFrameworkModulePkg: AcpiS3SaveDxe: drop EFI_ACPI_S3_SAVE_PROTOCOL
OvmfPkg: AcpiS3SaveDxe: drop EFI_ACPI_S3_SAVE_PROTOCOL
21 files changed, 228 insertions(+), 283 deletions(-)
IntelFrameworkModulePkg/Library/GenericBdsLib/BdsBoot.c | 10 --
IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf | 1 -
IntelFrameworkModulePkg/Library/GenericBdsLib/InternalBdsLib.h | 1 -
IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiS3Save.c | 103 ++++++-------
IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiS3Save.h | 28 +---
IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiS3SaveDxe.inf | 5 +-
OvmfPkg/AcpiS3SaveDxe/AcpiS3Save.c | 151 ++++++--------------
OvmfPkg/AcpiS3SaveDxe/AcpiS3Save.h | 28 +---
OvmfPkg/AcpiS3SaveDxe/AcpiS3SaveDxe.inf | 9 +-
OvmfPkg/Library/PlatformBdsLib/BdsPlatform.c | 86 +++++++++++
OvmfPkg/Library/PlatformBdsLib/BdsPlatform.h | 4 +
OvmfPkg/Library/PlatformBdsLib/PlatformBdsLib.inf | 4 +
Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c | 11 --
Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf | 1 -
Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.c | 53 +++++--
Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.h | 1 -
Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformBdsLib.inf | 2 +-
Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsBoot.c | 10 --
Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf | 1 -
Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/InternalBdsLib.h | 1 -
Vlv2TbltDevicePkg/PlatformPkg.dec | 1 -
<http://thread.gmane.org/gmane.comp.bios.tianocore.devel/16088/focus=16146>,
And in the future, I believe we could remove EFI_ACPI_S3_SAVE_PROTOCOL
protocol completely. (This is Framework 0.9 defined API, not PI
defined API)
1) AcpiS3Save does not install EFI_ACPI_S3_SAVE_PROTOCOL.
2) AcpiS3Save registers EndOfDxe callback function.
3) AcpiS3Save does S3Save() in EndOfDxe callback function.
So everything could be self-contained. There is no need to rely on
platform BDS.
Then this module eliminates IntelFrameworkPkg dependency and can be
moved to MdeModulePkg later.
This series implements the idea, and "on the side", it changes OVMF toprotocol completely. (This is Framework 0.9 defined API, not PI
defined API)
1) AcpiS3Save does not install EFI_ACPI_S3_SAVE_PROTOCOL.
2) AcpiS3Save registers EndOfDxe callback function.
3) AcpiS3Save does S3Save() in EndOfDxe callback function.
So everything could be self-contained. There is no need to rely on
platform BDS.
Then this module eliminates IntelFrameworkPkg dependency and can be
moved to MdeModulePkg later.
kick the EndOfDxe event group (which is where the entire discussion has
come from -- Ard started it because ArmVirtPkg lacked EndOfDxe).
The series is organized carefully. It is bisectable, plus it has
another, "orthogonal" dimension (see below). The structure is:
- Patches #1 and #2 make IntelFrameworkModulePkg/AcpiS3SaveDxe act upon
EndOfDxe *in addition to* the usual S3Save() protocol member call.
- Patches #3 and #4 do the same to OvmfPkg's clone of the driver.
(Before anyone asks: yes, that clone needs to remain separate.)
- Patch #5 modifies Vlv2TbltDevicePkg. That package is the only one
in the edk2 tree that uses IntelFrameworkModulePkg/AcpiS3SaveDxe.
Because I'm implementing Jiewen's idea in
IntelFrameworkModulePkg/AcpiS3SaveDxe, I must migrate the driver's
clients, and Vlv2TbltDevicePkg is one client. (The only one.)
So patch #5 flips Vlv2TbltDevicePkg from calling the S3Save() protocol
member to kicking the EndOfDxe event group. Unfortunately, I couldn't
even *compile* this package, let alone test it. Thus, I need help with
this patch.
Importantly, because Vlv2TbltDevicePkg has its own clone of
GenericBdsLib, Ard's patch (patch #7) below does *not* affect it.
Therefore the Vlv2TbltDevicePkg changes are completely isolated to
patch #5.
- Patch #6 switches over OvmfPkg from depending on the S3Save() protocol
member call (inside IntelFrameworkModulePkg/GenericBdsLib) to kicking
EndOfDxe explicitly.
- Patch #7 is the one from Ard. It eliminates the S3Save() protocol
member call in IntelFrameworkModulePkg/GenericBdsLib.
- After patch #5, nothing in the edk2 tree depends on the
EFI_ACPI_S3_SAVE_PROTOCOL interface exported by
IntelFrameworkModulePkg/AcpiS3SaveDxe, so that interface is removed in
patch #8.
- After patches #6 and #7, nothing in the edk2 tree depends on the
EFI_ACPI_S3_SAVE_PROTOCOL interface exported by OvmfPkg/AcpiS3SaveDxe.
Therefore that interface is removed in patch #9.
Now here comes the "orthogonal" dimension: the sub-series consisting of
patches #3, #4, #6, #7 and #9 implements Jiewen's idea for OvmfPkg
*only*. It does affect central code in one patch (in Ard's patch #7),
but that central code is actually not used by anything except OvmfPkg,
because Vlv2TbltDevicePkg has its own clone of GenericBdsLib.
So, if patches #1, #2, #5 and #8 look problematic, then I'm completely
fine dropping them. Then IntelFrameworkModulePkg/AcpiS3SaveDxe and
Vlv2TbltDevicePkg won't be touched at all, and Jiewen's idea (and the
kicking of EndOfDxe) will only be implemented for OvmfPkg.
I regression tested OVMF with these changes: S3 continues to work fine
with Fedora and Windows Server 2012 R2, and they also boot okay (and
reject S3 suspend attempts) when S3 is disabled in QEMU.
Public branch:
https://github.com/lersek/edk2/commits/drop_efi_acpi_s3_save_proto
Cc: Yao Jiewen <***@intel.com>
Cc: Jeff Fan <***@intel.com>
Cc: Jordan Justen <***@intel.com>
Cc: Ard Biesheuvel <***@linaro.org>
Cc: David Wei <***@intel.com>
Cc: Tim He <***@intel.com>
Thanks
Laszlo
Ard Biesheuvel (1):
IntelFrameworkModulePkg/GenericBdsLib: remove AcpiS3->S3Save() call
Laszlo Ersek (8):
IntelFrameworkModulePkg: AcpiS3SaveDxe: prepare for End-of-Dxe
callback
IntelFrameworkModulePkg: AcpiS3SaveDxe: call S3Ready() at End-of-Dxe
OvmfPkg: AcpiS3SaveDxe: prepare for End-of-Dxe callback
OvmfPkg: AcpiS3SaveDxe: call S3Ready() at End-of-Dxe
Vlv2TbltDevicePkg: replace AcpiS3Save->S3Save() with End-of-Dxe signal
OvmfPkg: reorganize (but don't reorder) S3 save state sequence
IntelFrameworkModulePkg: AcpiS3SaveDxe: drop EFI_ACPI_S3_SAVE_PROTOCOL
OvmfPkg: AcpiS3SaveDxe: drop EFI_ACPI_S3_SAVE_PROTOCOL
21 files changed, 228 insertions(+), 283 deletions(-)
IntelFrameworkModulePkg/Library/GenericBdsLib/BdsBoot.c | 10 --
IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf | 1 -
IntelFrameworkModulePkg/Library/GenericBdsLib/InternalBdsLib.h | 1 -
IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiS3Save.c | 103 ++++++-------
IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiS3Save.h | 28 +---
IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiS3SaveDxe.inf | 5 +-
OvmfPkg/AcpiS3SaveDxe/AcpiS3Save.c | 151 ++++++--------------
OvmfPkg/AcpiS3SaveDxe/AcpiS3Save.h | 28 +---
OvmfPkg/AcpiS3SaveDxe/AcpiS3SaveDxe.inf | 9 +-
OvmfPkg/Library/PlatformBdsLib/BdsPlatform.c | 86 +++++++++++
OvmfPkg/Library/PlatformBdsLib/BdsPlatform.h | 4 +
OvmfPkg/Library/PlatformBdsLib/PlatformBdsLib.inf | 4 +
Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c | 11 --
Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf | 1 -
Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.c | 53 +++++--
Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.h | 1 -
Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformBdsLib.inf | 2 +-
Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsBoot.c | 10 --
Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf | 1 -
Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/InternalBdsLib.h | 1 -
Vlv2TbltDevicePkg/PlatformPkg.dec | 1 -
--
1.8.3.1
1.8.3.1