[alsa-devel] [PATCH] ALSA: hda_intel: disable corb rirb when single_cmd active

Takashi Iwai tiwai at suse.de
Tue Nov 10 08:33:10 CET 2009


At Mon, 09 Nov 2009 12:36:31 -0700,
Troy Kisky wrote:
> 
> Takashi Iwai wrote:
> > 
> > Thanks for a quick test!  I'll merge it soon.
> > 
> >> Thanks for spending your time on something you'd rather not.
> > 
> > Well, I'm willing to fix any bugs, of course ;)  So I really
> > appreciated your report and patch.
> > 
> > But, more important bug still remains -- why single_cmd mode is
> > activated.  Let's track it down.
> > 
> I have a little more information on that. The RIRB engine is fine
> but the CORB engine is stopping at seemingly random times. Usually
> CORB has about 7 commands queued when it switches to single_cmd mode.
> After the engine dies, even a rmmod/insmod sequence won't revive it.
> It seems to require a power down/up. I have noticed a couple of things
> that I thought might be related, but testing didn't show much difference.
> 
> 1. The Poulsbo manual says that CORB READ Pointer Reset must be cleared
> back to 0 and read back as 0 to verify that the clear completed correctly.

At which timing?

> 2. azx_corb_send_cmd doesn't compare CORBWP with CORBRP to see if adding
> an entry will result in an empty queue.

It's because azx_corb_send_cmd is asynchronous.  It doesn't wait.
That's the purpose of CORB being a ring buffer...

> Do you have a suggestion on a more thorough reset? I hate having to reboot
> all the time.

Try to set codec->bus->sync_write = 1 somewhere in the initialization.
This will make the driver to wait and synchronize for each verb
response.


thanks,

Takashi


More information about the Alsa-devel mailing list