diff options
Diffstat (limited to 'sound/soc/intel/sst-firmware.c')
-rw-r--r-- | sound/soc/intel/sst-firmware.c | 25 |
1 files changed, 8 insertions, 17 deletions
diff --git a/sound/soc/intel/sst-firmware.c b/sound/soc/intel/sst-firmware.c index f7687107cf7f..928f228c38e7 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, | |||
57 | sst_fw->private = private; | 57 | sst_fw->private = private; |
58 | sst_fw->size = fw->size; | 58 | sst_fw->size = fw->size; |
59 | 59 | ||
60 | err = dma_coerce_mask_and_coherent(dsp->dev, DMA_BIT_MASK(32)); | ||
61 | if (err < 0) { | ||
62 | kfree(sst_fw); | ||
63 | return NULL; | ||
64 | } | ||
65 | |||
66 | /* allocate DMA buffer to store FW data */ | 60 | /* allocate DMA buffer to store FW data */ |
67 | sst_fw->dma_buf = dma_alloc_coherent(dsp->dev, sst_fw->size, | 61 | sst_fw->dma_buf = dma_alloc_coherent(dsp->dma_dev, sst_fw->size, |
68 | &sst_fw->dmable_fw_paddr, GFP_DMA | GFP_KERNEL); | 62 | &sst_fw->dmable_fw_paddr, GFP_DMA | GFP_KERNEL); |
69 | if (!sst_fw->dma_buf) { | 63 | if (!sst_fw->dma_buf) { |
70 | dev_err(dsp->dev, "error: DMA alloc failed\n"); | 64 | dev_err(dsp->dev, "error: DMA alloc failed\n"); |
@@ -106,7 +100,7 @@ void sst_fw_free(struct sst_fw *sst_fw) | |||
106 | list_del(&sst_fw->list); | 100 | list_del(&sst_fw->list); |
107 | mutex_unlock(&dsp->mutex); | 101 | mutex_unlock(&dsp->mutex); |
108 | 102 | ||
109 | dma_free_coherent(dsp->dev, sst_fw->size, sst_fw->dma_buf, | 103 | dma_free_coherent(dsp->dma_dev, sst_fw->size, sst_fw->dma_buf, |
110 | sst_fw->dmable_fw_paddr); | 104 | sst_fw->dmable_fw_paddr); |
111 | kfree(sst_fw); | 105 | kfree(sst_fw); |
112 | } | 106 | } |
@@ -202,6 +196,9 @@ static int block_alloc_contiguous(struct sst_module *module, | |||
202 | size -= block->size; | 196 | size -= block->size; |
203 | } | 197 | } |
204 | 198 | ||
199 | list_for_each_entry(block, &tmp, list) | ||
200 | list_add(&block->module_list, &module->block_list); | ||
201 | |||
205 | list_splice(&tmp, &dsp->used_block_list); | 202 | list_splice(&tmp, &dsp->used_block_list); |
206 | return 0; | 203 | return 0; |
207 | } | 204 | } |
@@ -247,8 +244,7 @@ static int block_alloc(struct sst_module *module, | |||
247 | /* do we span > 1 blocks */ | 244 | /* do we span > 1 blocks */ |
248 | if (data->size > block->size) { | 245 | if (data->size > block->size) { |
249 | ret = block_alloc_contiguous(module, data, | 246 | ret = block_alloc_contiguous(module, data, |
250 | block->offset + block->size, | 247 | block->offset, data->size); |
251 | data->size - block->size); | ||
252 | if (ret == 0) | 248 | if (ret == 0) |
253 | return ret; | 249 | return ret; |
254 | } | 250 | } |
@@ -344,7 +340,7 @@ static int block_alloc_fixed(struct sst_module *module, | |||
344 | 340 | ||
345 | err = block_alloc_contiguous(module, data, | 341 | err = block_alloc_contiguous(module, data, |
346 | block->offset + block->size, | 342 | block->offset + block->size, |
347 | data->size - block->size + data->offset - block->offset); | 343 | data->size - block->size); |
348 | if (err < 0) | 344 | if (err < 0) |
349 | return -ENOMEM; | 345 | return -ENOMEM; |
350 | 346 | ||
@@ -371,15 +367,10 @@ static int block_alloc_fixed(struct sst_module *module, | |||
371 | if (data->offset >= block->offset && data->offset < block_end) { | 367 | if (data->offset >= block->offset && data->offset < block_end) { |
372 | 368 | ||
373 | err = block_alloc_contiguous(module, data, | 369 | err = block_alloc_contiguous(module, data, |
374 | block->offset + block->size, | 370 | block->offset, data->size); |
375 | data->size - block->size); | ||
376 | if (err < 0) | 371 | if (err < 0) |
377 | return -ENOMEM; | 372 | return -ENOMEM; |
378 | 373 | ||
379 | /* add block */ | ||
380 | block->data_type = data->data_type; | ||
381 | list_move(&block->list, &dsp->used_block_list); | ||
382 | list_add(&block->module_list, &module->block_list); | ||
383 | return 0; | 374 | return 0; |
384 | } | 375 | } |
385 | 376 | ||