ASoC: Intel: Make ADSP memory block allocation more generic
Current block allocation is tied to block type and requestor type. Make the allocation more generic by removing the struct module parameter and adding a generic block allocator structure. Also pass in the list that the blocks have to be added too in order to remove dependence on block requestor type. ASoC: Intel: update scratch allocator to use generic block allocator Update the scratch allocator to use the generic block allocator and calculate total scratch buffer size. ASoC: Intel: Add call to calculate offsets internally within the DSP. A call to calculate internal DSP memory addresses used to allocate persistent and scartch buffers. ASoC: Intel: Add runtime module support. Add support for runtime module objects that can be created for every FW module that is parsed from the FW file. This gives a 1:N mapping between the FW module from file and the runtime instantiations of that module. We also need to make sure we remove every module and runtime module when we unload the FW. ASoC: Intel: Add DMA firmware loading support Add support for DMA to load firmware modules to the DSP memory blocks. Two DMA engines are supported, DesignWare and Intel MID. ASoC: Intel: Add runtime module lookup API call Add an API to allow quick lookup of runtime modules based on ID. ASoC: Intel: Provide streams with dynamic module information Remove the hard coded module paramaters and provide each module with dynamically generated buffer information for scratch and persistent buffers. Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:

committed by
Mark Brown

parent
9a80e8f597
commit
e9600bc166
@@ -352,6 +352,7 @@ struct sst_dsp *sst_dsp_new(struct device *dev,
|
||||
INIT_LIST_HEAD(&sst->free_block_list);
|
||||
INIT_LIST_HEAD(&sst->module_list);
|
||||
INIT_LIST_HEAD(&sst->fw_list);
|
||||
INIT_LIST_HEAD(&sst->scratch_block_list);
|
||||
|
||||
/* Initialise SST Audio DSP */
|
||||
if (sst->ops->init) {
|
||||
@@ -366,6 +367,10 @@ struct sst_dsp *sst_dsp_new(struct device *dev,
|
||||
if (err)
|
||||
goto irq_err;
|
||||
|
||||
err = sst_dma_new(sst);
|
||||
if (err)
|
||||
dev_warn(dev, "sst_dma_new failed %d\n", err);
|
||||
|
||||
return sst;
|
||||
|
||||
irq_err:
|
||||
@@ -381,6 +386,9 @@ void sst_dsp_free(struct sst_dsp *sst)
|
||||
free_irq(sst->irq, sst);
|
||||
if (sst->ops->free)
|
||||
sst->ops->free(sst);
|
||||
|
||||
if (sst->dma)
|
||||
sst_dma_free(sst->dma);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(sst_dsp_free);
|
||||
|
||||
|
Reference in New Issue
Block a user