diff options
author | Song Gao <gaosong@loongson.cn> | 2023-01-10 11:29:16 +0800 |
---|---|---|
committer | Song Gao <gaosong@loongson.cn> | 2023-03-03 09:37:30 +0800 |
commit | 0d588c4f999699a430b32c563fe9ccc1710b8fd7 (patch) | |
tree | 4f6c295522ceacbac5add653f20714f2e04a0dcf | |
parent | c77432d0efc56273347eb5d8619935052e5ad0a6 (diff) | |
download | qemu-0d588c4f999699a430b32c563fe9ccc1710b8fd7.zip qemu-0d588c4f999699a430b32c563fe9ccc1710b8fd7.tar.gz qemu-0d588c4f999699a430b32c563fe9ccc1710b8fd7.tar.bz2 |
hw/loongarch/virt: add system_powerdown hmp command support
For loongarch virt machine, add powerdown notification callback
and send ACPI_POWER_DOWN_STATUS event by acpi ged. Also add
acpi dsdt table for ACPI_POWER_BUTTON_DEVICE device in this
patch.
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Song Gao <gaosong@loongson.cn>
Message-Id: <20230303010548.295580-1-gaosong@loongson.cn>
-rw-r--r-- | hw/loongarch/acpi-build.c | 1 | ||||
-rw-r--r-- | hw/loongarch/virt.c | 12 | ||||
-rw-r--r-- | include/hw/loongarch/virt.h | 1 |
3 files changed, 14 insertions, 0 deletions
diff --git a/hw/loongarch/acpi-build.c b/hw/loongarch/acpi-build.c index 8aed50e..6cb2472 100644 --- a/hw/loongarch/acpi-build.c +++ b/hw/loongarch/acpi-build.c @@ -260,6 +260,7 @@ build_la_ged_aml(Aml *dsdt, MachineState *machine) AML_SYSTEM_MEMORY, VIRT_GED_MEM_ADDR); } + acpi_dsdt_add_power_button(dsdt); } static void build_pci_device_aml(Aml *scope, LoongArchMachineState *lams) diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c index 49d2505..38ef7cc 100644 --- a/hw/loongarch/virt.c +++ b/hw/loongarch/virt.c @@ -316,6 +316,14 @@ static void virt_machine_done(Notifier *notifier, void *data) loongarch_acpi_setup(lams); } +static void virt_powerdown_req(Notifier *notifier, void *opaque) +{ + LoongArchMachineState *s = container_of(notifier, + LoongArchMachineState, powerdown_notifier); + + acpi_send_event(s->acpi_ged, ACPI_POWER_DOWN_STATUS); +} + struct memmap_entry { uint64_t address; uint64_t length; @@ -859,6 +867,10 @@ static void loongarch_init(MachineState *machine) VIRT_PLATFORM_BUS_IRQ); lams->machine_done.notify = virt_machine_done; qemu_add_machine_init_done_notifier(&lams->machine_done); + /* connect powerdown request */ + lams->powerdown_notifier.notify = virt_powerdown_req; + qemu_register_powerdown_notifier(&lams->powerdown_notifier); + fdt_add_pcie_node(lams); /* * Since lowmem region starts from 0 and Linux kernel legacy start address diff --git a/include/hw/loongarch/virt.h b/include/hw/loongarch/virt.h index f5f8188..7ae8a91 100644 --- a/include/hw/loongarch/virt.h +++ b/include/hw/loongarch/virt.h @@ -45,6 +45,7 @@ struct LoongArchMachineState { /* State for other subsystems/APIs: */ FWCfgState *fw_cfg; Notifier machine_done; + Notifier powerdown_notifier; OnOffAuto acpi; char *oem_id; char *oem_table_id; |