Message ID | 20150106020122.GA24980@saruman (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi, On Mon, Jan 05, 2015 at 08:01:22PM -0600, Felipe Balbi wrote: > On Tue, Jan 06, 2015 at 01:16:21AM +0200, Aaro Koskinen wrote: > > I did some debugging and it seems the "In-band Error" > > occurs when omap_system_dma_probe() is being run, specifically when > > the interrupt is enabled. I believe the "DMA" interrupt it's trying > > set up is completely wrong: > > > > 28: 0 GPIO 2 DMA > > > > GPIO 2?! Where is that coming from? > > heh, it's probably the linux number used ended up mapping to another irq > domain. Can you add this debugging patch and report dmesg ? Post-commit: [ 0.208251] omap_dma_system omap_dma_system.0: legacy DMA IRQ 28 [ 0.216125] omap-dma-engine 48056000.dma-controller: dmaengine IRQ 22 22: 5 INTC 13 omap-dma-engine 28: 0 GPIO 2 DMA Pre-commit: [ 0.208557] omap_dma_system omap_dma_system.0: legacy DMA IRQ 28 [ 0.216461] omap-dma-engine 48056000.dma-controller: dmaengine IRQ 29 28: 0 INTC 12 DMA 29: 5 INTC 13 omap-dma-engine > Note that I need one log post commit and another log pre commit. If any > of the IRQ numbers change, if means that irq_domain_add_linear() ended > up changing IRQ start and we would need some trick to grab the correct > IRQ number again. So looks like static OMAP_INTC_START cannot be used anymore, but hwmod data is full of these? mach-omap2/omap_hwmod_2xxx_3xxx_ipblock_data.c: { .name = "0", .irq = 12 + OMAP_INTC_START, }, /* INT_24XX_SDMA_IRQ0 */ A. -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c index 24770e5..b3f6dcd 100644 --- a/arch/arm/plat-omap/dma.c +++ b/arch/arm/plat-omap/dma.c @@ -1380,6 +1380,8 @@ static int omap_system_dma_probe(struct platform_device *pdev) if (dma_omap2plus() && !(d->dev_caps & DMA_ENGINE_HANDLE_IRQ)) { strcpy(irq_name, "0"); dma_irq = platform_get_irq_byname(pdev, irq_name); + dev_info(&pdev->dev, "legacy DMA IRQ %d\n", dma_irq); + if (dma_irq < 0) { dev_err(&pdev->dev, "failed: request IRQ %d", dma_irq); ret = dma_irq; diff --git a/drivers/dma/omap-dma.c b/drivers/dma/omap-dma.c index c0016a6..98fe2d2 100644 --- a/drivers/dma/omap-dma.c +++ b/drivers/dma/omap-dma.c @@ -1155,6 +1155,8 @@ static int omap_dma_probe(struct platform_device *pdev) } irq = platform_get_irq(pdev, 1); + + dev_info(&pdev->dev, "dmaengine IRQ %d\n", irq); if (irq <= 0) { dev_info(&pdev->dev, "failed to get L1 IRQ: %d\n", irq); od->legacy = true;