diff mbox series

[1/2] ALSA: HD-Audio: SKL+: abort probe if DSP is present and Skylake driver selected

Message ID 20181208000039.23384-2-pierre-louis.bossart@linux.intel.com (mailing list archive)
State New, archived
Headers show
Series ALSA: HDAudio: enable dynamic selection between legacy and Skylake drivers | expand

Commit Message

Pierre-Louis Bossart Dec. 8, 2018, midnight UTC
Now that the SST/Skylake driver supports per platform selectors, we
can add logic to automatically select the right driver.

If the Skylake driver is selected, and the DSP is enable, the legacy
HDaudio driver aborts the probe. This will result in a single driver
probing and remove the need for modprobe blacklists.

Follow-up patches will add a module parameter to bypass the logic if
this automatic detection fails, or if the Skylake driver is unable to
actually support the platform (firmware authentication, missing
topology file, hardware issue, etc).

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
---
 sound/pci/hda/Kconfig          | 46 ++++++++++++++++++++++++++++++++++
 sound/pci/hda/hda_controller.h |  2 +-
 sound/pci/hda/hda_intel.c      | 34 +++++++++++++++++++------
 sound/soc/intel/Kconfig        |  6 +++++
 4 files changed, 80 insertions(+), 8 deletions(-)

Comments

Takashi Iwai Dec. 8, 2018, 7:56 a.m. UTC | #1
On Sat, 08 Dec 2018 01:00:38 +0100,
Pierre-Louis Bossart wrote:
> 
> Now that the SST/Skylake driver supports per platform selectors, we
> can add logic to automatically select the right driver.
> 
> If the Skylake driver is selected, and the DSP is enable, the legacy
> HDaudio driver aborts the probe. This will result in a single driver
> probing and remove the need for modprobe blacklists.
> 
> Follow-up patches will add a module parameter to bypass the logic if
> this automatic detection fails, or if the Skylake driver is unable to
> actually support the platform (firmware authentication, missing
> topology file, hardware issue, etc).
> 
> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
> ---
>  sound/pci/hda/Kconfig          | 46 ++++++++++++++++++++++++++++++++++
>  sound/pci/hda/hda_controller.h |  2 +-
>  sound/pci/hda/hda_intel.c      | 34 +++++++++++++++++++------
>  sound/soc/intel/Kconfig        |  6 +++++
>  4 files changed, 80 insertions(+), 8 deletions(-)
> 
> diff --git a/sound/pci/hda/Kconfig b/sound/pci/hda/Kconfig
> index 4235907b7858..634b7fe6a936 100644
> --- a/sound/pci/hda/Kconfig
> +++ b/sound/pci/hda/Kconfig
> @@ -226,6 +226,52 @@ config SND_HDA_POWER_SAVE_DEFAULT
>  	  The default time-out value in seconds for HD-audio automatic
>  	  power-save mode.  0 means to disable the power-save mode.
>  
> +if SND_HDA_INTEL
> +
> +config SND_HDA_INTEL_DISABLE_SKL
> +	bool
> +	help
> +	  This option disables HD-audio legacy for
> +	  Skylake machines

I'm not sure whether we need the selection of this disablement for
each model.  Distros would choose these unlikely, and individual users
don't have to select multiple of them but only for their machine's
model.  So, in the end, the choice would be either yes or no.


thanks,

Takashi


