[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20210727161431.GA718548@bjorn-Precision-5520>
Date: Tue, 27 Jul 2021 11:14:31 -0500
From: Bjorn Helgaas <helgaas@...nel.org>
To: Boqun Feng <boqun.feng@...il.com>
Cc: Bjorn Helgaas <bhelgaas@...gle.com>, Arnd Bergmann <arnd@...db.de>,
Marc Zyngier <maz@...nel.org>,
Lorenzo Pieralisi <lorenzo.pieralisi@....com>,
Catalin Marinas <catalin.marinas@....com>,
Will Deacon <will@...nel.org>,
"K. Y. Srinivasan" <kys@...rosoft.com>,
Haiyang Zhang <haiyangz@...rosoft.com>,
Stephen Hemminger <sthemmin@...rosoft.com>,
Wei Liu <wei.liu@...nel.org>, Dexuan Cui <decui@...rosoft.com>,
Rob Herring <robh@...nel.org>,
Krzysztof WilczyĆski <kw@...ux.com>,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org,
linux-hyperv@...r.kernel.org, linux-pci@...r.kernel.org,
Sunil Muthuswamy <sunilmut@...rosoft.com>,
Mike Rapoport <rppt@...nel.org>
Subject: Re: [PATCH v6 2/8] PCI: Support populating MSI domains of root buses
via bridges
On Tue, Jul 27, 2021 at 02:06:51AM +0800, Boqun Feng wrote:
> Currently, at probing time, the MSI domains of root buses are populated
> if either the information of MSI domain is available from firmware (DT
> or ACPI), or arch-specific sysdata is used to pass the fwnode of the MSI
> domain. These two conditions don't cover all, e.g. Hyper-V virtual PCI
> on ARM64, which doesn't have the MSI information in the firmware and
> couldn't use arch-specific sysdata because running on an architecture
> with PCI_DOMAINS_GENERIC=y.
>
> To support populating MSI domains of the root buses at the probing when
> neither of the above condition is true, the ->msi_domain of the
> corresponding bridge device is used: in pci_host_bridge_msi_domain(),
> which should return the MSI domain of the root bus, the ->msi_domain of
> the corresponding bridge is fetched first as a potential value of the
> MSI domain of the root bus.
>
> In order to use the approach to populate MSI domains, the driver needs
> to dev_set_msi_domain() on the bridge before calling
> pci_register_host_bridge(), and makes sure GENERIC_MSI_IRQ_DOMAIN=y.
>
> Another advantage of this new approach is providing an arch-independent
> way to populate MSI domains, which allows sharing the driver code as
> much as possible between architectures.
>
> Originally-by: Arnd Bergmann <arnd@...db.de>
> Signed-off-by: Boqun Feng <boqun.feng@...il.com>
Acked-by: Bjorn Helgaas <bhelgaas@...gle.com>
> ---
> drivers/pci/probe.c | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
> index 60c50d4f156f..ea7f2a57e2f5 100644
> --- a/drivers/pci/probe.c
> +++ b/drivers/pci/probe.c
> @@ -829,11 +829,15 @@ static struct irq_domain *pci_host_bridge_msi_domain(struct pci_bus *bus)
> {
> struct irq_domain *d;
>
> + /* If the host bridge driver sets a MSI domain of the bridge, use it */
> + d = dev_get_msi_domain(bus->bridge);
> +
> /*
> * Any firmware interface that can resolve the msi_domain
> * should be called from here.
> */
> - d = pci_host_bridge_of_msi_domain(bus);
> + if (!d)
> + d = pci_host_bridge_of_msi_domain(bus);
> if (!d)
> d = pci_host_bridge_acpi_msi_domain(bus);
>
> --
> 2.32.0
>
Powered by blists - more mailing lists