h8300: switch to NO_BOOTMEM
authorRob Herring <robh@kernel.org>
Fri, 16 Mar 2018 21:33:06 +0000 (16:33 -0500)
committerYoshinori Sato <ysato@users.sourceforge.jp>
Wed, 22 Aug 2018 10:14:18 +0000 (19:14 +0900)
Commit 0fa1c579349f ("of/fdt: use memblock_virt_alloc for early alloc")
inadvertently switched the DT unflattening allocations from memblock to
bootmem which doesn't work because the unflattening happens before
bootmem is initialized. Swapping the order of bootmem init and
unflattening could also fix this, but removing bootmem is desired. So
enable NO_BOOTMEM on h8300 like other architectures have done.

Fixes: 0fa1c579349f ("of/fdt: use memblock_virt_alloc for early alloc")
Cc: Yoshinori Sato <ysato@users.sourceforge.jp>
Cc: uclinux-h8-devel@lists.sourceforge.jp
Signed-off-by: Rob Herring <robh@kernel.org>
Signed-off-by: Yoshinori Sato <ysato@users.sourceforge.jp>
arch/h8300/Kconfig
arch/h8300/kernel/setup.c

index 091d6d04b5e505f9d46c703cf08f4664b67ad453..efc602634064032ab5c85ce57dbfeeda9c2d5d3e 100644 (file)
@@ -16,6 +16,7 @@ config H8300
        select OF_IRQ
        select OF_EARLY_FLATTREE
        select HAVE_MEMBLOCK
+       select NO_BOOTMEM
        select TIMER_OF
        select H8300_TMR8
        select HAVE_KERNEL_GZIP
index a4d0470c10a9ff98356ca33ff68152e072865c74..33ed980e7aead0bf8d5cf38983b6650020fba93e 100644 (file)
@@ -71,10 +71,6 @@ void __init h8300_fdt_init(void *fdt, char *bootargs)
 
 static void __init bootmem_init(void)
 {
-       int bootmap_size;
-       unsigned long ram_start_pfn;
-       unsigned long free_ram_start_pfn;
-       unsigned long ram_end_pfn;
        struct memblock_region *region;
 
        memory_end = memory_start = 0;
@@ -88,33 +84,17 @@ static void __init bootmem_init(void)
        if (!memory_end)
                panic("No memory!");
 
-       ram_start_pfn = PFN_UP(memory_start);
-       /* free_ram_start_pfn is first page after kernel */
-       free_ram_start_pfn = PFN_UP(__pa(_end));
-       ram_end_pfn = PFN_DOWN(memblock_end_of_DRAM());
+       /* setup bootmem globals (we use no_bootmem, but mm still depends on this) */
+       min_low_pfn = PFN_UP(memory_start);
+       max_low_pfn = PFN_DOWN(memblock_end_of_DRAM());
+       max_pfn = max_low_pfn;
 
-       max_pfn = ram_end_pfn;
+       memblock_reserve(__pa(_stext), _end - _stext);
 
-       /*
-        * give all the memory to the bootmap allocator,  tell it to put the
-        * boot mem_map at the start of memory
-        */
-       bootmap_size = init_bootmem_node(NODE_DATA(0),
-                                        free_ram_start_pfn,
-                                        0,
-                                        ram_end_pfn);
-       /*
-        * free the usable memory,  we have to make sure we do not free
-        * the bootmem bitmap so we then reserve it after freeing it :-)
-        */
-       free_bootmem(PFN_PHYS(free_ram_start_pfn),
-                    (ram_end_pfn - free_ram_start_pfn) << PAGE_SHIFT);
-       reserve_bootmem(PFN_PHYS(free_ram_start_pfn), bootmap_size,
-                       BOOTMEM_DEFAULT);
+       early_init_fdt_reserve_self();
+       early_init_fdt_scan_reserved_mem();
 
-       for_each_memblock(reserved, region) {
-               reserve_bootmem(region->base, region->size, BOOTMEM_DEFAULT);
-       }
+       memblock_dump_all();
 }
 
 void __init setup_arch(char **cmdline_p)