forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 14
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ASoC: SOF: Intel: LNL: Add support for Lunarlake platform
Add initial support for Lunarlake. For now only HDAudio interfaces are supported, DMIC/SSP/SoundWire require additional work so that the DAIs reuse the HDaudio DMA stream allocation. Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com> Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com> Link: https://lore.kernel.org/r/20230807210959.506849-7-pierre-louis.bossart@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
- Loading branch information
Showing
5 changed files
with
158 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) | ||
// | ||
// Copyright(c) 2023 Intel Corporation. All rights reserved. | ||
|
||
/* | ||
* Hardware interface for audio DSP on LunarLake. | ||
*/ | ||
|
||
#include <linux/firmware.h> | ||
#include <sound/hda_register.h> | ||
#include <sound/sof/ipc4/header.h> | ||
#include <trace/events/sof_intel.h> | ||
#include "../ipc4-priv.h" | ||
#include "../ops.h" | ||
#include "hda.h" | ||
#include "hda-ipc.h" | ||
#include "../sof-audio.h" | ||
#include "mtl.h" | ||
#include "hda.h" | ||
#include <sound/hda-mlink.h> | ||
|
||
/* Check if an SDW IRQ occurred */ | ||
static bool lnl_dsp_check_sdw_irq(struct snd_sof_dev *sdev) | ||
{ | ||
struct hdac_bus *bus = sof_to_bus(sdev); | ||
|
||
return hdac_bus_eml_check_interrupt(bus, true, AZX_REG_ML_LEPTR_ID_SDW); | ||
} | ||
|
||
static void lnl_enable_sdw_irq(struct snd_sof_dev *sdev, bool enable) | ||
{ | ||
struct hdac_bus *bus = sof_to_bus(sdev); | ||
|
||
hdac_bus_eml_enable_interrupt(bus, true, AZX_REG_ML_LEPTR_ID_SDW, enable); | ||
} | ||
|
||
static int lnl_dsp_disable_interrupts(struct snd_sof_dev *sdev) | ||
{ | ||
lnl_enable_sdw_irq(sdev, false); | ||
mtl_disable_ipc_interrupts(sdev); | ||
return mtl_enable_interrupts(sdev, false); | ||
} | ||
|
||
const struct sof_intel_dsp_desc lnl_chip_info = { | ||
.cores_num = 5, | ||
.init_core_mask = BIT(0), | ||
.host_managed_cores_mask = BIT(0), | ||
.ipc_req = MTL_DSP_REG_HFIPCXIDR, | ||
.ipc_req_mask = MTL_DSP_REG_HFIPCXIDR_BUSY, | ||
.ipc_ack = MTL_DSP_REG_HFIPCXIDA, | ||
.ipc_ack_mask = MTL_DSP_REG_HFIPCXIDA_DONE, | ||
.ipc_ctl = MTL_DSP_REG_HFIPCXCTL, | ||
.rom_status_reg = MTL_DSP_ROM_STS, | ||
.rom_init_timeout = 300, | ||
.ssp_count = MTL_SSP_COUNT, | ||
.d0i3_offset = MTL_HDA_VS_D0I3C, | ||
.read_sdw_lcount = hda_sdw_check_lcount_ext, | ||
.enable_sdw_irq = lnl_enable_sdw_irq, | ||
.check_sdw_irq = lnl_dsp_check_sdw_irq, | ||
.check_ipc_irq = mtl_dsp_check_ipc_irq, | ||
.cl_init = mtl_dsp_cl_init, | ||
.power_down_dsp = mtl_power_down_dsp, | ||
.disable_interrupts = lnl_dsp_disable_interrupts, | ||
.hw_ip_version = SOF_INTEL_ACE_2_0, | ||
}; | ||
EXPORT_SYMBOL_NS(lnl_chip_info, SND_SOC_SOF_INTEL_HDA_COMMON); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) | ||
// | ||
// This file is provided under a dual BSD/GPLv2 license. When using or | ||
// redistributing this file, you may do so under either license. | ||
// | ||
// Copyright(c) 2023 Intel Corporation. All rights reserved. | ||
// | ||
// Author: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> | ||
// | ||
|
||
#include <linux/module.h> | ||
#include <linux/pci.h> | ||
#include <sound/soc-acpi.h> | ||
#include <sound/soc-acpi-intel-match.h> | ||
#include <sound/sof.h> | ||
#include "../ops.h" | ||
#include "../sof-pci-dev.h" | ||
|
||
/* platform specific devices */ | ||
#include "hda.h" | ||
#include "mtl.h" | ||
|
||
static const struct sof_dev_desc lnl_desc = { | ||
.use_acpi_target_states = true, | ||
.machines = snd_soc_acpi_intel_lnl_machines, | ||
.alt_machines = snd_soc_acpi_intel_lnl_sdw_machines, | ||
.resindex_lpe_base = 0, | ||
.resindex_pcicfg_base = -1, | ||
.resindex_imr_base = -1, | ||
.irqindex_host_ipc = -1, | ||
.chip_info = &lnl_chip_info, | ||
.ipc_supported_mask = BIT(SOF_INTEL_IPC4), | ||
.ipc_default = SOF_INTEL_IPC4, | ||
.dspless_mode_supported = true, | ||
.default_fw_path = { | ||
[SOF_INTEL_IPC4] = "intel/sof-ipc4/lnl", | ||
}, | ||
.default_tplg_path = { | ||
[SOF_INTEL_IPC4] = "intel/sof-ace-tplg", | ||
}, | ||
.default_fw_filename = { | ||
[SOF_INTEL_IPC4] = "sof-lnl.ri", | ||
}, | ||
.nocodec_tplg_filename = "sof-lnl-nocodec.tplg", | ||
/* the MTL ops are still used for now */ | ||
.ops = &sof_mtl_ops, | ||
.ops_init = sof_mtl_ops_init, | ||
}; | ||
|
||
/* PCI IDs */ | ||
static const struct pci_device_id sof_pci_ids[] = { | ||
{ PCI_DEVICE_DATA(INTEL, HDA_LNL_P, &lnl_desc) }, /* LNL-P */ | ||
{ 0, } | ||
}; | ||
MODULE_DEVICE_TABLE(pci, sof_pci_ids); | ||
|
||
/* pci_driver definition */ | ||
static struct pci_driver snd_sof_pci_intel_lnl_driver = { | ||
.name = "sof-audio-pci-intel-lnl", | ||
.id_table = sof_pci_ids, | ||
.probe = hda_pci_intel_probe, | ||
.remove = sof_pci_remove, | ||
.shutdown = sof_pci_shutdown, | ||
.driver = { | ||
.pm = &sof_pci_pm, | ||
}, | ||
}; | ||
module_pci_driver(snd_sof_pci_intel_lnl_driver); | ||
|
||
MODULE_LICENSE("Dual BSD/GPL"); | ||
MODULE_IMPORT_NS(SND_SOC_SOF_INTEL_HDA_COMMON); | ||
MODULE_IMPORT_NS(SND_SOC_SOF_PCI_DEV); |