summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2022-07-13 06:06:58 -0600
committerSimon Glass <sjg@chromium.org>2022-07-26 02:30:56 -0600
commit281996110c1f42b5476e43040798cb38169b6119 (patch)
tree01b20167e46f50bead23e6d34bc5335ff58356bc
parent109dbdf042e2a034edd8ed7b711143c522cb1465 (diff)
addrmap: Support on sandbox
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@chromium.org>
-rw-r--r--board/sandbox/sandbox.c9
-rw-r--r--configs/sandbox_defconfig1
-rw-r--r--include/addr_map.h2
-rw-r--r--lib/addr_map.c5
-rw-r--r--test/cmd/addrmap.c5
5 files changed, 17 insertions, 5 deletions
diff --git a/board/sandbox/sandbox.c b/board/sandbox/sandbox.c
index e054f300c4..ca9a2ca5b1 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 d50ce91cd1..eba7bcbb48 100644
--- a/configs/sandbox_defconfig
+++ b/configs/sandbox_defconfig
@@ -315,6 +315,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 55d3a6a165..db3712b5d3 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 fb2ef40007..9b3e0a544e 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 fb744485bb..1eb5955db1 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);