> +
> +config SND_HDA_INTEL_DISABLE_APL
> +	bool
> +	help
> +	  This option disables HD-audio legacy for
> +	  Broxton/ApolloLake machines
> +
> +config SND_HDA_INTEL_DISABLE_KBL
> +	bool
> +	help
> +	  This option disables HD-audio legacy for
> +	  KabyLake machines
> +
> +config SND_HDA_INTEL_DISABLE_GLK
> +	bool
> +	help
> +	  This option disables HD-audio legacy for
> +	  GeminiLake machines
> +
> +config SND_HDA_INTEL_DISABLE_CNL
> +	bool
> +	help
> +	  This option disables HD-audio legacy for
> +	  CannonLake machines
> +
> +config SND_HDA_INTEL_DISABLE_CFL
> +	bool
> +	help
> +	  This option disables HD-audio legacy for
> +	  CoffeeLake machines
> +
> +config SND_HDA_INTEL_DISABLE_ICL
> +	bool
> +	help
> +	  This option disables HD-audio legacy for
> +	  IceLake machines
> +
> +endif ## SND_HDA_INTEL
> +
>  endif
>  
>  endmenu
> diff --git a/sound/pci/hda/hda_controller.h b/sound/pci/hda/hda_controller.h
> index c95097bb5a0c..2351115f922e 100644
> --- a/sound/pci/hda/hda_controller.h
> +++ b/sound/pci/hda/hda_controller.h
> @@ -37,7 +37,7 @@
>  #else
>  #define AZX_DCAPS_I915_COMPONENT 0		/* NOP */
>  #endif
> -/* 14 unused */
> +#define AZX_DCAPS_INTEL_SHARED	(1 << 14)	/* shared with ASoC */
>  #define AZX_DCAPS_CTX_WORKAROUND (1 << 15)	/* X-Fi workaround */
>  #define AZX_DCAPS_POSFIX_LPIB	(1 << 16)	/* Use LPIB as default */
>  /* 17 unused */
> diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
> index d8eb2b5f51ae..0c76713ac5c0 100644
> --- a/sound/pci/hda/hda_intel.c
> +++ b/sound/pci/hda/hda_intel.c
> @@ -360,6 +360,7 @@ enum {
>  	 AZX_DCAPS_NO_64BIT |\
>  	 AZX_DCAPS_4K_BDLE_BOUNDARY | AZX_DCAPS_SNOOP_OFF)
>  
> +#define AZX_DCAPS_INTEL_LEGACY_DISABLE(conf) (IS_ENABLED(CONFIG_SND_HDA_INTEL_DISABLE_##conf) ? AZX_DCAPS_INTEL_SHARED : 0)
>  /*
>   * vga_switcheroo support
>   */
> @@ -2091,6 +2092,11 @@ static int azx_probe(struct pci_dev *pci,
>  	bool schedule_probe;
>  	int err;
>  
> +	/* check if this driver can be used on SKL+ Intel platforms */
> +	if ((pci_id->driver_data & AZX_DCAPS_INTEL_SHARED) &&
> +	    pci->class != 0x040300)
> +		return -ENODEV;
> +
>  	if (dev >= SNDRV_CARDS)
>  		return -ENODEV;
>  	if (!enable[dev]) {
> @@ -2406,34 +2412,48 @@ static const struct pci_device_id azx_ids[] = {
>  	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE },
>  	/* Sunrise Point-LP */
>  	{ PCI_DEVICE(0x8086, 0x9d70),
> -	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE },
> +	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE |
> +	  AZX_DCAPS_INTEL_LEGACY_DISABLE(SKL)
> +	},
>  	/* Kabylake */
>  	{ PCI_DEVICE(0x8086, 0xa171),
>  	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE },
>  	/* Kabylake-LP */
>  	{ PCI_DEVICE(0x8086, 0x9d71),
> -	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE },
> +	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE |
> +	  AZX_DCAPS_INTEL_LEGACY_DISABLE(KBL)
> +	},
>  	/* Kabylake-H */
>  	{ PCI_DEVICE(0x8086, 0xa2f0),
>  	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE },
>  	/* Coffelake */
>  	{ PCI_DEVICE(0x8086, 0xa348),
> -	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE},
> +	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE |
> +	  AZX_DCAPS_INTEL_LEGACY_DISABLE(CFL)
> +	},
>  	/* Cannonlake */
>  	{ PCI_DEVICE(0x8086, 0x9dc8),
> -	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE},
> +	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE |
> +	  AZX_DCAPS_INTEL_LEGACY_DISABLE(CNL)
> +	},
>  	/* Icelake */
>  	{ PCI_DEVICE(0x8086, 0x34c8),
> -	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE},
> +	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE |
> +	  AZX_DCAPS_INTEL_LEGACY_DISABLE(ICL)
> +	},
>  	/* Broxton-P(Apollolake) */
>  	{ PCI_DEVICE(0x8086, 0x5a98),
> -	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_BROXTON },
> +	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_BROXTON |
> +	  AZX_DCAPS_INTEL_LEGACY_DISABLE(APL)
> +	},
>  	/* Broxton-T */
>  	{ PCI_DEVICE(0x8086, 0x1a98),
>  	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_BROXTON },
>  	/* Gemini-Lake */
>  	{ PCI_DEVICE(0x8086, 0x3198),
> -	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_BROXTON },
> +	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_BROXTON |
> +	  AZX_DCAPS_INTEL_LEGACY_DISABLE(GLK)
> +	},
>  	/* Haswell */
>  	{ PCI_DEVICE(0x8086, 0x0a0c),
>  	  .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL },
> diff --git a/sound/soc/intel/Kconfig b/sound/soc/intel/Kconfig
> index 99a62ba409df..f817bda5cab5 100644
> --- a/sound/soc/intel/Kconfig
> +++ b/sound/soc/intel/Kconfig
> @@ -188,6 +188,12 @@ config SND_SOC_INTEL_SKYLAKE_COMMON
>  	select SND_SOC_TOPOLOGY
>  	select SND_SOC_INTEL_SST
>  	select SND_SOC_HDAC_HDA if SND_SOC_INTEL_SKYLAKE_HDAUDIO_CODEC
> +	select SND_HDA_INTEL_DISABLE_SKL if SND_SOC_INTEL_SKL
> +	select SND_HDA_INTEL_DISABLE_APL if SND_SOC_INTEL_APL
> +	select SND_HDA_INTEL_DISABLE_KBL if SND_SOC_INTEL_KBL
> +	select SND_HDA_INTEL_DISABLE_GLK if SND_SOC_INTEL_GLK
> +	select SND_HDA_INTEL_DISABLE_CNL if SND_SOC_INTEL_CNL
> +	select SND_HDA_INTEL_DISABLE_CFL if SND_SOC_INTEL_CFL
>  	select SND_SOC_ACPI_INTEL_MATCH
>  	help
>  	  If you have a Intel Skylake/Broxton/ApolloLake/KabyLake/
> -- 
> 2.17.1
>
Pierre-Louis Bossart Dec. 10, 2018, 2:31 p.m. UTC | #2
On 12/8/18 1:56 AM, Takashi Iwai wrote:
> On Sat, 08 Dec 2018 01:00:38 +0100,
> Pierre-Louis Bossart wrote:
>> Now that the SST/Skylake driver supports per platform selectors, we
>> can add logic to automatically select the right driver.
>>
>> If the Skylake driver is selected, and the DSP is enable, the legacy
>> HDaudio driver aborts the probe. This will result in a single driver
>> probing and remove the need for modprobe blacklists.
>>
>> Follow-up patches will add a module parameter to bypass the logic if
>> this automatic detection fails, or if the Skylake driver is unable to
>> actually support the platform (firmware authentication, missing
>> topology file, hardware issue, etc).
>>
>> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
>> ---
>>   sound/pci/hda/Kconfig          | 46 ++++++++++++++++++++++++++++++++++
>>   sound/pci/hda/hda_controller.h |  2 +-
>>   sound/pci/hda/hda_intel.c      | 34 +++++++++++++++++++------
>>   sound/soc/intel/Kconfig        |  6 +++++
>>   4 files changed, 80 insertions(+), 8 deletions(-)
>>
>> diff --git a/sound/pci/hda/Kconfig b/sound/pci/hda/Kconfig
>> index 4235907b7858..634b7fe6a936 100644
>> --- a/sound/pci/hda/Kconfig
>> +++ b/sound/pci/hda/Kconfig
>> @@ -226,6 +226,52 @@ config SND_HDA_POWER_SAVE_DEFAULT
>>   	  The default time-out value in seconds for HD-audio automatic
>>   	  power-save mode.  0 means to disable the power-save mode.
>>   
>> +if SND_HDA_INTEL
>> +
>> +config SND_HDA_INTEL_DISABLE_SKL
>> +	bool
>> +	help
>> +	  This option disables HD-audio legacy for
>> +	  Skylake machines
> I'm not sure whether we need the selection of this disablement for
> each model.  Distros would choose these unlikely, and individual users
> don't have to select multiple of them but only for their machine's
> model.  So, in the end, the choice would be either yes or no.

