Re: [REGRESSION] gpio: pxa: change initcall level second attempt

From: Robert Jarzmik
Date: Tue Jan 26 2016 - 15:41:32 EST


Robert Jarzmik <robert.jarzmik@xxxxxxx> writes:

>> Have you seen this as well or do you know how exactly that should be
>> worked around?
> Hi Marcel,
>
> I haven't seen that before on my devicetree boards, I will try this evening on
> top of next-20160125.
>
> Could you activate the debug logs in drivers/of/irq.c please, and send me
> privately your boot dmesg ? And I'd like to see your board .dts file and your
> .config also, to compare with mine for the mioa701.
>
> I think in your dm9000 case we have this callstack :
> - of_irq_get()
> of_irq_parse_one() => fails, for an unknown reason to me
> => I would have expected it return 0
> => the following irq_find_host() would return
> -EPROBE_DEFER, that's what I'd expect
> irq_create_of_mapping()
> irq_create_fwspec_mapping()
> => error message
>
> What is probable is that gpio-pxa was not probed yet, and this triggers the
> error. What I don't understand is why you don't end up with -EPROBE_DEFER,
> that's why I'd like to have your logs.

BTW, would you try also with the patch at the end of this mail applied ? Just to
verify a wild guess.

Cheers.

--
Robert

---8<---
diff --git a/drivers/net/ethernet/davicom/dm9000.c b/drivers/net/ethernet/davicom/dm9000.c
index cf94b72dbacd..2c532011ae8e 100644
--- a/drivers/net/ethernet/davicom/dm9000.c
+++ b/drivers/net/ethernet/davicom/dm9000.c
@@ -1509,6 +1509,10 @@ dm9000_probe(struct platform_device *pdev)
goto out;
}

+ ndev->irq = platform_get_irq(pdev, 0);
+ if (ndev->irq < 0)
+ return ndev->irq;
+
db->irq_wake = platform_get_irq(pdev, 1);
if (db->irq_wake >= 0) {
dev_dbg(db->dev, "wakeup irq %d\n", db->irq_wake);
@@ -1570,7 +1574,6 @@ dm9000_probe(struct platform_device *pdev)

/* fill in parameters for net-dev structure */
ndev->base_addr = (unsigned long)db->io_addr;
- ndev->irq = db->irq_res->start;

/* ensure at least we have a default set of IO routines */
dm9000_set_io(db, iosize);