[RFC V2 PATCH 00/11] Support ACPI Control Method Sleep button

Annie Li posted 11 patches 1 month, 3 weeks ago
Only 0 patches received!
hmp-commands.hx                               |  14 +++++
hw/acpi/control_method_device.c               |  54 ++++++++++++++++++
hw/acpi/core.c                                |  17 ++++--
hw/acpi/generic_event_device.c                |   9 +++
hw/acpi/meson.build                           |   1 +
hw/arm/virt-acpi-build.c                      |  13 +++++
hw/arm/virt.c                                 |  14 ++++-
hw/core/machine-hmp-cmds.c                    |   5 ++
hw/core/machine-qmp-cmds.c                    |  11 ++++
hw/i386/acpi-build.c                          |   9 +++
include/hw/acpi/acpi.h                        |   1 +
include/hw/acpi/acpi_dev_interface.h          |   1 +
include/hw/acpi/control_method_device.h       |  25 ++++++++
include/hw/acpi/generic_event_device.h        |   1 +
include/hw/arm/virt.h                         |   1 +
include/monitor/hmp.h                         |   1 +
qapi/machine.json                             |  18 ++++++
qapi/pragma.json                              |   1 +
tests/data/acpi/aarch64/virt/DSDT             | Bin 5196 -> 5278 bytes
.../data/acpi/aarch64/virt/DSDT.acpihmatvirt  | Bin 5282 -> 5364 bytes
tests/data/acpi/aarch64/virt/DSDT.memhp       | Bin 6557 -> 6639 bytes
tests/data/acpi/aarch64/virt/DSDT.pxb         | Bin 7679 -> 7761 bytes
tests/data/acpi/aarch64/virt/DSDT.topology    | Bin 5398 -> 5480 bytes
tests/data/acpi/aarch64/virt/FACP             | Bin 276 -> 276 bytes
tests/data/acpi/x86/pc/DSDT                   | Bin 6830 -> 7012 bytes
tests/data/acpi/x86/pc/DSDT.acpierst          | Bin 6741 -> 6923 bytes
tests/data/acpi/x86/pc/DSDT.acpihmat          | Bin 8155 -> 8337 bytes
tests/data/acpi/x86/pc/DSDT.bridge            | Bin 13701 -> 13883 bytes
tests/data/acpi/x86/pc/DSDT.cphp              | Bin 7294 -> 7476 bytes
tests/data/acpi/x86/pc/DSDT.dimmpxm           | Bin 8484 -> 8666 bytes
tests/data/acpi/x86/pc/DSDT.hpbridge          | Bin 6781 -> 6963 bytes
tests/data/acpi/x86/pc/DSDT.hpbrroot          | Bin 3337 -> 3519 bytes
tests/data/acpi/x86/pc/DSDT.ipmikcs           | Bin 6902 -> 7084 bytes
tests/data/acpi/x86/pc/DSDT.memhp             | Bin 8189 -> 8371 bytes
tests/data/acpi/x86/pc/DSDT.nohpet            | Bin 6688 -> 6870 bytes
tests/data/acpi/x86/pc/DSDT.numamem           | Bin 6836 -> 7018 bytes
tests/data/acpi/x86/pc/DSDT.roothp            | Bin 10623 -> 10805 bytes
tests/data/acpi/x86/q35/DSDT                  | Bin 8355 -> 8537 bytes
tests/data/acpi/x86/q35/DSDT.acpierst         | Bin 8372 -> 8554 bytes
tests/data/acpi/x86/q35/DSDT.acpihmat         | Bin 9680 -> 9862 bytes
.../acpi/x86/q35/DSDT.acpihmat-noinitiator    | Bin 8634 -> 8816 bytes
tests/data/acpi/x86/q35/DSDT.applesmc         | Bin 8401 -> 8583 bytes
tests/data/acpi/x86/q35/DSDT.bridge           | Bin 11968 -> 12150 bytes
tests/data/acpi/x86/q35/DSDT.core-count       | Bin 12913 -> 13095 bytes
tests/data/acpi/x86/q35/DSDT.core-count2      | Bin 33770 -> 33952 bytes
tests/data/acpi/x86/q35/DSDT.cphp             | Bin 8819 -> 9001 bytes
tests/data/acpi/x86/q35/DSDT.cxl              | Bin 9714 -> 9896 bytes
tests/data/acpi/x86/q35/DSDT.dimmpxm          | Bin 10009 -> 10191 bytes
tests/data/acpi/x86/q35/DSDT.ipmibt           | Bin 8430 -> 8612 bytes
tests/data/acpi/x86/q35/DSDT.ipmismbus        | Bin 8443 -> 8625 bytes
tests/data/acpi/x86/q35/DSDT.ivrs             | Bin 8372 -> 8554 bytes
tests/data/acpi/x86/q35/DSDT.memhp            | Bin 9714 -> 9896 bytes
tests/data/acpi/x86/q35/DSDT.mmio64           | Bin 9485 -> 9667 bytes
tests/data/acpi/x86/q35/DSDT.multi-bridge     | Bin 13208 -> 13390 bytes
tests/data/acpi/x86/q35/DSDT.noacpihp         | Bin 8235 -> 8417 bytes
tests/data/acpi/x86/q35/DSDT.nohpet           | Bin 8213 -> 8395 bytes
tests/data/acpi/x86/q35/DSDT.numamem          | Bin 8361 -> 8543 bytes
tests/data/acpi/x86/q35/DSDT.pvpanic-isa      | Bin 8456 -> 8638 bytes
tests/data/acpi/x86/q35/DSDT.thread-count     | Bin 12913 -> 13095 bytes
tests/data/acpi/x86/q35/DSDT.thread-count2    | Bin 33770 -> 33952 bytes
tests/data/acpi/x86/q35/DSDT.tis.tpm12        | Bin 8961 -> 9143 bytes
tests/data/acpi/x86/q35/DSDT.tis.tpm2         | Bin 8987 -> 9169 bytes
tests/data/acpi/x86/q35/DSDT.type4-count      | Bin 18589 -> 18771 bytes
tests/data/acpi/x86/q35/DSDT.viot             | Bin 9464 -> 9646 bytes
tests/data/acpi/x86/q35/DSDT.xapic            | Bin 35718 -> 35900 bytes
65 files changed, 191 insertions(+), 5 deletions(-)
create mode 100644 hw/acpi/control_method_device.c
create mode 100644 include/hw/acpi/control_method_device.h
[RFC V2 PATCH 00/11] Support ACPI Control Method Sleep button
Posted by Annie Li 1 month, 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 ARM platform.(The patch set was posted previously here 3). We
rebase all the patches on QEMU9.1.0 and re-post it).

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,
the sleep button works as expected.

