[PATCH 00/13] Support ACPI Control Method Sleep button

Annie Li posted 13 patches 5 months, 3 weeks ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20250528163545.2143-1-annie.li@oracle.com
Maintainers: "Dr. David Alan Gilbert" <dave@treblig.org>, "Michael S. Tsirkin" <mst@redhat.com>, Igor Mammedov <imammedo@redhat.com>, Ani Sinha <anisinha@redhat.com>, Eduardo Habkost <eduardo@habkost.net>, Marcel Apfelbaum <marcel.apfelbaum@gmail.com>, "Philippe Mathieu-Daudé" <philmd@linaro.org>, Yanan Wang <wangyanan55@huawei.com>, Zhao Liu <zhao1.liu@intel.com>, Paolo Bonzini <pbonzini@redhat.com>, Richard Henderson <richard.henderson@linaro.org>, Sergio Lopez <slp@redhat.com>, Eric Blake <eblake@redhat.com>, Markus Armbruster <armbru@redhat.com>
There is a newer version of this series
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
[PATCH 00/13] Support ACPI Control Method Sleep button
Posted by Annie Li 5 months, 3 weeks ago
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.

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.


1) https://lists.gnu.org/archive/html/qemu-devel/2017-07/msg06478.html
2) https://lore.kernel.org/all/20210920095316.2dd133be@redhat.com/T/#mfe24f89778020deeacfe45083f3eea3cf9f55961
3) https://lore.kernel.org/all/20231205002143.562-1-annie.li@oracle.com/T/
4) https://patchwork.kernel.org/project/qemu-devel/cover/20240927183906.1248-1-annie.li@oracle.com/
5) https://lore.kernel.org/all/20250411201912.2872-1-annie.li@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

-- 
2.43.5
Re: [PATCH 00/13] Support ACPI Control Method Sleep button
Posted by Igor Mammedov 5 months, 2 weeks ago
On Wed, 28 May 2025 12:35:45 -0400
Annie Li <annie.li@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.2dd133be@redhat.com/T/#mfe24f89778020deeacfe45083f3eea3cf9f55961
> 3) https://lore.kernel.org/all/20231205002143.562-1-annie.li@oracle.com/T/
> 4) https://patchwork.kernel.org/project/qemu-devel/cover/20240927183906.1248-1-annie.li@oracle.com/
> 5) https://lore.kernel.org/all/20250411201912.2872-1-annie.li@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
>
Re: [PATCH 00/13] Support ACPI Control Method Sleep button
Posted by Annie Li 5 months, 2 weeks ago
Hi Igor,

On 6/3/2025 8:18 AM, Igor Mammedov wrote:
> On Wed, 28 May 2025 12:35:45 -0400
> Annie Li <annie.li@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
will add more details.
>
>> 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)

See the details in patch 12.

Thanks

Annie

>
>> 1) https://urldefense.com/v3/__https://lists.gnu.org/archive/html/qemu-devel/2017-07/msg06478.html__;!!ACWV5N9M2RV99hQ!NOUIn6Z6j3yl9_QWhIIz2b2X6I8pLEHf1biRwOvcRv2_K6VTcVq2KGJmuUE7rcF1VuVjTtLPBvCHid0$
>> 2) https://urldefense.com/v3/__https://lore.kernel.org/all/20210920095316.2dd133be@redhat.com/T/*mfe24f89778020deeacfe45083f3eea3cf9f55961__;Iw!!ACWV5N9M2RV99hQ!NOUIn6Z6j3yl9_QWhIIz2b2X6I8pLEHf1biRwOvcRv2_K6VTcVq2KGJmuUE7rcF1VuVjTtLP4wjsOfs$
>> 3) https://urldefense.com/v3/__https://lore.kernel.org/all/20231205002143.562-1-annie.li@oracle.com/T/__;!!ACWV5N9M2RV99hQ!NOUIn6Z6j3yl9_QWhIIz2b2X6I8pLEHf1biRwOvcRv2_K6VTcVq2KGJmuUE7rcF1VuVjTtLPVmyXvjo$
>> 4) https://urldefense.com/v3/__https://patchwork.kernel.org/project/qemu-devel/cover/20240927183906.1248-1-annie.li@oracle.com/__;!!ACWV5N9M2RV99hQ!NOUIn6Z6j3yl9_QWhIIz2b2X6I8pLEHf1biRwOvcRv2_K6VTcVq2KGJmuUE7rcF1VuVjTtLPuuktbj8$
>> 5) https://urldefense.com/v3/__https://lore.kernel.org/all/20250411201912.2872-1-annie.li@oracle.com/__;!!ACWV5N9M2RV99hQ!NOUIn6Z6j3yl9_QWhIIz2b2X6I8pLEHf1biRwOvcRv2_K6VTcVq2KGJmuUE7rcF1VuVjTtLP7brAOZg$
>>
>> ----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
>>