summaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>2018-12-07 18:50:04 -0500
committerMark Brown <broonie@kernel.org>2018-12-13 10:35:33 -0500
commitc746de8dbc7b0ae9df491f7a99a6dab34203b51b (patch)
tree15234fbcfa179084cf2b3065cdd4e1c1c3bcb4b5 /sound
parente6b98db945124987b1ecec3f5f030877627e01a9 (diff)
ASoC: Intel: Skylake: Harden DSP detection with PCI class/subclass info
The existing PPCAP and GCAP fields cannot be used reliably to determine if the DSP is enabled by the BIOS. Instead rely on the class/subclass information to find out if this driver can run or not. The values in the code don't seem to be documented in publicly available documents but are part of recommendations made to BIOS writers and have been verified to be accurate on a number of platforms. Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound')
-rw-r--r--sound/soc/intel/skylake/skl.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/sound/soc/intel/skylake/skl.c b/sound/soc/intel/skylake/skl.c
index df36b8fe6d5e..41a084b3d48f 100644
--- a/sound/soc/intel/skylake/skl.c
+++ b/sound/soc/intel/skylake/skl.c
@@ -916,6 +916,21 @@ static int skl_first_init(struct hdac_bus *bus)
916 unsigned short gcap; 916 unsigned short gcap;
917 int cp_streams, pb_streams, start_idx; 917 int cp_streams, pb_streams, start_idx;
918 918
919 /*
920 * detect DSP by checking class/subclass/prog-id information
921 * class=04 subclass 03 prog-if 00: no DSP, legacy driver needs to be used
922 * class=04 subclass 01 prog-if 00: DSP is present (and may be required e.g. for DMIC or SSP support)
923 * class=04 subclass 03 prog-if 80: either of DSP or legacy mode can be used
924 */
925 if (pci->class == 0x040300) {
926 dev_err(bus->dev, "The DSP is not enabled on this platform, aborting probe\n");
927 return -ENODEV;
928 } else if (pci->class != 0x040100 && pci->class != 0x040380) {
929 dev_err(bus->dev, "Unknown PCI class/subclass/prog-if information (0x%06x) found, aborting probe\n", pci->class);
930 return -ENODEV;
931 }
932 dev_info(bus->dev, "DSP detected with PCI class/subclass/prog-if info 0x%06x\n", pci->class);
933
919 err = pci_request_regions(pci, "Skylake HD audio"); 934 err = pci_request_regions(pci, "Skylake HD audio");
920 if (err < 0) 935 if (err < 0)
921 return err; 936 return err;