All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <Jonathan.Cameron@huawei.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>,
	<imammedo@redhat.com>, <gustavo.romero@linaro.org>,
	<anisinha@redhat.com>, <mst@redhat.com>,
	<shannon.zhaosl@gmail.com>, <pbonzini@redhat.com>,
	<philmd@linaro.org>, <alex.bennee@linaro.org>
Subject: Re: [PATCH v2 05/25] hw/pci-host/gpex-acpi: Split host bridge OSC and DSM generation
Date: Fri, 30 May 2025 11:02:27 +0100	[thread overview]
Message-ID: <20250530110227.00003341@huawei.com> (raw)
In-Reply-To: <20250527074224.1197793-6-eric.auger@redhat.com>

On Tue, 27 May 2025 09:40:07 +0200
Eric Auger <eric.auger@redhat.com> wrote:

> acpi_dsdt_add_pci_osc() name is confusing as it gives the impression
> it appends the _OSC method but in fact it also appends the _DSM method
> for the host bridge. Let's split the function into two separate ones
> and let them return the method Aml pointer instead. This matches the
> way it is done on x86 (build_q35_osc_method). In a subsequent patch
> we will replace the gpex method by the q35 implementation that will
> become shared between ARM and x86.
> 
> acpi_dsdt_add_host_bridge_methods is a new top helper that generates
> both the _OSC and _DSM methods.
> 
> Signed-off-by: Eric Auger <eric.auger@redhat.com>
> Reviewed-by: Gustavo Romero <gustavo.romero@linaro.org>

Makes complete sense. I've had local equivalent of this on the CXL
tree for a while as without it we don't register the _DSM for the
CXL path (and we should).  However, can you modify it a little to
make that easier for me?  Basically make sure the _DSM is registered
for the CXL path as well.

One other comment inline.


> ---
>  hw/pci-host/gpex-acpi.c | 31 +++++++++++++++++++++----------
>  1 file changed, 21 insertions(+), 10 deletions(-)
> 
> diff --git a/hw/pci-host/gpex-acpi.c b/hw/pci-host/gpex-acpi.c
> index f34b7cf25e..1aa2d12026 100644
> --- a/hw/pci-host/gpex-acpi.c
> +++ b/hw/pci-host/gpex-acpi.c
> @@ -50,13 +50,10 @@ static void acpi_dsdt_add_pci_route_table(Aml *dev, uint32_t irq,
>      }
>  }
>  
> -static void acpi_dsdt_add_pci_osc(Aml *dev, bool enable_native_pcie_hotplug)
> +static Aml *build_host_bridge_osc(bool enable_native_pcie_hotplug)
>  {
> -    Aml *method, *UUID, *ifctx, *ifctx1, *elsectx, *buf;
> +    Aml *method, *UUID, *ifctx, *ifctx1, *elsectx;
>  
> -    /* Declare an _OSC (OS Control Handoff) method */
> -    aml_append(dev, aml_name_decl("SUPP", aml_int(0)));
> -    aml_append(dev, aml_name_decl("CTRL", aml_int(0)));
>      method = aml_method("_OSC", 4, AML_NOTSERIALIZED);
>      aml_append(method,
>          aml_create_dword_field(aml_arg(3), aml_int(0), "CDW1"));
> @@ -103,9 +100,13 @@ static void acpi_dsdt_add_pci_osc(Aml *dev, bool enable_native_pcie_hotplug)
>                                 aml_name("CDW1")));
>      aml_append(elsectx, aml_return(aml_arg(3)));
>      aml_append(method, elsectx);
> -    aml_append(dev, method);
> +    return method;
> +}
>  
> -    method = aml_method("_DSM", 4, AML_NOTSERIALIZED);
> +static Aml *build_host_bridge_dsm(void)
> +{
> +    Aml *method = aml_method("_DSM", 4, AML_NOTSERIALIZED);
> +    Aml *UUID, *ifctx, *ifctx1, *buf;
>  
>      /* PCI Firmware Specification 3.0
>       * 4.6.1. _DSM for PCI Express Slot Information
> @@ -124,7 +125,17 @@ static void acpi_dsdt_add_pci_osc(Aml *dev, bool enable_native_pcie_hotplug)
>      byte_list[0] = 0;
>      buf = aml_buffer(1, byte_list);
>      aml_append(method, aml_return(buf));
> -    aml_append(dev, method);
> +    return method;
> +}
> +
> +static void acpi_dsdt_add_host_bridge_methods(Aml *dev,
> +                                              bool enable_native_pcie_hotplug)
> +{
> +    aml_append(dev, aml_name_decl("SUPP", aml_int(0)));
> +    aml_append(dev, aml_name_decl("CTRL", aml_int(0)));

These two declarations seem to be very much part of the _OSC build though not
within the the method.  I 'think' you get left with them later with no users.
So move them into the osc build here and they will naturally go away when
you move to the generic code.

They end up unused in the DSDT at the end of the series.

I ran a quick GPEX + pxb-pcie test and we do get the odd mix that the OSC for
the GPEX say no native hotplug but the OSC for the PXB allows it.

> +    /* Declare an _OSC (OS Control Handoff) method */
> +    aml_append(dev, build_host_bridge_osc(enable_native_pcie_hotplug));
> +    aml_append(dev, build_host_bridge_dsm());
>  }
>  
>  void acpi_dsdt_add_gpex(Aml *scope, struct GPEXConfig *cfg)
> @@ -193,7 +204,7 @@ void acpi_dsdt_add_gpex(Aml *scope, struct GPEXConfig *cfg)
>              if (is_cxl) {
>                  build_cxl_osc_method(dev);
>              } else {
> -                acpi_dsdt_add_pci_osc(dev, true);
> +                acpi_dsdt_add_host_bridge_methods(dev, true);

Can you either drop the use of the wrapper for the DSM part here and call
it unconditionally (for cxl and PCIe cases) or add an extra call to
aml_append(dev, build_host_bridge_dsm()) for the is_cxl path?

>              }
>  
>              aml_append(scope, dev);
> @@ -268,7 +279,7 @@ void acpi_dsdt_add_gpex(Aml *scope, struct GPEXConfig *cfg)
>      }
>      aml_append(dev, aml_name_decl("_CRS", rbuf));
>  
> -    acpi_dsdt_add_pci_osc(dev, true);
> +    acpi_dsdt_add_host_bridge_methods(dev, true);
>  
>      Aml *dev_res0 = aml_device("%s", "RES0");
>      aml_append(dev_res0, aml_name_decl("_HID", aml_string("PNP0C02")));

