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 | ||
