aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRussell King <rmk@dyn-67.arm.linux.org.uk>2007-07-04 16:16:33 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2007-07-04 16:16:33 -0400
commit7b9c7b4d07fd8981193a2c4ecb650566f42d1219 (patch)
treebd80d48a0d024588571b9c9d30d3f8ee8cbe1418
parent1f750a782c0e9593a8d0981ea972f22334980955 (diff)
[ARM] Fix non-page aligned boot time mappings
AT91SAM9260 stopped booting with the recent changes to MM initialisation - it was asking for a non-aligned virtual address which caused loops to be non-terminal. Fix this by rounding virtual addresses down, but remember to include the offset in the length, and round the length up to the following page. This means that asking for a mapping of 4K starting at 2K into a page maps two pages as one would expect. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r--arch/arm/mm/mmu.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
index 02e050ae59f6..3b5e47dc0c97 100644
--- a/arch/arm/mm/mmu.c
+++ b/arch/arm/mm/mmu.c
@@ -527,9 +527,9 @@ void __init create_mapping(struct map_desc *md)
527 return; 527 return;
528 } 528 }
529 529
530 addr = md->virtual; 530 addr = md->virtual & PAGE_MASK;
531 phys = (unsigned long)__pfn_to_phys(md->pfn); 531 phys = (unsigned long)__pfn_to_phys(md->pfn);
532 length = PAGE_ALIGN(md->length); 532 length = PAGE_ALIGN(md->length + (md->virtual & ~PAGE_MASK));
533 533
534 if (type->prot_l1 == 0 && ((addr | phys | length) & ~SECTION_MASK)) { 534 if (type->prot_l1 == 0 && ((addr | phys | length) & ~SECTION_MASK)) {
535 printk(KERN_WARNING "BUG: map for 0x%08lx at 0x%08lx can not " 535 printk(KERN_WARNING "BUG: map for 0x%08lx at 0x%08lx can not "