Ah yes, maybe I wasn't clear. This wasn't intended to be selected by the 
user, but selected when when the SND_SOC_INTEL_KBL or SND_SOC_SOF_CNL 
options are set. See the conditions below.

The main idea what to only deal with the conflict resolution when we 
indeed have a conflict. I also introduced this option on the 
sound/pci/hda side so that SOF can use the same mechanisms, i.e. it's 
the legacy driver doesn't need to know if the conflict happens with the 
SST/Skylake or SOF driver.

>> @@ -188,6 +188,12 @@ config SND_SOC_INTEL_SKYLAKE_COMMON
>>   	select SND_SOC_TOPOLOGY
>>   	select SND_SOC_INTEL_SST
>>   	select SND_SOC_HDAC_HDA if SND_SOC_INTEL_SKYLAKE_HDAUDIO_CODEC
>> +	select SND_HDA_INTEL_DISABLE_SKL if SND_SOC_INTEL_SKL
>> +	select SND_HDA_INTEL_DISABLE_APL if SND_SOC_INTEL_APL
>> +	select SND_HDA_INTEL_DISABLE_KBL if SND_SOC_INTEL_KBL
>> +	select SND_HDA_INTEL_DISABLE_GLK if SND_SOC_INTEL_GLK
>> +	select SND_HDA_INTEL_DISABLE_CNL if SND_SOC_INTEL_CNL
>> +	select SND_HDA_INTEL_DISABLE_CFL if SND_SOC_INTEL_CFL
>>   	select SND_SOC_ACPI_INTEL_MATCH
>>   	help
>>   	  If you have a Intel Skylake/Broxton/ApolloLake/KabyLake/
>> -- 
>> 2.17.1
>>
Takashi Iwai Dec. 10, 2018, 3:08 p.m. UTC | #3
On Mon, 10 Dec 2018 15:31:08 +0100,
Pierre-Louis Bossart wrote:
> 
> 
> On 12/8/18 1:56 AM, Takashi Iwai wrote:
> > On Sat, 08 Dec 2018 01:00:38 +0100,
> > Pierre-Louis Bossart wrote:
> >> Now that the SST/Skylake driver supports per platform selectors, we
> >> can add logic to automatically select the right driver.
> >>
> >> If the Skylake driver is selected, and the DSP is enable, the legacy
> >> HDaudio driver aborts the probe. This will result in a single driver
> >> probing and remove the need for modprobe blacklists.
> >>
> >> Follow-up patches will add a module parameter to bypass the logic if
> >> this automatic detection fails, or if the Skylake driver is unable to
> >> actually support the platform (firmware authentication, missing
> >> topology file, hardware issue, etc).
> >>
> >> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
> >> ---
> >>   sound/pci/hda/Kconfig          | 46 ++++++++++++++++++++++++++++++++++
> >>   sound/pci/hda/hda_controller.h |  2 +-
> >>   sound/pci/hda/hda_intel.c      | 34 +++++++++++++++++++------
> >>   sound/soc/intel/Kconfig        |  6 +++++
> >>   4 files changed, 80 insertions(+), 8 deletions(-)
> >>
> >> diff --git a/sound/pci/hda/Kconfig b/sound/pci/hda/Kconfig
> >> index 4235907b7858..634b7fe6a936 100644
> >> --- a/sound/pci/hda/Kconfig
> >> +++ b/sound/pci/hda/Kconfig
> >> @@ -226,6 +226,52 @@ config SND_HDA_POWER_SAVE_DEFAULT
> >>   	  The default time-out value in seconds for HD-audio automatic
> >>   	  power-save mode.  0 means to disable the power-save mode.
> >>   +if SND_HDA_INTEL
> >> +
> >> +config SND_HDA_INTEL_DISABLE_SKL
> >> +	bool
> >> +	help
> >> +	  This option disables HD-audio legacy for
> >> +	  Skylake machines
> > I'm not sure whether we need the selection of this disablement for
> > each model.  Distros would choose these unlikely, and individual users
> > don't have to select multiple of them but only for their machine's
> > model.  So, in the end, the choice would be either yes or no.
> 
> Ah yes, maybe I wasn't clear. This wasn't intended to be selected by
> the user, but selected when when the SND_SOC_INTEL_KBL or
> SND_SOC_SOF_CNL options are set. See the conditions below.
> 
> The main idea what to only deal with the conflict resolution when we
> indeed have a conflict. I also introduced this option on the
> sound/pci/hda side so that SOF can use the same mechanisms, i.e. it's
> the legacy driver doesn't need to know if the conflict happens with
> the SST/Skylake or SOF driver.

