On Tue, 15 Mar 2016 17:02:07 +0100, Ville Syrjälä wrote:
We have a few new WARN spews from snd-hda causing some grief in i915 CI.
This one happens on ILK and BYT. Looks like it happens 100% of the time on driver load: [ 18.809850] ------------[ cut here ]------------ [ 18.809866] WARNING: CPU: 0 PID: 39 at sound/hda/hdac_i915.c:129 pin2port+0x25/0x30 [snd_hda_core]()
This is bad. Basically we had a naive assumption of the fixed mapping between the port number and the HD-audio widget, but it doesn't apply properly to pre-HSW models.
The patch attached below disables the audio binding for pre-HSW models. I'm going to queue to for-linus branch.
This other one was seen at least on on SKL: [ 124.808525] ------------[ cut here ]------------ [ 124.808545] WARNING: CPU: 3 PID: 173 at sound/hda/hdac_i915.c:91 snd_hdac_display_power+0xf1/0x110 [snd_hda_core]()
This is a different one, and it implies that the unbalanced power refcount. Might be related with the recent fix for the recursive regmap deadlock. I'll try later with a SKL machine here, too.
Didn't you see this before the recent tree, right? Some good/bad commits would be really helpful...
thanks,
Takashi
-- 8< -- From: Takashi Iwai tiwai@suse.de Subject: [PATCH] ALSA: hda - Limit i915 HDMI binding only for HSW and later MIME-Version: 1.0
It turned out that the pre-HSW Intel chips are incompatible with the naive assumption we had -- the fixed mapping between the port and the HD-audio widget. This may result in the bad access, as captured by the recent patch to add a WARN_ON() for the port mapping check.
As a quick workaround, disable the i915 audio component binding for all pre-Haswell models.
Reported-by: Ville Syrjälä ville.syrjala@linux.intel.com Cc: stable@vger.kernel.org # v4.5 Signed-off-by: Takashi Iwai tiwai@suse.de --- sound/pci/hda/patch_hdmi.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c index 3fc259154c0b..cde9746cda8e 100644 --- a/sound/pci/hda/patch_hdmi.c +++ b/sound/pci/hda/patch_hdmi.c @@ -2243,9 +2243,10 @@ static int patch_generic_hdmi(struct hda_codec *codec) codec->spec = spec; hdmi_array_init(spec, 4);
- /* Try to bind with i915 for any Intel codecs (if not done yet) */ + /* Try to bind with i915 for Intel HSW+ codecs (if not done yet) */ if (!codec_has_acomp(codec) && - (codec->core.vendor_id >> 16) == 0x8086) + (codec->core.vendor_id >> 16) == 0x8086 && + is_haswell_plus(codec)) if (!snd_hdac_i915_init(&codec->bus->core)) spec->i915_bound = true;