diff options
-rw-r--r-- | common/cmd_fdt.c | 2 | ||||
-rw-r--r-- | common/fdt_support.c | 3 | ||||
-rw-r--r-- | drivers/spi/fsl_dspi.c | 4 | ||||
-rw-r--r-- | include/fdt_support.h | 26 | ||||
-rw-r--r-- | include/libfdt.h | 2 | ||||
-rw-r--r-- | lib/fdtdec.c | 4 | ||||
-rw-r--r-- | lib/libfdt/fdt_ro.c | 4 |
7 files changed, 37 insertions, 8 deletions
diff --git a/common/cmd_fdt.c b/common/cmd_fdt.c index 682b6553958..4c18962d853 100644 --- a/common/cmd_fdt.c +++ b/common/cmd_fdt.c @@ -45,7 +45,7 @@ void set_working_fdt_addr(ulong addr) buf = map_sysmem(addr, 0); working_fdt = buf; - setenv_ulong("fdtaddr", addr); + setenv_hex("fdtaddr", addr); } /* diff --git a/common/fdt_support.c b/common/fdt_support.c index 10648b5a4a8..f86365e8f0d 100644 --- a/common/fdt_support.c +++ b/common/fdt_support.c @@ -454,6 +454,9 @@ int fdt_fixup_memory_banks(void *blob, u64 start[], u64 size[], int banks) return err; } + if (!banks) + return 0; + len = fdt_pack_reg(blob, tmp, start, size, banks); err = fdt_setprop(blob, nodeoffset, "reg", tmp, len); diff --git a/drivers/spi/fsl_dspi.c b/drivers/spi/fsl_dspi.c index 6476f913c8d..792853192ed 100644 --- a/drivers/spi/fsl_dspi.c +++ b/drivers/spi/fsl_dspi.c @@ -664,8 +664,8 @@ static int fsl_dspi_ofdata_to_platdata(struct udevice *bus) plat->speed_hz = fdtdec_get_int(blob, node, "spi-max-frequency", FSL_DSPI_DEFAULT_SCK_FREQ); - debug("DSPI: regs=0x%x, max-frequency=%d, endianess=%s, num-cs=%d\n", - plat->regs_addr, plat->speed_hz, + debug("DSPI: regs=0x%llx, max-frequency=%d, endianess=%s, num-cs=%d\n", + (u64)plat->regs_addr, plat->speed_hz, plat->flags & DSPI_FLAG_REGMAP_ENDIAN_BIG ? "be" : "le", plat->num_chipselect); diff --git a/include/fdt_support.h b/include/fdt_support.h index 0edc4fa5b14..296add01f34 100644 --- a/include/fdt_support.h +++ b/include/fdt_support.h @@ -67,8 +67,34 @@ void do_fixup_by_compat(void *fdt, const char *compat, const char *prop, const void *val, int len, int create); void do_fixup_by_compat_u32(void *fdt, const char *compat, const char *prop, u32 val, int create); +/** + * Setup the memory node in the DT. Creates one if none was existing before. + * Calls fdt_fixup_memory_banks() to populate a single reg pair covering the + * whole memory. + * + * @param blob FDT blob to update + * @param start Begin of DRAM mapping in physical memory + * @param size Size of the single memory bank + * @return 0 if ok, or -1 or -FDT_ERR_... on error + */ int fdt_fixup_memory(void *blob, u64 start, u64 size); + +/** + * Fill the DT memory node with multiple memory banks. + * Creates the node if none was existing before. + * If banks is 0, it will not touch the existing reg property. This allows + * boards to not mess with the existing DT setup, which may have been + * filled in properly before. + * + * @param blob FDT blob to update + * @param start Array of size <banks> to hold the start addresses. + * @param size Array of size <banks> to hold the size of each region. + * @param banks Number of memory banks to create. If 0, the reg + * property will be left untouched. + * @return 0 if ok, or -1 or -FDT_ERR_... on error + */ int fdt_fixup_memory_banks(void *blob, u64 start[], u64 size[], int banks); + void fdt_fixup_ethernet(void *fdt); int fdt_find_and_setprop(void *fdt, const char *node, const char *prop, const void *val, int len, int create); diff --git a/include/libfdt.h b/include/libfdt.h index f3cbb637be4..421d64fd8b6 100644 --- a/include/libfdt.h +++ b/include/libfdt.h @@ -915,7 +915,7 @@ int fdt_get_string_index(const void *fdt, int node, const char *property, int index, const char **output); /** - * fdt_get_string() - obtain the string at a given index in a string list + * fdt_get_string() - obtain the first string in a string list * @fdt: pointer to the device tree blob * @node: offset of the node * @property: name of the property containing the string list diff --git a/lib/fdtdec.c b/lib/fdtdec.c index 9877849f99b..9c6b3619da2 100644 --- a/lib/fdtdec.c +++ b/lib/fdtdec.c @@ -102,8 +102,8 @@ fdt_addr_t fdtdec_get_addr_size(const void *blob, int node, size = (fdt_size_t *)((char *)cell + sizeof(fdt_addr_t)); *sizep = fdt_size_to_cpu(*size); - debug("addr=%08lx, size=%08x\n", - (ulong)addr, *sizep); + debug("addr=%08lx, size=%llx\n", + (ulong)addr, (u64)*sizep); } else { debug("%08lx\n", (ulong)addr); } diff --git a/lib/libfdt/fdt_ro.c b/lib/libfdt/fdt_ro.c index 44fc0aa900d..7b0777b67eb 100644 --- a/lib/libfdt/fdt_ro.c +++ b/lib/libfdt/fdt_ro.c @@ -517,7 +517,7 @@ int fdt_count_strings(const void *fdt, int node, const char *property) list = fdt_getprop(fdt, node, property, &length); if (!list) - return -length; + return length; for (i = 0; i < length; i++) { int len = strlen(list); @@ -577,7 +577,7 @@ int fdt_get_string_index(const void *fdt, int node, const char *property, index--; } - return FDT_ERR_NOTFOUND; + return -FDT_ERR_NOTFOUND; } int fdt_get_string(const void *fdt, int node, const char *property, |