mirror of
https://github.com/torvalds/linux.git
synced 2026-11-06 21:58:01 +01:00
ALSA: sh: aica: Fix spu_memset() stride
spu_memset() writes one 32-bit word per iteration, but advances the
destination offset by only one byte. spu_reset() calls it with
0x200000 / 4 words to clear the 2 MiB of sound RAM, so:
- three out of four writel() calls target an unaligned address. The
SH4 can't do that. Each one traps and is emulated by the unaligned
access fixup. This call to spu_memset() causes 393216 unaligned
accesses, visible in /proc/cpu/alignment.
- the clear covered only about 512 KiB of sound RAM, not 2 MiB.
Advance the offset by the size of the written word, to clear the full
sound RAM using aligned writes.
Fixes: 198de43d75 ("[ALSA] Add ALSA support for the SEGA Dreamcast PCM device")
Signed-off-by: Florian Fuchs <fuchsfl@gmail.com>
Acked-by: Adrian McMenamin <adrianmcmenamin@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Link: https://patch.msgid.link/20261022163241.2504922-1-fuchsfl@gmail.com
This commit is contained in:
parent
9a8b6b459e
commit
0d01f90b07
|
|
@ -94,7 +94,7 @@ static void spu_memset(u32 toi, u32 what, int length)
|
|||
local_irq_save(flags);
|
||||
writel(what, toi + SPU_MEMORY_BASE);
|
||||
local_irq_restore(flags);
|
||||
toi++;
|
||||
toi += sizeof(what);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user