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>