[PATCH v2 6/8] powerpc: introduce early_get_first_memblock_info

Scott Wood scottwood at freescale.com
Sat Jul 27 10:18:01 EST 2013


On 07/04/2013 07:54:12 AM, Kevin Hao wrote:
> For a relocatable kernel since it can be loaded at any place, there
> is no any relation between the kernel start addr and the  
> memstart_addr.
> So we can't calculate the memstart_addr from kernel start addr. And
> also we can't wait to do the relocation after we get the real
> memstart_addr from device tree because it is so late. So introduce
> a new function we can use to get the first memblock address and size
> in a very early stage (before machine_init).
> 
> Signed-off-by: Kevin Hao <haokexin at gmail.com>
> ---
> A new patch in v2.
> 
>  arch/powerpc/kernel/prom.c | 24 ++++++++++++++++++++++++
>  include/linux/of_fdt.h     |  1 +
>  2 files changed, 25 insertions(+)
> 
> diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
> index eb23ac9..9a69d2d 100644
> --- a/arch/powerpc/kernel/prom.c
> +++ b/arch/powerpc/kernel/prom.c
> @@ -753,6 +753,30 @@ void __init early_init_devtree(void *params)
>  	DBG(" <- early_init_devtree()\n");
>  }
> 
> +#ifdef CONFIG_RELOCATABLE
> +/*
> + * This function run before early_init_devtree, so we have to init
> + * initial_boot_params. Since early_init_dt_scan_memory_ppc will be
> + * executed again in early_init_devtree, we have to reinitialize the
> + * memblock data before return.
> + */
> +void __init early_get_first_memblock_info(void *params, phys_addr_t  
> *size)
> +{
> +	/* Setup flat device-tree pointer */
> +	initial_boot_params = params;
> +
> +	/* Scan memory nodes and rebuild MEMBLOCKs */
> +	of_scan_flat_dt(early_init_dt_scan_root, NULL);
> +	of_scan_flat_dt(early_init_dt_scan_memory_ppc, NULL);
> +
> +	if (size)
> +		*size = first_memblock_size;
> +
> +	/* Undo what early_init_dt_scan_memory_ppc does to memblock */
> +	memblock_reinit();
> +}
> +#endif

Wouldn't it be simpler to set a flag so that  
early_init_dt_add_memory_arch() doesn't mess with memblocks on the  
first pass?

-Scott


More information about the Linuxppc-dev mailing list