summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/arch/aarch64/aarch64/pmap.c12
-rw-r--r--sys/arch/amd64/amd64/pmap.c6
-rw-r--r--sys/include/vm/pmap.h5
-rw-r--r--sys/vm/vm_init.c1
4 files changed, 24 insertions, 0 deletions
diff --git a/sys/arch/aarch64/aarch64/pmap.c b/sys/arch/aarch64/aarch64/pmap.c
index 7e93959..d8f298b 100644
--- a/sys/arch/aarch64/aarch64/pmap.c
+++ b/sys/arch/aarch64/aarch64/pmap.c
@@ -87,3 +87,15 @@ pmap_set_cache(struct vas vas, vaddr_t va, int type)
/* TODO: STUB */
return 0;
}
+
+int
+pmap_init(void)
+{
+ uint64_t mair;
+
+ mair = MT_ATTR(MT_NORMAL, MEM_NORMAL) |
+ MT_ATTR(MT_NORMAL_UC, MEM_NORMAL_UC) |
+ MT_ATTR(MT_DEVICE, MEM_DEV_NGNRNE);
+ mair_el1_write(mair);
+ return 0;
+}
diff --git a/sys/arch/amd64/amd64/pmap.c b/sys/arch/amd64/amd64/pmap.c
index 8193838..325ce51 100644
--- a/sys/arch/amd64/amd64/pmap.c
+++ b/sys/arch/amd64/amd64/pmap.c
@@ -344,3 +344,9 @@ pmap_mark_clean(struct vas vas, vaddr_t va)
__invlpg(va);
}
}
+
+int
+pmap_init(void)
+{
+ return 0;
+}
diff --git a/sys/include/vm/pmap.h b/sys/include/vm/pmap.h
index e1f3f89..e0549d4 100644
--- a/sys/include/vm/pmap.h
+++ b/sys/include/vm/pmap.h
@@ -92,4 +92,9 @@ void pmap_mark_clean(struct vas vas, vaddr_t va);
*/
int pmap_set_cache(struct vas vas, vaddr_t va, int type);
+/*
+ * Machine dependent pmap init code.
+ */
+int pmap_init(void);
+
#endif /* !_VM_PMAP_H_ */
diff --git a/sys/vm/vm_init.c b/sys/vm/vm_init.c
index 2846a69..7518838 100644
--- a/sys/vm/vm_init.c
+++ b/sys/vm/vm_init.c
@@ -56,6 +56,7 @@ vm_init(void)
void *pool;
vm_physmem_init();
+ pmap_init();
g_kvas = pmap_read_vas();
vm_ctx.dynalloc_pool_sz = DYNALLOC_POOL_SZ;