On Mon, Jan 11, 2016 at 9:54 AM, <[email protected]> wrote:

> It looks to me like the problem came about because the function
> prepare_unused_channel_list() in arch/arm/common/edma.c for 4.1 kernels was
> modified to use the device tree for determining which dma channels to
> enable (by clearing appropriate edma_unused bits in the edma struct).
> However, this function is called before processing of the cape device tree
> overlays begins.  Since the base dtbo files do not have appropriate
> references to the McASPs, their dmas are not enabled.  When the cape is
> loaded, it appears that everything works, but since dma is not enabled, the
> required dma transfers do not occur.  Hence the underrun errors for play
> and overrun errors for record.
>
> A simple workaround that worked for me was to add the following to
> arch/arm/boot/dts/am335x-boneblack.dts:
>
> &mcasp0 {
>     status = "okay";
> };
>
> This may not be the best solution.  It seems to me that a better solution
> would be to modify the kernel so that if a device that uses DMA is enabled
> by a device tree overlay, the kernel would enable the DMA when it parses
> the overlay.  However, I have practically no experience or knowledge of
> Linux at the kernel level, so may be completely off base.
>

Nice find!  (this explains why spidev0/spidev1 don't work, without my dma
disable hack)

For v4.1.x, i wonder if we just enable everything like you did for mcasp0
by default.. in the <device>-overlay.dtb's..

Regards,

-- 
Robert Nelson
https://rcn-ee.com/

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to