mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH master] remoteproc: use I/O memory variants of memcpy/memset
@ 2024-11-15 13:52 Ahmad Fatoum
  2024-11-15 14:03 ` Ahmad Fatoum
  2024-11-25  9:38 ` Sascha Hauer
  0 siblings, 2 replies; 5+ messages in thread
From: Ahmad Fatoum @ 2024-11-15 13:52 UTC (permalink / raw)
  To: barebox; +Cc: Stefano Manni, Ahmad Fatoum

Reserved memory is unmapped strongly ordered in barebox and calling
normal optimized memcpy on may trigger an abort due to misalignment.

Fix this by using the slower I/O variants of memcpy/memset, which are
do not expect bufferable memory like the optimized variants and thus
don't cause unaligned accesses.

Fixes: 66e233b8c04b ("ARM: mmu64: map reserved regions uncached")
Reported-by: Stefano Manni <stefano.manni@gmail.com>
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
---
 drivers/remoteproc/remoteproc_core.c       | 2 +-
 drivers/remoteproc/remoteproc_elf_loader.c | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c
index 7590c1f9305b..17159316ee31 100644
--- a/drivers/remoteproc/remoteproc_core.c
+++ b/drivers/remoteproc/remoteproc_core.c
@@ -75,7 +75,7 @@ static int rproc_firmware_write_buf(struct firmware_handler *fh, const void *buf
 		return -ENOMEM;
 	}
 
-	memcpy(rproc->fw_buf + rproc->fw_buf_ofs, buf, size);
+	memcpy_toio(rproc->fw_buf + rproc->fw_buf_ofs, buf, size);
 	rproc->fw_buf_ofs += size;
 
 	return 0;
diff --git a/drivers/remoteproc/remoteproc_elf_loader.c b/drivers/remoteproc/remoteproc_elf_loader.c
index f3bf93df2c4a..740ce8765165 100644
--- a/drivers/remoteproc/remoteproc_elf_loader.c
+++ b/drivers/remoteproc/remoteproc_elf_loader.c
@@ -70,7 +70,7 @@ int rproc_elf_load_segments(struct rproc *rproc, const struct firmware *fw)
 
 		/* put the segment where the remote processor expects it */
 		if (phdr->p_filesz)
-			memcpy(ptr, elf_data + phdr->p_offset, filesz);
+			memcpy_toio(ptr, elf_data + phdr->p_offset, filesz);
 
 		/*
 		 * Zero out remaining memory for this segment.
@@ -80,7 +80,7 @@ int rproc_elf_load_segments(struct rproc *rproc, const struct firmware *fw)
 		 * this.
 		 */
 		if (memsz > filesz)
-			memset(ptr + filesz, 0, memsz - filesz);
+			memset_io(ptr + filesz, 0, memsz - filesz);
 	}
 
 	return ret;
-- 
2.39.5




^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2024-11-25 10:18 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-11-15 13:52 [PATCH master] remoteproc: use I/O memory variants of memcpy/memset Ahmad Fatoum
2024-11-15 14:03 ` Ahmad Fatoum
2024-11-15 14:14   ` Yann Sionneau
2024-11-15 14:34   ` Stefano Manni
2024-11-25  9:38 ` Sascha Hauer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox