[alsa-devel] [PATCH] ALSA: hda - PCH HDA controller not controlled by i915 power

Yang, Libin libin.yang at intel.com
Tue Jun 9 10:43:44 CEST 2015


Hi Takashi,

> -----Original Message-----
> From: Takashi Iwai [mailto:tiwai at suse.de]
> Sent: Tuesday, June 09, 2015 4:30 PM
> To: David Henningsson
> Cc: Yang, Libin; alsa-devel at alsa-project.org
> Subject: Re: [alsa-devel] [PATCH] ALSA: hda - PCH HDA controller not
> controlled by i915 power
> 
> At Tue, 09 Jun 2015 08:46:35 +0200,
> David Henningsson wrote:
> >
> >
> >
> > On 2015-06-09 08:31, Takashi Iwai wrote:
> > > At Tue,  9 Jun 2015 14:05:18 +0800,
> > > libin.yang at intel.com wrote:
> > >>
> > >> From: Libin Yang <libin.yang at intel.com>
> > >>
> > >> On some Intel platforms, the HDMI codec is connected to PCH
> HDA
> > >> controller. In this case, AZX_DCAPS_I915_POWERWELL is set and
> > >> the i915 power well failure should not block the hda controller
> > >> initialization.
> > >>
> > >> Signed-off-by: Libin Yang <libin.yang at intel.com>
> > >
> > > Is this fix needed for 4.1, or it's only for 4.2?
> >
> > It's a bug fix, and as such should go to all kernels, even with cc to
> > stable. That said, it mainly concerns Skylake, so kernels that don't
> > support Skylake would not need a backport.
> 
> The patch can't be applied even to 4.1 as is because of the code
> structure change.  So, Cc to stable doesn't work, in anyway.
> 
> > > I vaguely remember of a bug report.  If there is any relevant bug
> > > report, please give the link, too.
> >
> > I think this was raised to Intel by us. The use case is when the
> > integrated GPU is disabled and a discrete GPU is used. In this case
> the
> > i915 module fails to load. If then the HDMI and analog codec are both
> on
> > the same controller, the entire controller fails instead of just the
> > HDMI codec.

I can't find the bug number, maybe David can help.

BTW: Not only SKL but also other platforms that controller is not in 
Powerwell while the controller connects with HDMI codec will meet
such issue, like BSW.

> >
> > I'll see if I can get the patch tested ASAP.
> 
> OK, the bug seems needed for 4.1 and earlier.  But Libin's patch is
> only for 4.2.  And even worse, backporting this isn't
> straightforward due to the lack of need_i915_power field.  Hmm.
> 
> I think we can make it easier by just allowing to continue the probe.
> A totally untested patch for 4.1 is below.

Thanks for your help on this. So this patch will be merged or we will
wait for 4.2 to merge the patch?

> 
> 
> thanks,
> 
> Takashi
> 
> ---
> diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
> index fea198c58196..3903a62ce1e8 100644
> --- a/sound/pci/hda/hda_intel.c
> +++ b/sound/pci/hda/hda_intel.c
> @@ -340,6 +340,11 @@ enum {
>  #define use_vga_switcheroo(chip)	0
>  #endif
> 
> +#define CONTROLLER_IN_GPU(pci) (((pci)->device == 0x0a0c) || \
> +					((pci)->device == 0x0c0c) || \
> +					((pci)->device == 0x0d0c) || \
> +					((pci)->device == 0x160c))
> +
>  static char *driver_short_names[] = {
>  	[AZX_DRIVER_ICH] = "HDA Intel",
>  	[AZX_DRIVER_PCH] = "HDA Intel PCH",
> @@ -1854,8 +1859,12 @@ static int azx_probe_continue(struct azx
> *chip)
>  	if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL) {
>  #ifdef CONFIG_SND_HDA_I915
>  		err = hda_i915_init(hda);
> -		if (err < 0)
> -			goto out_free;
> +		if (err < 0) {
> +			if (CONTROLLER_IN_GPU(pci))
> +				goto out_free;
> +			else
> +				goto skip_i915;
> +		}
>  		err = hda_display_power(hda, true);
>  		if (err < 0) {
>  			dev_err(chip->card->dev,
> @@ -1865,6 +1874,7 @@ static int azx_probe_continue(struct azx
> *chip)
>  #endif
>  	}
> 
> + skip_i915:
>  	err = azx_first_init(chip);
>  	if (err < 0)
>  		goto out_free;


More information about the Alsa-devel mailing list