From: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
To: Arnd Bergmann <arnd@arndb.de>
Cc: linux-pci <linux-pci@vger.kernel.org>,
Linux ARM <linux-arm-kernel@lists.infradead.org>,
Will Deacon <will.deacon@arm.com>,
Jingoo Han <jingoohan1@gmail.com>,
Bjorn Helgaas <bhelgaas@google.com>,
Rob Herring <robh@kernel.org>, Simon Horman <horms@verge.net.au>,
Bharat Kumar Gogada <bharat.kumar.gogada@xilinx.com>,
Ray Jui <rjui@broadcom.com>, Joao Pinto <Joao.Pinto@synopsys.com>,
Thierry Reding <thierry.reding@gmail.com>,
Michal Simek <michal.simek@xilinx.com>,
Ley Foon Tan <lftan@altera.com>,
Russell King <linux@armlinux.org.uk>,
Pratyush Anand <pratyush.anand@gmail.com>,
Mingkai Hu <mingkai.hu@freescale.com>,
Tanmay Inamdar <tinamdar@apm.com>,
Murali Karicheri <m-karicheri2@ti.com>,
Wenrui Li <wenrui.li@rock-chips.com>,
Shawn Lin <shawn.lin@rock-chips.com>,
Minghuan Lian <minghuan.Lian@freescale.com>,
Gabriele Paoloni <gabriele.paoloni@huawei.com>,
Thomas Petazzoni <thomas.petazzoni@free-electrons.com>,
Stanimir Varbanov <svarbanov@mm-sol.com>,
Zhou Wang <wangzhou1@hisilicon.com>,
Roy Zang <tie-fei.zang@freescale.com>,
Matthew Minter <matt@masarand.com>
Subject: Re: [RFC/RFT PATCH 18/18] ARM/ARM64: PCI: Drop pci_fixup_irqs() usage for DT based host controllers
Date: Wed, 3 May 2017 11:51:30 +0100 [thread overview]
Message-ID: <20170503105130.GD10800@red-moon> (raw)
In-Reply-To: <CAK8P3a3dT-PR69LrAc8_9tNkdj+LTztQ0pcJKyAV6DwykyXi4A@mail.gmail.com>
On Fri, Apr 28, 2017 at 03:05:44PM +0200, Arnd Bergmann wrote:
> On Wed, Apr 26, 2017 at 1:18 PM, Lorenzo Pieralisi
> <lorenzo.pieralisi@arm.com> wrote:
> > DT based PCI host controllers are currently relying on
> > pci_fixup_irqs() to assign legacy PCI irqs to devices. This is
> > broken in that pci_fixup_irqs() assign IRQs for all PCI devices
> > present in a given system some of which may well be enabled by
> > the time pci_fixup_irqs() is called (ie a system with multiple
> > host controllers). With the introduction of
> > struct pci_host_bridge.map_irq pointer it is possible to assign IRQs
> > for all devices originating from a PCI host bridge at probe time;
> > this is implemented through pci_assign_irq() that relies on the
> > struct pci_host_bridge.map_irq pointer to map IRQ for a given device.
> >
> > The benefits this brings are twofold:
> >
> > - the IRQ for a device is assigned once at probe time
> > - the IRQ assignment works also for hotplugged devices
> >
> > Remove pci_fixup_irqs() call from all DT based PCI host controller
> > drivers. The map_irq() and swizzle_irq() struct pci_host_bridge callbacks
> > are either set-up in the respective PCI host controller driver or
> > delegated to ARM/ARM64 pcibios_root_bridge_prepare() implementations,
> > where, upon DT probe detection, the functions are set to DT defaults (ie
> > of_irq_parse_and_map_pci() and pci_common_swizzle() respectively.
> >
> > Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
>
> Nice!
>
> > +int pcibios_root_bridge_prepare(struct pci_host_bridge *bridge)
> > +{
> > + /*
> > + * Set-up IRQ mapping/swizzingly functions.
> > + * If the either function pointer is already set,
> > + * do not override any of them since it is a host
> > + * controller specific mapping/swizzling function.
> > + */
> > + if (!bridge->map_irq && !bridge->swizzle_irq) {
> > + struct device *parent = bridge->dev.parent;
> > + /*
> > + * If we have a parent pointer with a valid
> > + * OF node this means we are probing a PCI host
> > + * controller configured through DT firmware.
> > + */
> > + if (IS_ENABLED(CONFIG_OF) && parent && parent->of_node) {
> > + bridge->map_irq = of_irq_parse_and_map_pci;
> > + bridge->swizzle_irq = pci_common_swizzle;
> > + }
> > + }
> > +
> > + return 0;
> > +}
>
> I think it would be better to reduce the number of global functions defined
> by common code to be called from PCI core code, and instead use
> additional callback pointers from the pci_host_bridge operations.
Yes but this means duplicating the whole map_irq/swizzle_irq
initialization thing in all DT PCI host controllers, it is getting
quite cumbersome to be frank, we should try to consolidate DT PCI
host controllers code, it is becoming a bit unwieldy to manage and
there is too much code duplication.
> In particular, there are only very few existing users of
> pcibios_root_bridge_prepare() at the moment, so we should
> be able to get rid of those quite easily now.
I could do but please see my comment above.
> > diff --git a/drivers/pci/host/pcie-iproc.c b/drivers/pci/host/pcie-iproc.c
> > index 0f39bd2..bc9e36a 100644
> > --- a/drivers/pci/host/pcie-iproc.c
> > +++ b/drivers/pci/host/pcie-iproc.c
> > @@ -1205,7 +1205,8 @@ int iproc_pcie_setup(struct iproc_pcie *pcie, struct list_head *res)
> > struct device *dev;
> > int ret;
> > void *sysdata;
> > - struct pci_bus *bus, *child;
> > + struct pci_bus *child;
> > + struct pci_host_bridge *host;
> >
> > dev = pcie->dev;
> >
> > @@ -1252,15 +1253,30 @@ int iproc_pcie_setup(struct iproc_pcie *pcie, struct list_head *res)
> > sysdata = pcie;
> > #endif
> >
> > - bus = pci_create_root_bus(dev, 0, &iproc_pcie_ops, sysdata, res);
> > - if (!bus) {
>
> Could this be a separate patch?
Yes, I can split it from the pci_fixup_irqs() removal.
Thanks,
Lorenzo
next prev parent reply other threads:[~2017-05-03 10:50 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-26 11:17 [RFC/RFT PATCH 00/18] PCI: ARM/ARM64: remove pci_fixup_irqs() usage Lorenzo Pieralisi
2017-04-26 11:17 ` [RFC/RFT PATCH 01/18] PCI: Initialize bridge release function at bridge allocation Lorenzo Pieralisi
2017-04-28 12:13 ` Arnd Bergmann
2017-04-26 11:17 ` [RFC/RFT PATCH 02/18] PCI: Add pci_free_host_bridge interface Lorenzo Pieralisi
2017-04-28 12:14 ` Arnd Bergmann
2017-04-26 11:17 ` [RFC/RFT PATCH 03/18] PCI: Introduce pci_scan_root_bus_bridge() Lorenzo Pieralisi
2017-04-28 12:28 ` Arnd Bergmann
2017-05-02 17:15 ` Lorenzo Pieralisi
2017-05-02 19:36 ` Arnd Bergmann
2017-05-25 20:56 ` Bjorn Helgaas
2017-05-26 13:07 ` Lorenzo Pieralisi
2017-05-26 17:29 ` Ray Jui
2017-05-31 10:20 ` Lorenzo Pieralisi
2017-05-30 11:16 ` Oza Oza
2017-05-31 11:13 ` Lorenzo Pieralisi
2017-04-26 11:17 ` [RFC/RFT PATCH 04/18] ARM: PCI: bios32: Convert PCI scan API to pci_scan_root_bus_bridge() Lorenzo Pieralisi
2017-04-28 12:41 ` Arnd Bergmann
2017-04-26 11:17 ` [RFC/RFT PATCH 05/18] ARM: PCI: dove: " Lorenzo Pieralisi
2017-04-28 12:38 ` Arnd Bergmann
2017-04-28 12:52 ` Arnd Bergmann
2017-05-03 10:31 ` Lorenzo Pieralisi
2017-05-03 12:02 ` Arnd Bergmann
2017-04-26 11:17 ` [RFC/RFT PATCH 06/18] ARM: PCI: iop13xx: " Lorenzo Pieralisi
2017-04-26 11:17 ` [RFC/RFT PATCH 07/18] ARM: PCI: orion5x: " Lorenzo Pieralisi
2017-04-26 15:12 ` Andrew Lunn
2017-04-26 16:13 ` Lorenzo Pieralisi
2017-04-26 18:53 ` Andrew Lunn
2017-04-27 10:40 ` Lorenzo Pieralisi
2017-04-26 11:17 ` [RFC/RFT PATCH 08/18] PCI: designware: " Lorenzo Pieralisi
2017-04-28 13:13 ` Arnd Bergmann
2017-05-03 10:16 ` Lorenzo Pieralisi
2017-06-02 11:49 ` Lorenzo Pieralisi
2017-06-02 13:12 ` Arnd Bergmann
2017-06-02 13:56 ` Lorenzo Pieralisi
2017-06-02 14:44 ` Arnd Bergmann
2017-04-26 11:18 ` [RFC/RFT PATCH 09/18] PCI: aardvark: " Lorenzo Pieralisi
2017-04-26 11:18 ` [RFC/RFT PATCH 10/18] PCI: rcar: " Lorenzo Pieralisi
2017-04-28 12:53 ` Arnd Bergmann
2017-04-26 11:18 ` [RFC/RFT PATCH 11/18] PCI: Remove pci_scan_root_bus_msi() Lorenzo Pieralisi
2017-04-26 11:18 ` [RFC/RFT PATCH 12/18] PCI: Build setup-irq.o on all arches Lorenzo Pieralisi
2017-04-26 11:18 ` [RFC/RFT PATCH 13/18] PCI: Add IRQ mapping function pointers to pci_host_bridge struct Lorenzo Pieralisi
2017-04-26 11:18 ` [RFC/RFT PATCH 14/18] PCI: Add pci_assign_irq() function and have pci_fixup_irqs() use it Lorenzo Pieralisi
2017-04-26 11:18 ` [RFC/RFT PATCH 15/18] OF/PCI: Update of_irq_parse_and_map_pci() comment Lorenzo Pieralisi
2017-04-26 11:18 ` [RFC/RFT PATCH 16/18] PCI: Add a call to pci_assign_irq() in pci_device_probe() Lorenzo Pieralisi
2017-04-26 11:18 ` [RFC/RFT PATCH 17/18] ARM: PCI: Remove pci_fixup_irqs() call for bios32 host controllers Lorenzo Pieralisi
2017-04-26 11:18 ` [RFC/RFT PATCH 18/18] ARM/ARM64: PCI: Drop pci_fixup_irqs() usage for DT based " Lorenzo Pieralisi
2017-04-28 13:05 ` Arnd Bergmann
2017-05-03 10:51 ` Lorenzo Pieralisi [this message]
2017-04-27 20:06 ` [RFC/RFT PATCH 00/18] PCI: ARM/ARM64: remove pci_fixup_irqs() usage Thierry Reding
2017-05-03 10:34 ` Lorenzo Pieralisi
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=20170503105130.GD10800@red-moon \
--to=lorenzo.pieralisi@arm.com \
--cc=Joao.Pinto@synopsys.com \
--cc=arnd@arndb.de \
--cc=bharat.kumar.gogada@xilinx.com \
--cc=bhelgaas@google.com \
--cc=gabriele.paoloni@huawei.com \
--cc=horms@verge.net.au \
--cc=jingoohan1@gmail.com \
--cc=lftan@altera.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=m-karicheri2@ti.com \
--cc=matt@masarand.com \
--cc=michal.simek@xilinx.com \
--cc=minghuan.Lian@freescale.com \
--cc=mingkai.hu@freescale.com \
--cc=pratyush.anand@gmail.com \
--cc=rjui@broadcom.com \
--cc=robh@kernel.org \
--cc=shawn.lin@rock-chips.com \
--cc=svarbanov@mm-sol.com \
--cc=thierry.reding@gmail.com \
--cc=thomas.petazzoni@free-electrons.com \
--cc=tie-fei.zang@freescale.com \
--cc=tinamdar@apm.com \
--cc=wangzhou1@hisilicon.com \
--cc=wenrui.li@rock-chips.com \
--cc=will.deacon@arm.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).