68 lines
2.6 KiB
Diff
68 lines
2.6 KiB
Diff
|
|
From f8914ec04d4d892520aa443eaf8018c80516adee Mon Sep 17 00:00:00 2001
|
||
|
|
From: Salil Mehta <salil.mehta@huawei.com>
|
||
|
|
Date: Sun, 6 Aug 2023 16:27:01 +0000
|
||
|
|
Subject: [PATCH] arm/virt: Add cpu hotplug events to GED during creation
|
||
|
|
|
||
|
|
Add CPU Hotplug event to the set of supported ged-events during the creation of
|
||
|
|
GED device during VM init. Also initialize the memory map for CPU Hotplug
|
||
|
|
control device used in event exchanges between Qemu/VMM and the guest.
|
||
|
|
|
||
|
|
Signed-off-by: Salil Mehta <salil.mehta@huawei.com>
|
||
|
|
---
|
||
|
|
hw/arm/virt.c | 5 ++++-
|
||
|
|
include/hw/arm/virt.h | 1 +
|
||
|
|
2 files changed, 5 insertions(+), 1 deletion(-)
|
||
|
|
|
||
|
|
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
|
||
|
|
index 78ed3c4ba8..155000f22f 100644
|
||
|
|
--- a/hw/arm/virt.c
|
||
|
|
+++ b/hw/arm/virt.c
|
||
|
|
@@ -78,6 +78,7 @@
|
||
|
|
#include "hw/mem/pc-dimm.h"
|
||
|
|
#include "hw/mem/nvdimm.h"
|
||
|
|
#include "hw/acpi/generic_event_device.h"
|
||
|
|
+#include "hw/acpi/cpu_hotplug.h"
|
||
|
|
#include "hw/virtio/virtio-md-pci.h"
|
||
|
|
#include "hw/virtio/virtio-iommu.h"
|
||
|
|
#include "hw/char/pl011.h"
|
||
|
|
@@ -157,6 +158,7 @@ static const MemMapEntry base_memmap[] = {
|
||
|
|
[VIRT_NVDIMM_ACPI] = { 0x09090000, NVDIMM_ACPI_IO_LEN},
|
||
|
|
[VIRT_PVTIME] = { 0x090a0000, 0x00010000 },
|
||
|
|
[VIRT_SECURE_GPIO] = { 0x090b0000, 0x00001000 },
|
||
|
|
+ [VIRT_CPUHP_ACPI] = { 0x090c0000, ACPI_CPU_HOTPLUG_REG_LEN},
|
||
|
|
[VIRT_MMIO] = { 0x0a000000, 0x00000200 },
|
||
|
|
[VIRT_CPUFREQ] = { 0x0b000000, 0x00010000 },
|
||
|
|
/* ...repeating for a total of NUM_VIRTIO_TRANSPORTS, each of that size */
|
||
|
|
@@ -725,7 +727,7 @@ static inline DeviceState *create_acpi_ged(VirtMachineState *vms)
|
||
|
|
DeviceState *dev;
|
||
|
|
MachineState *ms = MACHINE(vms);
|
||
|
|
int irq = vms->irqmap[VIRT_ACPI_GED];
|
||
|
|
- uint32_t event = ACPI_GED_PWR_DOWN_EVT;
|
||
|
|
+ uint32_t event = ACPI_GED_PWR_DOWN_EVT | ACPI_GED_CPU_HOTPLUG_EVT;
|
||
|
|
|
||
|
|
if (ms->ram_slots) {
|
||
|
|
event |= ACPI_GED_MEM_HOTPLUG_EVT;
|
||
|
|
@@ -741,6 +743,7 @@ static inline DeviceState *create_acpi_ged(VirtMachineState *vms)
|
||
|
|
|
||
|
|
sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, vms->memmap[VIRT_ACPI_GED].base);
|
||
|
|
sysbus_mmio_map(SYS_BUS_DEVICE(dev), 1, vms->memmap[VIRT_PCDIMM_ACPI].base);
|
||
|
|
+ sysbus_mmio_map(SYS_BUS_DEVICE(dev), 3, vms->memmap[VIRT_CPUHP_ACPI].base);
|
||
|
|
sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, qdev_get_gpio_in(vms->gic, irq));
|
||
|
|
|
||
|
|
return dev;
|
||
|
|
diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h
|
||
|
|
index c2fde0522c..5de0185063 100644
|
||
|
|
--- a/include/hw/arm/virt.h
|
||
|
|
+++ b/include/hw/arm/virt.h
|
||
|
|
@@ -76,6 +76,7 @@ enum {
|
||
|
|
VIRT_PCDIMM_ACPI,
|
||
|
|
VIRT_ACPI_GED,
|
||
|
|
VIRT_NVDIMM_ACPI,
|
||
|
|
+ VIRT_CPUHP_ACPI,
|
||
|
|
VIRT_PVTIME,
|
||
|
|
VIRT_LOWMEMMAP_LAST,
|
||
|
|
};
|
||
|
|
--
|
||
|
|
2.27.0
|
||
|
|
|