OK, that makes sense.

But then better to rephrase the help texts there for avoiding
confusion.  Currently it sounds as if the kconfig always disables the
support of the given chipset.  But the actual behavior is to disable
the binding with the legacy driver *only if* the PCI device class is
declared for Intel DSP.


thanks,

Takashi
Pierre-Louis Bossart Dec. 10, 2018, 3:57 p.m. UTC | #4
On 12/10/18 9:08 AM, Takashi Iwai wrote:
> On Mon, 10 Dec 2018 15:31:08 +0100,
> Pierre-Louis Bossart wrote:
>>
>> On 12/8/18 1:56 AM, Takashi Iwai wrote:
>>> On Sat, 08 Dec 2018 01:00:38 +0100,
>>> Pierre-Louis Bossart wrote:
>>>> Now that the SST/Skylake driver supports per platform selectors, we
>>>> can add logic to automatically select the right driver.
>>>>
>>>> If the Skylake driver is selected, and the DSP is enable, the legacy
>>>> HDaudio driver aborts the probe. This will result in a single driver
>>>> probing and remove the need for modprobe blacklists.
>>>>
>>>> Follow-up patches will add a module parameter to bypass the logic if
>>>> this automatic detection fails, or if the Skylake driver is unable to
>>>> actually support the platform (firmware authentication, missing
>>>> topology file, hardware issue, etc).
>>>>
>>>> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
>>>> ---
>>>>    sound/pci/hda/Kconfig          | 46 ++++++++++++++++++++++++++++++++++
>>>>    sound/pci/hda/hda_controller.h |  2 +-
>>>>    sound/pci/hda/hda_intel.c      | 34 +++++++++++++++++++------
>>>>    sound/soc/intel/Kconfig        |  6 +++++
>>>>    4 files changed, 80 insertions(+), 8 deletions(-)
>>>>
>>>> diff --git a/sound/pci/hda/Kconfig b/sound/pci/hda/Kconfig
>>>> index 4235907b7858..634b7fe6a936 100644
>>>> --- a/sound/pci/hda/Kconfig
>>>> +++ b/sound/pci/hda/Kconfig
>>>> @@ -226,6 +226,52 @@ config SND_HDA_POWER_SAVE_DEFAULT
>>>>    	  The default time-out value in seconds for HD-audio automatic
>>>>    	  power-save mode.  0 means to disable the power-save mode.
>>>>    +if SND_HDA_INTEL
>>>> +
>>>> +config SND_HDA_INTEL_DISABLE_SKL
>>>> +	bool
>>>> +	help
>>>> +	  This option disables HD-audio legacy for
>>>> +	  Skylake machines
>>> I'm not sure whether we need the selection of this disablement for
>>> each model.  Distros would choose these unlikely, and individual users
>>> don't have to select multiple of them but only for their machine's
>>> model.  So, in the end, the choice would be either yes or no.
>> Ah yes, maybe I wasn't clear. This wasn't intended to be selected by
>> the user, but selected when when the SND_SOC_INTEL_KBL or
>> SND_SOC_SOF_CNL options are set. See the conditions below.
>>
>> The main idea what to only deal with the conflict resolution when we
>> indeed have a conflict. I also introduced this option on the
>> sound/pci/hda side so that SOF can use the same mechanisms, i.e. it's
>> the legacy driver doesn't need to know if the conflict happens with
>> the SST/Skylake or SOF driver.
> OK, that makes sense.
>
> But then better to rephrase the help texts there for avoiding
> confusion.  Currently it sounds as if the kconfig always disables the
> support of the given chipset.  But the actual behavior is to disable
> the binding with the legacy driver *only if* the PCI device class is
> declared for Intel DSP.

ok, will respin the help text.

I was wondering if my email client ate your answers, was is the only 
change you wanted? In reply to the cover letter you mentioned "some 
comments" but I only see this one that needs an update, and no comments 
for the initial series of Skylake-specific patches.

