[alsa-devel] Should we really use POS_FIX_VIACOMBO for AMD/ATI chipsets?

Takashi Iwai tiwai at suse.de
Fri May 20 16:54:05 CEST 2011


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


More information about the Alsa-devel mailing list