WARNING: multiple messages have this Message-ID (diff)
From: Jonathan Cameron via <qemu-devel@nongnu.org>
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>,
	<imammedo@redhat.com>, <gustavo.romero@linaro.org>,
	<anisinha@redhat.com>, <mst@redhat.com>,
	<shannon.zhaosl@gmail.com>, <pbonzini@redhat.com>,
	<philmd@linaro.org>, <alex.bennee@linaro.org>
Subject: Re: [PATCH v2 05/25] hw/pci-host/gpex-acpi: Split host bridge OSC and DSM generation
Date: Fri, 30 May 2025 11:02:27 +0100	[thread overview]
Message-ID: <20250530110227.00003341@huawei.com> (raw)
In-Reply-To: <20250527074224.1197793-6-eric.auger@redhat.com>

On Tue, 27 May 2025 09:40:07 +0200
Eric Auger <eric.auger@redhat.com> wrote:

> acpi_dsdt_add_pci_osc() name is confusing as it gives the impression
> it appends the _OSC method but in fact it also appends the _DSM method
> for the host bridge. Let's split the function into two separate ones
> and let them return the method Aml pointer instead. This matches the
> way it is done on x86 (build_q35_osc_method). In a subsequent patch
> we will replace the gpex method by the q35 implementation that will
> become shared between ARM and x86.
> 
> acpi_dsdt_add_host_bridge_methods is a new top helper that generates
> both the _OSC and _DSM methods.
> 
> Signed-off-by: Eric Auger <eric.auger@redhat.com>
> Reviewed-by: Gustavo Romero <gustavo.romero@linaro.org>

Makes complete sense. I've had local equivalent of this on the CXL
tree for a while as without it we don't register the _DSM for the
CXL path (and we should).  However, can you modify it a little to
make that easier for me?  Basically make sure the _DSM is registered
for the CXL path as well.

One other comment inline.


