From 7a915a81d23263df634a6ae626e0bc2f6f4b38b5 Mon Sep 17 00:00:00 2001 From: Ian Moffett Date: Wed, 10 Jul 2024 16:21:47 -0400 Subject: kernel/amd64: bus: Fix memory mapping conflicts Signed-off-by: Ian Moffett --- sys/arch/amd64/amd64/bus_machdep.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'sys/arch/amd64') 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 @@ -35,6 +35,14 @@ #include #include +/* + * 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 */ -- cgit v1.2.3