ASoC: Intel: sst: fix sst_memcpy32 wrong with non-4x bytes issue
sst_memcpy32() only copied bytes/4 32bits, which means it dropped the remaining bytes%4 bytes wrongly. Here add copying those missing bytes, first to a 32bits tmp, and then write the tmp to 32bits iomem. Signed-off-by: Jie Yang <yang.jie@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
af1086ba05
commit
1cf8dfd90f
|
@ -51,8 +51,22 @@ struct sst_dma {
|
|||
|
||||
static inline void sst_memcpy32(volatile void __iomem *dest, void *src, u32 bytes)
|
||||
{
|
||||
u32 tmp = 0;
|
||||
int i, m, n;
|
||||
const u8 *src_byte = src;
|
||||
|
||||
m = bytes / 4;
|
||||
n = bytes % 4;
|
||||
|
||||
/* __iowrite32_copy use 32bit size values so divide by 4 */
|
||||
__iowrite32_copy((void *)dest, src, bytes/4);
|
||||
__iowrite32_copy((void *)dest, src, m);
|
||||
|
||||
if (n) {
|
||||
for (i = 0; i < n; i++)
|
||||
tmp |= (u32)*(src_byte + m * 4 + i) << (i * 8);
|
||||
__iowrite32_copy((void *)(dest + m * 4), &tmp, 1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void sst_dma_transfer_complete(void *arg)
|
||||
|
|
Loading…
Reference in New Issue