From: Florian Fuchs <fuchsfl@gmail.com>
To: Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>,
linux-sound@vger.kernel.org
Cc: Kees Cook <kees@kernel.org>,
Markus Elfring <elfring@users.sourceforge.net>,
Adrian McMenamin <adrianmcmenamin@gmail.com>,
Florian Fuchs <fuchsfl@gmail.com>,
linux-kernel@vger.kernel.org
Subject: [PATCH] ALSA: sh: aica: Fix spu_memset() stride
Date: Thu, 22 Oct 2026 18:32:41 +0200 [thread overview]
Message-ID: <20261022163241.2504922-1-fuchsfl@gmail.com> (raw)
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: 198de43d758c ("[ALSA] Add ALSA support for the SEGA Dreamcast PCM device")
Signed-off-by: Florian Fuchs <fuchsfl@gmail.com>
---
The patch has been tested on the hardware and sound is also still
working well, the boot is faster by about 4s due to less unaligned
fixups.
Previously: 7.9s to boot:
[ 2.900000] AICA AICA: ALSA Driver for Yamaha AICA Super Intelligent Sound Processor
..
[ 7.872000] ALSA device list:
[ 7.876000] #1: Yamaha AICA Super Intelligent Sound Processor for SEGA Dreamcast
After: 3.8s to boot:
[ 2.892000] AICA AICA: ALSA Driver for Yamaha AICA Super Intelligent Sound Processor
..
[ 3.796000] ALSA device list:
[ 3.800000] #1: Yamaha AICA Super Intelligent Sound Processor for SEGA Dreamcast
sound/sh/aica.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sound/sh/aica.c b/sound/sh/aica.c
index 078fc7fc08f9..04f80c8c89c0 100644
--- a/sound/sh/aica.c
+++ b/sound/sh/aica.c
@@ -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);
}
}
base-commit: c1b1c25de0d6008c3fcabc942fba635ea3693c3f
--
2.43.0
next reply other threads:[~2026-10-22 16:46 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-22 16:32 Florian Fuchs [this message]
2026-10-22 20:48 ` [PATCH] ALSA: sh: aica: Fix spu_memset() stride Adrian McMenamin
2026-10-23 13:41 ` Takashi Iwai
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261022163241.2504922-1-fuchsfl@gmail.com \
--to=fuchsfl@gmail.com \
--cc=adrianmcmenamin@gmail.com \
--cc=elfring@users.sourceforge.net \
--cc=kees@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=perex@perex.cz \
--cc=tiwai@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.