Commit 7b9c7b4d authored by Russell King's avatar Russell King Committed by Russell King

[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: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 1f750a78
...@@ -527,9 +527,9 @@ void __init create_mapping(struct map_desc *md) ...@@ -527,9 +527,9 @@ void __init create_mapping(struct map_desc *md)
return; return;
} }
addr = md->virtual; addr = md->virtual & PAGE_MASK;
phys = (unsigned long)__pfn_to_phys(md->pfn); phys = (unsigned long)__pfn_to_phys(md->pfn);
length = PAGE_ALIGN(md->length); length = PAGE_ALIGN(md->length + (md->virtual & ~PAGE_MASK));
if (type->prot_l1 == 0 && ((addr | phys | length) & ~SECTION_MASK)) { if (type->prot_l1 == 0 && ((addr | phys | length) & ~SECTION_MASK)) {
printk(KERN_WARNING "BUG: map for 0x%08lx at 0x%08lx can not " printk(KERN_WARNING "BUG: map for 0x%08lx at 0x%08lx can not "
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment