diff options
Diffstat (limited to 'sound/soc/intel/common/sst-firmware.c')
-rw-r--r-- | sound/soc/intel/common/sst-firmware.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/sound/soc/intel/common/sst-firmware.c b/sound/soc/intel/common/sst-firmware.c index 1636a1eeb002..ef4881e7753a 100644 --- a/sound/soc/intel/common/sst-firmware.c +++ b/sound/soc/intel/common/sst-firmware.c | |||
@@ -51,8 +51,22 @@ struct sst_dma { | |||
51 | 51 | ||
52 | static inline void sst_memcpy32(volatile void __iomem *dest, void *src, u32 bytes) | 52 | static inline void sst_memcpy32(volatile void __iomem *dest, void *src, u32 bytes) |
53 | { | 53 | { |
54 | u32 tmp = 0; | ||
55 | int i, m, n; | ||
56 | const u8 *src_byte = src; | ||
57 | |||
58 | m = bytes / 4; | ||
59 | n = bytes % 4; | ||
60 | |||
54 | /* __iowrite32_copy use 32bit size values so divide by 4 */ | 61 | /* __iowrite32_copy use 32bit size values so divide by 4 */ |
55 | __iowrite32_copy((void *)dest, src, bytes/4); | 62 | __iowrite32_copy((void *)dest, src, m); |
63 | |||
64 | if (n) { | ||
65 | for (i = 0; i < n; i++) | ||
66 | tmp |= (u32)*(src_byte + m * 4 + i) << (i * 8); | ||
67 | __iowrite32_copy((void *)(dest + m * 4), &tmp, 1); | ||
68 | } | ||
69 | |||
56 | } | 70 | } |
57 | 71 | ||
58 | static void sst_dma_transfer_complete(void *arg) | 72 | static void sst_dma_transfer_complete(void *arg) |
@@ -1014,8 +1028,8 @@ EXPORT_SYMBOL_GPL(sst_module_runtime_restore); | |||
1014 | 1028 | ||
1015 | /* register a DSP memory block for use with FW based modules */ | 1029 | /* register a DSP memory block for use with FW based modules */ |
1016 | struct sst_mem_block *sst_mem_block_register(struct sst_dsp *dsp, u32 offset, | 1030 | struct sst_mem_block *sst_mem_block_register(struct sst_dsp *dsp, u32 offset, |
1017 | u32 size, enum sst_mem_type type, struct sst_block_ops *ops, u32 index, | 1031 | u32 size, enum sst_mem_type type, const struct sst_block_ops *ops, |
1018 | void *private) | 1032 | u32 index, void *private) |
1019 | { | 1033 | { |
1020 | struct sst_mem_block *block; | 1034 | struct sst_mem_block *block; |
1021 | 1035 | ||