ASoC: SOF: loader: Use the BAR provided by FW
authorDaniel Baluta <daniel.baluta@nxp.com>
Mon, 22 Jul 2019 14:13:48 +0000 (09:13 -0500)
committerMark Brown <broonie@kernel.org>
Tue, 23 Jul 2019 11:19:46 +0000 (12:19 +0100)
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>
sound/soc/sof/loader.c

index 952a19091c5821c77f3a30e15e152338b2d42cd5..e75da8aa7d4a1b5e71f2955d0bab0f1edfcbe55f 100644 (file)
@@ -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) {