Re: [PATCHv2] PCI: xilinx: use fwnode_irq_get() for INTx IRQ lookup

Rosen Penev <[email protected]>
Newsgroups org.kernel.vger.linux-pci,dev.linux.lists.llvm,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-kernel
Message-ID <CAKxU2N_f1nN4Oo94V9MY6Q-wp66j=3kodfMs0BeXVGB9XivvNA@mail.gmail.com>
On Wed, Jul 29, 2026 at 9:00 AM Manivannan Sadhasivam <[email protected]> wrote:
>
> On Thu, Jul 16, 2026 at 01:58:11PM -0700, Rosen Penev wrote:
> > Replace irq_of_parse_and_map() with fwnode_irq_get(dev_fwnode(dev), 0)
> > in xilinx_pcie_parse_dt(). For an OF-backed device this is equivalent to
> > the previous call, but uses the generic firmware-node API.
> >
>
> What is the benefit of using fwnode API for OF only driver?
I get conflicting information. Apparently of_irq_get needs a call to
irq_dispose_mapping but fwnode_irq_get does not. irq_of_parse_and_map
definitely does.
>
> - Mani
>
> > Unlike irq_of_parse_and_map(), fwnode_irq_get() returns a positive IRQ or
> > a negative errno and never 0 (it rewrites 0 to -EINVAL). Store the result
> > in an int and check for irq < 0, returning the error (including
> > -EPROBE_DEFER). This also adds the error handling the previous code
> > lacked, where irq_of_parse_and_map() failures were passed straight into
> > devm_request_irq().
> >
> > Built for ARM (multi_v7_defconfig + CONFIG_PCIE_XILINX) with LLVM=1;
> > drivers/pci/controller/pcie-xilinx.o compiles cleanly.
> >
> > Assisted-by: opencode:hy3-free
> > Signed-off-by: Rosen Penev <[email protected]>
> > ---
> >  v2: use dev_err_probe to handle EPROBE_DEFER.
> >  drivers/pci/controller/pcie-xilinx.c | 15 ++++++++-------
> >  1 file changed, 8 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/pci/controller/pcie-xilinx.c b/drivers/pci/controller/pcie-xilinx.c
> > index 4aa139abac16..58532296182f 100644
> > --- a/drivers/pci/controller/pcie-xilinx.c
> > +++ b/drivers/pci/controller/pcie-xilinx.c
> > @@ -20,10 +20,10 @@
> >  #include <linux/of_address.h>
> >  #include <linux/of_pci.h>
> >  #include <linux/of_platform.h>
> > -#include <linux/of_irq.h>
> >  #include <linux/pci.h>
> >  #include <linux/pci-ecam.h>
> >  #include <linux/platform_device.h>
> > +#include <linux/property.h>
> >
> >  #include "../pci.h"
> >
> > @@ -535,7 +535,7 @@ static int xilinx_pcie_parse_dt(struct xilinx_pcie *pcie)
> >       struct device *dev = pcie->dev;
> >       struct device_node *node = dev->of_node;
> >       struct resource regs;
> > -     unsigned int irq;
> > +     int irq;
> >       int err;
> >
> >       err = of_address_to_resource(node, 0, &regs);
> > @@ -548,7 +548,10 @@ static int xilinx_pcie_parse_dt(struct xilinx_pcie *pcie)
> >       if (IS_ERR(pcie->reg_base))
> >               return PTR_ERR(pcie->reg_base);
> >
> > -     irq = irq_of_parse_and_map(node, 0);
> > +     irq = fwnode_irq_get(dev_fwnode(dev), 0);
> > +     if (irq < 0)
> > +             return irq;
> > +
> >       err = devm_request_irq(dev, irq, xilinx_pcie_intr_handler,
> >                              IRQF_SHARED | IRQF_NO_THREAD,
> >                              "xilinx-pcie", pcie);
> > @@ -585,10 +588,8 @@ static int xilinx_pcie_probe(struct platform_device *pdev)
> >       pcie->dev = dev;
> >
> >       err = xilinx_pcie_parse_dt(pcie);
> > -     if (err) {
> > -             dev_err(dev, "Parsing DT failed\n");
> > -             return err;
> > -     }
> > +     if (err)
> > +             return dev_err_probe(dev, err, "Parsing DT failed\n");
> >
> >       xilinx_pcie_init_port(pcie);
> >
> > --
> > 2.55.0
> >
>
> --
> மணிவண்ணன் சதாசிவம்
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.