> ---
>  hw/pci-host/gpex-acpi.c | 31 +++++++++++++++++++++----------
>  1 file changed, 21 insertions(+), 10 deletions(-)
> 
> diff --git a/hw/pci-host/gpex-acpi.c b/hw/pci-host/gpex-acpi.c
> index f34b7cf25e..1aa2d12026 100644
> --- a/hw/pci-host/gpex-acpi.c
> +++ b/hw/pci-host/gpex-acpi.c
> @@ -50,13 +50,10 @@ static void acpi_dsdt_add_pci_route_table(Aml *dev, uint32_t irq,
>      }
>  }
>  
> -static void acpi_dsdt_add_pci_osc(Aml *dev, bool enable_native_pcie_hotplug)
> +static Aml *build_host_bridge_osc(bool enable_native_pcie_hotplug)
>  {
> -    Aml *method, *UUID, *ifctx, *ifctx1, *elsectx, *buf;
> +    Aml *method, *UUID, *ifctx, *ifctx1, *elsectx;
>  
> -    /* Declare an _OSC (OS Control Handoff) method */
> -    aml_append(dev, aml_name_decl("SUPP", aml_int(0)));
> -    aml_append(dev, aml_name_decl("CTRL", aml_int(0)));
>      method = aml_method("_OSC", 4, AML_NOTSERIALIZED);
>      aml_append(method,
>          aml_create_dword_field(aml_arg(3), aml_int(0), "CDW1"));
> @@ -103,9 +100,13 @@ static void acpi_dsdt_add_pci_osc(Aml *dev, bool enable_native_pcie_hotplug)
>                                 aml_name("CDW1")));
>      aml_append(elsectx, aml_return(aml_arg(3)));
>      aml_append(method, elsectx);
> -    aml_append(dev, method);
> +    return method;
> +}
>  
> -    method = aml_method("_DSM", 4, AML_NOTSERIALIZED);
> +static Aml *build_host_bridge_dsm(void)
> +{
> +    Aml *method = aml_method("_DSM", 4, AML_NOTSERIALIZED);
> +    Aml *UUID, *ifctx, *ifctx1, *buf;
>  
>      /* PCI Firmware Specification 3.0
>       * 4.6.1. _DSM for PCI Express Slot Information
> @@ -124,7 +125,17 @@ static void acpi_dsdt_add_pci_osc(Aml *dev, bool enable_native_pcie_hotplug)
>      byte_list[0] = 0;
>      buf = aml_buffer(1, byte_list);
>      aml_append(method, aml_return(buf));
> -    aml_append(dev, method);
> +    return method;
> +}
> +
> +static void acpi_dsdt_add_host_bridge_methods(Aml *dev,
> +                                              bool enable_native_pcie_hotplug)
> +{
> +    aml_append(dev, aml_name_decl("SUPP", aml_int(0)));
> +    aml_append(dev, aml_name_decl("CTRL", aml_int(0)));

These two declarations seem to be very much part of the _OSC build though not
within the the method.  I 'think' you get left with them later with no users.
So move them into the osc build here and they will naturally go away when
you move to the generic code.

They end up unused in the DSDT at the end of the series.

I ran a quick GPEX + pxb-pcie test and we do get the odd mix that the OSC for
the GPEX say no native hotplug but the OSC for the PXB allows it.

> +    /* Declare an _OSC (OS Control Handoff) method */
> +    aml_append(dev, build_host_bridge_osc(enable_native_pcie_hotplug));
> +    aml_append(dev, build_host_bridge_dsm());
>  }
>  
>  void acpi_dsdt_add_gpex(Aml *scope, struct GPEXConfig *cfg)
> @@ -193,7 +204,7 @@ void acpi_dsdt_add_gpex(Aml *scope, struct GPEXConfig *cfg)
>              if (is_cxl) {
>                  build_cxl_osc_method(dev);
>              } else {
> -                acpi_dsdt_add_pci_osc(dev, true);
> +                acpi_dsdt_add_host_bridge_methods(dev, true);

Can you either drop the use of the wrapper for the DSM part here and call
it unconditionally (for cxl and PCIe cases) or add an extra call to
aml_append(dev, build_host_bridge_dsm()) for the is_cxl path?

>              }
>  
>              aml_append(scope, dev);
> @@ -268,7 +279,7 @@ void acpi_dsdt_add_gpex(Aml *scope, struct GPEXConfig *cfg)
>      }
>      aml_append(dev, aml_name_decl("_CRS", rbuf));
>  
> -    acpi_dsdt_add_pci_osc(dev, true);
> +    acpi_dsdt_add_host_bridge_methods(dev, true);
>  
>      Aml *dev_res0 = aml_device("%s", "RES0");
>      aml_append(dev_res0, aml_name_decl("_HID", aml_string("PNP0C02")));



  parent reply	other threads:[~2025-05-30 10:02 UTC|newest]

Thread overview: 121+ 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
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
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
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
2025-05-30  9:27     ` Jonathan Cameron via
2025-05-30  9:28     ` Jonathan Cameron
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 [this message]
2025-05-30 10:02     ` Jonathan Cameron via
2025-05-30 12:05     ` Igor Mammedov
2025-05-30 15:00       ` Jonathan Cameron
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
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
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
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
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
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
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
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=20250530110227.00003341@huawei.com \
    --to=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=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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.