USB isochronous traffic with Rasberry Pi [WAS: Re: USB audio device on Raspberry Pi]

Ian Lepore ian at FreeBSD.org
Sat May 10 12:25:02 UTC 2014


On Sat, 2014-05-10 at 09:51 +0200, Hans Petter Selasky wrote:
> Hi,
> 
> I've made one more patch to the DWC OTG driver. Nice if you can test 
> that too.
> 
> http://svnweb.freebsd.org/changeset/base/265806
> 
> BTW: I think I've found what is causing the glitches when using USB 
> audio devices:
> 
> diff --git a/sys/arm/arm/machdep.c b/sys/arm/arm/machdep.c
> index 0490be7..de7f015 100644
> --- a/sys/arm/arm/machdep.c
> +++ b/sys/arm/arm/machdep.c
> @@ -423,7 +423,7 @@ cpu_est_clockrate(int cpu_id, uint64_t *rate)
>   void
>   cpu_idle(int busy)
>   {
> -
> +#if 0
>          CTR2(KTR_SPARE2, "cpu_idle(%d) at %d",
>              busy, curcpu);
>   #ifndef NO_EVENTTIMERS
> @@ -442,6 +442,7 @@ cpu_idle(int busy)
>   #endif
>          CTR2(KTR_SPARE2, "cpu_idle(%d) at %d done",
>              busy, curcpu);
> +#endif
>   }
> 
>   int
> 
> 
> It appears that cpu_idle() is going to sleep when there are pending 
> interrupts, and then waking up on the next timer IRQ! Can someone 
> familiar with these parts of the kernel comment?
> 
> Please try for yourself, with and without the patch above, using an USB 
> audio device with the RPI-B!
> 
> Still when the console is printing, there are significant glitches too 
> :-) That's because the TTY layer is synchronously writing data to the 
> serial line. That's OK for now.
> 
> --HPS

If there's an interrupt pending when the WaitForInterrupt instruction is
executed, the cpu doesn't go to sleep -- it acts like a nop.  I think
the problem might be that the device write that re-enables the interrupt
hasn't yet made it to the device when the cpu clock stops.

I don't have any usb audio gear to test with, could you please test the
attached patch and see if it fixes the glitches?

-- Ian

-------------- next part --------------
A non-text attachment was scrubbed...
Name: cpu_sleep_dsb.diff
Type: text/x-patch
Size: 435 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-arm/attachments/20140510/7d21a278/attachment.bin>


More information about the freebsd-arm mailing list