From 2ce0d69a7e6cba33d0022ec274076177707091c8 Mon Sep 17 00:00:00 2001 From: "Ithamar R. Adema" Date: Sat, 25 Oct 2014 09:43:15 -0700 Subject: [PATCH] ARM: fix bootloader's mmu_map_physical_memory size When the address is not page aligned, not only adjust the address to start mapping, but also take the "overflow" on the last page into account. This makes the bootloader boot again ;) --- src/system/boot/arch/arm/arch_mmu.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/system/boot/arch/arm/arch_mmu.cpp b/src/system/boot/arch/arm/arch_mmu.cpp index 715ffc6598..c26893c100 100644 --- a/src/system/boot/arch/arm/arch_mmu.cpp +++ b/src/system/boot/arch/arm/arch_mmu.cpp @@ -383,10 +383,13 @@ map_page(addr_t virtualAddress, addr_t physicalAddress, uint32 flags) extern "C" addr_t mmu_map_physical_memory(addr_t physicalAddress, size_t size, uint32 flags) { + TRACE(("mmu_map_physical_memory(phAddr=%lx, %lx, %lu)\n", physicalAddress, size, flags)); addr_t address = sNextVirtualAddress; addr_t pageOffset = physicalAddress & (B_PAGE_SIZE - 1); physicalAddress -= pageOffset; + if (pageOffset) + size += B_PAGE_SIZE; for (addr_t offset = 0; offset < size; offset += B_PAGE_SIZE) { map_page(get_next_virtual_page(B_PAGE_SIZE), physicalAddress + offset,