mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-10 15:54:39 +08:00
ASoC: SOF: Introduce num_cores and ref count per core
Add two fields num_cores and dsp_cores_ref_count to struct snd_sof_dev. These will be used to maintain the ref count for each core to determine when it should be powered up or down. Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Reviewed-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com> Link: https://lore.kernel.org/r/20211119192621.4096077-3-kai.vehmanen@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
81ed6770ba
commit
5974f68432
@ -188,6 +188,7 @@ static int imx8_probe(struct snd_sof_dev *sdev)
|
||||
if (!priv)
|
||||
return -ENOMEM;
|
||||
|
||||
sdev->num_cores = 1;
|
||||
sdev->pdata->hw_pdata = priv;
|
||||
priv->dev = sdev->dev;
|
||||
priv->sdev = sdev;
|
||||
|
@ -108,6 +108,7 @@ static int imx8m_probe(struct snd_sof_dev *sdev)
|
||||
if (!priv)
|
||||
return -ENOMEM;
|
||||
|
||||
sdev->num_cores = 1;
|
||||
sdev->pdata->hw_pdata = priv;
|
||||
priv->dev = sdev->dev;
|
||||
priv->sdev = sdev;
|
||||
|
@ -412,10 +412,19 @@ static int bdw_probe(struct snd_sof_dev *sdev)
|
||||
const struct sof_dev_desc *desc = pdata->desc;
|
||||
struct platform_device *pdev =
|
||||
container_of(sdev->dev, struct platform_device, dev);
|
||||
const struct sof_intel_dsp_desc *chip;
|
||||
struct resource *mmio;
|
||||
u32 base, size;
|
||||
int ret;
|
||||
|
||||
chip = get_chip_info(sdev->pdata);
|
||||
if (!chip) {
|
||||
dev_err(sdev->dev, "error: no such device supported\n");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
sdev->num_cores = chip->cores_num;
|
||||
|
||||
/* LPE base */
|
||||
mmio = platform_get_resource(pdev, IORESOURCE_MEM,
|
||||
desc->resindex_lpe_base);
|
||||
|
@ -113,10 +113,19 @@ static int byt_acpi_probe(struct snd_sof_dev *sdev)
|
||||
const struct sof_dev_desc *desc = pdata->desc;
|
||||
struct platform_device *pdev =
|
||||
container_of(sdev->dev, struct platform_device, dev);
|
||||
const struct sof_intel_dsp_desc *chip;
|
||||
struct resource *mmio;
|
||||
u32 base, size;
|
||||
int ret;
|
||||
|
||||
chip = get_chip_info(sdev->pdata);
|
||||
if (!chip) {
|
||||
dev_err(sdev->dev, "error: no such device supported\n");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
sdev->num_cores = chip->cores_num;
|
||||
|
||||
/* DSP DMA can only access low 31 bits of host memory */
|
||||
ret = dma_coerce_mask_and_coherent(sdev->dev, DMA_BIT_MASK(31));
|
||||
if (ret < 0) {
|
||||
|
@ -897,6 +897,8 @@ int hda_dsp_probe(struct snd_sof_dev *sdev)
|
||||
goto err;
|
||||
}
|
||||
|
||||
sdev->num_cores = chip->cores_num;
|
||||
|
||||
hdev = devm_kzalloc(sdev->dev, sizeof(*hdev), GFP_KERNEL);
|
||||
if (!hdev)
|
||||
return -ENOMEM;
|
||||
|
@ -55,9 +55,18 @@ static int tangier_pci_probe(struct snd_sof_dev *sdev)
|
||||
struct snd_sof_pdata *pdata = sdev->pdata;
|
||||
const struct sof_dev_desc *desc = pdata->desc;
|
||||
struct pci_dev *pci = to_pci_dev(sdev->dev);
|
||||
const struct sof_intel_dsp_desc *chip;
|
||||
u32 base, size;
|
||||
int ret;
|
||||
|
||||
chip = get_chip_info(sdev->pdata);
|
||||
if (!chip) {
|
||||
dev_err(sdev->dev, "error: no such device supported\n");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
sdev->num_cores = chip->cores_num;
|
||||
|
||||
/* DSP DMA can only access low 31 bits of host memory */
|
||||
ret = dma_coerce_mask_and_coherent(&pci->dev, DMA_BIT_MASK(31));
|
||||
if (ret < 0) {
|
||||
|
@ -71,6 +71,9 @@ extern int sof_core_debug;
|
||||
/* So far the primary core on all DSPs has ID 0 */
|
||||
#define SOF_DSP_PRIMARY_CORE 0
|
||||
|
||||
/* max number of DSP cores */
|
||||
#define SOF_MAX_DSP_NUM_CORES 8
|
||||
|
||||
/* DSP power state */
|
||||
enum sof_dsp_power_states {
|
||||
SOF_DSP_PM_D0,
|
||||
@ -477,6 +480,18 @@ struct snd_sof_dev {
|
||||
|
||||
bool msi_enabled;
|
||||
|
||||
/* DSP core context */
|
||||
u32 num_cores;
|
||||
|
||||
/*
|
||||
* ref count per core that will be modified during system suspend/resume and during pcm
|
||||
* hw_params/hw_free. This doesn't need to be protected with a mutex because pcm
|
||||
* hw_params/hw_free are already protected by the PCM mutex in the ALSA framework in
|
||||
* sound/core/ when streams are active and during system suspend/resume, streams are
|
||||
* already suspended.
|
||||
*/
|
||||
int dsp_core_ref_count[SOF_MAX_DSP_NUM_CORES];
|
||||
|
||||
void *private; /* core does not touch this */
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user