qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Eric Auger <eric.auger@redhat.com>
To: Gustavo Romero <gustavo.romero@linaro.org>,
	eric.auger.pro@gmail.com, qemu-devel@nongnu.org,
	qemu-arm@nongnu.org, peter.maydell@linaro.org,
	imammedo@redhat.com, anisinha@redhat.com, mst@redhat.com,
	shannon.zhaosl@gmail.com
Cc: pbonzini@redhat.com, Jonathan.Cameron@huawei.com, philmd@linaro.org
Subject: Re: [PATCH 13/22] hw/i386/acpi-build: Introduce and use acpi_get_pci_host
Date: Mon, 26 May 2025 11:16:19 +0200	[thread overview]
Message-ID: <299fa5d3-7e05-4151-ab90-84447b3339cd@redhat.com> (raw)
In-Reply-To: <9b996b3a-cc60-499e-a8a6-028f16156180@linaro.org>



On 5/20/25 10:00 PM, Gustavo Romero wrote:
> Hi Eric,
>
> On 5/14/25 14:01, Eric Auger wrote:
>> pcihp acpi_set_pci_info() generic code currently uses
>> acpi_get_i386_pci_host() to retrieve the pci host bridge.
>>
>> Let's rename acpi_get_i386_pci_host into acpi_get_pci_host and
>> move it in pci generic code.
>>
>> The helper is augmented with the support of ARM GPEX.
>>
>> Signed-off-by: Eric Auger <eric.auger@redhat.com>
>> ---
>>   include/hw/acpi/pci.h |  2 ++
>>   hw/acpi/pci.c         | 20 ++++++++++++++++++++
>>   hw/acpi/pcihp.c       |  3 ++-
>>   hw/i386/acpi-build.c  | 24 ++++--------------------
>>   4 files changed, 28 insertions(+), 21 deletions(-)
>>
>> diff --git a/include/hw/acpi/pci.h b/include/hw/acpi/pci.h
>> index 4dca22c0e2..310cbd02db 100644
>> --- a/include/hw/acpi/pci.h
>> +++ b/include/hw/acpi/pci.h
>> @@ -41,4 +41,6 @@ void build_pci_bridge_aml(AcpiDevAmlIf *adev, Aml
>> *scope);
>>     void build_srat_generic_affinity_structures(GArray *table_data);
>>   +Object *acpi_get_pci_host(void);
>> +
>>   #endif
>> diff --git a/hw/acpi/pci.c b/hw/acpi/pci.c
>> index d511a85029..4191886ebe 100644
>> --- a/hw/acpi/pci.c
>> +++ b/hw/acpi/pci.c
>> @@ -26,6 +26,7 @@
>>   #include "qemu/osdep.h"
>>   #include "qemu/error-report.h"
>>   #include "qom/object_interfaces.h"
>> +#include "qom/object.h"
>>   #include "qapi/error.h"
>>   #include "hw/boards.h"
>>   #include "hw/acpi/aml-build.h"
>> @@ -33,6 +34,9 @@
>>   #include "hw/pci/pci_bridge.h"
>>   #include "hw/pci/pci_device.h"
>>   #include "hw/pci/pcie_host.h"
>> +#include "hw/pci-host/i440fx.h"
>> +#include "hw/pci-host/q35.h"
>> +#include "hw/pci-host/gpex.h"
>>     /*
>>    * PCI Firmware Specification, Revision 3.0
>> @@ -301,3 +305,19 @@ void
>> build_srat_generic_affinity_structures(GArray *table_data)
>>       object_child_foreach_recursive(object_get_root(),
>> build_acpi_generic_port,
>>                                      table_data);
>>   }
>> +
>> +Object *acpi_get_pci_host(void)
>> +{
>> +    Object *host;
>> +
>> +    host =
>> object_resolve_type_unambiguous(TYPE_I440FX_PCI_HOST_BRIDGE, NULL);
>> +    if (host) {
>> +        return host;
>> +    }
>> +    host = object_resolve_type_unambiguous(TYPE_Q35_HOST_DEVICE, NULL);
>> +    if (host) {
>> +        return host;
>> +    }
>> +    host = object_resolve_type_unambiguous(TYPE_GPEX_HOST, NULL);
>> +    return host;
>> +}
>> diff --git a/hw/acpi/pcihp.c b/hw/acpi/pcihp.c
>> index 942669ea89..d800371ddc 100644
>> --- a/hw/acpi/pcihp.c
>> +++ b/hw/acpi/pcihp.c
>> @@ -36,6 +36,7 @@
>>   #include "hw/pci-bridge/xio3130_downstream.h"
>>   #include "hw/i386/acpi-build.h"
>>   #include "hw/acpi/acpi.h"
>> +#include "hw/acpi/pci.h"
>>   #include "hw/pci/pci_bus.h"
>>   #include "migration/vmstate.h"
>>   #include "qapi/error.h"
>> @@ -102,7 +103,7 @@ static void *acpi_set_bsel(PCIBus *bus, void
>> *opaque)
>>   static void acpi_set_pci_info(bool has_bridge_hotplug)
>>   {
>>       static bool bsel_is_set;
>> -    Object *host = acpi_get_i386_pci_host();
>> +    Object *host = acpi_get_pci_host();
>>       PCIBus *bus;
>>       BSELInfo info = { .bsel_alloc = ACPI_PCIHP_BSEL_DEFAULT,
>>                         .has_bridge_hotplug = has_bridge_hotplug };
>> diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
>> index 06b4b8eed4..bcfba2ccb3 100644
>> --- a/hw/i386/acpi-build.c
>> +++ b/hw/i386/acpi-build.c
>> @@ -269,27 +269,11 @@ static void acpi_get_misc_info(AcpiMiscInfo *info)
>>   #endif
>>   }
>>   -/*
>> - * Because of the PXB hosts we cannot simply query
>> TYPE_PCI_HOST_BRIDGE.
>> - * On i386 arch we only have two pci hosts, so we can look only for
>> them.
>> - */
>> -Object *acpi_get_i386_pci_host(void)
>> -{
>> -    PCIHostState *host;
>> -
>> -    host = PCI_HOST_BRIDGE(object_resolve_path("/machine/i440fx",
>> NULL));
>> -    if (!host) {
>> -        host = PCI_HOST_BRIDGE(object_resolve_path("/machine/q35",
>> NULL));
>> -    }
>> -
>> -    return OBJECT(host);
>> -}
>> -
>
> It's also possible to add a child prop to the TYPE_GPEX_HOST in
> create_pcie, like:
>
> @@ -1510,6 +1510,7 @@ static void create_pcie(VirtMachineState *vms)
>      MachineClass *mc = MACHINE_GET_CLASS(ms);
>  
>      dev = qdev_new(TYPE_GPEX_HOST);
> +    object_property_add_child(OBJECT(vms), "gpex", OBJECT(dev));
>
> then follow to logic in acpi_get_i386_pci_host via:
>
> PCI_HOST_BRIDGE(object_resolve_path("/machine/gpex", NULL))
indeed
>
> but I like better your solution of using the final class types, so:
>
> Reviewed-by: Gustavo Romero <gustavo.romero@linaro.org>

