[alsa-devel] [PATCH 1/2] ALSA: hda - Continue probing even if i915 binding fails

Takashi Iwai tiwai at suse.de
Fri Jun 12 07:08:36 CEST 2015


At Fri, 12 Jun 2015 02:08:50 +0000,
Lin, Mengdong wrote:
> 
> > -----Original Message-----
> > From: Takashi Iwai [mailto:tiwai at suse.de]
> > Sent: Wednesday, June 10, 2015 6:26 PM
> > 
> > Currently snd-hda-intel driver aborts the probing of Intel HD-audio controller
> > with i915 power well management when binding with i915 driver via
> > hda_i915_init() fails.  This is no big problem for Haswell and Broadwell where
> > the HD-audio controllers are dedicated to HDMI/DP, thus i915 link is
> > mandatory.  However, Skylake, Baytrail and Braswell have only one controller
> > and both HDMI/DP and analog codecs share the same bus.  Thus, even if
> > HDMI/DP isn't usable, we should keep the controller working for other codecs.
> > 
> > For fixing this, this patch simply allows continuing the probing even if
> > hda_i915_init() call fails.  This may leave stale sound components for
> > HDMI/DP devices that are unbound with graphics.  We could abort the
> > probing selectively, but from the code simplicity POV, it's better to continue in
> > all cases.
> > 
> > Reported-by: Libin Yang <libin.yang at intel.com>
> > Signed-off-by: Takashi Iwai <tiwai at suse.de>
> > ---
> > This is for 4.1.  Appying to 4.2 may result in trivial conflicts.
> > 
> >  sound/pci/hda/hda_intel.c | 3 ++-
> >  1 file changed, 2 insertions(+), 1 deletion(-)
> > 
> > diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index
> > fea198c58196..8a0af6770e1d 100644
> > --- a/sound/pci/hda/hda_intel.c
> > +++ b/sound/pci/hda/hda_intel.c
> > @@ -1855,7 +1855,7 @@ static int azx_probe_continue(struct azx *chip)
> > #ifdef CONFIG_SND_HDA_I915
> >  		err = hda_i915_init(hda);
> >  		if (err < 0)
> > -			goto out_free;
> > +			goto skip_i915;
> >  		err = hda_display_power(hda, true);
> >  		if (err < 0) {
> >  			dev_err(chip->card->dev,
> > @@ -1865,6 +1865,7 @@ static int azx_probe_continue(struct azx *chip)
> > #endif
> >  	}
> > 
> > + skip_i915:
> >  	err = azx_first_init(chip);
> >  	if (err < 0)
> >  		goto out_free;
> > --
> > 2.4.3
> 
> Thanks for your patch. But maybe we should not skip i915 for the dedicated
> display HD-A controller on Haswell/Broadwell.
> 
> For HSW/BDW, their HD-A controller for display audio (PCI dev#3) is *partly*
> in GPU power domain:
> - Its PCI configuration space is out of i915 power well, but in an always-on
>  power well. So even if the BIOS disables the Intel GPU (PCI dev#2), the HD-A
>  controller is still present, and we can still access all standard registers in PCI
>  config space. 

Right, and changing this doesn't break things.

> - Its audio functions are in the i915 power well. If hda_i915_init() fails and
>  I915 power well is unavailable, read/write to the audio register of the
>  Controller will fail and we'll get kernel error messages. So I feel it's better
>  to abort if hda_i915_init() fails for this HD-A controller.

By skipping, the access to i915 power well won't happen later, since
the component ops isn't set.

I tested Haswell machines with nomodeset to simulate the situation,
and there was no any kernel errors except for the first one indicating
the failure of i915 binding.

I haven't tested Broadwell, though.


thanks,

Takashi


More information about the Alsa-devel mailing list