For ARM, a GED event is triggered to notify the OSPM. With proper
debug knobs it is possible to see the guest OSPM acknowledges the
sleep event:

(qemu) system_sleep
(qemu) [6.744138] exregion-0179 ex_system_memory_space: System-Memory (width 32) R/W 0 Address=0000000009080000
[6.746003] evmisc-0132 ev_queue_notify_reques: Dispatching Notify on [SLPB] (Device) Value 0x80 (Status Change) Node 00000000f0e6819e
[6.802873] PM: suspend entry (s2idle)
[6.806201] Filesystems sync: 0.002 seconds
[6.807580] Freezing user space processes
[6.809478] Freezing user space processes completed (elapsed 0.001 seconds)
[6.810602] OOM killer disabled.
[6.811111] Freezing remaining freezable tasks
[6.812953] Freezing remaining freezable tasks completed (elapsed 0.001 seconds)
[6.814126] printk: Suspending console(s) (use no_console_suspend to debug)

But that seems to be all, depicting that sleep/wakeup for ARM is broken
and there are still missing some pieces of the puzzle.

Nonetheless, we would like to take this RFC as an opportunity for updates
on this subject as possible roadmaps.

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/


Annie Li (6):
  acpi: hmp/qmp: Add hmp/qmp support for system_sleep
  acpi: Implement control method sleep button
  test/acpi: allow DSDT table changes
  acpi: Support Control Method sleep button for x86
  tests/acpi: Update DSDT tables for Control method sleep button
  acpi: Send the GPE event of suspend and wakeup for x86

