After registering the hierarchical irqdomain, the thunderX driver proceeds to push the domain on top of all IRQs on the chip, however the third parameter to irq_domain_push_irq() needs to be a fwspec for the IRQ since this is whate the gpiolib .alloc() callback expects. Fix it up. Fixes: a7fc89f9d5fc ("gpio: thunderx: Switch to GPIOLIB_IRQCHIP") Cc: Xiaotao Yin <Xiaotao.Yin@xxxxxxxxxxxxx> Reported-by: Xiaotao Yin <Xiaotao.Yin@xxxxxxxxxxxxx> Signed-off-by: Linus Walleij <linus.walleij@xxxxxxxxxx> --- drivers/gpio/gpio-thunderx.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/gpio/gpio-thunderx.c b/drivers/gpio/gpio-thunderx.c index d08d86a22b1f..e885a6d08a25 100644 --- a/drivers/gpio/gpio-thunderx.c +++ b/drivers/gpio/gpio-thunderx.c @@ -524,9 +524,15 @@ static int thunderx_gpio_probe(struct pci_dev *pdev, /* Push on irq_data and the domain for each line. */ for (i = 0; i < ngpio; i++) { - err = irq_domain_push_irq(chip->irq.domain, + struct irq_fwspec fwspec; + + fwspec.fwnode = of_node_to_fwnode(dev->of_node); + fwspec.param_count = 2; + fwspec.param[0] = i; + fwspec.param[1] = IRQ_TYPE_NONE; + err = irq_domain_push_irq(girq->domain, txgpio->msix_entries[i].vector, - chip); + &fwspec); if (err < 0) dev_err(dev, "irq_domain_push_irq: %d\n", err); } -- 2.23.0