lkml.org 
[lkml]   [2012]   [Jul]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 06/36] fdt: Add generic dt_memblock_reserve() function
    Date
    This function reserves initial_boot_params total size and reserve map.

    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Grant Likely <grant.likely@secretlab.ca>
    ---
    drivers/of/fdt.c | 28 ++++++++++++++++++++++++++++
    include/linux/of_fdt.h | 1 +
    2 files changed, 29 insertions(+), 0 deletions(-)

    diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
    index 91a375f..7e9b5b0 100644
    --- a/drivers/of/fdt.c
    +++ b/drivers/of/fdt.c
    @@ -17,6 +17,7 @@
    #include <linux/string.h>
    #include <linux/errno.h>
    #include <linux/slab.h>
    +#include <linux/memblock.h>

    #include <asm/setup.h> /* for COMMAND_LINE_SIZE */
    #ifdef CONFIG_PPC
    @@ -436,6 +437,33 @@ int __initdata dt_root_size_cells;

    struct boot_param_header *initial_boot_params;

    +void __init dt_memblock_reserve(void)
    +{
    + u64 *reserve_map, base, size;
    +
    + if (!initial_boot_params)
    + return;
    +
    + /* Reserve the dtb region */
    + memblock_reserve(virt_to_phys(initial_boot_params),
    + be32_to_cpu(initial_boot_params->totalsize));
    +
    + /*
    + * Process the reserve map. This will probably overlap the initrd
    + * and dtb locations which are already reserved, but overlapping
    + * doesn't hurt anything
    + */
    + reserve_map = ((void*)initial_boot_params) +
    + be32_to_cpu(initial_boot_params->off_mem_rsvmap);
    + while (1) {
    + base = be64_to_cpup(reserve_map++);
    + size = be64_to_cpup(reserve_map++);
    + if (!size)
    + break;
    + memblock_reserve(base, size);
    + }
    +}
    +
    #ifdef CONFIG_OF_EARLY_FLATTREE

    /**
    diff --git a/include/linux/of_fdt.h b/include/linux/of_fdt.h
    index ed136ad..bf4fe1e 100644
    --- a/include/linux/of_fdt.h
    +++ b/include/linux/of_fdt.h
    @@ -117,6 +117,7 @@ extern int early_init_dt_scan_root(unsigned long node, const char *uname,
    /* Other Prototypes */
    extern void unflatten_device_tree(void);
    extern void early_init_devtree(void *);
    +extern void dt_memblock_reserve(void);
    #else /* CONFIG_OF_FLATTREE */
    static inline void unflatten_device_tree(void) {}
    #endif /* CONFIG_OF_FLATTREE */


    \
     
     \ /
      Last update: 2012-07-06 23:41    [W:2.745 / U:0.176 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site