>
>
> thanks,
>
> Takashi
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
Takashi Iwai Dec. 10, 2018, 4:05 p.m. UTC | #5
On Mon, 10 Dec 2018 16:57:49 +0100,
Pierre-Louis Bossart wrote:
> 
> 
> On 12/10/18 9:08 AM, Takashi Iwai wrote:
> > On Mon, 10 Dec 2018 15:31:08 +0100,
> > Pierre-Louis Bossart wrote:
> >>
> >> On 12/8/18 1:56 AM, Takashi Iwai wrote:
> >>> On Sat, 08 Dec 2018 01:00:38 +0100,
> >>> Pierre-Louis Bossart wrote:
> >>>> Now that the SST/Skylake driver supports per platform selectors, we
> >>>> can add logic to automatically select the right driver.
> >>>>
> >>>> If the Skylake driver is selected, and the DSP is enable, the legacy
> >>>> HDaudio driver aborts the probe. This will result in a single driver
> >>>> probing and remove the need for modprobe blacklists.
> >>>>
> >>>> Follow-up patches will add a module parameter to bypass the logic if
> >>>> this automatic detection fails, or if the Skylake driver is unable to
> >>>> actually support the platform (firmware authentication, missing
> >>>> topology file, hardware issue, etc).
> >>>>
> >>>> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
> >>>> ---
> >>>>    sound/pci/hda/Kconfig          | 46 ++++++++++++++++++++++++++++++++++
> >>>>    sound/pci/hda/hda_controller.h |  2 +-
> >>>>    sound/pci/hda/hda_intel.c      | 34 +++++++++++++++++++------
> >>>>    sound/soc/intel/Kconfig        |  6 +++++
> >>>>    4 files changed, 80 insertions(+), 8 deletions(-)
> >>>>
> >>>> diff --git a/sound/pci/hda/Kconfig b/sound/pci/hda/Kconfig
> >>>> index 4235907b7858..634b7fe6a936 100644
> >>>> --- a/sound/pci/hda/Kconfig
> >>>> +++ b/sound/pci/hda/Kconfig
> >>>> @@ -226,6 +226,52 @@ config SND_HDA_POWER_SAVE_DEFAULT
> >>>>    	  The default time-out value in seconds for HD-audio automatic
> >>>>    	  power-save mode.  0 means to disable the power-save mode.
> >>>>    +if SND_HDA_INTEL
> >>>> +
> >>>> +config SND_HDA_INTEL_DISABLE_SKL
> >>>> +	bool
> >>>> +	help
> >>>> +	  This option disables HD-audio legacy for
> >>>> +	  Skylake machines
> >>> I'm not sure whether we need the selection of this disablement for
> >>> each model.  Distros would choose these unlikely, and individual users
> >>> don't have to select multiple of them but only for their machine's
> >>> model.  So, in the end, the choice would be either yes or no.
> >> Ah yes, maybe I wasn't clear. This wasn't intended to be selected by
> >> the user, but selected when when the SND_SOC_INTEL_KBL or
> >> SND_SOC_SOF_CNL options are set. See the conditions below.
> >>
> >> The main idea what to only deal with the conflict resolution when we
> >> indeed have a conflict. I also introduced this option on the
> >> sound/pci/hda side so that SOF can use the same mechanisms, i.e. it's
> >> the legacy driver doesn't need to know if the conflict happens with
> >> the SST/Skylake or SOF driver.
> > OK, that makes sense.
> >
> > But then better to rephrase the help texts there for avoiding
> > confusion.  Currently it sounds as if the kconfig always disables the
> > support of the given chipset.  But the actual behavior is to disable
> > the binding with the legacy driver *only if* the PCI device class is
> > declared for Intel DSP.
> 
> ok, will respin the help text.
> 
> I was wondering if my email client ate your answers, was is the only
> change you wanted? In reply to the cover letter you mentioned "some
> comments" but I only see this one that needs an update, and no
> comments for the initial series of Skylake-specific patches.

Maybe you missed my comments for the second and later hunks of
patch#2?  It was about some dev_warn() and dev_err() usages, which I 
suggested to degrade to dev_info().


thanks,

