* Should we really use POS_FIX_VIACOMBO for AMD/ATI chipsets?
@ 2011-05-20 13:33 David Henningsson
2011-05-20 13:46 ` Takashi Iwai
0 siblings, 1 reply; 6+ messages in thread
From: David Henningsson @ 2011-05-20 13:33 UTC (permalink / raw)
To: ALSA Development Mailing List, Takashi Iwai, 741825, Xu, Andiry
I'm far from sure, but I could be on to something...
Looking at the code for azx_via_get_position, it seems that for
recording streams, it accesses a register at position
VIA_IN_STREAM0_FIFO_SIZE_OFFSET = 0x90. Looking at the datasheet for
SB700, that register is not even present. This does not seem right to me.
Could it be that we should use POS_FIX_LPIB by default for AMD/ATI
chipsets instead? It seems more reasonable to me.
In addition, I looked through some of the commits for quirking to
POS_FIX_LPIB and the four I checked were all ATI chipsets.
So; I've tried adding:
options snd-hda-intel position_fix=1
to /etc/modprobe.d/alsa-base.conf
...to my machine with the infamous [1002:4383] controller (and
rebooted), and the few times I've tested, recording worked successfully
with pulseaudio. So could you please follow this up with testing on your
machines to see if we have actually managed to solve this long-standing bug?
The only annoying thing is that I didn't realise this earlier :-/
--
David Henningsson, Canonical Ltd.
http://launchpad.net/~diwic
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Should we really use POS_FIX_VIACOMBO for AMD/ATI chipsets?
2011-05-20 13:33 Should we really use POS_FIX_VIACOMBO for AMD/ATI chipsets? David Henningsson
@ 2011-05-20 13:46 ` Takashi Iwai
2011-05-20 14:19 ` Takashi Iwai
2011-05-20 14:51 ` David Henningsson
0 siblings, 2 replies; 6+ messages in thread
From: Takashi Iwai @ 2011-05-20 13:46 UTC (permalink / raw)
To: David Henningsson; +Cc: ALSA Development Mailing List, Xu, Andiry, 741825
At Fri, 20 May 2011 15:33:56 +0200,
David Henningsson wrote:
>
> I'm far from sure, but I could be on to something...
>
> Looking at the code for azx_via_get_position, it seems that for
> recording streams, it accesses a register at position
> VIA_IN_STREAM0_FIFO_SIZE_OFFSET = 0x90. Looking at the datasheet for
> SB700, that register is not even present. This does not seem right to me.
>
> Could it be that we should use POS_FIX_LPIB by default for AMD/ATI
> chipsets instead? It seems more reasonable to me.
> In addition, I looked through some of the commits for quirking to
> POS_FIX_LPIB and the four I checked were all ATI chipsets.
>
> So; I've tried adding:
> options snd-hda-intel position_fix=1
> to /etc/modprobe.d/alsa-base.conf
>
> ...to my machine with the infamous [1002:4383] controller (and
> rebooted), and the few times I've tested, recording worked successfully
> with pulseaudio. So could you please follow this up with testing on your
> machines to see if we have actually managed to solve this long-standing bug?
>
> The only annoying thing is that I didn't realise this earlier :-/
Hmm, I took this as default as it seems fixing the issue on machines,
indeed. Actually I had to use this option first for removing
recording noises on AMD Hudson. But, maybe I need to double-check
again after the snoop bit and other workarounds.
The FIFO size might got wrong on AMD. In that case, the driver
calculates as if FIFO = 0. But, it can still help for correcting the
position via position-buffer vs LPIB comparison.
For the real check, we should put some debug prints on real machines.
Takashi
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Should we really use POS_FIX_VIACOMBO for AMD/ATI chipsets?
2011-05-20 13:46 ` Takashi Iwai
@ 2011-05-20 14:19 ` Takashi Iwai
2011-05-20 14:32 ` Takashi Iwai
2011-05-20 14:51 ` David Henningsson
1 sibling, 1 reply; 6+ messages in thread
From: Takashi Iwai @ 2011-05-20 14:19 UTC (permalink / raw)
To: David Henningsson; +Cc: ALSA Development Mailing List, Xu, Andiry, 741825
At Fri, 20 May 2011 15:46:37 +0200,
Takashi Iwai wrote:
>
> At Fri, 20 May 2011 15:33:56 +0200,
> David Henningsson wrote:
> >
> > I'm far from sure, but I could be on to something...
> >
> > Looking at the code for azx_via_get_position, it seems that for
> > recording streams, it accesses a register at position
> > VIA_IN_STREAM0_FIFO_SIZE_OFFSET = 0x90. Looking at the datasheet for
> > SB700, that register is not even present. This does not seem right to me.
> >
> > Could it be that we should use POS_FIX_LPIB by default for AMD/ATI
> > chipsets instead? It seems more reasonable to me.
> > In addition, I looked through some of the commits for quirking to
> > POS_FIX_LPIB and the four I checked were all ATI chipsets.
> >
> > So; I've tried adding:
> > options snd-hda-intel position_fix=1
> > to /etc/modprobe.d/alsa-base.conf
> >
> > ...to my machine with the infamous [1002:4383] controller (and
> > rebooted), and the few times I've tested, recording worked successfully
> > with pulseaudio. So could you please follow this up with testing on your
> > machines to see if we have actually managed to solve this long-standing bug?
> >
> > The only annoying thing is that I didn't realise this earlier :-/
>
> Hmm, I took this as default as it seems fixing the issue on machines,
> indeed. Actually I had to use this option first for removing
> recording noises on AMD Hudson. But, maybe I need to double-check
> again after the snoop bit and other workarounds.
>
> The FIFO size might got wrong on AMD. In that case, the driver
> calculates as if FIFO = 0. But, it can still help for correcting the
> position via position-buffer vs LPIB comparison.
>
> For the real check, we should put some debug prints on real machines.
Actually the values read there look not working with posbuf.
Let's fix them to use POS_FIX_LPIB now.
Thanks for remark!
Takashi
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Should we really use POS_FIX_VIACOMBO for AMD/ATI chipsets?
2011-05-20 14:19 ` Takashi Iwai
@ 2011-05-20 14:32 ` Takashi Iwai
0 siblings, 0 replies; 6+ messages in thread
From: Takashi Iwai @ 2011-05-20 14:32 UTC (permalink / raw)
To: David Henningsson; +Cc: ALSA Development Mailing List, Xu, Andiry, 741825
At Fri, 20 May 2011 16:19:57 +0200,
Takashi Iwai wrote:
>
> At Fri, 20 May 2011 15:46:37 +0200,
> Takashi Iwai wrote:
> >
> > At Fri, 20 May 2011 15:33:56 +0200,
> > David Henningsson wrote:
> > >
> > > I'm far from sure, but I could be on to something...
> > >
> > > Looking at the code for azx_via_get_position, it seems that for
> > > recording streams, it accesses a register at position
> > > VIA_IN_STREAM0_FIFO_SIZE_OFFSET = 0x90. Looking at the datasheet for
> > > SB700, that register is not even present. This does not seem right to me.
> > >
> > > Could it be that we should use POS_FIX_LPIB by default for AMD/ATI
> > > chipsets instead? It seems more reasonable to me.
> > > In addition, I looked through some of the commits for quirking to
> > > POS_FIX_LPIB and the four I checked were all ATI chipsets.
> > >
> > > So; I've tried adding:
> > > options snd-hda-intel position_fix=1
> > > to /etc/modprobe.d/alsa-base.conf
> > >
> > > ...to my machine with the infamous [1002:4383] controller (and
> > > rebooted), and the few times I've tested, recording worked successfully
> > > with pulseaudio. So could you please follow this up with testing on your
> > > machines to see if we have actually managed to solve this long-standing bug?
> > >
> > > The only annoying thing is that I didn't realise this earlier :-/
> >
> > Hmm, I took this as default as it seems fixing the issue on machines,
> > indeed. Actually I had to use this option first for removing
> > recording noises on AMD Hudson. But, maybe I need to double-check
> > again after the snoop bit and other workarounds.
> >
> > The FIFO size might got wrong on AMD. In that case, the driver
> > calculates as if FIFO = 0. But, it can still help for correcting the
> > position via position-buffer vs LPIB comparison.
> >
> > For the real check, we should put some debug prints on real machines.
>
> Actually the values read there look not working with posbuf.
> Let's fix them to use POS_FIX_LPIB now.
The patch is below, commit 50e3bbf9898840eead86f90a43b3625a2b2f4112
as below.
Takashi
---
Subject: [PATCH] ALSA: hda - Use LPIB for ATI/AMD chipsets as default
ATI and AMD chipsets seem not providing the proper position-buffer
information, and it also doesn't provide FIFO register required by
VIACOMBO fix. It's better to use LPIB for these.
Reported-by: David Henningsson <david.henningsson@canonical.com>
Cc: <stable@kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
sound/pci/hda/hda_intel.c | 9 ++++++++-
1 files changed, 8 insertions(+), 1 deletions(-)
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 0c1996d..43a0367 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -2367,9 +2367,16 @@ static int __devinit check_position_fix(struct azx *chip, int fix)
/* Check VIA/ATI HD Audio Controller exist */
switch (chip->driver_type) {
case AZX_DRIVER_VIA:
- case AZX_DRIVER_ATI:
/* Use link position directly, avoid any transfer problem. */
return POS_FIX_VIACOMBO;
+ case AZX_DRIVER_ATI:
+ /* ATI chipsets don't work well with position-buffer */
+ return POS_FIX_LPIB;
+ case AZX_DRIVER_GENERIC:
+ /* AMD chipsets also don't work with position-buffer */
+ if (chip->pci->vendor == PCI_VENDOR_ID_AMD)
+ return POS_FIX_LPIB;
+ break;
}
return POS_FIX_AUTO;
--
1.7.4.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: Should we really use POS_FIX_VIACOMBO for AMD/ATI chipsets?
2011-05-20 13:46 ` Takashi Iwai
2011-05-20 14:19 ` Takashi Iwai
@ 2011-05-20 14:51 ` David Henningsson
2011-05-20 14:54 ` Takashi Iwai
1 sibling, 1 reply; 6+ messages in thread
From: David Henningsson @ 2011-05-20 14:51 UTC (permalink / raw)
To: Takashi Iwai; +Cc: ALSA Development Mailing List, Xu, Andiry, 741825
On 2011-05-20 15:46, Takashi Iwai wrote:
> At Fri, 20 May 2011 15:33:56 +0200,
> David Henningsson wrote:
>>
>> I'm far from sure, but I could be on to something...
>>
>> Looking at the code for azx_via_get_position, it seems that for
>> recording streams, it accesses a register at position
>> VIA_IN_STREAM0_FIFO_SIZE_OFFSET = 0x90. Looking at the datasheet for
>> SB700, that register is not even present. This does not seem right to me.
>>
>> Could it be that we should use POS_FIX_LPIB by default for AMD/ATI
>> chipsets instead? It seems more reasonable to me.
>> In addition, I looked through some of the commits for quirking to
>> POS_FIX_LPIB and the four I checked were all ATI chipsets.
>>
>> So; I've tried adding:
>> options snd-hda-intel position_fix=1
>> to /etc/modprobe.d/alsa-base.conf
>>
>> ...to my machine with the infamous [1002:4383] controller (and
>> rebooted), and the few times I've tested, recording worked successfully
>> with pulseaudio. So could you please follow this up with testing on your
>> machines to see if we have actually managed to solve this long-standing bug?
>>
>> The only annoying thing is that I didn't realise this earlier :-/
>
> Hmm, I took this as default as it seems fixing the issue on machines,
> indeed. Actually I had to use this option first for removing
> recording noises on AMD Hudson. But, maybe I need to double-check
> again after the snoop bit and other workarounds.
>
> The FIFO size might got wrong on AMD. In that case, the driver
> calculates as if FIFO = 0. But, it can still help for correcting the
> position via position-buffer vs LPIB comparison.
>
> For the real check, we should put some debug prints on real machines.
Hey, you're faster than I am :-) Ok, so there actually is a FIFO
register (I read the wrong table). But the position buffer is dead and
always read as zero.
I did some debug print which is pasted here: http://paste.ubuntu.com/610637/
If LPIB only gives you occasional recording noises, perhaps we need a
new type of position-fix that adds some margin (e g round down to
nearest multiple of fifo-size, then subtract one fifo-size or something)?
--
David Henningsson, Canonical Ltd.
http://launchpad.net/~diwic
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Should we really use POS_FIX_VIACOMBO for AMD/ATI chipsets?
2011-05-20 14:51 ` David Henningsson
@ 2011-05-20 14:54 ` Takashi Iwai
0 siblings, 0 replies; 6+ messages in thread
From: Takashi Iwai @ 2011-05-20 14:54 UTC (permalink / raw)
To: David Henningsson; +Cc: ALSA Development Mailing List, Xu, Andiry, 741825
At Fri, 20 May 2011 16:51:13 +0200,
David Henningsson wrote:
>
> On 2011-05-20 15:46, Takashi Iwai wrote:
> > At Fri, 20 May 2011 15:33:56 +0200,
> > David Henningsson wrote:
> >>
> >> I'm far from sure, but I could be on to something...
> >>
> >> Looking at the code for azx_via_get_position, it seems that for
> >> recording streams, it accesses a register at position
> >> VIA_IN_STREAM0_FIFO_SIZE_OFFSET = 0x90. Looking at the datasheet for
> >> SB700, that register is not even present. This does not seem right to me.
> >>
> >> Could it be that we should use POS_FIX_LPIB by default for AMD/ATI
> >> chipsets instead? It seems more reasonable to me.
> >> In addition, I looked through some of the commits for quirking to
> >> POS_FIX_LPIB and the four I checked were all ATI chipsets.
> >>
> >> So; I've tried adding:
> >> options snd-hda-intel position_fix=1
> >> to /etc/modprobe.d/alsa-base.conf
> >>
> >> ...to my machine with the infamous [1002:4383] controller (and
> >> rebooted), and the few times I've tested, recording worked successfully
> >> with pulseaudio. So could you please follow this up with testing on your
> >> machines to see if we have actually managed to solve this long-standing bug?
> >>
> >> The only annoying thing is that I didn't realise this earlier :-/
> >
> > Hmm, I took this as default as it seems fixing the issue on machines,
> > indeed. Actually I had to use this option first for removing
> > recording noises on AMD Hudson. But, maybe I need to double-check
> > again after the snoop bit and other workarounds.
> >
> > The FIFO size might got wrong on AMD. In that case, the driver
> > calculates as if FIFO = 0. But, it can still help for correcting the
> > position via position-buffer vs LPIB comparison.
> >
> > For the real check, we should put some debug prints on real machines.
>
> Hey, you're faster than I am :-) Ok, so there actually is a FIFO
> register (I read the wrong table). But the position buffer is dead and
> always read as zero.
>
> I did some debug print which is pasted here: http://paste.ubuntu.com/610637/
>
> If LPIB only gives you occasional recording noises, perhaps we need a
> new type of position-fix that adds some margin (e g round down to
> nearest multiple of fifo-size, then subtract one fifo-size or something)?
The latter sounds more appropriate (although it's just my wild guess).
We are also checking the position via jiffies, so big jumps should
have been filtered out. The problem is more about the small amount of
difference from the real position.
thanks,
Takashi
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2011-05-20 14:54 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-05-20 13:33 Should we really use POS_FIX_VIACOMBO for AMD/ATI chipsets? David Henningsson
2011-05-20 13:46 ` Takashi Iwai
2011-05-20 14:19 ` Takashi Iwai
2011-05-20 14:32 ` Takashi Iwai
2011-05-20 14:51 ` David Henningsson
2011-05-20 14:54 ` Takashi Iwai
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.