[PATCH 1/3] addrmap: Support on sandbox

Simon Glass sjg at chromium.org
Wed Jul 13 14:06:58 CEST 2022


Update this feature so that it works on sandbox, using a basic identity
mapping. This allows us to run the 'ut addrmap' test.

Also fix up the test to use the correct macros to access the linker
list, so that the 'ut addrmap' command actually works.

Signed-off-by: Simon Glass <sjg at chromium.org>
---

 board/sandbox/sandbox.c   | 9 +++++++++
 configs/sandbox_defconfig | 1 +
 include/addr_map.h        | 2 ++
 lib/addr_map.c            | 5 +++--
 test/cmd/addrmap.c        | 5 ++---
 5 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/board/sandbox/sandbox.c b/board/sandbox/sandbox.c
index e054f300c4a..ca9a2ca5b17 100644
--- a/board/sandbox/sandbox.c
+++ b/board/sandbox/sandbox.c
@@ -4,6 +4,7 @@
  */
 
 #include <common.h>
+#include <addr_map.h>
 #include <cpu_func.h>
 #include <cros_ec.h>
 #include <dm.h>
@@ -155,3 +156,11 @@ int board_late_init(void)
 	return 0;
 }
 #endif
+
+int init_addr_map(void)
+{
+	if (IS_ENABLED(CONFIG_ADDR_MAP))
+		addrmap_set_entry(0, 0, CONFIG_SYS_SDRAM_SIZE, 0);
+
+	return 0;
+}
diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
index 572cf8edd8b..55c014e1c45 100644
--- a/configs/sandbox_defconfig
+++ b/configs/sandbox_defconfig
@@ -313,6 +313,7 @@ CONFIG_WDT_GPIO=y
 CONFIG_WDT_SANDBOX=y
 CONFIG_FS_CBFS=y
 CONFIG_FS_CRAMFS=y
+CONFIG_ADDR_MAP=y
 CONFIG_CMD_DHRYSTONE=y
 CONFIG_ECDSA=y
 CONFIG_ECDSA_VERIFY=y
diff --git a/include/addr_map.h b/include/addr_map.h
index 55d3a6a165a..db3712b5d30 100644
--- a/include/addr_map.h
+++ b/include/addr_map.h
@@ -14,7 +14,9 @@ struct addrmap {
 	unsigned long vaddr;
 };
 
+#ifdef CONFIG_ADDR_MAP
 extern struct addrmap address_map[CONFIG_SYS_NUM_ADDR_MAP];
+#endif
 
 phys_addr_t addrmap_virt_to_phys(void *vaddr);
 void *addrmap_phys_to_virt(phys_addr_t paddr);
diff --git a/lib/addr_map.c b/lib/addr_map.c
index fb2ef400078..9b3e0a544e4 100644
--- a/lib/addr_map.c
+++ b/lib/addr_map.c
@@ -5,6 +5,7 @@
 
 #include <common.h>
 #include <addr_map.h>
+#include <mapmem.h>
 
 struct addrmap address_map[CONFIG_SYS_NUM_ADDR_MAP];
 
@@ -18,7 +19,7 @@ phys_addr_t addrmap_virt_to_phys(void * vaddr)
 		if (address_map[i].size == 0)
 			continue;
 
-		addr = (u64)((u32)vaddr);
+		addr = map_to_sysmem(vaddr);
 		base = (u64)(address_map[i].vaddr);
 		upper = (u64)(address_map[i].size) + base - 1;
 
@@ -48,7 +49,7 @@ void *addrmap_phys_to_virt(phys_addr_t paddr)
 
 			offset = address_map[i].paddr - address_map[i].vaddr;
 
-			return (void *)(unsigned long)(paddr - offset);
+			return map_sysmem(paddr - offset, 0);
 		}
 	}
 
diff --git a/test/cmd/addrmap.c b/test/cmd/addrmap.c
index fb744485bbf..1eb5955db17 100644
--- a/test/cmd/addrmap.c
+++ b/test/cmd/addrmap.c
@@ -29,9 +29,8 @@ ADDRMAP_TEST(addrmap_test_basic, UT_TESTF_CONSOLE_REC);
 
 int do_ut_addrmap(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 {
-	struct unit_test *tests = ll_entry_start(struct unit_test,
-						 addrmap_test);
-	const int n_ents = ll_entry_count(struct unit_test, addrmap_test);
+	struct unit_test *tests = UNIT_TEST_SUITE_START(addrmap_test);
+	const int n_ents = UNIT_TEST_SUITE_COUNT(addrmap_test);
 
 	return cmd_ut_category("cmd_addrmap", "cmd_addrmap_", tests, n_ents,
 			       argc, argv);
-- 
2.37.0.144.g8ac04bfd2-goog



More information about the U-Boot mailing list