Takashi
Takashi Iwai Dec. 10, 2018, 4:06 p.m. UTC | #6
On Mon, 10 Dec 2018 17:05:00 +0100,
Takashi Iwai wrote:
> 
> On Mon, 10 Dec 2018 16:57:49 +0100,
> Pierre-Louis Bossart wrote:
> > 
> > 
> > On 12/10/18 9:08 AM, Takashi Iwai wrote:
> > > On Mon, 10 Dec 2018 15:31:08 +0100,
> > > Pierre-Louis Bossart wrote:
> > >>
> > >> On 12/8/18 1:56 AM, Takashi Iwai wrote:
> > >>> On Sat, 08 Dec 2018 01:00:38 +0100,
> > >>> Pierre-Louis Bossart wrote:
> > >>>> Now that the SST/Skylake driver supports per platform selectors, we
> > >>>> can add logic to automatically select the right driver.
> > >>>>
> > >>>> If the Skylake driver is selected, and the DSP is enable, the legacy
> > >>>> HDaudio driver aborts the probe. This will result in a single driver
> > >>>> probing and remove the need for modprobe blacklists.
> > >>>>
> > >>>> Follow-up patches will add a module parameter to bypass the logic if
> > >>>> this automatic detection fails, or if the Skylake driver is unable to
> > >>>> actually support the platform (firmware authentication, missing
> > >>>> topology file, hardware issue, etc).
> > >>>>
> > >>>> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
> > >>>> ---
> > >>>>    sound/pci/hda/Kconfig          | 46 ++++++++++++++++++++++++++++++++++
> > >>>>    sound/pci/hda/hda_controller.h |  2 +-
> > >>>>    sound/pci/hda/hda_intel.c      | 34 +++++++++++++++++++------
> > >>>>    sound/soc/intel/Kconfig        |  6 +++++
> > >>>>    4 files changed, 80 insertions(+), 8 deletions(-)
> > >>>>
> > >>>> diff --git a/sound/pci/hda/Kconfig b/sound/pci/hda/Kconfig
> > >>>> index 4235907b7858..634b7fe6a936 100644
> > >>>> --- a/sound/pci/hda/Kconfig
> > >>>> +++ b/sound/pci/hda/Kconfig
> > >>>> @@ -226,6 +226,52 @@ config SND_HDA_POWER_SAVE_DEFAULT
> > >>>>    	  The default time-out value in seconds for HD-audio automatic
> > >>>>    	  power-save mode.  0 means to disable the power-save mode.
> > >>>>    +if SND_HDA_INTEL
> > >>>> +
> > >>>> +config SND_HDA_INTEL_DISABLE_SKL
> > >>>> +	bool
> > >>>> +	help
> > >>>> +	  This option disables HD-audio legacy for
> > >>>> +	  Skylake machines
> > >>> I'm not sure whether we need the selection of this disablement for
> > >>> each model.  Distros would choose these unlikely, and individual users
> > >>> don't have to select multiple of them but only for their machine's
> > >>> model.  So, in the end, the choice would be either yes or no.
> > >> Ah yes, maybe I wasn't clear. This wasn't intended to be selected by
> > >> the user, but selected when when the SND_SOC_INTEL_KBL or
> > >> SND_SOC_SOF_CNL options are set. See the conditions below.
> > >>
> > >> The main idea what to only deal with the conflict resolution when we
> > >> indeed have a conflict. I also introduced this option on the
> > >> sound/pci/hda side so that SOF can use the same mechanisms, i.e. it's
> > >> the legacy driver doesn't need to know if the conflict happens with
> > >> the SST/Skylake or SOF driver.
> > > OK, that makes sense.
> > >
> > > But then better to rephrase the help texts there for avoiding
> > > confusion.  Currently it sounds as if the kconfig always disables the
> > > support of the given chipset.  But the actual behavior is to disable
> > > the binding with the legacy driver *only if* the PCI device class is
> > > declared for Intel DSP.
> > 
> > ok, will respin the help text.
> > 
> > I was wondering if my email client ate your answers, was is the only
> > change you wanted? In reply to the cover letter you mentioned "some
> > comments" but I only see this one that needs an update, and no
> > comments for the initial series of Skylake-specific patches.
> 
> Maybe you missed my comments for the second and later hunks of
> patch#2?  It was about some dev_warn() and dev_err() usages, which I 
> suggested to degrade to dev_info().

Oh, BTW, did the fallback mechanism work properly with your patches on
the actual machines?

At the last time I tried on SKL, the fallback failed by some reason,
the driver core didn't try to load and bind two drivers.


