Hi Igor,
On 6/20/25 3:06 PM, Igor Mammedov wrote:
> On Mon, 16 Jun 2025 11:46:54 +0200
> Eric Auger <eric.auger@redhat.com> wrote:
>
>> Set up the IO registers used to communicate between QEMU
>> and ACPI.
>>
>> Signed-off-by: Eric Auger <eric.auger@redhat.com>
>>
>> ---
>> v2 -> v3:
>> - remove acpi_ged_state->pcihp_state.use_acpi_hotplug_bridge = true;
>> - use sysbus_mmio_map_name for all regs (Igor)
>> - create_pcie left at its original place
>>
>> v1 -> v2:
>> - use ACPI_PCIHP_REGION_NAME
>> ---
>> include/hw/acpi/generic_event_device.h | 1 +
>> hw/arm/virt.c | 19 +++++++++++++++++--
>> 2 files changed, 18 insertions(+), 2 deletions(-)
>>
>> diff --git a/include/hw/acpi/generic_event_device.h b/include/hw/acpi/generic_event_device.h
>> index ec8e1abe0a..8f5d903146 100644
>> --- a/include/hw/acpi/generic_event_device.h
>> +++ b/include/hw/acpi/generic_event_device.h
>> @@ -111,6 +111,7 @@ typedef struct GEDState {
>> } GEDState;
>>
>> #define ACPI_PCIHP_REGION_NAME "pcihp container"
>> +#define ACPI_MEMHP_REGION_NAME "memhp container"
>>
>> struct AcpiGedState {
>> SysBusDevice parent_obj;
>> diff --git a/hw/arm/virt.c b/hw/arm/virt.c
>> index 41be8f6dbb..8c882e0794 100644
>> --- a/hw/arm/virt.c
>> +++ b/hw/arm/virt.c
>> @@ -684,6 +684,8 @@ static inline DeviceState *create_acpi_ged(VirtMachineState *vms)
>> DeviceState *dev;
>> MachineState *ms = MACHINE(vms);
>> SysBusDevice *sbdev;
>> + AcpiGedState *acpi_ged_state;
>> + AcpiPciHpState *pcihp_state;
>> int irq = vms->irqmap[VIRT_ACPI_GED];
>> uint32_t event = ACPI_GED_PWR_DOWN_EVT;
>>
>> @@ -696,13 +698,26 @@ static inline DeviceState *create_acpi_ged(VirtMachineState *vms)
>> }
>>
>> dev = qdev_new(TYPE_ACPI_GED);
>> + acpi_ged_state = ACPI_GED(dev);
>> + pcihp_state = &acpi_ged_state->pcihp_state;
>> + if (pcihp_state->use_acpi_hotplug_bridge) {
>> + event |= ACPI_GED_PCI_HOTPLUG_EVT;
>> + }
> Doesn't it belong to ged_realize()?
moved there
>
>> qdev_prop_set_uint32(dev, "ged-event", event);
>> object_property_set_link(OBJECT(dev), "bus", OBJECT(vms->bus), &error_abort);
>> sbdev = SYS_BUS_DEVICE(dev);
>> sysbus_realize_and_unref(sbdev, &error_fatal);
>>
>> - sysbus_mmio_map(sbdev, 0, vms->memmap[VIRT_ACPI_GED].base);
>> - sysbus_mmio_map(sbdev, 1, vms->memmap[VIRT_PCDIMM_ACPI].base);
>> + sysbus_mmio_map_name(sbdev, TYPE_ACPI_GED, vms->memmap[VIRT_ACPI_GED].base);
>> + sysbus_mmio_map_name(sbdev, ACPI_MEMHP_REGION_NAME,
>> + vms->memmap[VIRT_PCDIMM_ACPI].base);
>> + if (pcihp_state->use_acpi_hotplug_bridge) {
> like elsewhere, use property accessor
yup
Thanks!
Eric
>
>> + int pcihp_region_index;
>> +
>> + pcihp_region_index = sysbus_mmio_map_name(sbdev, ACPI_PCIHP_REGION_NAME,
>> + vms->memmap[VIRT_ACPI_PCIHP].base);
>> + assert(pcihp_region_index >= 0);
>> + }
>> sysbus_connect_irq(sbdev, 0, qdev_get_gpio_in(vms->gic, irq));
>>
>> return dev;