ASoC: SOF: Intel: initial support for Elkhart Lake
authorPan Xiuli <xiuli.pan@linux.intel.com>
Thu, 15 Aug 2019 15:57:49 +0000 (10:57 -0500)
committerMark Brown <broonie@kernel.org>
Thu, 15 Aug 2019 17:13:39 +0000 (18:13 +0100)
Add Kconfig, PCI ID and chip info for EHL platform.

Note that the core mask is different from previous platforms, only
Core0 can be controlled by the host. Additional patches will be
required for multi-core functionality.

Signed-off-by: Pan Xiuli <xiuli.pan@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20190815155749.29304-5-pierre-louis.bossart@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/intel/Kconfig
sound/soc/sof/intel/cnl.c
sound/soc/sof/intel/hda.h
sound/soc/sof/sof-pci-dev.c

index 0dc5da661b6188401f950eb68777a3652f534755..889b6202d054b071a5009924370484ba26c42911 100644 (file)
@@ -28,6 +28,7 @@ config SND_SOC_SOF_INTEL_PCI
        select SND_SOC_SOF_COMETLAKE_LP if SND_SOC_SOF_COMETLAKE_LP_SUPPORT
        select SND_SOC_SOF_COMETLAKE_H if SND_SOC_SOF_COMETLAKE_H_SUPPORT
        select SND_SOC_SOF_TIGERLAKE   if SND_SOC_SOF_TIGERLAKE_SUPPORT
+       select SND_SOC_SOF_ELKHARTLAKE if SND_SOC_SOF_ELKHARTLAKE_SUPPORT
        help
          This option is not user-selectable but automagically handled by
          'select' statements at a higher level
@@ -228,6 +229,21 @@ config SND_SOC_SOF_TIGERLAKE
           This option is not user-selectable but automagically handled by
          'select' statements at a higher level
 
+config SND_SOC_SOF_ELKHARTLAKE_SUPPORT
+       bool "SOF support for ElkhartLake"
+       help
+          This adds support for Sound Open Firmware for Intel(R) platforms
+          using the ElkhartLake processors.
+          Say Y if you have such a device.
+          If unsure select "N".
+
+config SND_SOC_SOF_ELKHARTLAKE
+       tristate
+       select SND_SOC_SOF_HDA_COMMON
+       help
+          This option is not user-selectable but automagically handled by
+         'select' statements at a higher level
+
 config SND_SOC_SOF_HDA_COMMON
        tristate
        select SND_SOC_SOF_INTEL_COMMON
index 5de281fcc1221f6d9add946ed5b3240b975ae5b7..4ddd73762d813af134ee67ab5e553d6209043cd5 100644 (file)
@@ -311,3 +311,19 @@ const struct sof_intel_dsp_desc tgl_chip_info = {
        .ssp_base_offset = CNL_SSP_BASE_OFFSET,
 };
 EXPORT_SYMBOL(tgl_chip_info);
+
+const struct sof_intel_dsp_desc ehl_chip_info = {
+       /* Elkhartlake */
+       .cores_num = 4,
+       .init_core_mask = 1,
+       .cores_mask = HDA_DSP_CORE_MASK(0),
+       .ipc_req = CNL_DSP_REG_HIPCIDR,
+       .ipc_req_mask = CNL_DSP_REG_HIPCIDR_BUSY,
+       .ipc_ack = CNL_DSP_REG_HIPCIDA,
+       .ipc_ack_mask = CNL_DSP_REG_HIPCIDA_DONE,
+       .ipc_ctl = CNL_DSP_REG_HIPCCTL,
+       .rom_init_timeout       = 300,
+       .ssp_count = ICL_SSP_COUNT,
+       .ssp_base_offset = CNL_SSP_BASE_OFFSET,
+};
+EXPORT_SYMBOL(ehl_chip_info);
index cbb431f7835dddfec6897c0beee2841d66a3d690..5591841a1b6faf9a72aec8a94b9082e1561f1e75 100644 (file)
@@ -600,5 +600,6 @@ extern const struct sof_intel_dsp_desc cnl_chip_info;
 extern const struct sof_intel_dsp_desc skl_chip_info;
 extern const struct sof_intel_dsp_desc icl_chip_info;
 extern const struct sof_intel_dsp_desc tgl_chip_info;
+extern const struct sof_intel_dsp_desc ehl_chip_info;
 
 #endif
index 9f92504ad5b44e241b5c89b685222d8c7ddce2c5..d66412a778739772b002bb2457524e260c0888e8 100644 (file)
@@ -221,6 +221,24 @@ static const struct sof_dev_desc tgl_desc = {
 };
 #endif
 
+#if IS_ENABLED(CONFIG_SND_SOC_SOF_ELKHARTLAKE)
+static const struct sof_dev_desc ehl_desc = {
+       .machines               = snd_soc_acpi_intel_ehl_machines,
+       .resindex_lpe_base      = 0,
+       .resindex_pcicfg_base   = -1,
+       .resindex_imr_base      = -1,
+       .irqindex_host_ipc      = -1,
+       .resindex_dma_base      = -1,
+       .chip_info = &ehl_chip_info,
+       .default_fw_path = "intel/sof",
+       .default_tplg_path = "intel/sof-tplg",
+       .nocodec_fw_filename = "sof-ehl.ri",
+       .nocodec_tplg_filename = "sof-ehl-nocodec.tplg",
+       .ops = &sof_cnl_ops,
+       .arch_ops = &sof_xtensa_arch_ops
+};
+#endif
+
 static const struct dev_pm_ops sof_pci_pm = {
        SET_SYSTEM_SLEEP_PM_OPS(snd_sof_suspend, snd_sof_resume)
        SET_RUNTIME_PM_OPS(snd_sof_runtime_suspend, snd_sof_runtime_resume,
@@ -406,6 +424,10 @@ static const struct pci_device_id sof_pci_ids[] = {
 #if IS_ENABLED(CONFIG_SND_SOC_SOF_TIGERLAKE)
        { PCI_DEVICE(0x8086, 0xa0c8),
                .driver_data = (unsigned long)&tgl_desc},
+#endif
+#if IS_ENABLED(CONFIG_SND_SOC_SOF_ELKHARTLAKE)
+       { PCI_DEVICE(0x8086, 0x4b55),
+               .driver_data = (unsigned long)&ehl_desc},
 #endif
        { 0, }
 };