usb: dwc3: omap: remove IRQ_NOAUTOEN used with shared irq
IRQ_NOAUTOEN cannot be used with shared IRQs, since commit04c848d398
("genirq: Warn when IRQ_NOAUTOEN is used with shared interrupts") and kernel now throws a warn dump. But OMAP DWC3 driver uses this flag. As per commit12a7f17fac
("usb: dwc3: omap: fix race of pm runtime with irq handler in probe") that introduced this flag, PM runtime can race with IRQ handler when deferred probing happens due to extcon, therefore IRQ_NOAUTOEN needs to be set so that irq is not enabled until extcon is registered. Remove setting of IRQ_NOAUTOEN and move the registration of shared irq to a point after dwc3_omap_extcon_register() and of_platform_populate(). This avoids possibility of probe deferring and above said race condition. Reviewed-by: Grygorii Strashko <grygorii.strashko@ti.com> Signed-off-by: Vignesh R <vigneshr@ti.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
This commit is contained in:
parent
541768b08a
commit
ee249b4554
1 changed files with 8 additions and 10 deletions
|
@ -512,15 +512,6 @@ static int dwc3_omap_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
/* check the DMA Status */
|
/* check the DMA Status */
|
||||||
reg = dwc3_omap_readl(omap->base, USBOTGSS_SYSCONFIG);
|
reg = dwc3_omap_readl(omap->base, USBOTGSS_SYSCONFIG);
|
||||||
irq_set_status_flags(omap->irq, IRQ_NOAUTOEN);
|
|
||||||
ret = devm_request_threaded_irq(dev, omap->irq, dwc3_omap_interrupt,
|
|
||||||
dwc3_omap_interrupt_thread, IRQF_SHARED,
|
|
||||||
"dwc3-omap", omap);
|
|
||||||
if (ret) {
|
|
||||||
dev_err(dev, "failed to request IRQ #%d --> %d\n",
|
|
||||||
omap->irq, ret);
|
|
||||||
goto err1;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = dwc3_omap_extcon_register(omap);
|
ret = dwc3_omap_extcon_register(omap);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
@ -532,8 +523,15 @@ static int dwc3_omap_probe(struct platform_device *pdev)
|
||||||
goto err1;
|
goto err1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = devm_request_threaded_irq(dev, omap->irq, dwc3_omap_interrupt,
|
||||||
|
dwc3_omap_interrupt_thread, IRQF_SHARED,
|
||||||
|
"dwc3-omap", omap);
|
||||||
|
if (ret) {
|
||||||
|
dev_err(dev, "failed to request IRQ #%d --> %d\n",
|
||||||
|
omap->irq, ret);
|
||||||
|
goto err1;
|
||||||
|
}
|
||||||
dwc3_omap_enable_irqs(omap);
|
dwc3_omap_enable_irqs(omap);
|
||||||
enable_irq(omap->irq);
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err1:
|
err1:
|
||||||
|
|
Loading…
Add table
Reference in a new issue