mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 01:33:56 -06:00
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>
This commit is contained in:
parent
c77432d0ef
commit
0d588c4f99
3 changed files with 14 additions and 0 deletions
|
@ -260,6 +260,7 @@ build_la_ged_aml(Aml *dsdt, MachineState *machine)
|
||||||
AML_SYSTEM_MEMORY,
|
AML_SYSTEM_MEMORY,
|
||||||
VIRT_GED_MEM_ADDR);
|
VIRT_GED_MEM_ADDR);
|
||||||
}
|
}
|
||||||
|
acpi_dsdt_add_power_button(dsdt);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void build_pci_device_aml(Aml *scope, LoongArchMachineState *lams)
|
static void build_pci_device_aml(Aml *scope, LoongArchMachineState *lams)
|
||||||
|
|
|
@ -316,6 +316,14 @@ static void virt_machine_done(Notifier *notifier, void *data)
|
||||||
loongarch_acpi_setup(lams);
|
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 {
|
struct memmap_entry {
|
||||||
uint64_t address;
|
uint64_t address;
|
||||||
uint64_t length;
|
uint64_t length;
|
||||||
|
@ -859,6 +867,10 @@ static void loongarch_init(MachineState *machine)
|
||||||
VIRT_PLATFORM_BUS_IRQ);
|
VIRT_PLATFORM_BUS_IRQ);
|
||||||
lams->machine_done.notify = virt_machine_done;
|
lams->machine_done.notify = virt_machine_done;
|
||||||
qemu_add_machine_init_done_notifier(&lams->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);
|
fdt_add_pcie_node(lams);
|
||||||
/*
|
/*
|
||||||
* Since lowmem region starts from 0 and Linux kernel legacy start address
|
* Since lowmem region starts from 0 and Linux kernel legacy start address
|
||||||
|
|
|
@ -45,6 +45,7 @@ struct LoongArchMachineState {
|
||||||
/* State for other subsystems/APIs: */
|
/* State for other subsystems/APIs: */
|
||||||
FWCfgState *fw_cfg;
|
FWCfgState *fw_cfg;
|
||||||
Notifier machine_done;
|
Notifier machine_done;
|
||||||
|
Notifier powerdown_notifier;
|
||||||
OnOffAuto acpi;
|
OnOffAuto acpi;
|
||||||
char *oem_id;
|
char *oem_id;
|
||||||
char *oem_table_id;
|
char *oem_table_id;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue