śr., 4 mar 2020 o 15:58 Alexander Sverdlin <alexander.sverdlin@xxxxxxxxx> napisał(a): > > Hi! > > On 04/03/2020 15:21, Bartosz Golaszewski wrote: > > wt., 3 mar 2020 o 10:29 Alexander A Sverdlin > > <alexander.sverdlin@xxxxxxxxx> napisał(a): > >> From: Alexander Sverdlin <alexander.sverdlin@xxxxxxxxx> > >> > >> Existing (irq < 0) condition is always false because adev->irq has unsigned > >> type and contains 0 in case of failed irq_of_parse_and_map(). Up to now all > >> the mapping errors were silently ignored. > >> > >> Seems that repairing this check would be backwards-incompatible and might > >> break the probe() for the implementations without IRQ support. Therefore > >> warn the user instead. > >> > >> Signed-off-by: Alexander Sverdlin <alexander.sverdlin@xxxxxxxxx> > >> --- > >> drivers/gpio/gpio-pl061.c | 6 ++---- > >> 1 file changed, 2 insertions(+), 4 deletions(-) > >> > >> diff --git a/drivers/gpio/gpio-pl061.c b/drivers/gpio/gpio-pl061.c > >> index 5df7782..3439120 100644 > >> --- a/drivers/gpio/gpio-pl061.c > >> +++ b/drivers/gpio/gpio-pl061.c > >> @@ -326,10 +326,8 @@ static int pl061_probe(struct amba_device *adev, const struct amba_id *id) > >> > >> writeb(0, pl061->base + GPIOIE); /* disable irqs */ > >> irq = adev->irq[0]; > >> - if (irq < 0) { > >> - dev_err(&adev->dev, "invalid IRQ\n"); > >> - return -ENODEV; > >> - } > >> + if (!irq) > >> + dev_warn(&adev->dev, "IRQ support disabled\n"); > >> pl061->parent_irq = irq; > >> > >> girq = &pl061->gc.irq; > >> -- > >> 2.4.6 > >> > > What happens later on if irq == 0? Does irq_set_irq_wake() fail? > > Yes, would fail if IRQs would be requested from PL061: > > int irq_set_irq_wake(unsigned int irq, unsigned int on) > { > unsigned long flags; > struct irq_desc *desc = irq_get_desc_buslock(irq, &flags, IRQ_GET_DESC_CHECK_GLOBAL); > int ret = 0; > > if (!desc) > return -EINVAL; > > > -- > Best regards, > Alexander Sverdlin. Ok, I'll go ahead and queue this then. Thanks! Bartosz