ASoC: Intel: Move Baytrail extended fw address saving to sst_byt_boot()
authorJarkko Nikula <jarkko.nikula@linux.intel.com>
Thu, 8 May 2014 13:07:24 +0000 (16:07 +0300)
committerMark Brown <broonie@linaro.org>
Mon, 12 May 2014 21:02:17 +0000 (22:02 +0100)
We have to save the physical address of extended firmware block in the
beginning of mailbox every time when we boot the DSP firmware since that
mailbox address is re-used after DSP firmware is running. Otherwise DSP
firmware will get bogus extended firmware block address during next DSP
boot.

Currently this is not problem but becomes when DSP runtime rebooting is
implemented. Prepare for that by moving extended firmware address saving
from sst_byt_init() to sst_byt_boot().

Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
sound/soc/intel/sst-baytrail-dsp.c

index a50bf7f..4a5d489 100644 (file)
@@ -214,6 +214,13 @@ static void sst_byt_boot(struct sst_dsp *sst)
 {
        int tries = 10;
 
+       /*
+        * save the physical address of extended firmware block in the first
+        * 4 bytes of the mailbox
+        */
+       memcpy_toio(sst->addr.lpe + SST_BYT_MAILBOX_OFFSET,
+              &sst->pdata->fw_base, sizeof(u32));
+
        /* release stall and wait to unstall */
        sst_dsp_shim_update_bits64(sst, SST_CSR, SST_BYT_CSR_STALL, 0x0);
        while (tries--) {
@@ -317,13 +324,6 @@ static int sst_byt_init(struct sst_dsp *sst, struct sst_pdata *pdata)
                return ret;
        }
 
-       /*
-        * save the physical address of extended firmware block in the first
-        * 4 bytes of the mailbox
-        */
-       memcpy_toio(sst->addr.lpe + SST_BYT_MAILBOX_OFFSET,
-              &pdata->fw_base, sizeof(u32));
-
        ret = dma_coerce_mask_and_coherent(dev, DMA_BIT_MASK(32));
        if (ret)
                return ret;