openrisc: Consolidate setup to use memblock instead of bootmem
authorStafford Horne <shorne@gmail.com>
Sun, 3 Apr 2016 10:14:49 +0000 (19:14 +0900)
committerStafford Horne <shorne@gmail.com>
Mon, 12 Dec 2016 14:10:00 +0000 (23:10 +0900)
Clearing out one todo item. Use the memblock boot time memory
which is the current standard.

Tested-by: Guenter Roeck <linux@roeck-us.net>
Acked-by: Jonas <jonas@southpole.se>
Signed-off-by: Stafford Horne <shorne@gmail.com>
arch/openrisc/Kconfig
arch/openrisc/TODO.openrisc
arch/openrisc/include/asm/pgalloc.h
arch/openrisc/kernel/setup.c
arch/openrisc/mm/init.c
arch/openrisc/mm/ioremap.c

index 691e1af22b990d4db2d63d293f6fd9ccdd219e4d..8d22015fde3e053dc95b5f82aaa94d6c8ee3d2ce 100644 (file)
@@ -26,6 +26,7 @@ config OPENRISC
        select HAVE_DEBUG_STACKOVERFLOW
        select OR1K_PIC
        select CPU_NO_EFFICIENT_FFS if !OPENRISC_HAVE_INST_FF1
+       select NO_BOOTMEM
 
 config MMU
        def_bool y
index acfeef9c58e38c2667db93424fc5c282726c8f43..0eb04c8240f95fb6715703a439280d6c358e077e 100644 (file)
@@ -5,9 +5,6 @@ that are due for investigation shortly, i.e. our TODO list:
 
 -- Implement the rest of the DMA API... dma_map_sg, etc.
 
--- Consolidate usage of memblock and bootmem... move everything over to
-   memblock.
-
 -- Finish the renaming cleanup... there are references to or32 in the code
    which was an older name for the architecture.  The name we've settled on is
    or1k and this change is slowly trickling through the stack.  For the time
index 87eebd18508953733ddc5cd9ed1f387b7abfb88d..3e1a46615120a566adbfff65b5aab8e860bf3809 100644 (file)
@@ -23,7 +23,6 @@
 #include <linux/threads.h>
 #include <linux/mm.h>
 #include <linux/memblock.h>
-#include <linux/bootmem.h>
 
 extern int mem_init_done;
 
index d2f78cf79b4bdc9dd501ce6916572a8a80418a5f..6329d7a493ff0d4c9f1369f2b75242ec1c1a3d3c 100644 (file)
 
 #include "vmlinux.h"
 
-static unsigned long __init setup_memory(void)
+static void __init setup_memory(void)
 {
-       unsigned long bootmap_size;
        unsigned long ram_start_pfn;
-       unsigned long free_ram_start_pfn;
        unsigned long ram_end_pfn;
        phys_addr_t memory_start, memory_end;
        struct memblock_region *region;
 
        memory_end = memory_start = 0;
 
-       /* Find main memory where is the kernel */
+       /* Find main memory where is the kernel, we assume its the only one */
        for_each_memblock(memory, region) {
                memory_start = region->base;
                memory_end = region->base + region->size;
@@ -74,10 +72,11 @@ static unsigned long __init setup_memory(void)
        }
 
        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 = ram_start_pfn;
+       max_low_pfn = ram_end_pfn;
        max_pfn = ram_end_pfn;
 
        /*
@@ -85,22 +84,13 @@ static unsigned long __init setup_memory(void)
         *
         * This makes the memory from the end of the kernel to the end of
         * RAM usable.
-        * init_bootmem sets the global values min_low_pfn, max_low_pfn.
         */
-       bootmap_size = init_bootmem(free_ram_start_pfn,
-                                   ram_end_pfn - ram_start_pfn);
-       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);
-
-       for_each_memblock(reserved, region) {
-               printk(KERN_INFO "Reserved - 0x%08x-0x%08x\n",
-                      (u32) region->base, (u32) region->size);
-               reserve_bootmem(region->base, region->size, BOOTMEM_DEFAULT);
-       }
+       memblock_reserve(__pa(_stext), _end - _stext);
+
+       early_init_fdt_reserve_self();
+       early_init_fdt_scan_reserved_mem();
 
-       return ram_end_pfn;
+       memblock_dump_all();
 }
 
 struct cpuinfo cpuinfo;
@@ -272,8 +262,6 @@ void calibrate_delay(void)
 
 void __init setup_arch(char **cmdline_p)
 {
-       unsigned long max_low_pfn;
-
        unflatten_and_copy_device_tree();
 
        setup_cpuinfo();
@@ -294,8 +282,8 @@ void __init setup_arch(char **cmdline_p)
        initrd_below_start_ok = 1;
 #endif
 
-       /* setup bootmem allocator */
-       max_low_pfn = setup_memory();
+       /* setup memblock allocator */
+       setup_memory();
 
        /* paging_init() sets up the MMU and marks all pages as reserved */
        paging_init();
index b782ce9ccad93b0aa902ef68795c3cac0e930fea..f67d82b9d22fb10ee719882c2389dc7a40ca2843 100644 (file)
@@ -106,7 +106,7 @@ static void __init map_ram(void)
                        }
 
                        /* Alloc one page for holding PTE's... */
-                       pte = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE);
+                       pte = (pte_t *) __va(memblock_alloc(PAGE_SIZE, PAGE_SIZE));
                        set_pmd(pme, __pmd(_KERNPG_TABLE + __pa(pte)));
 
                        /* Fill the newly allocated page with PTE'S */
index fa60b81aee3ea50c60133b200b54c12f6273393d..8705a46218f9273263a0678db7647b1925edf4b7 100644 (file)
@@ -124,11 +124,7 @@ pte_t __ref *pte_alloc_one_kernel(struct mm_struct *mm,
        if (likely(mem_init_done)) {
                pte = (pte_t *) __get_free_page(GFP_KERNEL);
        } else {
-               pte = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE);
-#if 0
-               /* FIXME: use memblock... */
                pte = (pte_t *) __va(memblock_alloc(PAGE_SIZE, PAGE_SIZE));
-#endif
        }
 
        if (pte)