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.

-- 
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