[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>
This commit is contained in:
parent
1f750a782c
commit
7b9c7b4d07
1 changed files with 2 additions and 2 deletions
|
@ -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 "
|
||||||
|
|
Loading…
Add table
Reference in a new issue