diff mbox

[v5,5/7] PCI: irqdomain: Look up IRQ domain by fwnode_handle

Message ID 1446239475-49480-6-git-send-email-jakeo@microsoft.com
State Superseded
Headers show

Commit Message

Jake Oshins Oct. 30, 2015, 9:11 p.m. UTC
From: Jake Oshins <jakeo@microsoft.com>

This patch adds a second way of finding an IRQ domain associated with
a root PCI bus.  After looking to see if one can be found through
the OF tree, it attempts to look up the IRQ domain through an
fwnode_handle stored in the pci_sysdata struct.

Signed-off-by: Jake Oshins <jakeo@microsoft.com>
---
 arch/x86/include/asm/pci.h |  4 +++-
 drivers/pci/probe.c        | 11 +++++++++++
 include/asm-generic/pci.h  |  4 ++++
 3 files changed, 18 insertions(+), 1 deletion(-)

Comments

Andy Shevchenko Oct. 30, 2015, 9:43 p.m. UTC | #1
On Fri, Oct 30, 2015 at 11:11 PM,  <jakeo@microsoft.com> wrote:
> From: Jake Oshins <jakeo@microsoft.com>
>
> This patch adds a second way of finding an IRQ domain associated with
> a root PCI bus.  After looking to see if one can be found through
> the OF tree, it attempts to look up the IRQ domain through an
> fwnode_handle stored in the pci_sysdata struct.
>
> Signed-off-by: Jake Oshins <jakeo@microsoft.com>
> ---
>  arch/x86/include/asm/pci.h |  4 +++-
>  drivers/pci/probe.c        | 11 +++++++++++
>  include/asm-generic/pci.h  |  4 ++++
>  3 files changed, 18 insertions(+), 1 deletion(-)
>
> diff --git a/arch/x86/include/asm/pci.h b/arch/x86/include/asm/pci.h
> index 10213a1..fb74453 100644
> --- a/arch/x86/include/asm/pci.h
> +++ b/arch/x86/include/asm/pci.h
> @@ -45,11 +45,13 @@ static inline int pci_proc_domain(struct pci_bus *bus)
>  #endif
>
>  #ifdef CONFIG_PCI_MSI_IRQ_DOMAIN
> -static inline void *pci_fwnode(struct pci_bus *bus)
> +static inline void *_pci_root_bus_fwnode(struct pci_bus *bus)

I'm sorry what is the point to rename?

>  {
>         struct pci_sysdata *sd = bus->sysdata;
>         return sd->fwnode;
>  }
> +
> +#define pci_root_bus_fwnode    _pci_root_bus_fwnode
>  #endif
>
>  /* Can be used to override the logic in pci_scan_bus for skipping
> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
> index f441d1b..60e50a8 100644
> --- a/drivers/pci/probe.c
> +++ b/drivers/pci/probe.c
> @@ -671,6 +671,17 @@ static struct irq_domain *pci_host_bridge_msi_domain(struct pci_bus *bus)
>          */
>         d = pci_host_bridge_of_msi_domain(bus);
>
> +#ifdef CONFIG_PCI_MSI_IRQ_DOMAIN
> +       /*
> +        * If no IRQ domain was found via the OF tree, try looking it up
> +        * directly through the fwnode_handle.
> +        */
> +       if (!d && pci_root_bus_fwnode(bus)) {
> +               d = irq_find_matching_fwnode(pci_root_bus_fwnode(bus),
> +                                            DOMAIN_BUS_PCI_MSI);

Gave a second glance and now noticed that you call
pci_root_bus_fwnode() twice. So, it actually might be more readable
like your first but modified variant:

if (!d) {
  void *fwnode = pci_fwnode(bus);

  if (fwnode)
    d = irq_find_matching_fwnode(fwnode, DOMAIN_BUS_PCI_MSI);
}

> +       }
> +#endif
> +
>         return d;
>  }


With Best Regards,
Andy Shevchenko
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jake Oshins Oct. 31, 2015, 9:59 p.m. UTC | #2
> -----Original Message-----

> From: Andy Shevchenko [mailto:andy.shevchenko@gmail.com]

> Sent: Friday, October 30, 2015 2:44 PM

> To: Jake Oshins <jakeo@microsoft.com>

> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>; KY Srinivasan

> <kys@microsoft.com>; linux-kernel@vger.kernel.org;

> devel@linuxdriverproject.org; olaf@aepfle.de; Robo Bot

> <apw@canonical.com>; Vitaly Kuznetsov <vkuznets@redhat.com>;

> tglx@redhat.com; Haiyang Zhang <haiyangz@microsoft.com>;

> marc.zyngier@arm.com; Bjorn Helgaas <bhelgaas@google.com>; linux-

> pci@vger.kernel.org

> Subject: Re: [PATCH v5 5/7] PCI: irqdomain: Look up IRQ domain by

> fwnode_handle

> 

> On Fri, Oct 30, 2015 at 11:11 PM,  <jakeo@microsoft.com> wrote:

> > From: Jake Oshins <jakeo@microsoft.com>

> >

> > This patch adds a second way of finding an IRQ domain associated with

> > a root PCI bus.  After looking to see if one can be found through

> > the OF tree, it attempts to look up the IRQ domain through an

> > fwnode_handle stored in the pci_sysdata struct.

> >

> > Signed-off-by: Jake Oshins <jakeo@microsoft.com>

> > ---

> >  arch/x86/include/asm/pci.h |  4 +++-

> >  drivers/pci/probe.c        | 11 +++++++++++

> >  include/asm-generic/pci.h  |  4 ++++

> >  3 files changed, 18 insertions(+), 1 deletion(-)

> >

> > diff --git a/arch/x86/include/asm/pci.h b/arch/x86/include/asm/pci.h

> > index 10213a1..fb74453 100644

> > --- a/arch/x86/include/asm/pci.h

> > +++ b/arch/x86/include/asm/pci.h

> > @@ -45,11 +45,13 @@ static inline int pci_proc_domain(struct pci_bus

> *bus)

> >  #endif

> >

> >  #ifdef CONFIG_PCI_MSI_IRQ_DOMAIN

> > -static inline void *pci_fwnode(struct pci_bus *bus)

> > +static inline void *_pci_root_bus_fwnode(struct pci_bus *bus)

> 

> I'm sorry what is the point to rename?

> 


I renamed it only because Gerry asked me to rename it.  And then I regenerated the patch series with that rename still in the queue, which was a mistake.  The whole thing is introduced in the previous patch.  pci_fwnode() doesn't exist without this patch series.  I'll straighten that out.


> >  {

> >         struct pci_sysdata *sd = bus->sysdata;

> >         return sd->fwnode;

> >  }

> > +

> > +#define pci_root_bus_fwnode    _pci_root_bus_fwnode

> >  #endif

> >

> >  /* Can be used to override the logic in pci_scan_bus for skipping

> > diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c

> > index f441d1b..60e50a8 100644

> > --- a/drivers/pci/probe.c

> > +++ b/drivers/pci/probe.c

> > @@ -671,6 +671,17 @@ static struct irq_domain

> *pci_host_bridge_msi_domain(struct pci_bus *bus)

> >          */

> >         d = pci_host_bridge_of_msi_domain(bus);

> >

> > +#ifdef CONFIG_PCI_MSI_IRQ_DOMAIN

> > +       /*

> > +        * If no IRQ domain was found via the OF tree, try looking it up

> > +        * directly through the fwnode_handle.

> > +        */

> > +       if (!d && pci_root_bus_fwnode(bus)) {

> > +               d = irq_find_matching_fwnode(pci_root_bus_fwnode(bus),

> > +                                            DOMAIN_BUS_PCI_MSI);

> 

> Gave a second glance and now noticed that you call

> pci_root_bus_fwnode() twice. So, it actually might be more readable

> like your first but modified variant:

> 

> if (!d) {

>   void *fwnode = pci_fwnode(bus);

> 

>   if (fwnode)

>     d = irq_find_matching_fwnode(fwnode, DOMAIN_BUS_PCI_MSI);

> }

> 

> > +       }

> > +#endif

> > +

> >         return d;

> >  }

> 

> 

> With Best Regards,

> Andy Shevchenko


Sure.  No problem.  I'll resend.

-- Jake
diff mbox

Patch

diff --git a/arch/x86/include/asm/pci.h b/arch/x86/include/asm/pci.h
index 10213a1..fb74453 100644
--- a/arch/x86/include/asm/pci.h
+++ b/arch/x86/include/asm/pci.h
@@ -45,11 +45,13 @@  static inline int pci_proc_domain(struct pci_bus *bus)
 #endif
 
 #ifdef CONFIG_PCI_MSI_IRQ_DOMAIN
-static inline void *pci_fwnode(struct pci_bus *bus)
+static inline void *_pci_root_bus_fwnode(struct pci_bus *bus)
 {
 	struct pci_sysdata *sd = bus->sysdata;
 	return sd->fwnode;
 }
+
+#define pci_root_bus_fwnode	_pci_root_bus_fwnode
 #endif
 
 /* Can be used to override the logic in pci_scan_bus for skipping
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index f441d1b..60e50a8 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -671,6 +671,17 @@  static struct irq_domain *pci_host_bridge_msi_domain(struct pci_bus *bus)
 	 */
 	d = pci_host_bridge_of_msi_domain(bus);
 
+#ifdef CONFIG_PCI_MSI_IRQ_DOMAIN
+	/*
+	 * If no IRQ domain was found via the OF tree, try looking it up
+	 * directly through the fwnode_handle.
+	 */
+	if (!d && pci_root_bus_fwnode(bus)) {
+		d = irq_find_matching_fwnode(pci_root_bus_fwnode(bus),
+					     DOMAIN_BUS_PCI_MSI);
+	}
+#endif
+
 	return d;
 }
 
diff --git a/include/asm-generic/pci.h b/include/asm-generic/pci.h
index f24bc51..3fde985 100644
--- a/include/asm-generic/pci.h
+++ b/include/asm-generic/pci.h
@@ -21,4 +21,8 @@  static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
 #define PCI_DMA_BUS_IS_PHYS	(1)
 #endif
 
+#ifndef pci_root_bus_fwnode
+#define pci_root_bus_fwnode(bus)	((void)(bus),NULL)
+#endif
+
 #endif /* _ASM_GENERIC_PCI_H */