ASoC: Intel: Add dummy read for SRAM block enable
authorJie Yang <yang.jie@intel.com>
Mon, 14 Jul 2014 09:11:11 +0000 (17:11 +0800)
committerMark Brown <broonie@linaro.org>
Mon, 14 Jul 2014 18:11:27 +0000 (19:11 +0100)
Add dummy read after each block enable, to workaround
SRAM write missing bytes issue.

Signed-off-by: Jie Yang <yang.jie@intel.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
sound/soc/intel/sst-haswell-dsp.c

index 535f517..a33b931 100644 (file)
@@ -359,6 +359,17 @@ static u32 hsw_block_get_bit(struct sst_mem_block *block)
        return bit;
 }
 
+/*dummy read a SRAM block.*/
+static void sst_mem_block_dummy_read(struct sst_mem_block *block)
+{
+       u32 size;
+       u8 tmp_buf[4];
+       struct sst_dsp *sst = block->dsp;
+
+       size = block->size > 4 ? 4 : block->size;
+       memcpy_fromio(tmp_buf, sst->addr.lpe + block->offset, size);
+}
+
 /* enable 32kB memory block - locks held by caller */
 static int hsw_block_enable(struct sst_mem_block *block)
 {
@@ -378,6 +389,8 @@ static int hsw_block_enable(struct sst_mem_block *block)
        /* wait 18 DSP clock ticks */
        udelay(10);
 
+       /*add a dummy read before the SRAM block is written, otherwise the writing may miss bytes sometimes.*/
+       sst_mem_block_dummy_read(block);
        return 0;
 }