powerpc: Cleanup memblock usage
* early_init_devtree(): Total memory size is aligned to PAGE_SIZE; however, alignment isn't enforced if memory_limit is explicitly specified. Simplify the logic and always apply PAGE_SIZE alignment. * MMU_init(): memblock regions is truncated by directly modifying memblock.memory.cnt. This is incomplete (reserved array is not truncated) and unnecessarily low level hindering further memblock improvments. Use memblock_enforce_memory_limit() instead. * wii_memory_fixups(): Unnecessarily low level direct manipulation of memblock regions. The same result can be achieved using properly abstracted operations. Reimplement using memblock API. Signed-off-by: Tejun Heo <tj@kernel.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Yinghai Lu <yinghai@kernel.org>
This commit is contained in:
@@ -79,23 +79,19 @@ void __init wii_memory_fixups(void)
|
||||
BUG_ON(memblock.memory.cnt != 2);
|
||||
BUG_ON(!page_aligned(p[0].base) || !page_aligned(p[1].base));
|
||||
|
||||
p[0].size = _ALIGN_DOWN(p[0].size, PAGE_SIZE);
|
||||
p[1].size = _ALIGN_DOWN(p[1].size, PAGE_SIZE);
|
||||
/* trim unaligned tail */
|
||||
memblock_remove(ALIGN(p[1].base + p[1].size, PAGE_SIZE),
|
||||
(phys_addr_t)ULLONG_MAX);
|
||||
|
||||
wii_hole_start = p[0].base + p[0].size;
|
||||
/* determine hole, add & reserve them */
|
||||
wii_hole_start = ALIGN(p[0].base + p[0].size, PAGE_SIZE);
|
||||
wii_hole_size = p[1].base - wii_hole_start;
|
||||
|
||||
pr_info("MEM1: <%08llx %08llx>\n", p[0].base, p[0].size);
|
||||
pr_info("HOLE: <%08lx %08lx>\n", wii_hole_start, wii_hole_size);
|
||||
pr_info("MEM2: <%08llx %08llx>\n", p[1].base, p[1].size);
|
||||
|
||||
p[0].size += wii_hole_size + p[1].size;
|
||||
|
||||
memblock.memory.cnt = 1;
|
||||
memblock_add(wii_hole_start, wii_hole_size);
|
||||
memblock_reserve(wii_hole_start, wii_hole_size);
|
||||
memblock_analyze();
|
||||
|
||||
/* reserve the hole */
|
||||
memblock_reserve(wii_hole_start, wii_hole_size);
|
||||
BUG_ON(memblock.memory.cnt != 1);
|
||||
__memblock_dump_all();
|
||||
|
||||
/* allow ioremapping the address space in the hole */
|
||||
__allow_ioremap_reserved = 1;
|
||||
|
Reference in New Issue
Block a user