On Tue, Jan 17, 2017 at 09:55:24AM -0800, Tony Lindgren wrote: > Commit fdea2d09b997 ("dmaengine: cppi41: Add basic PM runtime support") > together with recent MUSB changes allowed USB and DMA on BeagleBone to idle > when no cable is connected. But looks like few corner case issues still > remain. > > Looks like just by re-plugging USB cable about ten or so times on BeagleBone > when configured in USB peripheral mode we can get warnings and eventually > trigger an oops in cppi41 DMA: > > WARNING: CPU: 0 PID: 14 at drivers/dma/cppi41.c:1154 cppi41_runtime_suspend+ > x28/0x38 [cppi41] > ... > > WARNING: CPU: 0 PID: 14 at drivers/dma/cppi41.c:452 > push_desc_queue+0x94/0x9c [cppi41] > ... > > Unable to handle kernel NULL pointer dereference at virtual > address 00000104 > pgd = c0004000 > [00000104] *pgd=00000000 > Internal error: Oops: 805 [#1] SMP ARM > ... > [<bf0d92cc>] (cppi41_runtime_resume [cppi41]) from [<c0589838>] > (__rpm_callback+0xc0/0x214) > [<c0589838>] (__rpm_callback) from [<c05899ac>] (rpm_callback+0x20/0x80) > [<c05899ac>] (rpm_callback) from [<c0589460>] (rpm_resume+0x504/0x78c) > [<c0589460>] (rpm_resume) from [<c058a1a0>] (pm_runtime_work+0x60/0xa8) > [<c058a1a0>] (pm_runtime_work) from [<c0156120>] (process_one_work+0x2b4/0x808) > > This is because of a race with runtime PM and cppi41_dma_issue_pending() > as reported by Alexandre Bailon <abailon@xxxxxxxxxxxx> in earlier > set of patches. Based on mailing list discussions we however came to the > conclusion that a different fix from Alexandre's fix is needed in order > to guarantee that DMA is really active when we try to use it. > > To fix the issue, we need to add a driver specific flag as we otherwise > can have -EINPROGRESS state set by runtime PM and can't rely on > pm_runtime_active() to tell us when we can use the DMA. > > And we need to make sure the DMA transfers get triggered in the queued > order. So let's always queue the transfers, then flush the queue > from both cppi41_dma_issue_pending() and cppi41_runtime_resume() > as suggested by Grygorii Strashko <grygorii.strashko@xxxxxx> in an > earlier example patch. > > For reference, this is also documented in Documentation/power/runtime_pm.txt > in the example at the end of the file as pointed out by Grygorii Strashko > <grygorii.strashko@xxxxxx>. > > Based on earlier patches from Alexandre Bailon <abailon@xxxxxxxxxxxx> > and Grygorii Strashko <grygorii.strashko@xxxxxx> modified based on > testing and what was discussed on the mailing lists. > > Note that additional patches are still needed depending on how we want > to handle the cppi41 runtime PM. So far cppi41 is always coupled with > musb driver, and musb guarantees that cppi41 is always active during > use. So until we have a better solution, let's just set the cppi41 > autosuspend delay 1 second to avoid pointless EINPROGRESS warnings during > USB mass storage enumeration. As cppi41 is properly clocked with musb > being active, we can safely do this. > > Fixes: fdea2d09b997 ("dmaengine: cppi41: Add basic PM runtime support") > Cc: Andy Shevchenko <andy.shevchenko@xxxxxxxxx> > Cc: Bin Liu <b-liu@xxxxxx> > Cc: Grygorii Strashko <grygorii.strashko@xxxxxx> > Cc: Kevin Hilman <khilman@xxxxxxxxxxxx> > Cc: Patrick Titiano <ptitiano@xxxxxxxxxxxx> > Cc: Sergei Shtylyov <sergei.shtylyov@xxxxxxxxxxxxxxxxxx> > Reported-by: Alexandre Bailon <abailon@xxxxxxxxxxxx> > Signed-off-by: Tony Lindgren <tony@xxxxxxxxxxx> With this v3, I still get -71 error when a device is plugged to a hub to musb. It doesn't happen though if the device is already plugged to the hub before attaching the hub to musb. [ 177.579300] usb 1-1: reset high-speed USB device number 2 using musb-hdrc [ 177.719308] usb 1-1: device descriptor read/64, error -71 [ 178.350297] usb 1-1.1: new high-speed USB device number 4 using musb-hdrc And I still get -115 error flooding with thumb drive. [ 236.880068] cppi41-dma-engine 47400000.dma-controller: cppi41_irq pm runtime get: -115 I tested with TI AM335x GP EVM. The problems happen on both musb ports. Regards, -Bin. -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html