Prior to this patch is fdtdec_setup_memory_banksize() incorrectly ignoring the "status" field. This patch fixes that by testing the status with fdtdec_get_is_enabled() before using a memory node.
Signed-off-by: Jens Wiklander <jens.wiklan...@linaro.org> --- lib/fdtdec.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/lib/fdtdec.c b/lib/fdtdec.c index f4e8dbf699a8..14005d71507c 100644 --- a/lib/fdtdec.c +++ b/lib/fdtdec.c @@ -1179,13 +1179,25 @@ int fdtdec_setup_memory_size(void) } #if defined(CONFIG_NR_DRAM_BANKS) + +static int get_next_memory_node(const void *blob, int startoffset) +{ + int mem = -1; + + do { + mem = fdt_node_offset_by_prop_value(gd->fdt_blob, mem, + "device_type", "memory", 7); + } while (!fdtdec_get_is_enabled(blob, mem)); + + return mem; +} + int fdtdec_setup_memory_banksize(void) { int bank, ret, mem, reg = 0; struct fdt_resource res; - mem = fdt_node_offset_by_prop_value(gd->fdt_blob, -1, "device_type", - "memory", 7); + mem = get_next_memory_node(gd->fdt_blob, -1); if (mem < 0) { debug("%s: Missing /memory node\n", __func__); return -EINVAL; @@ -1195,9 +1207,7 @@ int fdtdec_setup_memory_banksize(void) ret = fdt_get_resource(gd->fdt_blob, mem, "reg", reg++, &res); if (ret == -FDT_ERR_NOTFOUND) { reg = 0; - mem = fdt_node_offset_by_prop_value(gd->fdt_blob, mem, - "device_type", - "memory", 7); + mem = get_next_memory_node(gd->fdt_blob, mem); if (mem == -FDT_ERR_NOTFOUND) break; -- 2.17.1 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot