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:
parent
d574c19b89
commit
3ebe09d09a
2 changed files with 28 additions and 3 deletions
|
@ -917,6 +917,26 @@ struct display_timing {
|
||||||
int fdtdec_decode_display_timing(const void *blob, int node, int index,
|
int fdtdec_decode_display_timing(const void *blob, int node, int index,
|
||||||
struct display_timing *config);
|
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
|
* fdtdec_setup_mem_size_base() - decode and setup gd->ram_size and
|
||||||
* gd->ram_start
|
* gd->ram_start
|
||||||
|
|
11
lib/fdtdec.c
11
lib/fdtdec.c
|
@ -1088,18 +1088,18 @@ int fdtdec_decode_display_timing(const void *blob, int parent, int index,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int fdtdec_setup_mem_size_base(void)
|
int fdtdec_setup_mem_size_base_fdt(const void *blob)
|
||||||
{
|
{
|
||||||
int ret, mem;
|
int ret, mem;
|
||||||
struct fdt_resource res;
|
struct fdt_resource res;
|
||||||
|
|
||||||
mem = fdt_path_offset(gd->fdt_blob, "/memory");
|
mem = fdt_path_offset(blob, "/memory");
|
||||||
if (mem < 0) {
|
if (mem < 0) {
|
||||||
debug("%s: Missing /memory node\n", __func__);
|
debug("%s: Missing /memory node\n", __func__);
|
||||||
return -EINVAL;
|
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) {
|
if (ret != 0) {
|
||||||
debug("%s: Unable to decode first memory bank\n", __func__);
|
debug("%s: Unable to decode first memory bank\n", __func__);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -1113,6 +1113,11 @@ int fdtdec_setup_mem_size_base(void)
|
||||||
return 0;
|
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)
|
#if defined(CONFIG_NR_DRAM_BANKS)
|
||||||
|
|
||||||
static int get_next_memory_node(const void *blob, int mem)
|
static int get_next_memory_node(const void *blob, int mem)
|
||||||
|
|
Loading…
Reference in a new issue