lib: fdt: Split fdtdec_setup_mem_size_base()

Split fdtdec_setup_mem_size_base() into fdtdec_setup_mem_size_base_fdt(),
which allows the caller to pass custom blob into the function and the
original fdtdec_setup_mem_size_base(), which uses the gd->fdt_blob. This
is useful when configuring the DRAM properties from a FDT blob fragment
passed in by the firmware.

Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
Cc: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
Cc: Simon Glass <sjg@chromium.org>
Cc: Tom Rini <trini@konsulko.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Marek Vasut 2019-03-05 04:25:54 +01:00 committed by Marek Vasut
parent d574c19b89
commit 3ebe09d09a
2 changed files with 28 additions and 3 deletions

View File

@ -917,6 +917,26 @@ struct display_timing {
int fdtdec_decode_display_timing(const void *blob, int node, int index,
struct display_timing *config);
/**
* fdtdec_setup_mem_size_base_fdt() - decode and setup gd->ram_size and
* gd->ram_start
*
* Decode the /memory 'reg' property to determine the size and start of the
* first memory bank, populate the global data with the size and start of the
* first bank of memory.
*
* This function should be called from a boards dram_init(). This helper
* function allows for boards to query the device tree for DRAM size and start
* address instead of hard coding the value in the case where the memory size
* and start address cannot be detected automatically.
*
* @param blob FDT blob
*
* @return 0 if OK, -EINVAL if the /memory node or reg property is missing or
* invalid
*/
int fdtdec_setup_mem_size_base_fdt(const void *blob);
/**
* fdtdec_setup_mem_size_base() - decode and setup gd->ram_size and
* gd->ram_start

View File

@ -1088,18 +1088,18 @@ int fdtdec_decode_display_timing(const void *blob, int parent, int index,
return ret;
}
int fdtdec_setup_mem_size_base(void)
int fdtdec_setup_mem_size_base_fdt(const void *blob)
{
int ret, mem;
struct fdt_resource res;
mem = fdt_path_offset(gd->fdt_blob, "/memory");
mem = fdt_path_offset(blob, "/memory");
if (mem < 0) {
debug("%s: Missing /memory node\n", __func__);
return -EINVAL;
}
ret = fdt_get_resource(gd->fdt_blob, mem, "reg", 0, &res);
ret = fdt_get_resource(blob, mem, "reg", 0, &res);
if (ret != 0) {
debug("%s: Unable to decode first memory bank\n", __func__);
return -EINVAL;
@ -1113,6 +1113,11 @@ int fdtdec_setup_mem_size_base(void)
return 0;
}
int fdtdec_setup_mem_size_base(void)
{
return fdtdec_setup_mem_size_base_fdt(gd->fdt_blob);
}
#if defined(CONFIG_NR_DRAM_BANKS)
static int get_next_memory_node(const void *blob, int mem)