On 15/11/2024 15:03, Ahmad Fatoum wrote: > On 15.11.24 14:52, Ahmad Fatoum wrote: >> Reserved memory is unmapped strongly ordered in barebox and calling > argh, `is mapped' is what's meant of course. > >> 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 I guess the "which are do not expect" is a typo also. >> 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@xxxxxxxxx> >> Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> >> --- >> 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; >