On Wed, 28 May 2025 12:35:45 -0400 Annie Li <annie...@oracle.com> wrote:
> The ACPI sleep button can be implemented as a fixed hardware button > or Control Method Sleep button. > > The patch of implementing a fixed hardware sleep button was posted > here 1). More discussions can be found here 2). Essentially, the > discussion mainly focuses on whether the sleep button is implemented > as a fixed hardware button or Control Method Sleep button. The latter > benefits various architectures since the code can be shared among > them. > > This patch set implements Control Method Sleep button for both x86 > and microvm. The RFC V1 patch set was posted previously here 3). We > rebase all the patches on QEMU9.1.0 and re-post RFC V2 here 4). The > RFC V3 patch is based on QEMU 10.0.0-rc3 at 5). This patch set here > is rebased on QEMU 10.0.1. The sleep button support for microvm is > added, however, its support for ARM platform in V2 is removed due to > lower interests of it and more efforts in the firmware. here we probably need a pointer to these efforts, or some kind of description about what's wrong with ARM/firmare > > For x86, a sleep button GPE event handler is implemented, so a GPE > event is triggered to indicate the OSPM the sleep button is pressed. > Tests have been done for Linux guest, and Windows Server guest, > this sleep button works as expected. > > For microvm, a GED event is triggered to notify the OSPM. This GED > event is also applicable for ARM platform, as mentioned earlier, the > implementation for ARM platform has been removed since RFC V3 patch > set. Tests have been run for Linux microvm guests. > System_wakeup doesn't work for microvm for now due to the missing > support of it. This patch set only covers system_sleep, not the > wakeup part. ditto (aka what's wrong with wakeup) > > 1) https://lists.gnu.org/archive/html/qemu-devel/2017-07/msg06478.html > 2) > https://lore.kernel.org/all/20210920095316.2dd13...@redhat.com/T/#mfe24f89778020deeacfe45083f3eea3cf9f55961 > 3) https://lore.kernel.org/all/20231205002143.562-1-annie...@oracle.com/T/ > 4) > https://patchwork.kernel.org/project/qemu-devel/cover/20240927183906.1248-1-annie...@oracle.com/ > 5) https://lore.kernel.org/all/20250411201912.2872-1-annie...@oracle.com/ > > ----Changes from RFC V3---- > Improve source code and comment based on comments on RFC V3 > --------------------------- > > Annie Li (12): > acpi: Implement control method sleep button > test/acpi: allow DSDT table changes for x86 platform > acpi: Support Control Method sleep button for x86 > tests/qtest/bios-table-tests: Update ACPI table binaries for x86 > acpi: Send the GPE event of sleep for x86 > test/acpi: allow DSDT table changes for microvm > microvm: Add ACPI Control Method Sleep Button > microvm: enable sleep GED event > tests/qtest/bios-table-tests: Update ACPI table binaries for microvm > microvm: suspend the system as requested > microvm: enable suspend > acpi: hmp/qmp: Add hmp/qmp support for system_sleep > > Miguel Luis (1): > hw/acpi: Add ACPI GED support for the sleep event > > hmp-commands.hx | 14 +++++++ > hw/acpi/control_method_device.c | 38 ++++++++++++++++++ > hw/acpi/core.c | 12 ++++++ > hw/acpi/generic_event_device.c | 12 ++++++ > hw/acpi/meson.build | 1 + > hw/core/machine-hmp-cmds.c | 5 +++ > hw/core/machine-qmp-cmds.c | 11 +++++ > hw/i386/acpi-build.c | 24 ++++++++++- > hw/i386/acpi-microvm.c | 13 +++++- > hw/i386/microvm.c | 4 +- > include/hw/acpi/acpi.h | 1 + > include/hw/acpi/acpi_dev_interface.h | 1 + > include/hw/acpi/control_method_device.h | 21 ++++++++++ > include/hw/acpi/generic_event_device.h | 2 + > include/monitor/hmp.h | 1 + > qapi/machine.json | 20 +++++++++ > qapi/pragma.json | 1 + > tests/data/acpi/x86/microvm/DSDT | Bin 365 -> 442 bytes > tests/data/acpi/x86/microvm/DSDT.ioapic2 | Bin 365 -> 442 bytes > tests/data/acpi/x86/microvm/DSDT.pcie | Bin 3023 -> 3100 bytes > tests/data/acpi/x86/microvm/DSDT.rtc | Bin 404 -> 481 bytes > tests/data/acpi/x86/microvm/DSDT.usb | Bin 414 -> 491 bytes > tests/data/acpi/x86/pc/DSDT | Bin 8611 -> 8721 bytes > tests/data/acpi/x86/pc/DSDT.acpierst | Bin 8522 -> 8632 bytes > tests/data/acpi/x86/pc/DSDT.acpihmat | Bin 9936 -> 10046 bytes > tests/data/acpi/x86/pc/DSDT.bridge | Bin 15482 -> 15592 bytes > tests/data/acpi/x86/pc/DSDT.cphp | Bin 9075 -> 9185 bytes > tests/data/acpi/x86/pc/DSDT.dimmpxm | Bin 10265 -> 10375 bytes > tests/data/acpi/x86/pc/DSDT.hpbridge | Bin 8562 -> 8672 bytes > tests/data/acpi/x86/pc/DSDT.hpbrroot | Bin 5100 -> 5210 bytes > tests/data/acpi/x86/pc/DSDT.ipmikcs | Bin 8683 -> 8793 bytes > tests/data/acpi/x86/pc/DSDT.memhp | Bin 9970 -> 10080 bytes > tests/data/acpi/x86/pc/DSDT.nohpet | Bin 8469 -> 8579 bytes > tests/data/acpi/x86/pc/DSDT.numamem | Bin 8617 -> 8727 bytes > tests/data/acpi/x86/pc/DSDT.roothp | Bin 12404 -> 12514 bytes > tests/data/acpi/x86/q35/DSDT | Bin 8440 -> 8550 bytes > tests/data/acpi/x86/q35/DSDT.acpierst | Bin 8457 -> 8567 bytes > tests/data/acpi/x86/q35/DSDT.acpihmat | Bin 9765 -> 9875 bytes > .../data/acpi/x86/q35/DSDT.acpihmat-generic-x | Bin 12650 -> 12760 bytes > .../acpi/x86/q35/DSDT.acpihmat-noinitiator | Bin 8719 -> 8829 bytes > tests/data/acpi/x86/q35/DSDT.applesmc | Bin 8486 -> 8596 bytes > tests/data/acpi/x86/q35/DSDT.bridge | Bin 12053 -> 12163 bytes > tests/data/acpi/x86/q35/DSDT.core-count | Bin 12998 -> 13108 bytes > tests/data/acpi/x86/q35/DSDT.core-count2 | Bin 33855 -> 33965 bytes > tests/data/acpi/x86/q35/DSDT.cphp | Bin 8904 -> 9014 bytes > tests/data/acpi/x86/q35/DSDT.cxl | Bin 13231 -> 13341 bytes > tests/data/acpi/x86/q35/DSDT.dimmpxm | Bin 10094 -> 10204 bytes > tests/data/acpi/x86/q35/DSDT.ipmibt | Bin 8515 -> 8625 bytes > tests/data/acpi/x86/q35/DSDT.ipmismbus | Bin 8528 -> 8638 bytes > tests/data/acpi/x86/q35/DSDT.ivrs | Bin 8457 -> 8567 bytes > tests/data/acpi/x86/q35/DSDT.memhp | Bin 9799 -> 9909 bytes > tests/data/acpi/x86/q35/DSDT.mmio64 | Bin 9570 -> 9680 bytes > tests/data/acpi/x86/q35/DSDT.multi-bridge | Bin 13293 -> 13403 bytes > tests/data/acpi/x86/q35/DSDT.noacpihp | Bin 8302 -> 8412 bytes > tests/data/acpi/x86/q35/DSDT.nohpet | Bin 8298 -> 8408 bytes > tests/data/acpi/x86/q35/DSDT.numamem | Bin 8446 -> 8556 bytes > tests/data/acpi/x86/q35/DSDT.pvpanic-isa | Bin 8541 -> 8651 bytes > tests/data/acpi/x86/q35/DSDT.thread-count | Bin 12998 -> 13108 bytes > tests/data/acpi/x86/q35/DSDT.thread-count2 | Bin 33855 -> 33965 bytes > tests/data/acpi/x86/q35/DSDT.tis.tpm12 | Bin 9046 -> 9156 bytes > tests/data/acpi/x86/q35/DSDT.tis.tpm2 | Bin 9072 -> 9182 bytes > tests/data/acpi/x86/q35/DSDT.type4-count | Bin 18674 -> 18784 bytes > tests/data/acpi/x86/q35/DSDT.viot | Bin 14697 -> 14807 bytes > tests/data/acpi/x86/q35/DSDT.xapic | Bin 35803 -> 35913 bytes > 64 files changed, 178 insertions(+), 3 deletions(-) > create mode 100644 hw/acpi/control_method_device.c > create mode 100644 include/hw/acpi/control_method_device.h >