diff options
author | Daniel Baluta <daniel.baluta@nxp.com> | 2019-07-22 09:13:48 -0500 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2019-07-23 12:19:46 +0100 |
commit | 7198879ef57775df3b1a75c62bb9e313c56876d4 (patch) | |
tree | 7d62d3edffca4710c370e0222b0b2ce377e9a2ee | |
parent | ce8234a6357ec8f81b977d8536ff941dbd4162f3 (diff) | |
download | linux-stable-7198879ef57775df3b1a75c62bb9e313c56876d4.tar.gz linux-stable-7198879ef57775df3b1a75c62bb9e313c56876d4.tar.bz2 linux-stable-7198879ef57775df3b1a75c62bb9e313c56876d4.zip |
ASoC: SOF: loader: Use the BAR provided by FW
Make sure to use the newly introduced function snd_sof_dsp_get_bar_index
that converts the section type to appropriate BAR index.
Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20190722141402.7194-8-pierre-louis.bossart@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | sound/soc/sof/loader.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/sound/soc/sof/loader.c b/sound/soc/sof/loader.c index 952a19091c58..e75da8aa7d4a 100644 --- a/sound/soc/sof/loader.c +++ b/sound/soc/sof/loader.c @@ -92,7 +92,7 @@ int snd_sof_parse_module_memcpy(struct snd_sof_dev *sdev, struct snd_sof_mod_hdr *module) { struct snd_sof_blk_hdr *block; - int count; + int count, bar; u32 offset; size_t remaining; @@ -128,6 +128,13 @@ int snd_sof_parse_module_memcpy(struct snd_sof_dev *sdev, case SOF_FW_BLK_TYPE_IRAM: case SOF_FW_BLK_TYPE_DRAM: offset = block->offset; + bar = snd_sof_dsp_get_bar_index(sdev, block->type); + if (bar < 0) { + dev_err(sdev->dev, + "error: no BAR mapping for block type 0x%x\n", + block->type); + return bar; + } break; default: dev_err(sdev->dev, "error: bad type 0x%x for block 0x%x\n", @@ -145,7 +152,7 @@ int snd_sof_parse_module_memcpy(struct snd_sof_dev *sdev, block->size); return -EINVAL; } - snd_sof_dsp_block_write(sdev, sdev->mmio_bar, offset, + snd_sof_dsp_block_write(sdev, bar, offset, block + 1, block->size); if (remaining < block->size) { |