Miguel Luis (5):
  hw/acpi: Add ACPI GED support for the sleep event
  tests/acpi: allow FACP and DSDT table changes for arm/virt
  hw/arm: enable sleep support for arm/virt
  tests/acpi: Update FACP and DSDT tables for sleep button
  arm/virt: enable sleep support

 hmp-commands.hx                               |  14 +++++
 hw/acpi/control_method_device.c               |  54 ++++++++++++++++++
 hw/acpi/core.c                                |  17 ++++--
 hw/acpi/generic_event_device.c                |   9 +++
 hw/acpi/meson.build                           |   1 +
 hw/arm/virt-acpi-build.c                      |  13 +++++
 hw/arm/virt.c                                 |  14 ++++-
 hw/core/machine-hmp-cmds.c                    |   5 ++
 hw/core/machine-qmp-cmds.c                    |  11 ++++
 hw/i386/acpi-build.c                          |   9 +++
 include/hw/acpi/acpi.h                        |   1 +
 include/hw/acpi/acpi_dev_interface.h          |   1 +
 include/hw/acpi/control_method_device.h       |  25 ++++++++
 include/hw/acpi/generic_event_device.h        |   1 +
 include/hw/arm/virt.h                         |   1 +
 include/monitor/hmp.h                         |   1 +
 qapi/machine.json                             |  18 ++++++
 qapi/pragma.json                              |   1 +
 tests/data/acpi/aarch64/virt/DSDT             | Bin 5196 -> 5278 bytes
 .../data/acpi/aarch64/virt/DSDT.acpihmatvirt  | Bin 5282 -> 5364 bytes
 tests/data/acpi/aarch64/virt/DSDT.memhp       | Bin 6557 -> 6639 bytes
 tests/data/acpi/aarch64/virt/DSDT.pxb         | Bin 7679 -> 7761 bytes
 tests/data/acpi/aarch64/virt/DSDT.topology    | Bin 5398 -> 5480 bytes
 tests/data/acpi/aarch64/virt/FACP             | Bin 276 -> 276 bytes
 tests/data/acpi/x86/pc/DSDT                   | Bin 6830 -> 7012 bytes
 tests/data/acpi/x86/pc/DSDT.acpierst          | Bin 6741 -> 6923 bytes
 tests/data/acpi/x86/pc/DSDT.acpihmat          | Bin 8155 -> 8337 bytes
 tests/data/acpi/x86/pc/DSDT.bridge            | Bin 13701 -> 13883 bytes
 tests/data/acpi/x86/pc/DSDT.cphp              | Bin 7294 -> 7476 bytes
 tests/data/acpi/x86/pc/DSDT.dimmpxm           | Bin 8484 -> 8666 bytes
 tests/data/acpi/x86/pc/DSDT.hpbridge          | Bin 6781 -> 6963 bytes
 tests/data/acpi/x86/pc/DSDT.hpbrroot          | Bin 3337 -> 3519 bytes
 tests/data/acpi/x86/pc/DSDT.ipmikcs           | Bin 6902 -> 7084 bytes
 tests/data/acpi/x86/pc/DSDT.memhp             | Bin 8189 -> 8371 bytes
 tests/data/acpi/x86/pc/DSDT.nohpet            | Bin 6688 -> 6870 bytes
 tests/data/acpi/x86/pc/DSDT.numamem           | Bin 6836 -> 7018 bytes
 tests/data/acpi/x86/pc/DSDT.roothp            | Bin 10623 -> 10805 bytes
 tests/data/acpi/x86/q35/DSDT                  | Bin 8355 -> 8537 bytes
 tests/data/acpi/x86/q35/DSDT.acpierst         | Bin 8372 -> 8554 bytes
 tests/data/acpi/x86/q35/DSDT.acpihmat         | Bin 9680 -> 9862 bytes
 .../acpi/x86/q35/DSDT.acpihmat-noinitiator    | Bin 8634 -> 8816 bytes
 tests/data/acpi/x86/q35/DSDT.applesmc         | Bin 8401 -> 8583 bytes
 tests/data/acpi/x86/q35/DSDT.bridge           | Bin 11968 -> 12150 bytes
 tests/data/acpi/x86/q35/DSDT.core-count       | Bin 12913 -> 13095 bytes
 tests/data/acpi/x86/q35/DSDT.core-count2      | Bin 33770 -> 33952 bytes
 tests/data/acpi/x86/q35/DSDT.cphp             | Bin 8819 -> 9001 bytes
 tests/data/acpi/x86/q35/DSDT.cxl              | Bin 9714 -> 9896 bytes
 tests/data/acpi/x86/q35/DSDT.dimmpxm          | Bin 10009 -> 10191 bytes
 tests/data/acpi/x86/q35/DSDT.ipmibt           | Bin 8430 -> 8612 bytes
 tests/data/acpi/x86/q35/DSDT.ipmismbus        | Bin 8443 -> 8625 bytes
 tests/data/acpi/x86/q35/DSDT.ivrs             | Bin 8372 -> 8554 bytes
 tests/data/acpi/x86/q35/DSDT.memhp            | Bin 9714 -> 9896 bytes
 tests/data/acpi/x86/q35/DSDT.mmio64           | Bin 9485 -> 9667 bytes
 tests/data/acpi/x86/q35/DSDT.multi-bridge     | Bin 13208 -> 13390 bytes
 tests/data/acpi/x86/q35/DSDT.noacpihp         | Bin 8235 -> 8417 bytes
 tests/data/acpi/x86/q35/DSDT.nohpet           | Bin 8213 -> 8395 bytes
 tests/data/acpi/x86/q35/DSDT.numamem          | Bin 8361 -> 8543 bytes
 tests/data/acpi/x86/q35/DSDT.pvpanic-isa      | Bin 8456 -> 8638 bytes
 tests/data/acpi/x86/q35/DSDT.thread-count     | Bin 12913 -> 13095 bytes
 tests/data/acpi/x86/q35/DSDT.thread-count2    | Bin 33770 -> 33952 bytes
 tests/data/acpi/x86/q35/DSDT.tis.tpm12        | Bin 8961 -> 9143 bytes
 tests/data/acpi/x86/q35/DSDT.tis.tpm2         | Bin 8987 -> 9169 bytes
 tests/data/acpi/x86/q35/DSDT.type4-count      | Bin 18589 -> 18771 bytes
 tests/data/acpi/x86/q35/DSDT.viot             | Bin 9464 -> 9646 bytes
 tests/data/acpi/x86/q35/DSDT.xapic            | Bin 35718 -> 35900 bytes
 65 files changed, 191 insertions(+), 5 deletions(-)
 create mode 100644 hw/acpi/control_method_device.c
 create mode 100644 include/hw/acpi/control_method_device.h

