ASoC: SOF: misc updates for 6.7

Merge series from Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>:

New PCI ID, one fix for a delayed IRQ thread causing issues, one
update for debug and one follow-up cleanup for the .remove callback.
This commit is contained in:
Mark Brown 2023-10-16 15:41:55 +01:00
commit 85045a9e44
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0
15 changed files with 52 additions and 30 deletions

View File

@ -575,7 +575,7 @@ unregister_dev:
}
EXPORT_SYMBOL_NS(amd_sof_acp_probe, SND_SOC_SOF_AMD_COMMON);
int amd_sof_acp_remove(struct snd_sof_dev *sdev)
void amd_sof_acp_remove(struct snd_sof_dev *sdev)
{
struct acp_dev_data *adata = sdev->pdata->hw_pdata;
@ -588,7 +588,7 @@ int amd_sof_acp_remove(struct snd_sof_dev *sdev)
if (adata->dmic_dev)
platform_device_unregister(adata->dmic_dev);
return acp_reset(sdev);
acp_reset(sdev);
}
EXPORT_SYMBOL_NS(amd_sof_acp_remove, SND_SOC_SOF_AMD_COMMON);

View File

@ -220,7 +220,7 @@ int configure_and_run_sha_dma(struct acp_dev_data *adata, void *image_addr,
/* ACP device probe/remove */
int amd_sof_acp_probe(struct snd_sof_dev *sdev);
int amd_sof_acp_remove(struct snd_sof_dev *sdev);
void amd_sof_acp_remove(struct snd_sof_dev *sdev);
/* DSP Loader callbacks */
int acp_sof_dsp_run(struct snd_sof_dev *sdev);

View File

@ -338,7 +338,7 @@ exit_unroll_pm:
return ret;
}
static int imx8_remove(struct snd_sof_dev *sdev)
static void imx8_remove(struct snd_sof_dev *sdev)
{
struct imx8_priv *priv = sdev->pdata->hw_pdata;
int i;
@ -350,8 +350,6 @@ static int imx8_remove(struct snd_sof_dev *sdev)
device_link_del(priv->link[i]);
dev_pm_domain_detach(priv->pd_dev[i], false);
}
return 0;
}
/* on i.MX8 there is 1 to 1 match between type and BAR idx */

View File

@ -269,14 +269,12 @@ exit_pdev_unregister:
return ret;
}
static int imx8m_remove(struct snd_sof_dev *sdev)
static void imx8m_remove(struct snd_sof_dev *sdev)
{
struct imx8m_priv *priv = sdev->pdata->hw_pdata;
imx8_disable_clocks(sdev, priv->clks);
platform_device_unregister(priv->ipc_dev);
return 0;
}
/* on i.MX8 there is 1 to 1 match between type and BAR idx */

View File

@ -278,14 +278,12 @@ exit_pdev_unregister:
return ret;
}
static int imx8ulp_remove(struct snd_sof_dev *sdev)
static void imx8ulp_remove(struct snd_sof_dev *sdev)
{
struct imx8ulp_priv *priv = sdev->pdata->hw_pdata;
imx8_disable_clocks(sdev, priv->clks);
platform_device_unregister(priv->ipc_dev);
return 0;
}
/* on i.MX8 there is 1 to 1 match between type and BAR idx */

View File

@ -100,11 +100,9 @@ static int byt_resume(struct snd_sof_dev *sdev)
return 0;
}
static int byt_remove(struct snd_sof_dev *sdev)
static void byt_remove(struct snd_sof_dev *sdev)
{
byt_reset_dsp_disable_int(sdev);
return 0;
}
static int byt_acpi_probe(struct snd_sof_dev *sdev)

View File

@ -699,6 +699,9 @@ static int hda_suspend(struct snd_sof_dev *sdev, bool runtime_suspend)
if (ret < 0)
return ret;
/* make sure that no irq handler is pending before shutdown */
synchronize_irq(sdev->ipc_irq);
hda_codec_jack_wake_enable(sdev, runtime_suspend);
/* power down all hda links */

View File

@ -1317,7 +1317,7 @@ err:
return ret;
}
int hda_dsp_remove(struct snd_sof_dev *sdev)
void hda_dsp_remove(struct snd_sof_dev *sdev)
{
struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata;
const struct sof_intel_dsp_desc *chip = hda->desc;
@ -1377,8 +1377,6 @@ skip_disable_dsp:
sof_hda_bus_exit(sdev);
hda_codec_i915_exit(sdev);
return 0;
}
int hda_power_down_dsp(struct snd_sof_dev *sdev)

View File