Takashi
Pierre-Louis Bossart Dec. 10, 2018, 4:12 p.m. UTC | #7
On 12/10/18 10:06 AM, Takashi Iwai wrote:
> On Mon, 10 Dec 2018 17:05:00 +0100,
> Takashi Iwai wrote:
>> On Mon, 10 Dec 2018 16:57:49 +0100,
>> Pierre-Louis Bossart wrote:
>>>
>>> On 12/10/18 9:08 AM, Takashi Iwai wrote:
>>>> On Mon, 10 Dec 2018 15:31:08 +0100,
>>>> Pierre-Louis Bossart wrote:
>>>>> On 12/8/18 1:56 AM, Takashi Iwai wrote:
>>>>>> On Sat, 08 Dec 2018 01:00:38 +0100,
>>>>>> Pierre-Louis Bossart wrote:
>>>>>>> Now that the SST/Skylake driver supports per platform selectors, we
>>>>>>> can add logic to automatically select the right driver.
>>>>>>>
>>>>>>> If the Skylake driver is selected, and the DSP is enable, the legacy
>>>>>>> HDaudio driver aborts the probe. This will result in a single driver
>>>>>>> probing and remove the need for modprobe blacklists.
>>>>>>>
>>>>>>> Follow-up patches will add a module parameter to bypass the logic if
>>>>>>> this automatic detection fails, or if the Skylake driver is unable to
>>>>>>> actually support the platform (firmware authentication, missing
>>>>>>> topology file, hardware issue, etc).
>>>>>>>
>>>>>>> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
>>>>>>> ---
>>>>>>>     sound/pci/hda/Kconfig          | 46 ++++++++++++++++++++++++++++++++++
>>>>>>>     sound/pci/hda/hda_controller.h |  2 +-
>>>>>>>     sound/pci/hda/hda_intel.c      | 34 +++++++++++++++++++------
>>>>>>>     sound/soc/intel/Kconfig        |  6 +++++
>>>>>>>     4 files changed, 80 insertions(+), 8 deletions(-)
>>>>>>>
>>>>>>> diff --git a/sound/pci/hda/Kconfig b/sound/pci/hda/Kconfig
>>>>>>> index 4235907b7858..634b7fe6a936 100644
>>>>>>> --- a/sound/pci/hda/Kconfig
>>>>>>> +++ b/sound/pci/hda/Kconfig
>>>>>>> @@ -226,6 +226,52 @@ config SND_HDA_POWER_SAVE_DEFAULT
>>>>>>>     	  The default time-out value in seconds for HD-audio automatic
>>>>>>>     	  power-save mode.  0 means to disable the power-save mode.
>>>>>>>     +if SND_HDA_INTEL
>>>>>>> +
>>>>>>> +config SND_HDA_INTEL_DISABLE_SKL
>>>>>>> +	bool
>>>>>>> +	help
>>>>>>> +	  This option disables HD-audio legacy for
>>>>>>> +	  Skylake machines
>>>>>> I'm not sure whether we need the selection of this disablement for
>>>>>> each model.  Distros would choose these unlikely, and individual users
>>>>>> don't have to select multiple of them but only for their machine's
>>>>>> model.  So, in the end, the choice would be either yes or no.
>>>>> Ah yes, maybe I wasn't clear. This wasn't intended to be selected by
>>>>> the user, but selected when when the SND_SOC_INTEL_KBL or
>>>>> SND_SOC_SOF_CNL options are set. See the conditions below.
>>>>>
>>>>> The main idea what to only deal with the conflict resolution when we
>>>>> indeed have a conflict. I also introduced this option on the
>>>>> sound/pci/hda side so that SOF can use the same mechanisms, i.e. it's
>>>>> the legacy driver doesn't need to know if the conflict happens with
>>>>> the SST/Skylake or SOF driver.
>>>> OK, that makes sense.
>>>>
>>>> But then better to rephrase the help texts there for avoiding
>>>> confusion.  Currently it sounds as if the kconfig always disables the
>>>> support of the given chipset.  But the actual behavior is to disable
>>>> the binding with the legacy driver *only if* the PCI device class is
>>>> declared for Intel DSP.
>>> ok, will respin the help text.
>>>
>>> I was wondering if my email client ate your answers, was is the only
>>> change you wanted? In reply to the cover letter you mentioned "some
>>> comments" but I only see this one that needs an update, and no
>>> comments for the initial series of Skylake-specific patches.
>> Maybe you missed my comments for the second and later hunks of
>> patch#2?  It was about some dev_warn() and dev_err() usages, which I
>> suggested to degrade to dev_info().
Ah yes, sorry. I knew I was missing something.
> Oh, BTW, did the fallback mechanism work properly with your patches on
> the actual machines?
>
> At the last time I tried on SKL, the fallback failed by some reason,
> the driver core didn't try to load and bind two drivers.

I tested on two platforms, one WHL with DSP and one without (Skylake HP 
device), and the 3 values and didn't see any errors. lspci -vvv reports 
the two drivers registered but only the one I wanted as 'in use'.

I'll run more experiments on KBL and APL NUCs.

>
>
> Takashi
diff mbox series

Patch

diff --git a/sound/pci/hda/Kconfig b/sound/pci/hda/Kconfig
index 4235907b7858..634b7fe6a936 100644
--- a/sound/pci/hda/Kconfig
+++ b/sound/pci/hda/Kconfig
@@ -226,6 +226,52 @@  config SND_HDA_POWER_SAVE_DEFAULT
 	  The default time-out value in seconds for HD-audio automatic
 	  power-save mode.  0 means to disable the power-save mode.
 
+if SND_HDA_INTEL
+
+config SND_HDA_INTEL_DISABLE_SKL
+	bool
+	help
+	  This option disables HD-audio legacy for
+	  Skylake machines
+
+config SND_HDA_INTEL_DISABLE_APL
+	bool
+	help
+	  This option disables HD-audio legacy for
+	  Broxton/ApolloLake machines
+
+config SND_HDA_INTEL_DISABLE_KBL
+	bool
+	help
+	  This option disables HD-audio legacy for
+	  KabyLake machines
+
+config SND_HDA_INTEL_DISABLE_GLK
+	bool
+	help
+	  This option disables HD-audio legacy for
+	  GeminiLake machines
+
+config SND_HDA_INTEL_DISABLE_CNL
+	bool
+	help
+	  This option disables HD-audio legacy for
+	  CannonLake machines
+
+config SND_HDA_INTEL_DISABLE_CFL
+	bool
+	help
+	  This option disables HD-audio legacy for
+	  CoffeeLake machines
+
+config SND_HDA_INTEL_DISABLE_ICL
+	bool
+	help
+	  This option disables HD-audio legacy for
+	  IceLake machines
+
+endif ## SND_HDA_INTEL
+
 endif
 
 endmenu
