aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/arch/amd64/amd64/bus_machdep.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/sys/arch/amd64/amd64/bus_machdep.c b/sys/arch/amd64/amd64/bus_machdep.c
index 5c0111d..3d4b302 100644
--- a/sys/arch/amd64/amd64/bus_machdep.c
+++ b/sys/arch/amd64/amd64/bus_machdep.c
@@ -36,6 +36,14 @@
#include <vm/pmap.h>
/*
+ * Hyra assumes that the bootloader uses PDE[256] for some
+ * higher half mappings. To avoid conflicts with those mappings,
+ * this offset is used to start device memory at PDE[257]. This
+ * will give us more than enough space.
+ */
+#define MMIO_OFFSET (VM_HIGHER_HALF + 0x8000000000)
+
+/*
* Map a physical device address into the kernel address
* space.
*
@@ -58,7 +66,7 @@ bus_map(bus_addr_t addr, size_t size, int flags, void **vap)
}
size = ALIGN_UP(size, DEFAULT_PAGESIZE);
- va = (vaddr_t)PHYS_TO_VIRT(addr);
+ va = addr + MMIO_OFFSET;
vas = pmap_read_vas();
/* Now map it to the higher half */