@ -577,7 +577,7 @@ struct sof_intel_hda_stream {
* DSP Core services.
*/
int hda_dsp_probe(struct snd_sof_dev *sdev);
int hda_dsp_remove(struct snd_sof_dev *sdev);
void hda_dsp_remove(struct snd_sof_dev *sdev);
int hda_dsp_core_power_up(struct snd_sof_dev *sdev, unsigned int core_mask);
int hda_dsp_core_run(struct snd_sof_dev *sdev, unsigned int core_mask);
int hda_dsp_enable_core(struct snd_sof_dev *sdev, unsigned int core_mask);

View File

@ -50,9 +50,40 @@ static const struct sof_dev_desc mtl_desc = {
.ops_free = hda_ops_free,
};
static const struct sof_dev_desc arl_desc = {
.use_acpi_target_states = true,
.machines = snd_soc_acpi_intel_arl_machines,
.alt_machines = snd_soc_acpi_intel_arl_sdw_machines,
.resindex_lpe_base = 0,
.resindex_pcicfg_base = -1,
.resindex_imr_base = -1,
.irqindex_host_ipc = -1,
.chip_info = &mtl_chip_info,
.ipc_supported_mask = BIT(SOF_IPC_TYPE_4),
.ipc_default = SOF_IPC_TYPE_4,
.dspless_mode_supported = true, /* Only supported for HDaudio */
.default_fw_path = {
[SOF_IPC_TYPE_4] = "intel/sof-ipc4/arl",
},
.default_lib_path = {
[SOF_IPC_TYPE_4] = "intel/sof-ipc4-lib/arl",
},
.default_tplg_path = {
[SOF_IPC_TYPE_4] = "intel/sof-ace-tplg",
},
.default_fw_filename = {
[SOF_IPC_TYPE_4] = "sof-arl.ri",
},
.nocodec_tplg_filename = "sof-arl-nocodec.tplg",
.ops = &sof_mtl_ops,
.ops_init = sof_mtl_ops_init,
.ops_free = hda_ops_free,
};
/* PCI IDs */
static const struct pci_device_id sof_pci_ids[] = {
{ PCI_DEVICE_DATA(INTEL, HDA_MTL, &mtl_desc) },
{ PCI_DEVICE_DATA(INTEL, HDA_ARL_S, &arl_desc) },
{ 0, }
};
MODULE_DEVICE_TABLE(pci, sof_pci_ids);

View File

@ -666,6 +666,10 @@ static void sof_ipc4_rx_msg(struct snd_sof_dev *sdev)
sof_ipc4_log_header(sdev->dev, "ipc rx done ", ipc4_msg, true);
if (data_size) {
if (sof_debug_check_flag(SOF_DBG_DUMP_IPC_MESSAGE_PAYLOAD))
sof_ipc4_dump_payload(sdev, ipc4_msg->data_ptr,
ipc4_msg->data_size);
kfree(ipc4_msg->data_ptr);
ipc4_msg->data_ptr = NULL;
ipc4_msg->data_size = 0;

View File

@ -391,7 +391,7 @@ err_adsp_off:
return ret;
}
static int mt8186_dsp_remove(struct snd_sof_dev *sdev)
static void mt8186_dsp_remove(struct snd_sof_dev *sdev)
{
struct adsp_priv *priv = sdev->pdata->hw_pdata;
@ -399,8 +399,6 @@ static int mt8186_dsp_remove(struct snd_sof_dev *sdev)
mt8186_sof_hifixdsp_shutdown(sdev);
adsp_sram_power_off(sdev);
mt8186_adsp_clock_off(sdev);
return 0;
}
static int mt8186_dsp_shutdown(struct snd_sof_dev *sdev)

View File

@ -388,7 +388,7 @@ static int mt8195_dsp_shutdown(struct snd_sof_dev *sdev)
return snd_sof_suspend(sdev->dev);
}
static int mt8195_dsp_remove(struct snd_sof_dev *sdev)
static void mt8195_dsp_remove(struct snd_sof_dev *sdev)
{
struct platform_device *pdev = container_of(sdev->dev, struct platform_device, dev);
struct adsp_priv *priv = sdev->pdata->hw_pdata;
@ -396,8 +396,6 @@ static int mt8195_dsp_remove(struct snd_sof_dev *sdev)
platform_device_unregister(priv->ipc_dev);
adsp_sram_power_on(&pdev->dev, false);
adsp_clock_off(sdev);
return 0;
}
static int mt8195_dsp_suspend(struct snd_sof_dev *sdev, u32 target_state)

View File

@ -43,12 +43,10 @@ static inline int snd_sof_probe(struct snd_sof_dev *sdev)
return sof_ops(sdev)->probe(sdev);
}
static inline int snd_sof_remove(struct snd_sof_dev *sdev)
static inline void snd_sof_remove(struct snd_sof_dev *sdev)
{
if (sof_ops(sdev)->remove)
return sof_ops(sdev)->remove(sdev);
return 0;
sof_ops(sdev)->remove(sdev);
}
static inline int snd_sof_shutdown(struct snd_sof_dev *sdev)

View File

@ -166,7 +166,7 @@ struct snd_sof_dsp_ops {
/* probe/remove/shutdown */
int (*probe)(struct snd_sof_dev *sof_dev); /* mandatory */
int (*remove)(struct snd_sof_dev *sof_dev); /* optional */
void (*remove)(struct snd_sof_dev *sof_dev); /* optional */
int (*shutdown)(struct snd_sof_dev *sof_dev); /* optional */
/* DSP core boot / reset */