Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 10 May 2014 06:24:57 -0600
From:      Ian Lepore <ian@FreeBSD.org>
To:        Hans Petter Selasky <hps@selasky.org>
Cc:        "freebsd-arm@freebsd.org" <freebsd-arm@FreeBSD.org>, Alexander Motin <mav@FreeBSD.org>
Subject:   Re: USB isochronous traffic with Rasberry Pi [WAS: Re: USB audio device on Raspberry Pi]
Message-ID:  <1399724697.22079.386.camel@revolution.hippie.lan>
In-Reply-To: <536DDA6D.7060101@selasky.org>
References:  <20140425154430.GA76168@utility-01.thismonkey.com> <535A8AEA.1000100@selasky.org> <20140425204134.GA458@cicely7.cicely.de> <20140430091411.GA45015@utility-01.thismonkey.com> <5360C0A7.9010407@selasky.org> <1398867266.22079.51.camel@revolution.hippie.lan> <CAGW5k5bZ_bTQUXuzNm=tbwx3npz1_HoOR3vM8TBRVFs8zWCq-w@mail.gmail.com> <5362638B.1080104@selasky.org> <5363C133.2000304@selasky.org> <53677CB8.5000800@selasky.org> <CAJ-Vmo=XmH-RX6_i13NuAXhq-jTC%2BWedGiyOMJaPO4r014DSgw@mail.gmail.com> <1399303695.22079.239.camel@revolution.hippie.lan> <1399304157.22079.243.camel@revolution.hippie.lan> <CAJ-Vmok-%2B7%2Bcq%2BDa6_C2AA7BuP5readY_Gfwwm_RF5kh4VerQA@mail.gmail.com> <5368A93D.3070608@selasky.org> <5368AC03.8080401@selasky.org> <536CE5E9.8020408@selasky.org> <1399647986.22079.367.camel@revolution.hippie.lan> <536D0575.1040407@selasky.org> <1399661378.22079.376.camel@revolution.hippie.lan> <536DDA6D.7060101@selasky.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--=-krHKqv4ZbluoRwj6a33k
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit

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


--=-krHKqv4ZbluoRwj6a33k
Content-Disposition: inline; filename="cpu_sleep_dsb.diff"
Content-Type: text/x-patch; name="cpu_sleep_dsb.diff"; charset="us-ascii"
Content-Transfer-Encoding: 7bit

Index: sys/arm/arm/cpufunc_asm_arm11.S
===================================================================
--- sys/arm/arm/cpufunc_asm_arm11.S	(revision 265783)
+++ sys/arm/arm/cpufunc_asm_arm11.S	(working copy)
@@ -129,6 +129,7 @@ END(arm11_drain_writebuf)
 
 ENTRY_NP(arm11_sleep)
 	mov	r0, #0
+	mcr	p15, 0, r0, c7, c10, 4	/* Drain write buffer / DSB */
 	mcr	p15, 0, r0, c7, c0, 4   /* wait for interrupt */
 	RET
 END(arm11_sleep)

--=-krHKqv4ZbluoRwj6a33k--




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1399724697.22079.386.camel>