lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <s5hy4jr8ltm.wl-tiwai@suse.de>
Date:	Wed, 10 Jun 2015 20:23:01 +0200
From:	Takashi Iwai <tiwai@...e.de>
To:	Mihai Donțu <mihai.dontu@...il.com>
Cc:	Jonathan McDowell <noodles@...th.li>, alsa-devel@...a-project.org,
	linux-kernel@...r.kernel.org
Subject: Re: Audio crackles with 4.1-rc1

At Wed, 10 Jun 2015 19:43:03 +0300,
Mihai Donțu wrote:
> 
> On Wed, 10 Jun 2015 18:27:23 +0200 Takashi Iwai wrote:
> > At Wed, 10 Jun 2015 19:22:02 +0300, Mihai Donțu wrote:
> > > On Wed, 10 Jun 2015 14:50:30 +0200 Takashi Iwai wrote:
> > > > At Wed, 10 Jun 2015 14:33:42 +0200, Takashi Iwai wrote:
> > > > > At Wed, 10 Jun 2015 14:45:51 +0300, Mihai Donțu wrote:
> > > > > > On Wed, 10 Jun 2015 12:50:22 +0200 Takashi Iwai wrote:
> > > > > > > At Wed, 10 Jun 2015 13:41:35 +0300, Mihai Donțu wrote:
> > > > > > > > On Wed, 10 Jun 2015 12:22:53 +0200 Takashi Iwai wrote:
> > > > > > > > > At Wed, 10 Jun 2015 13:17:55 +0300, Mihai Donțu wrote:
> > > > > > > > > > On Wed, 20 May 2015 07:01:12 +0200 Takashi Iwai wrote:
> > > > > > > > > > > From: Takashi Iwai <tiwai@...e.de>
> > > > > > > > > > > Subject: [PATCH] ALSA: hda - Disable widget power-saving for ALC292 & co
> > > > > > > > > > > 
> > > > > > > > > > > We've got reports that ALC3226 (a Dell variant of ALC292) gives click
> > > > > > > > > > > noises at transition from D3 to D0 when the widget power-saving is
> > > > > > > > > > > enabled.  Further debugging session showed that avoiding it isn't
> > > > > > > > > > > trivial, unfortunately, since paths are basically activated
> > > > > > > > > > > dynamically while the pins have been already enabled.
> > > > > > > > > > > 
> > > > > > > > > > > This patch disables the widget power-saving for such codecs.
> > > > > > > > > > > 
> > > > > > > > > > > Reported-by: Jonathan McDowell <noodles@...th.li>
> > > > > > > > > > > Signed-off-by: Takashi Iwai <tiwai@...e.de>
> > > > > > > > > > > ---
> > > > > > > > > > >  sound/pci/hda/patch_realtek.c | 3 ++-
> > > > > > > > > > >  1 file changed, 2 insertions(+), 1 deletion(-)
> > > > > > > > > > > 
> > > > > > > > > > > diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
> > > > > > > > > > > index 2e246fe495f6..31f8f13be907 100644
> > > > > > > > > > > --- a/sound/pci/hda/patch_realtek.c
> > > > > > > > > > > +++ b/sound/pci/hda/patch_realtek.c
> > > > > > > > > > > @@ -5623,7 +5623,8 @@ static int patch_alc269(struct hda_codec *codec)
> > > > > > > > > > >  
> > > > > > > > > > >  	spec = codec->spec;
> > > > > > > > > > >  	spec->gen.shared_mic_vref_pin = 0x18;
> > > > > > > > > > > -	codec->power_save_node = 1;
> > > > > > > > > > > +	if (codec->core.vendor_id != 0x10ec0292)
> > > > > > > > > > > +		codec->power_save_node = 1;
> > > > > > > > > > >  
> > > > > > > > > > >  	snd_hda_pick_fixup(codec, alc269_fixup_models,
> > > > > > > > > > >  		       alc269_fixup_tbl, alc269_fixups);
> > > > > > > > > > 
> > > > > > > > > > I'm on 4.1-rc7 which appears to contain this patch, however, I still
> > > > > > > > > > get the audio artifacts (crackles) when I boot my laptop (Latitude
> > > > > > > > > > E7440):
> > > > > > > > > > 
> > > > > > > > > > [    1.058839] snd_hda_codec_realtek hdaudioC1D0: autoconfig for ALC3226: line_outs=1 (0x16/0x0/0x0/0x0/0x0) type:line
> > > > > > > > > > [    1.058843] snd_hda_codec_realtek hdaudioC1D0:    speaker_outs=1 (0x14/0x0/0x0/0x0/0x0)
> > > > > > > > > > [    1.058846] snd_hda_codec_realtek hdaudioC1D0:    hp_outs=1 (0x15/0x0/0x0/0x0/0x0)
> > > > > > > > > > [    1.058849] snd_hda_codec_realtek hdaudioC1D0:    mono: mono_out=0x0
> > > > > > > > > > [    1.058851] snd_hda_codec_realtek hdaudioC1D0:    inputs:
> > > > > > > > > > [    1.058855] snd_hda_codec_realtek hdaudioC1D0:      Dock Mic=0x19
> > > > > > > > > > [    1.058859] snd_hda_codec_realtek hdaudioC1D0:      Headset Mic=0x1a
> > > > > > > > > > [    1.058862] snd_hda_codec_realtek hdaudioC1D0:      Internal Mic=0x12
> > > > > > > > > > 
> > > > > > > > > > 4.0.4 was fine.
> > > > > > > > > 
> > > > > > > > > Does it happen only once at boot (i.e. at power up), or happens always
> > > > > > > > > at runtime PM?  If it's a once-off boot thing, the patch shouldn't
> > > > > > > > > have much effect.  Something else, very subtle thing, e.g. the order
> > > > > > > > > of verb execution, might cause this kind of problem.
> > > > > > > > 
> > > > > > > > Only at power up. I've also suspend-resumed twice and can confirm it's
> > > > > > > > OK.
> > > > > > > > 
> > > > > > > > There's a _very_ brief click at suspend (when the power is cut), but it
> > > > > > > > looks like a plain circuitry thing. I probably didn't notice it before
> > > > > > > > because I wasn't looking for it.
> > > > > > > 
> > > > > > > Thanks.  Do you get the same click noise when reloading snd-hda-intel
> > > > > > > driver?  Also, does it happen when booting in runlevel 3?
> > > > > > > 
> > > > > > > Last but not least, a patch like below has any effect?
> > > > > > > 
> > > > > > > 
> > > > > > > Takashi
> > > > > > > 
> > > > > > > ---
> > > > > > > diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
> > > > > > > --- a/sound/pci/hda/hda_codec.c
> > > > > > > +++ b/sound/pci/hda/hda_codec.c
> > > > > > > @@ -3077,6 +3077,8 @@ static unsigned int hda_set_power_state(struct hda_codec *codec,
> > > > > > >  			break;
> > > > > > >  	}
> > > > > > >  
> > > > > > > +	if (power_state == AC_PWRST_D0)
> > > > > > > +		msleep(100);
> > > > > > >  	return state;
> > > > > > >  }
> > > > > > >  
> > > > > > 
> > > > > > Reloading snd-hda-intel does not trigger the noise, but it helps. I've
> > > > > > noticed that the clicks appear when loading/reloading pulseaudio.
> > > > > > 
> > > > > >   $ pulseaudio -k
> > > > > > 
> > > > > > will spawn a new child in background (probably asked by kmix) and
> > > > > > immediately I hear the noise. Reloading the driver makes the problem go
> > > > > > away.
> > > > > 
> > > > > Hm. It's a bit inconsistent, but still this can be only at the full
> > > > > power up sequence.
> > > > > 
> > > > > > telinit 3 does nothing for me (Gentoo seems to have things wired
> > > > > > differently). Manually reloading alsasound (/etc/init.d/alsasound) did
> > > > > > not trigger the problem either.
> > > > > > 
> > > > > > However! Your patch seems to work. Cold boot, pulseaudio restart and
> > > > > > nothing. Not a peep. :-)
> > > > > 
> > > > > OK, could you try to reduce the sleep value from 100 to 10?
> > > > > Does it still work?
> > > > 
> > > > ... and check whether the patch below works instead.  This is a better
> > > > place if it really fixes.  The former patch is in the common path
> > > > every driver uses while this is codec-specific.
> > > > 
> > > > ---
> > > > diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
> > > > index 0320cb523d9e..957412548ba1 100644
> > > > --- a/sound/pci/hda/patch_realtek.c
> > > > +++ b/sound/pci/hda/patch_realtek.c
> > > > @@ -5637,7 +5637,9 @@ static int patch_alc269(struct hda_codec *codec)
> > > >  
> > > >  	spec = codec->spec;
> > > >  	spec->gen.shared_mic_vref_pin = 0x18;
> > > > -	if (codec->core.vendor_id != 0x10ec0292)
> > > > +	if (codec->core.vendor_id == 0x10ec0292)
> > > > +		msleep(100); /* for avoiding click noise at power up */
> > > > +	else
> > > >  		codec->power_save_node = 1;
> > > >  
> > > >  	snd_hda_pick_fixup(codec, alc269_fixup_models,
> > > 
> > > The initial patch but with msleep(10), works OK. This new one, however,
> > > does not (with 100ms or 10ms).
> > 
> > Hmm, could you make sure that the sleep is actually called, e.g. by
> > adding a debug print or such?  I blindly assumed that your codec is
> > as same as Joanathan's (vendor id 0x10ec0292).  You can check
> > /proc/asound/card*/codec#* files, too.
> 
> I added some printk-s:
> 
> [Wed Jun 10 19:36:23 2015] snd_hda_codec_realtek: vendor_id: 0x10ec0292
> [Wed Jun 10 19:36:23 2015] snd_hda_codec_realtek: sleeping for 100ms
> 
> The code above runs some good seconds before pulseaudio starts and
> triggers the clicks. Even before rootfs is re-mounted rw.

OK, then it's really needed to be right after the power transition.
To be sure, below is the patch I'm going to apply.  If it really
works, please give you tested-by tag.


thanks,

Takashi

-- 8< --
From: Takashi Iwai <tiwai@...e.de>
Subject: [PATCH] ALSA: hda - Reduce click noise at power up

Some machines suffer from click noises at power up with the recent
kernels, and this seems triggered at the power transition and the
immediate verb executions.  As a workaround, put a short delay (10ms)
right after the D0 transition.

There are a few places that have the same kind of delays, especially
in the resume path.  I guess they can be removed (or reduced) after
this patch.  But, since the delay is relatively small, let's do it
later as a cleanup.

Reported-by: Mihai Donțu <mihai.dontu@...il.com>
Signed-off-by: Takashi Iwai <tiwai@...e.de>
---
 sound/pci/hda/hda_codec.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index b7782212dd64..38f5509ee52f 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -3077,6 +3077,9 @@ static unsigned int hda_set_power_state(struct hda_codec *codec,
 			break;
 	}
 
+	if (power_state == AC_PWRST_D0)
+		msleep(10);
+
 	return state;
 }
 
-- 
2.4.3

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