diff --git a/sound/pci/hda/hda_controller.h b/sound/pci/hda/hda_controller.h
index c95097bb5a0c..2351115f922e 100644
--- a/sound/pci/hda/hda_controller.h
+++ b/sound/pci/hda/hda_controller.h
@@ -37,7 +37,7 @@ 
 #else
 #define AZX_DCAPS_I915_COMPONENT 0		/* NOP */
 #endif
-/* 14 unused */
+#define AZX_DCAPS_INTEL_SHARED	(1 << 14)	/* shared with ASoC */
 #define AZX_DCAPS_CTX_WORKAROUND (1 << 15)	/* X-Fi workaround */
 #define AZX_DCAPS_POSFIX_LPIB	(1 << 16)	/* Use LPIB as default */
 /* 17 unused */
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index d8eb2b5f51ae..0c76713ac5c0 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -360,6 +360,7 @@  enum {
 	 AZX_DCAPS_NO_64BIT |\
 	 AZX_DCAPS_4K_BDLE_BOUNDARY | AZX_DCAPS_SNOOP_OFF)
 
+#define AZX_DCAPS_INTEL_LEGACY_DISABLE(conf) (IS_ENABLED(CONFIG_SND_HDA_INTEL_DISABLE_##conf) ? AZX_DCAPS_INTEL_SHARED : 0)
 /*
  * vga_switcheroo support
  */
@@ -2091,6 +2092,11 @@  static int azx_probe(struct pci_dev *pci,
 	bool schedule_probe;
 	int err;
 
+	/* check if this driver can be used on SKL+ Intel platforms */
+	if ((pci_id->driver_data & AZX_DCAPS_INTEL_SHARED) &&
+	    pci->class != 0x040300)
+		return -ENODEV;
+
 	if (dev >= SNDRV_CARDS)
 		return -ENODEV;
 	if (!enable[dev]) {
@@ -2406,34 +2412,48 @@  static const struct pci_device_id azx_ids[] = {
 	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE },
 	/* Sunrise Point-LP */
 	{ PCI_DEVICE(0x8086, 0x9d70),
-	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE },
+	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE |
+	  AZX_DCAPS_INTEL_LEGACY_DISABLE(SKL)
+	},
 	/* Kabylake */
 	{ PCI_DEVICE(0x8086, 0xa171),
 	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE },
 	/* Kabylake-LP */
 	{ PCI_DEVICE(0x8086, 0x9d71),
-	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE },
+	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE |
+	  AZX_DCAPS_INTEL_LEGACY_DISABLE(KBL)
+	},
 	/* Kabylake-H */
 	{ PCI_DEVICE(0x8086, 0xa2f0),
 	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE },
 	/* Coffelake */
 	{ PCI_DEVICE(0x8086, 0xa348),
-	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE},
+	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE |
+	  AZX_DCAPS_INTEL_LEGACY_DISABLE(CFL)
+	},
 	/* Cannonlake */
 	{ PCI_DEVICE(0x8086, 0x9dc8),
-	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE},
+	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE |
+	  AZX_DCAPS_INTEL_LEGACY_DISABLE(CNL)
+	},
 	/* Icelake */
 	{ PCI_DEVICE(0x8086, 0x34c8),
-	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE},
+	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE |
+	  AZX_DCAPS_INTEL_LEGACY_DISABLE(ICL)
+	},
 	/* Broxton-P(Apollolake) */
 	{ PCI_DEVICE(0x8086, 0x5a98),
-	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_BROXTON },
+	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_BROXTON |
+	  AZX_DCAPS_INTEL_LEGACY_DISABLE(APL)
+	},
 	/* Broxton-T */
 	{ PCI_DEVICE(0x8086, 0x1a98),
 	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_BROXTON },
 	/* Gemini-Lake */
 	{ PCI_DEVICE(0x8086, 0x3198),
-	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_BROXTON },
+	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_BROXTON |
+	  AZX_DCAPS_INTEL_LEGACY_DISABLE(GLK)
+	},
 	/* Haswell */
 	{ PCI_DEVICE(0x8086, 0x0a0c),
 	  .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL },
diff --git a/sound/soc/intel/Kconfig b/sound/soc/intel/Kconfig
index 99a62ba409df..f817bda5cab5 100644
--- a/sound/soc/intel/Kconfig
+++ b/sound/soc/intel/Kconfig
@@ -188,6 +188,12 @@  config SND_SOC_INTEL_SKYLAKE_COMMON
 	select SND_SOC_TOPOLOGY
 	select SND_SOC_INTEL_SST
 	select SND_SOC_HDAC_HDA if SND_SOC_INTEL_SKYLAKE_HDAUDIO_CODEC
+	select SND_HDA_INTEL_DISABLE_SKL if SND_SOC_INTEL_SKL
+	select SND_HDA_INTEL_DISABLE_APL if SND_SOC_INTEL_APL
+	select SND_HDA_INTEL_DISABLE_KBL if SND_SOC_INTEL_KBL
+	select SND_HDA_INTEL_DISABLE_GLK if SND_SOC_INTEL_GLK
+	select SND_HDA_INTEL_DISABLE_CNL if SND_SOC_INTEL_CNL
+	select SND_HDA_INTEL_DISABLE_CFL if SND_SOC_INTEL_CFL
 	select SND_SOC_ACPI_INTEL_MATCH
 	help
 	  If you have a Intel Skylake/Broxton/ApolloLake/KabyLake/