-- 
2.43.5
Re: [RFC V2 PATCH 00/11] Support ACPI Control Method Sleep button
Posted by Igor Mammedov 1 month, 2 weeks ago
On Fri, 27 Sep 2024 14:38:55 -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 ARM platform.(The patch set was posted previously here 3). We
> rebase all the patches on QEMU9.1.0 and re-post it).
> 
> 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,
> the sleep button works as expected.
> 
> For ARM, a GED event is triggered to notify the OSPM. With proper
> debug knobs it is possible to see the guest OSPM acknowledges the
> sleep event:

Series also missed 'microvm', that uses GED
(it's likely the same amount of work as for arm/virt board)

also test all boards you are touching, to make sure you
didn't break them.

Note: commit messages should be more verbose explaining why and what
patches are doing.

PS:
Also keep  changelog in cover letter, for a short list of changes
between series revisions,
see '[PATCH v3 0/1] hw/nvme: add atomic write support' for an example

> 
> (qemu) system_sleep
> (qemu) [6.744138] exregion-0179 ex_system_memory_space: System-Memory (width 32) R/W 0 Address=0000000009080000
> [6.746003] evmisc-0132 ev_queue_notify_reques: Dispatching Notify on [SLPB] (Device) Value 0x80 (Status Change) Node 00000000f0e6819e
> [6.802873] PM: suspend entry (s2idle)
> [6.806201] Filesystems sync: 0.002 seconds
> [6.807580] Freezing user space processes
> [6.809478] Freezing user space processes completed (elapsed 0.001 seconds)
> [6.810602] OOM killer disabled.
> [6.811111] Freezing remaining freezable tasks
> [6.812953] Freezing remaining freezable tasks completed (elapsed 0.001 seconds)
> [6.814126] printk: Suspending console(s) (use no_console_suspend to debug)
> 
> But that seems to be all, depicting that sleep/wakeup for ARM is broken
> and there are still missing some pieces of the puzzle.
> 
> Nonetheless, we would like to take this RFC as an opportunity for updates
> on this subject as possible roadmaps.
> 
> 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/
> 
> 
> Annie Li (6):
>   acpi: hmp/qmp: Add hmp/qmp support for system_sleep
>   acpi: Implement control method sleep button
>   test/acpi: allow DSDT table changes
>   acpi: Support Control Method sleep button for x86
>   tests/acpi: Update DSDT tables for Control method sleep button
>   acpi: Send the GPE event of suspend and wakeup for x86
> 
> Miguel Luis (5):
>   hw/acpi: Add ACPI GED support for the sleep event
>   tests/acpi: allow FACP and DSDT table changes for arm/virt
>   hw/arm: enable sleep support for arm/virt
>   tests/acpi: Update FACP and DSDT tables for sleep button
>   arm/virt: enable sleep support
> 
>  hmp-commands.hx                               |  14 +++++
>  hw/acpi/control_method_device.c               |  54 ++++++++++++++++++
>  hw/acpi/core.c                                |  17 ++++--
>  hw/acpi/generic_event_device.c                |   9 +++
>  hw/acpi/meson.build                           |   1 +
>  hw/arm/virt-acpi-build.c                      |  13 +++++
>  hw/arm/virt.c                                 |  14 ++++-
>  hw/core/machine-hmp-cmds.c                    |   5 ++
>  hw/core/machine-qmp-cmds.c                    |  11 ++++
>  hw/i386/acpi-build.c                          |   9 +++
>  include/hw/acpi/acpi.h                        |   1 +
>  include/hw/acpi/acpi_dev_interface.h          |   1 +
>  include/hw/acpi/control_method_device.h       |  25 ++++++++
>  include/hw/acpi/generic_event_device.h        |   1 +
>  include/hw/arm/virt.h                         |   1 +
>  include/monitor/hmp.h                         |   1 +
>  qapi/machine.json                             |  18 ++++++
>  qapi/pragma.json                              |   1 +
>  tests/data/acpi/aarch64/virt/DSDT             | Bin 5196 -> 5278 bytes
>  .../data/acpi/aarch64/virt/DSDT.acpihmatvirt  | Bin 5282 -> 5364 bytes
>  tests/data/acpi/aarch64/virt/DSDT.memhp       | Bin 6557 -> 6639 bytes
>  tests/data/acpi/aarch64/virt/DSDT.pxb         | Bin 7679 -> 7761 bytes
>  tests/data/acpi/aarch64/virt/DSDT.topology    | Bin 5398 -> 5480 bytes
>  tests/data/acpi/aarch64/virt/FACP             | Bin 276 -> 276 bytes
>  tests/data/acpi/x86/pc/DSDT                   | Bin 6830 -> 7012 bytes
>  tests/data/acpi/x86/pc/DSDT.acpierst          | Bin 6741 -> 6923 bytes
>  tests/data/acpi/x86/pc/DSDT.acpihmat          | Bin 8155 -> 8337 bytes
>  tests/data/acpi/x86/pc/DSDT.bridge            | Bin 13701 -> 13883 bytes
>  tests/data/acpi/x86/pc/DSDT.cphp              | Bin 7294 -> 7476 bytes
>  tests/data/acpi/x86/pc/DSDT.dimmpxm           | Bin 8484 -> 8666 bytes
>  tests/data/acpi/x86/pc/DSDT.hpbridge          | Bin 6781 -> 6963 bytes
>  tests/data/acpi/x86/pc/DSDT.hpbrroot          | Bin 3337 -> 3519 bytes
>  tests/data/acpi/x86/pc/DSDT.ipmikcs           | Bin 6902 -> 7084 bytes
>  tests/data/acpi/x86/pc/DSDT.memhp             | Bin 8189 -> 8371 bytes
>  tests/data/acpi/x86/pc/DSDT.nohpet            | Bin 6688 -> 6870 bytes
>  tests/data/acpi/x86/pc/DSDT.numamem           | Bin 6836 -> 7018 bytes
>  tests/data/acpi/x86/pc/DSDT.roothp            | Bin 10623 -> 10805 bytes
>  tests/data/acpi/x86/q35/DSDT                  | Bin 8355 -> 8537 bytes
>  tests/data/acpi/x86/q35/DSDT.acpierst         | Bin 8372 -> 8554 bytes
>  tests/data/acpi/x86/q35/DSDT.acpihmat         | Bin 9680 -> 9862 bytes
>  .../acpi/x86/q35/DSDT.acpihmat-noinitiator    | Bin 8634 -> 8816 bytes
>  tests/data/acpi/x86/q35/DSDT.applesmc         | Bin 8401 -> 8583 bytes
>  tests/data/acpi/x86/q35/DSDT.bridge           | Bin 11968 -> 12150 bytes
>  tests/data/acpi/x86/q35/DSDT.core-count       | Bin 12913 -> 13095 bytes
>  tests/data/acpi/x86/q35/DSDT.core-count2      | Bin 33770 -> 33952 bytes
>  tests/data/acpi/x86/q35/DSDT.cphp             | Bin 8819 -> 9001 bytes
>  tests/data/acpi/x86/q35/DSDT.cxl              | Bin 9714 -> 9896 bytes
>  tests/data/acpi/x86/q35/DSDT.dimmpxm          | Bin 10009 -> 10191 bytes
>  tests/data/acpi/x86/q35/DSDT.ipmibt           | Bin 8430 -> 8612 bytes
>  tests/data/acpi/x86/q35/DSDT.ipmismbus        | Bin 8443 -> 8625 bytes
>  tests/data/acpi/x86/q35/DSDT.ivrs             | Bin 8372 -> 8554 bytes
>  tests/data/acpi/x86/q35/DSDT.memhp            | Bin 9714 -> 9896 bytes
>  tests/data/acpi/x86/q35/DSDT.mmio64           | Bin 9485 -> 9667 bytes
>  tests/data/acpi/x86/q35/DSDT.multi-bridge     | Bin 13208 -> 13390 bytes
>  tests/data/acpi/x86/q35/DSDT.noacpihp         | Bin 8235 -> 8417 bytes
>  tests/data/acpi/x86/q35/DSDT.nohpet           | Bin 8213 -> 8395 bytes
>  tests/data/acpi/x86/q35/DSDT.numamem          | Bin 8361 -> 8543 bytes
>  tests/data/acpi/x86/q35/DSDT.pvpanic-isa      | Bin 8456 -> 8638 bytes
>  tests/data/acpi/x86/q35/DSDT.thread-count     | Bin 12913 -> 13095 bytes
>  tests/data/acpi/x86/q35/DSDT.thread-count2    | Bin 33770 -> 33952 bytes
>  tests/data/acpi/x86/q35/DSDT.tis.tpm12        | Bin 8961 -> 9143 bytes
>  tests/data/acpi/x86/q35/DSDT.tis.tpm2         | Bin 8987 -> 9169 bytes
>  tests/data/acpi/x86/q35/DSDT.type4-count      | Bin 18589 -> 18771 bytes
>  tests/data/acpi/x86/q35/DSDT.viot             | Bin 9464 -> 9646 bytes
>  tests/data/acpi/x86/q35/DSDT.xapic            | Bin 35718 -> 35900 bytes
>  65 files changed, 191 insertions(+), 5 deletions(-)
>  create mode 100644 hw/acpi/control_method_device.c
>  create mode 100644 include/hw/acpi/control_method_device.h
>
Re: [RFC V2 PATCH 00/11] Support ACPI Control Method Sleep button
Posted by Annie Li 1 month, 2 weeks ago
On 10/7/2024 9:41 AM, Igor Mammedov wrote:
> On Fri, 27 Sep 2024 14:38:55 -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 ARM platform.(The patch set was posted previously here 3). We
>> rebase all the patches on QEMU9.1.0 and re-post it).
>>
>> 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,
>> the sleep button works as expected.
>>
>> For ARM, a GED event is triggered to notify the OSPM. With proper
>> debug knobs it is possible to see the guest OSPM acknowledges the
>> sleep event:
> Series also missed 'microvm', that uses GED
> (it's likely the same amount of work as for arm/virt board)
I haven't implement this for 'microvm' yet, will work on this part, as 
well as
things you mentioned below.

Thanks
Annie

>
> also test all boards you are touching, to make sure you
> didn't break them.
>
> Note: commit messages should be more verbose explaining why and what
> patches are doing.
>
> PS:
> Also keep  changelog in cover letter, for a short list of changes
> between series revisions,
> see '[PATCH v3 0/1] hw/nvme: add atomic write support' for an example
>
>> (qemu) system_sleep
>> (qemu) [6.744138] exregion-0179 ex_system_memory_space: System-Memory (width 32) R/W 0 Address=0000000009080000
>> [6.746003] evmisc-0132 ev_queue_notify_reques: Dispatching Notify on [SLPB] (Device) Value 0x80 (Status Change) Node 00000000f0e6819e
>> [6.802873] PM: suspend entry (s2idle)
>> [6.806201] Filesystems sync: 0.002 seconds
>> [6.807580] Freezing user space processes
>> [6.809478] Freezing user space processes completed (elapsed 0.001 seconds)
>> [6.810602] OOM killer disabled.
>> [6.811111] Freezing remaining freezable tasks
>> [6.812953] Freezing remaining freezable tasks completed (elapsed 0.001 seconds)
>> [6.814126] printk: Suspending console(s) (use no_console_suspend to debug)
>>
>> But that seems to be all, depicting that sleep/wakeup for ARM is broken
>> and there are still missing some pieces of the puzzle.
>>
>> Nonetheless, we would like to take this RFC as an opportunity for updates
>> on this subject as possible roadmaps.
>>
>> 1) https://urldefense.com/v3/__https://lists.gnu.org/archive/html/qemu-devel/2017-07/msg06478.html__;!!ACWV5N9M2RV99hQ!PLz2MGkywgnU4MB6tbITFe4-fMs6CqdUQY9Jhgbi2vIdAVf94Uz2OI-yBQOYElEQb-dsvtN323zzSb8$
>> 2) https://urldefense.com/v3/__https://lore.kernel.org/all/20210920095316.2dd133be@redhat.com/T/*mfe24f89778020deeacfe45083f3eea3cf9f55961__;Iw!!ACWV5N9M2RV99hQ!PLz2MGkywgnU4MB6tbITFe4-fMs6CqdUQY9Jhgbi2vIdAVf94Uz2OI-yBQOYElEQb-dsvtN34RUikoM$
>> 3) https://urldefense.com/v3/__https://lore.kernel.org/all/20231205002143.562-1-annie.li@oracle.com/T/__;!!ACWV5N9M2RV99hQ!PLz2MGkywgnU4MB6tbITFe4-fMs6CqdUQY9Jhgbi2vIdAVf94Uz2OI-yBQOYElEQb-dsvtN3zrJlck4$
>>
>>
>> Annie Li (6):
>>    acpi: hmp/qmp: Add hmp/qmp support for system_sleep
>>    acpi: Implement control method sleep button
>>    test/acpi: allow DSDT table changes
>>    acpi: Support Control Method sleep button for x86
>>    tests/acpi: Update DSDT tables for Control method sleep button
>>    acpi: Send the GPE event of suspend and wakeup for x86
>>
>> Miguel Luis (5):
>>    hw/acpi: Add ACPI GED support for the sleep event
>>    tests/acpi: allow FACP and DSDT table changes for arm/virt
>>    hw/arm: enable sleep support for arm/virt
>>    tests/acpi: Update FACP and DSDT tables for sleep button
>>    arm/virt: enable sleep support
>>
>>   hmp-commands.hx                               |  14 +++++
>>   hw/acpi/control_method_device.c               |  54 ++++++++++++++++++
>>   hw/acpi/core.c                                |  17 ++++--
>>   hw/acpi/generic_event_device.c                |   9 +++
>>   hw/acpi/meson.build                           |   1 +
>>   hw/arm/virt-acpi-build.c                      |  13 +++++
>>   hw/arm/virt.c                                 |  14 ++++-
>>   hw/core/machine-hmp-cmds.c                    |   5 ++
>>   hw/core/machine-qmp-cmds.c                    |  11 ++++
>>   hw/i386/acpi-build.c                          |   9 +++
>>   include/hw/acpi/acpi.h                        |   1 +
>>   include/hw/acpi/acpi_dev_interface.h          |   1 +
>>   include/hw/acpi/control_method_device.h       |  25 ++++++++
>>   include/hw/acpi/generic_event_device.h        |   1 +
>>   include/hw/arm/virt.h                         |   1 +
>>   include/monitor/hmp.h                         |   1 +
>>   qapi/machine.json                             |  18 ++++++
>>   qapi/pragma.json                              |   1 +
>>   tests/data/acpi/aarch64/virt/DSDT             | Bin 5196 -> 5278 bytes
>>   .../data/acpi/aarch64/virt/DSDT.acpihmatvirt  | Bin 5282 -> 5364 bytes
>>   tests/data/acpi/aarch64/virt/DSDT.memhp       | Bin 6557 -> 6639 bytes
>>   tests/data/acpi/aarch64/virt/DSDT.pxb         | Bin 7679 -> 7761 bytes
>>   tests/data/acpi/aarch64/virt/DSDT.topology    | Bin 5398 -> 5480 bytes
>>   tests/data/acpi/aarch64/virt/FACP             | Bin 276 -> 276 bytes
>>   tests/data/acpi/x86/pc/DSDT                   | Bin 6830 -> 7012 bytes
>>   tests/data/acpi/x86/pc/DSDT.acpierst          | Bin 6741 -> 6923 bytes
>>   tests/data/acpi/x86/pc/DSDT.acpihmat          | Bin 8155 -> 8337 bytes
>>   tests/data/acpi/x86/pc/DSDT.bridge            | Bin 13701 -> 13883 bytes
>>   tests/data/acpi/x86/pc/DSDT.cphp              | Bin 7294 -> 7476 bytes
>>   tests/data/acpi/x86/pc/DSDT.dimmpxm           | Bin 8484 -> 8666 bytes
>>   tests/data/acpi/x86/pc/DSDT.hpbridge          | Bin 6781 -> 6963 bytes
>>   tests/data/acpi/x86/pc/DSDT.hpbrroot          | Bin 3337 -> 3519 bytes
>>   tests/data/acpi/x86/pc/DSDT.ipmikcs           | Bin 6902 -> 7084 bytes
>>   tests/data/acpi/x86/pc/DSDT.memhp             | Bin 8189 -> 8371 bytes
>>   tests/data/acpi/x86/pc/DSDT.nohpet            | Bin 6688 -> 6870 bytes
>>   tests/data/acpi/x86/pc/DSDT.numamem           | Bin 6836 -> 7018 bytes
>>   tests/data/acpi/x86/pc/DSDT.roothp            | Bin 10623 -> 10805 bytes
>>   tests/data/acpi/x86/q35/DSDT                  | Bin 8355 -> 8537 bytes
>>   tests/data/acpi/x86/q35/DSDT.acpierst         | Bin 8372 -> 8554 bytes
>>   tests/data/acpi/x86/q35/DSDT.acpihmat         | Bin 9680 -> 9862 bytes
>>   .../acpi/x86/q35/DSDT.acpihmat-noinitiator    | Bin 8634 -> 8816 bytes
>>   tests/data/acpi/x86/q35/DSDT.applesmc         | Bin 8401 -> 8583 bytes
>>   tests/data/acpi/x86/q35/DSDT.bridge           | Bin 11968 -> 12150 bytes
>>   tests/data/acpi/x86/q35/DSDT.core-count       | Bin 12913 -> 13095 bytes
>>   tests/data/acpi/x86/q35/DSDT.core-count2      | Bin 33770 -> 33952 bytes
>>   tests/data/acpi/x86/q35/DSDT.cphp             | Bin 8819 -> 9001 bytes
>>   tests/data/acpi/x86/q35/DSDT.cxl              | Bin 9714 -> 9896 bytes
>>   tests/data/acpi/x86/q35/DSDT.dimmpxm          | Bin 10009 -> 10191 bytes
>>   tests/data/acpi/x86/q35/DSDT.ipmibt           | Bin 8430 -> 8612 bytes
>>   tests/data/acpi/x86/q35/DSDT.ipmismbus        | Bin 8443 -> 8625 bytes
>>   tests/data/acpi/x86/q35/DSDT.ivrs             | Bin 8372 -> 8554 bytes
>>   tests/data/acpi/x86/q35/DSDT.memhp            | Bin 9714 -> 9896 bytes
>>   tests/data/acpi/x86/q35/DSDT.mmio64           | Bin 9485 -> 9667 bytes
>>   tests/data/acpi/x86/q35/DSDT.multi-bridge     | Bin 13208 -> 13390 bytes
>>   tests/data/acpi/x86/q35/DSDT.noacpihp         | Bin 8235 -> 8417 bytes
>>   tests/data/acpi/x86/q35/DSDT.nohpet           | Bin 8213 -> 8395 bytes
>>   tests/data/acpi/x86/q35/DSDT.numamem          | Bin 8361 -> 8543 bytes
>>   tests/data/acpi/x86/q35/DSDT.pvpanic-isa      | Bin 8456 -> 8638 bytes
>>   tests/data/acpi/x86/q35/DSDT.thread-count     | Bin 12913 -> 13095 bytes
>>   tests/data/acpi/x86/q35/DSDT.thread-count2    | Bin 33770 -> 33952 bytes
>>   tests/data/acpi/x86/q35/DSDT.tis.tpm12        | Bin 8961 -> 9143 bytes
>>   tests/data/acpi/x86/q35/DSDT.tis.tpm2         | Bin 8987 -> 9169 bytes
>>   tests/data/acpi/x86/q35/DSDT.type4-count      | Bin 18589 -> 18771 bytes
>>   tests/data/acpi/x86/q35/DSDT.viot             | Bin 9464 -> 9646 bytes
>>   tests/data/acpi/x86/q35/DSDT.xapic            | Bin 35718 -> 35900 bytes
>>   65 files changed, 191 insertions(+), 5 deletions(-)
>>   create mode 100644 hw/acpi/control_method_device.c
>>   create mode 100644 include/hw/acpi/control_method_device.h
>>