From: Troy Kisky <troy.kisky@boundarydevices.com>
To: Takashi Iwai <tiwai@suse.de>
Cc: pshou@realtek.com.tw, alsa-devel@alsa-project.org
Subject: Re: [PATCH] ALSA: hda_intel: disable corb rirb when single_cmd active
Date: Tue, 10 Nov 2009 14:15:27 -0700 [thread overview]
Message-ID: <4AF9D7EF.6000800@boundarydevices.com> (raw)
In-Reply-To: <s5hhbt2g7gp.wl%tiwai@suse.de>
Takashi Iwai wrote:
> 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?
The manual was talking about the CORB read pointer reset sequence. It says
to set the bit, verify set, clear the bit, verify clear. Whereas the
normal hda spec says to just set it and forget it, which is what the code does.
>
>> 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...
Still, the circular buffer is a fixed size (256 entries in this case).
The code does not detect if you try to stuff 257 entries into the queue.
Actually, 255 entries is the max you should stuff. The next entry being
stuffed will make the read pointer equal the write pointer and the queue
will be empty. I'm not saying this is likely to ever happen. But if it did
happen, you would end up in single_cmd mode.
>
>> 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.
OK. I'll give a try.
Thanks
Troy
next prev parent reply other threads:[~2009-11-10 21:15 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-03 19:22 [PATCH] ALSA: hda_intel: disable corb rirb when single_cmd active Troy Kisky
2009-11-04 8:16 ` Takashi Iwai
2009-11-04 19:45 ` Troy Kisky
2009-11-05 7:04 ` Takashi Iwai
2009-11-05 19:42 ` Troy Kisky
2009-11-06 7:19 ` Takashi Iwai
2009-11-06 9:20 ` Takashi Iwai
2009-11-07 1:01 ` Troy Kisky
2009-11-07 8:40 ` Takashi Iwai
2009-11-09 19:36 ` Troy Kisky
2009-11-10 7:33 ` Takashi Iwai
2009-11-10 21:15 ` Troy Kisky [this message]
2009-11-11 6:31 ` Takashi Iwai
2009-11-11 19:05 ` Troy Kisky
2009-11-11 19:13 ` Takashi Iwai
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4AF9D7EF.6000800@boundarydevices.com \
--to=troy.kisky@boundarydevices.com \
--cc=alsa-devel@alsa-project.org \
--cc=pshou@realtek.com.tw \
--cc=tiwai@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.