On Wed, Dec 16, 2020 at 1:48 AM Amadeusz Sławiński amadeuszx.slawinski@linux.intel.com wrote:
On 12/15/2020 6:21 PM, Pierre-Louis Bossart wrote:
On 12/14/20 9:54 PM, Kai-Heng Feng wrote:
On Mon, Dec 14, 2020 at 13:33, Pierre-Louis Bossart pierre-louis.bossart@linux.intel.com wrote:
On more recent kernels legacy HDA stops working for device 8086:9d71: [ 47.211381] snd_hda_intel 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if info 0x040100 [ 47.211383] snd_hda_intel 0000:00:1f.3: Digital mics found on Skylake+ platform, using SST driver
However, only legacy HDA supports it: 00:1f.3 Multimedia audio controller [0401]: Intel Corporation Sunrise Point-LP HD Audio [8086:9d71] (rev 21) .. Kernel modules: snd_hda_intel
Ubuntu kernel doesn't select SND_SOC_INTEL_SKYLAKE, which builds snd-soc-skl, because based on the Kconfig description SOF should support it.
I wonder if SND_SOC_INTEL_SKYLAKE should be select again?
SOF does not support Skylake and Kabylake, and only the Up2 board for APL. I am not sure what you mean by 'recent' kernels since this dynamic selection has been in place for a year now?
Ubuntu kernel only changed this in 20.10 release.
At any rate, to make this work again:
- You can select SND_SOC_INTEL_SKYLAKE or alternatively to be more
accurate:
SND_SOC_INTEL_SKL SND_SOC_INTEL_APL SND_SOC_INTEL_KBL
There are known issues with Conexant codecs, typically on HP devices, only Realtek codecs are supported.
Right, so we can't really enable this for generic distros like Ubuntu.
Let me think of a more generic solution.
Re-thinking about this, I actually don't know how this problem occurred: the tables are conditionally built so you would only select SST if you had the drivers compiled in.
see sound/hda/intel-dsp-config.c:
/* Kabylake-LP */ #if IS_ENABLED(CONFIG_SND_SOC_INTEL_KBL) { .flags = FLAG_SST, .device = 0x9d71, .dmi_table = (const struct dmi_system_id []) { { .ident = "Google Chromebooks", .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Google"), } }, {} } }, { .flags = FLAG_SST | FLAG_SST_ONLY_IF_DMIC, .device = 0x9d71, }, #endif
Something's not adding up here.
Seems like you can enable CONFIG_SND_SOC_INTEL_KBL (and all other platforms), without enabling CONFIG_SND_SOC_INTEL_SKYLAKE, which enables building of snd_soc_skl module... I would say that there is something wrong with module dependencies in Kconfig :/
Yes that's exactly what happened here. So I wonder why we need to separate CONFIG_SND_SOC_INTEL_SKYLAKE from other configs...
Will look at it tomorrow. In the meantime any chance we can get the config which was used, to confirm my suspicion?
Ubuntu 5.8 kernel has this: # CONFIG_SND_SOC_INTEL_SKYLAKE is not set CONFIG_SND_SOC_INTEL_SKL=m CONFIG_SND_SOC_INTEL_APL=m CONFIG_SND_SOC_INTEL_KBL=m CONFIG_SND_SOC_INTEL_GLK=m # CONFIG_SND_SOC_INTEL_CNL is not set # CONFIG_SND_SOC_INTEL_CFL is not set # CONFIG_SND_SOC_INTEL_CML_H is not set # CONFIG_SND_SOC_INTEL_CML_LP is not set CONFIG_SND_SOC_INTEL_SKYLAKE_FAMILY=m CONFIG_SND_SOC_INTEL_SKYLAKE_SSP_CLK=m # CONFIG_SND_SOC_INTEL_SKYLAKE_HDAUDIO_CODEC is not set CONFIG_SND_SOC_INTEL_SKYLAKE_COMMON=m
So I guess we can do something like this? diff --git a/sound/hda/intel-dsp-config.c b/sound/hda/intel-dsp-config.c index 1c5114dedda9..c8142520532e 100644 --- a/sound/hda/intel-dsp-config.c +++ b/sound/hda/intel-dsp-config.c @@ -417,7 +417,7 @@ int snd_intel_dsp_driver_probe(struct pci_dev *pci) return SND_INTEL_DSP_DRIVER_SOF; }
- +#if IS_REACHABLE(CONFIG_SND_SOC_INTEL_SKYLAKE) if (cfg->flags & FLAG_SST) { if (cfg->flags & FLAG_SST_ONLY_IF_DMIC) { if (snd_intel_dsp_check_dmic(pci)) { @@ -428,6 +428,7 @@ int snd_intel_dsp_driver_probe(struct pci_dev *pci) return SND_INTEL_DSP_DRIVER_SST; } } +#endif
return SND_INTEL_DSP_DRIVER_LEGACY; }
Kai-Heng
Thanks, Amadeusz