diff options
author | Liam Girdwood <liam.r.girdwood@linux.intel.com> | 2014-05-02 16:56:31 +0100 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2014-05-02 09:53:02 -0700 |
commit | 10df350977b15d44dba0b3b44e3da7989711cb8d (patch) | |
tree | 4c8c6254379f1a798b8a072f3067e5c002a1c362 /sound/soc/intel/sst-firmware.c | |
parent | 0b708c87f66a15190fb43661c2320fd48c4dc6c8 (diff) | |
download | blackbird-obmc-linux-10df350977b15d44dba0b3b44e3da7989711cb8d.tar.gz blackbird-obmc-linux-10df350977b15d44dba0b3b44e3da7989711cb8d.zip |
ASoC: Intel: Fix Audio DSP usage when IOMMU is enabled.
The Intel IOMMU requires that the ACPI device is used to allocate all
DMA memory buffers. This means we need to pass the DMA device pointer into child
component devices that allocate DMA memory.
We also only set the DMA mask for the ACPI device now instead of for each
component device.
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
Diffstat (limited to 'sound/soc/intel/sst-firmware.c')
-rw-r--r-- | sound/soc/intel/sst-firmware.c | 10 |
1 files changed, 2 insertions, 8 deletions
diff --git a/sound/soc/intel/sst-firmware.c b/sound/soc/intel/sst-firmware.c index 5fed75cef64f..c38cfda8003c 100644 --- a/sound/soc/intel/sst-firmware.c +++ b/sound/soc/intel/sst-firmware.c @@ -57,14 +57,8 @@ struct sst_fw *sst_fw_new(struct sst_dsp *dsp, sst_fw->private = private; sst_fw->size = fw->size; - err = dma_coerce_mask_and_coherent(dsp->dev, DMA_BIT_MASK(32)); - if (err < 0) { - kfree(sst_fw); - return NULL; - } - /* allocate DMA buffer to store FW data */ - sst_fw->dma_buf = dma_alloc_coherent(dsp->dev, sst_fw->size, + sst_fw->dma_buf = dma_alloc_coherent(dsp->dma_dev, sst_fw->size, &sst_fw->dmable_fw_paddr, GFP_DMA | GFP_KERNEL); if (!sst_fw->dma_buf) { dev_err(dsp->dev, "error: DMA alloc failed\n"); @@ -106,7 +100,7 @@ void sst_fw_free(struct sst_fw *sst_fw) list_del(&sst_fw->list); mutex_unlock(&dsp->mutex); - dma_free_coherent(dsp->dev, sst_fw->size, sst_fw->dma_buf, + dma_free_coherent(dsp->dma_dev, sst_fw->size, sst_fw->dma_buf, sst_fw->dmable_fw_paddr); kfree(sst_fw); } |