OK thanks! I described that change in the commit msg because it was
effectively not properly described.

Cheers

Eric
>
>
> Cheers,
> Gustavo
>
>>   static void acpi_get_pci_holes(Range *hole, Range *hole64)
>>   {
>>       Object *pci_host;
>>   -    pci_host = acpi_get_i386_pci_host();
>> +    pci_host = acpi_get_pci_host();
>>         if (!pci_host) {
>>           return;
>> @@ -1245,7 +1229,7 @@ build_dsdt(GArray *table_data, BIOSLinker *linker,
>>         sb_scope = aml_scope("\\_SB");
>>       {
>> -        Object *pci_host = acpi_get_i386_pci_host();
>> +        Object *pci_host = acpi_get_pci_host();
>>             if (pci_host) {
>>               PCIBus *pbus = PCI_HOST_BRIDGE(pci_host)->bus;
>> @@ -1306,7 +1290,7 @@ build_dsdt(GArray *table_data, BIOSLinker *linker,
>>       if (pm->pcihp_bridge_en || pm->pcihp_root_en) {
>>           bool has_pcnt;
>>   -        Object *pci_host = acpi_get_i386_pci_host();
>> +        Object *pci_host = acpi_get_pci_host();
>>           PCIBus *b = PCI_HOST_BRIDGE(pci_host)->bus;
>>             scope = aml_scope("\\_SB.PCI0");
>> @@ -1946,7 +1930,7 @@ static bool acpi_get_mcfg(AcpiMcfgInfo *mcfg)
>>       Object *pci_host;
>>       QObject *o;
>>   -    pci_host = acpi_get_i386_pci_host();
>> +    pci_host = acpi_get_pci_host();
>>       if (!pci_host) {
>>           return false;
>>       }
>



  reply	other threads:[~2025-05-26  9:16 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-05-14 17:00 [PATCH 00/22] ACPI PCI Hotplug support on ARM Eric Auger
2025-05-14 17:00 ` [PATCH 01/22] hw/i386/acpi-build: Make aml_pci_device_dsm() static Eric Auger
2025-05-20 12:30   ` Gustavo Romero
2025-05-25 15:29   ` Philippe Mathieu-Daudé
2025-05-14 17:00 ` [PATCH 02/22] hw/arm/virt: Introduce machine state acpi pcihp flags and props Eric Auger
2025-05-14 17:00 ` [PATCH 03/22] hw/acpi: Rename and move build_x86_acpi_pci_hotplug to pcihp Eric Auger
2025-05-20 12:31   ` Gustavo Romero
2025-05-14 17:00 ` [PATCH 04/22] hw/pci-host/gpex-acpi: Add native_pci_hotplug arg to acpi_dsdt_add_pci_osc Eric Auger
2025-05-14 17:00 ` [PATCH 05/22] hw/pci-host/gpex-acpi: Split host bridge OSC and DSM generation Eric Auger
2025-05-14 17:00 ` [PATCH 06/22] hw/pci-host/gpex-acpi: Propagate hotplug type info from virt machine downto gpex Eric Auger
2025-05-14 17:00 ` [PATCH 07/22] hw/i386/acpi-build: Turn build_q35_osc_method into a generic method Eric Auger
2025-05-20 12:59   ` Gustavo Romero
2025-05-14 17:00 ` [PATCH 08/22] hw/pci-host/gpex-acpi: Use build_pci_host_bridge_osc_method Eric Auger
2025-05-20 14:09   ` Gustavo Romero
2025-05-21 16:12     ` Eric Auger
2025-05-24 10:54       ` Michael S. Tsirkin
2025-05-26  9:16         ` Eric Auger
2025-05-14 17:00 ` [PATCH 09/22] hw/i386/acpi-build: Introduce build_append_pcihp_resources() helper Eric Auger
2025-05-20 18:57   ` Gustavo Romero
2025-05-14 17:00 ` [PATCH 10/22] hw/acpi/pcihp: Add an AmlRegionSpace arg to build_acpi_pci_hotplug Eric Auger
2025-05-20 18:58   ` Gustavo Romero
2025-05-14 17:00 ` [PATCH 11/22] hw/i386/acpi-build: Move build_append_notification_callback to pcihp Eric Auger
2025-05-20 18:58   ` Gustavo Romero
2025-05-14 17:00 ` [PATCH 12/22] hw/i386/acpi-build: Move build_append_pci_bus_devices/pcihp_slots " Eric Auger
2025-05-20 19:59   ` Gustavo Romero
2025-05-14 17:01 ` [PATCH 13/22] hw/i386/acpi-build: Introduce and use acpi_get_pci_host Eric Auger
2025-05-20 20:00   ` Gustavo Romero
2025-05-26  9:16     ` Eric Auger [this message]
2025-05-14 17:01 ` [PATCH 14/22] hw/i386/acpi-build: Move aml_pci_edsm to a generic place Eric Auger
2025-05-21 15:26   ` Gustavo Romero
2025-05-21 15:56     ` Eric Auger
2025-05-21 16:24       ` Gustavo Romero
2025-05-21 20:19         ` Gustavo Romero
2025-05-27  7:18           ` Eric Auger
2025-05-27 19:34             ` Gustavo Romero
2025-05-14 17:01 ` [PATCH 15/22] hw/arm/virt-acpi-build: Modify the DSDT ACPI table to enable ACPI PCI hotplug Eric Auger
2025-05-14 17:01 ` [PATCH 16/22] hw/acpi/ged: Prepare the device to react to PCI hotplug events Eric Auger
2025-05-25 15:34   ` Philippe Mathieu-Daudé
2025-05-14 17:01 ` [PATCH 17/22] hw/acpi/ged: Call pcihp plug callbacks in hotplug handler implementation Eric Auger
2025-05-14 17:01 ` [PATCH 18/22] hw/acpi/ged: Support migration of AcpiPciHpState Eric Auger
2025-05-14 17:01 ` [PATCH 19/22] hw/core/sysbus: Introduce sysbus_mmio_map_name() helper Eric Auger
2025-05-14 17:01 ` [PATCH 20/22] hw/arm/virt: Let virt support pci hotplug/unplug GED event Eric Auger
2025-05-14 17:01 ` [PATCH 21/22] hw/arm/virt: Plug pcihp hotplug/hotunplug callbacks Eric Auger
2025-05-14 17:01 ` [PATCH 22/22] hw/arm/virt: Use ACPI PCI hotplug by default Eric Auger
2025-05-26  5:55 ` [PATCH 00/22] ACPI PCI Hotplug support on ARM Gustavo Romero
2025-05-26 10:21   ` Eric Auger
2025-05-26 13:56     ` Gustavo Romero

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=299fa5d3-7e05-4151-ab90-84447b3339cd@redhat.com \
    --to=eric.auger@redhat.com \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=anisinha@redhat.com \
    --cc=eric.auger.pro@gmail.com \
    --cc=gustavo.romero@linaro.org \
    --cc=imammedo@redhat.com \
    --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).