On 27.11.24 19:40, Heinrich Schuchardt wrote:
On 27.11.24 18:17, Tom Rini wrote:
From: Simon Glass <[email protected]>

The cache-flush function is incorrect which causes a crash in the
remoteproc tests with arm64.

Fix both problems by using map_sysmem() to convert an address to a
pointer and map_to_sysmem() to convert a pointer to an address.

Also update the image-loader's cache-flushing logic.

Signed-off-by: Simon Glass <[email protected]>
Fixes: 3286d223fd7 ("sandbox: implement invalidate_icache_all()")
Acked-by: Heinrich Schuchardt <[email protected]>

Changes in v6:
- Re-introduce

Changes in v2:
- Drop message about EFI_LOADER

  arch/sandbox/cpu/cache.c              |  8 +++++++-
  drivers/remoteproc/rproc-elf-loader.c | 18 +++++++++++-------
  lib/efi_loader/efi_image_loader.c     |  3 ++-
  3 files changed, 20 insertions(+), 9 deletions(-)
---
  arch/sandbox/cpu/cache.c              |  8 +++++++-
  drivers/remoteproc/rproc-elf-loader.c | 18 +++++++++++-------
  lib/efi_loader/efi_image_loader.c     |  3 ++-
  3 files changed, 20 insertions(+), 9 deletions(-)

diff --git a/arch/sandbox/cpu/cache.c b/arch/sandbox/cpu/cache.c
index c8a5e64214b6..96b3da47e8ed 100644
--- a/arch/sandbox/cpu/cache.c
+++ b/arch/sandbox/cpu/cache.c
@@ -4,12 +4,18 @@
   */

  #include <cpu_func.h>
+#include <mapmem.h>
  #include <asm/state.h>

  void flush_cache(unsigned long addr, unsigned long size)
  {
+    void *ptr;
+
+    ptr = map_sysmem(addr, size);
+
      /* Clang uses (char *) parameters, GCC (void *) */
-    __builtin___clear_cache((void *)addr, (void *)(addr + size));
+    __builtin___clear_cache(map_sysmem(addr, size), ptr + size);
+    unmap_sysmem(ptr);
  }

I missed this part when looking at the EFI change.

Reviewed-by: Heinrich Schuchardt <[email protected]>

Reply via email to