summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/talk.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/apps/talk.c b/apps/talk.c
index 13f323f4..910f355 100644
--- a/apps/talk.c
+++ b/apps/talk.c
@@ -207,6 +207,14 @@ static void sync_callback(int handle, bool sync_on)
mutex_lock(&read_buffer_mutex);
else
mutex_unlock(&read_buffer_mutex);
+#if CONFIG_CPU == SH7034
+ /* DMA must not interrupt during buffer move or commit_buffer copies
+ * from inconsistent buflib buffer */
+ if (sync_on)
+ CHCR3 &= ~0x0001; /* disable the DMA (and therefore the interrupt also) */
+ else
+ CHCR3 |= 0x0001; /* re-enable the DMA */
+#endif
}
static ssize_t read_to_handle_ex(int fd, struct buflib_context *ctx, int handle,
@@ -641,7 +649,7 @@ static bool load_voicefile_data(int fd)
/* Use a static buffer to avoid difficulties with buflib during DMA
* (hwcodec)/buffer passing to the voice_thread (swcodec). Clips
* can be played in chunks so the size is not that important */
-static unsigned char commit_buffer[1<<10];
+static unsigned char commit_buffer[2<<10];
static void* commit_transfer(struct queue_entry *qe, size_t *size)
{