From: Igor Mammedov <imammedo@redhat.com>
To: Eric Auger <eric.auger@redhat.com>
Cc: eric.auger.pro@gmail.com, qemu-devel@nongnu.org,
qemu-arm@nongnu.org, peter.maydell@linaro.org,
gustavo.romero@linaro.org, anisinha@redhat.com, mst@redhat.com,
shannon.zhaosl@gmail.com, pbonzini@redhat.com,
Jonathan.Cameron@huawei.com, philmd@linaro.org,
alex.bennee@linaro.org
Subject: Re: [PATCH v2 22/25] hw/arm/virt: Let virt support pci hotplug/unplug GED event
Date: Tue, 27 May 2025 17:56:49 +0200 [thread overview]
Message-ID: <20250527175649.5d276bc8@imammedo.users.ipa.redhat.com> (raw)
In-Reply-To: <20250527074224.1197793-23-eric.auger@redhat.com>
On Tue, 27 May 2025 09:40:24 +0200
Eric Auger <eric.auger@redhat.com> wrote:
> Set up the IO registers used to communicate between QEMU
> and ACPI.
> Move the create_pcie() call after the creation of the acpi
> ged device since hotplug callbacks will soon be called on gpex
> realize and will require the acpi pcihp state to be initialized.
>
> The hacky thing is the root bus has not yet been created on
> acpi_pcihp_init() call so it is set later after the gpex realize.
can you elaborate on this, preferably with call expected call flows?
> How to fix this chicken & egg issue?
>
> Signed-off-by: Eric Auger <eric.auger@redhat.com>
>
> ---
>
> v1 -> v2:
> - use ACPI_PCIHP_REGION_NAME
> ---
> include/hw/arm/virt.h | 1 +
> hw/arm/virt-acpi-build.c | 1 +
> hw/arm/virt.c | 42 +++++++++++++++++++++++++++++++++++-----
> 3 files changed, 39 insertions(+), 5 deletions(-)
>
> diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h
> index 1b2e2e1284..a4c4e3a67a 100644
> --- a/include/hw/arm/virt.h
> +++ b/include/hw/arm/virt.h
> @@ -35,6 +35,7 @@
> #include "hw/boards.h"
> #include "hw/arm/boot.h"
> #include "hw/arm/bsa.h"
> +#include "hw/acpi/pcihp.h"
> #include "hw/block/flash.h"
> #include "system/kvm.h"
> #include "hw/intc/arm_gicv3_common.h"
> diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
> index 9d88ffc318..cd49f67d60 100644
> --- a/hw/arm/virt-acpi-build.c
> +++ b/hw/arm/virt-acpi-build.c
> @@ -44,6 +44,7 @@
> #include "hw/acpi/generic_event_device.h"
> #include "hw/acpi/tpm.h"
> #include "hw/acpi/hmat.h"
> +#include "hw/acpi/pcihp.h"
> #include "hw/pci/pcie_host.h"
> #include "hw/pci/pci.h"
> #include "hw/pci/pci_bus.h"
> diff --git a/hw/arm/virt.c b/hw/arm/virt.c
> index 4aa40c8e8b..cdcff0a984 100644
> --- a/hw/arm/virt.c
> +++ b/hw/arm/virt.c
> @@ -682,6 +682,8 @@ static inline DeviceState *create_acpi_ged(VirtMachineState *vms)
> {
> DeviceState *dev;
> MachineState *ms = MACHINE(vms);
> + SysBusDevice *sbdev;
> +
> int irq = vms->irqmap[VIRT_ACPI_GED];
> uint32_t event = ACPI_GED_PWR_DOWN_EVT;
>
> @@ -693,12 +695,28 @@ static inline DeviceState *create_acpi_ged(VirtMachineState *vms)
> event |= ACPI_GED_NVDIMM_HOTPLUG_EVT;
> }
>
> + if (vms->acpi_pcihp) {
> + event |= ACPI_GED_PCI_HOTPLUG_EVT;
> + }
> +
> dev = qdev_new(TYPE_ACPI_GED);
> qdev_prop_set_uint32(dev, "ged-event", event);
> - sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
> + sbdev = SYS_BUS_DEVICE(dev);
> + sysbus_realize_and_unref(sbdev, &error_fatal);
>
> - 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(sbdev, 0, vms->memmap[VIRT_ACPI_GED].base);
> + sysbus_mmio_map(sbdev, 1, vms->memmap[VIRT_PCDIMM_ACPI].base);
Perhaps move out sbdev renaming into a separate patch, as it's not really related.
> + if (vms->acpi_pcihp) {
> + AcpiGedState *acpi_ged_state = ACPI_GED(dev);
> + int i;
> +
> + i = sysbus_mmio_map_name(sbdev, ACPI_PCIHP_REGION_NAME,
> + vms->memmap[VIRT_ACPI_PCIHP].base);
I don't like mix of old way (index based) above and new name based mapping,
can we use the same, please?
> + assert(i >= 0);
g_assert(sysbus_mmio_map_name...) to get more meaning-full crash
that is not compiled out.
> + acpi_pcihp_init(OBJECT(dev), &acpi_ged_state->pcihp_state,
> + vms->bus, sysbus_mmio_get_region(sbdev, i), 0);
hmm, looks broken..
region mapping must happen after acpi_pcihp_init().
if we after making sysbus_mmio_map() sane and easier to use
(which is a bit on tangent to this series).
We could feed sysbus owner device a memory map (ex: name based),
and then use [pre_]plug handlers on sysbus to map children
automatically.
That will alleviate need to do all mapping manually in every board.
(frankly speaking it deserves its own series, with tree wide cleanup).
As it is I'd use old index based approach like the rest.
(unless you feel adventurous about sysbus refactoring)
> + acpi_ged_state->pcihp_state.use_acpi_hotplug_bridge = true;
> + }
> sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, qdev_get_gpio_in(vms->gic, irq));
>
> return dev;
> @@ -1758,6 +1776,13 @@ void virt_machine_done(Notifier *notifier, void *data)
> pci_bus_add_fw_cfg_extra_pci_roots(vms->fw_cfg, vms->bus,
> &error_abort);
> +
> + if (vms->acpi_pcihp) {
> + AcpiGedState *acpi_ged_state = ACPI_GED(vms->acpi_dev);
> +
> + acpi_pcihp_reset(&acpi_ged_state->pcihp_state);
> + }
> +
> virt_acpi_setup(vms);
> virt_build_smbios(vms);
> }
> @@ -2395,8 +2420,6 @@ static void machvirt_init(MachineState *machine)
>
> create_rtc(vms);
>
> - create_pcie(vms);
> -
> if (has_ged && aarch64 && firmware_loaded && virt_is_acpi_enabled(vms)) {
> vms->acpi_pcihp &= !vmc->no_acpi_pcihp;
> vms->acpi_dev = create_acpi_ged(vms);
> @@ -2405,6 +2428,15 @@ static void machvirt_init(MachineState *machine)
> create_gpio_devices(vms, VIRT_GPIO, sysmem);
> }
>
> + create_pcie(vms);
> +
> + if (vms->acpi_dev) {
> + AcpiGedState *acpi_ged_state = ACPI_GED(vms->acpi_dev);
> +
> + acpi_ged_state = ACPI_GED(vms->acpi_dev);
> + acpi_ged_state->pcihp_state.root = vms->bus;
> + }
> +
> if (vms->secure && !vmc->no_secure_gpio) {
> create_gpio_devices(vms, VIRT_SECURE_GPIO, secure_sysmem);
> }
I don't like pulling acpi_pcihp_init()/reset (and issues it causes) into board code,
on x86 it's a part of host bridge device model.
The same should apply to GED device.
The only thing board has to do is map regions into IO space like we do
everywhere else.
with current code, may be add link<pci_bus> property to GED,
and set it before GED realize in create_acpi_ged(),
then just follow existing sysbus_mmio_map() pattern.
next prev parent reply other threads:[~2025-05-27 15:58 UTC|newest]
Thread overview: 108+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-27 7:40 [PATCH v2 00/25] ACPI PCI Hotplug support on ARM Eric Auger
2025-05-27 7:40 ` [PATCH v2 01/25] hw/i386/acpi-build: Make aml_pci_device_dsm() static Eric Auger
2025-05-27 12:23 ` Igor Mammedov
2025-05-30 8:40 ` Jonathan Cameron via
2025-05-27 7:40 ` [PATCH v2 02/25] hw/arm/virt: Introduce machine state acpi pcihp flags and props Eric Auger
2025-05-27 11:58 ` Igor Mammedov
2025-05-27 13:54 ` Eric Auger
2025-05-28 10:33 ` Igor Mammedov
2025-06-11 6:53 ` Eric Auger
2025-06-11 8:45 ` Igor Mammedov
2025-06-11 8:50 ` Eric Auger
2025-06-12 12:55 ` Igor Mammedov
2025-06-13 3:01 ` Gustavo Romero
2025-06-13 5:05 ` Eric Auger
2025-06-13 13:39 ` Gustavo Romero
2025-06-14 8:04 ` Eric Auger
2025-06-11 6:47 ` Eric Auger
2025-06-11 8:49 ` Igor Mammedov
2025-06-11 8:56 ` Eric Auger
2025-06-12 13:00 ` Igor Mammedov
2025-06-12 13:54 ` Eric Auger
2025-05-30 8:58 ` Jonathan Cameron via
2025-05-27 7:40 ` [PATCH v2 03/25] hw/acpi: Rename and move build_x86_acpi_pci_hotplug to pcihp Eric Auger
2025-05-27 12:08 ` Igor Mammedov
2025-05-30 9:06 ` Jonathan Cameron via
2025-05-27 7:40 ` [PATCH v2 04/25] hw/pci-host/gpex-acpi: Add native_pci_hotplug arg to acpi_dsdt_add_pci_osc Eric Auger
2025-05-27 12:27 ` Igor Mammedov
2025-05-30 9:27 ` Jonathan Cameron via
2025-05-30 9:28 ` Jonathan Cameron via
2025-06-11 12:05 ` Eric Auger
2025-05-27 7:40 ` [PATCH v2 05/25] hw/pci-host/gpex-acpi: Split host bridge OSC and DSM generation Eric Auger
2025-05-27 12:31 ` Igor Mammedov
2025-05-30 10:02 ` Jonathan Cameron via
2025-05-30 12:05 ` Igor Mammedov
2025-05-30 15:00 ` Jonathan Cameron via
2025-06-02 10:18 ` Igor Mammedov
2025-06-11 12:18 ` Eric Auger
2025-06-11 12:22 ` Eric Auger
2025-05-27 7:40 ` [PATCH v2 06/25] hw/pci-host/gpex-acpi: Propagate hotplug type info from virt machine downto gpex Eric Auger
2025-05-27 12:33 ` Igor Mammedov
2025-06-11 9:00 ` Eric Auger
2025-06-12 13:25 ` Igor Mammedov
2025-05-30 10:14 ` Jonathan Cameron via
2025-05-30 12:11 ` Igor Mammedov
2025-06-11 9:13 ` Eric Auger
2025-05-27 7:40 ` [PATCH v2 07/25] hw/i386/acpi-build: Turn build_q35_osc_method into a generic method Eric Auger
2025-05-27 12:35 ` Igor Mammedov
2025-05-27 7:40 ` [PATCH v2 08/25] tests/qtest/bios-tables-test: Prepare for changes in the DSDT table Eric Auger
2025-05-27 12:38 ` Igor Mammedov
2025-05-27 13:03 ` Igor Mammedov
2025-06-02 5:45 ` Gustavo Romero
2025-06-11 9:45 ` Eric Auger
2025-05-27 7:40 ` [PATCH v2 09/25] hw/pci-host/gpex-acpi: Use build_pci_host_bridge_osc_method Eric Auger
2025-05-27 13:04 ` Igor Mammedov
2025-05-30 10:05 ` Jonathan Cameron via
2025-06-11 12:25 ` Eric Auger
2025-05-27 7:40 ` [PATCH v2 10/25] tests/qtest/bios-tables-test: Update DSDT blobs after GPEX _OSC change Eric Auger
2025-05-27 13:05 ` Igor Mammedov
2025-05-27 7:40 ` [PATCH v2 11/25] hw/i386/acpi-build: Introduce build_append_pcihp_resources() helper Eric Auger
2025-05-27 13:09 ` Igor Mammedov
2025-05-30 10:17 ` Jonathan Cameron via
2025-06-05 17:06 ` Eric Auger
2025-05-27 7:40 ` [PATCH v2 12/25] hw/acpi/pcihp: Add an AmlRegionSpace arg to build_acpi_pci_hotplug Eric Auger
2025-05-27 13:12 ` Igor Mammedov
2025-05-30 10:18 ` Jonathan Cameron via
2025-05-27 7:40 ` [PATCH v2 13/25] hw/i386/acpi-build: Move build_append_notification_callback to pcihp Eric Auger
2025-05-27 13:37 ` Igor Mammedov
2025-05-30 10:19 ` Jonathan Cameron via
2025-05-27 7:40 ` [PATCH v2 14/25] hw/i386/acpi-build: Move build_append_pci_bus_devices/pcihp_slots " Eric Auger
2025-05-27 13:43 ` Igor Mammedov
2025-05-30 10:24 ` Jonathan Cameron via
2025-06-05 16:03 ` Eric Auger
2025-05-27 7:40 ` [PATCH v2 15/25] hw/i386/acpi-build: Introduce and use acpi_get_pci_host Eric Auger
2025-05-27 13:58 ` Igor Mammedov
2025-05-27 7:40 ` [PATCH v2 16/25] hw/i386/acpi-build: Move aml_pci_edsm to a generic place Eric Auger
2025-05-27 14:00 ` Igor Mammedov
2025-05-27 14:07 ` Igor Mammedov
2025-05-27 7:40 ` [PATCH v2 17/25] hw/arm/virt-acpi-build: Modify the DSDT ACPI table to enable ACPI PCI hotplug Eric Auger
2025-05-27 14:12 ` Igor Mammedov
2025-05-27 7:40 ` [PATCH v2 18/25] hw/acpi/ged: Prepare the device to react to PCI hotplug events Eric Auger
2025-05-27 7:40 ` [PATCH v2 19/25] hw/acpi/ged: Call pcihp plug callbacks in hotplug handler implementation Eric Auger
2025-05-27 14:21 ` Igor Mammedov
2025-05-27 7:40 ` [PATCH v2 20/25] hw/acpi/ged: Support migration of AcpiPciHpState Eric Auger
2025-05-27 15:14 ` Igor Mammedov
2025-05-27 7:40 ` [PATCH v2 21/25] hw/core/sysbus: Introduce sysbus_mmio_map_name() helper Eric Auger
2025-05-27 7:40 ` [PATCH v2 22/25] hw/arm/virt: Let virt support pci hotplug/unplug GED event Eric Auger
2025-05-27 15:21 ` Philippe Mathieu-Daudé
2025-05-27 15:56 ` Igor Mammedov [this message]
2025-05-27 16:44 ` Gustavo Romero
2025-05-27 19:16 ` Gustavo Romero
2025-05-28 10:15 ` Igor Mammedov
2025-05-27 7:40 ` [PATCH v2 23/25] hw/arm/virt: Plug pcihp hotplug/hotunplug callbacks Eric Auger
2025-05-27 7:40 ` [PATCH v2 24/25] tests/qtest/bios-tables-test: Keep ACPI PCI hotplug off Eric Auger
2025-05-28 9:38 ` Igor Mammedov
2025-05-28 9:48 ` Eric Auger
2025-05-28 10:49 ` Igor Mammedov
2025-06-02 6:16 ` Gustavo Romero
2025-05-28 12:41 ` Gustavo Romero
2025-05-28 13:02 ` Igor Mammedov
2025-05-28 15:04 ` Gustavo Romero
2025-05-30 11:51 ` Igor Mammedov
2025-06-02 5:35 ` Gustavo Romero
2025-06-02 6:06 ` Gustavo Romero
2025-06-10 14:29 ` Gustavo Romero
2025-06-11 8:54 ` Igor Mammedov
2025-06-11 13:14 ` Gustavo Romero
2025-06-12 12:50 ` Igor Mammedov
2025-05-27 7:40 ` [PATCH v2 25/25] hw/arm/virt: Use ACPI PCI hotplug by default Eric Auger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250527175649.5d276bc8@imammedo.users.ipa.redhat.com \
--to=imammedo@redhat.com \
--cc=Jonathan.Cameron@huawei.com \
--cc=alex.bennee@linaro.org \
--cc=anisinha@redhat.com \
--cc=eric.auger.pro@gmail.com \
--cc=eric.auger@redhat.com \
--cc=gustavo.romero@linaro.org \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=philmd@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=shannon.zhaosl@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).