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
WARNING: multiple messages have this Message-ID (diff)
From: lorenzo.pieralisi@arm.com (Lorenzo Pieralisi)
To: linux-arm-kernel@lists.infradead.org
Subject: [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: 100+ 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 ` Lorenzo Pieralisi
2017-04-26 11:17 ` [RFC/RFT PATCH 01/18] PCI: Initialize bridge release function at bridge allocation Lorenzo Pieralisi
2017-04-26 11:17 ` Lorenzo Pieralisi
2017-04-28 12:13 ` Arnd Bergmann
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-26 11:17 ` Lorenzo Pieralisi
2017-04-28 12:14 ` Arnd Bergmann
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-26 11:17 ` Lorenzo Pieralisi
2017-04-28 12:28 ` Arnd Bergmann
2017-04-28 12:28 ` Arnd Bergmann
2017-05-02 17:15 ` Lorenzo Pieralisi
2017-05-02 17:15 ` Lorenzo Pieralisi
2017-05-02 19:36 ` Arnd Bergmann
2017-05-02 19:36 ` Arnd Bergmann
2017-05-25 20:56 ` Bjorn Helgaas
2017-05-25 20:56 ` Bjorn Helgaas
2017-05-26 13:07 ` Lorenzo Pieralisi
2017-05-26 13:07 ` Lorenzo Pieralisi
2017-05-26 17:29 ` Ray Jui
2017-05-26 17:29 ` Ray Jui
2017-05-31 10:20 ` Lorenzo Pieralisi
2017-05-31 10:20 ` Lorenzo Pieralisi
2017-05-30 11:16 ` Oza Oza
2017-05-30 11:16 ` Oza Oza
2017-05-31 11:13 ` Lorenzo Pieralisi
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-26 11:17 ` Lorenzo Pieralisi
2017-04-28 12:41 ` Arnd Bergmann
2017-04-28 12:41 ` Arnd Bergmann
2017-04-26 11:17 ` [RFC/RFT PATCH 05/18] ARM: PCI: dove: " Lorenzo Pieralisi
2017-04-26 11:17 ` Lorenzo Pieralisi
2017-04-28 12:38 ` Arnd Bergmann
2017-04-28 12:38 ` Arnd Bergmann
2017-04-28 12:52 ` Arnd Bergmann
2017-04-28 12:52 ` Arnd Bergmann
2017-05-03 10:31 ` Lorenzo Pieralisi
2017-05-03 10:31 ` Lorenzo Pieralisi
2017-05-03 12:02 ` Arnd Bergmann
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 ` Lorenzo Pieralisi
2017-04-26 11:17 ` [RFC/RFT PATCH 07/18] ARM: PCI: orion5x: " Lorenzo Pieralisi
2017-04-26 11:17 ` Lorenzo Pieralisi
2017-04-26 15:12 ` Andrew Lunn
2017-04-26 15:12 ` Andrew Lunn
2017-04-26 16:13 ` Lorenzo Pieralisi
2017-04-26 16:13 ` Lorenzo Pieralisi
2017-04-26 18:53 ` Andrew Lunn
2017-04-26 18:53 ` Andrew Lunn
2017-04-27 10:40 ` Lorenzo Pieralisi
2017-04-27 10:40 ` Lorenzo Pieralisi
2017-04-26 11:17 ` [RFC/RFT PATCH 08/18] PCI: designware: " Lorenzo Pieralisi
2017-04-26 11:17 ` Lorenzo Pieralisi
2017-04-28 13:13 ` Arnd Bergmann
2017-04-28 13:13 ` Arnd Bergmann
2017-05-03 10:16 ` Lorenzo Pieralisi
2017-05-03 10:16 ` Lorenzo Pieralisi
2017-06-02 11:49 ` Lorenzo Pieralisi
2017-06-02 11:49 ` Lorenzo Pieralisi
2017-06-02 13:12 ` Arnd Bergmann
2017-06-02 13:12 ` Arnd Bergmann
2017-06-02 13:56 ` Lorenzo Pieralisi
2017-06-02 13:56 ` Lorenzo Pieralisi
2017-06-02 14:44 ` Arnd Bergmann
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 ` Lorenzo Pieralisi
2017-04-26 11:18 ` [RFC/RFT PATCH 10/18] PCI: rcar: " Lorenzo Pieralisi
2017-04-26 11:18 ` Lorenzo Pieralisi
2017-04-28 12:53 ` Arnd Bergmann
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 ` 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 ` 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 ` 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 ` 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 ` 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 ` 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 ` 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-26 11:18 ` Lorenzo Pieralisi
2017-04-28 13:05 ` Arnd Bergmann
2017-04-28 13:05 ` Arnd Bergmann
2017-05-03 10:51 ` Lorenzo Pieralisi [this message]
2017-05-03 10:51 ` Lorenzo Pieralisi
2017-04-27 20:06 ` [RFC/RFT PATCH 00/18] PCI: ARM/ARM64: remove pci_fixup_irqs() usage Thierry Reding
2017-04-27 20:06 ` Thierry Reding
2017-05-03 10:34 ` Lorenzo Pieralisi
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 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.