libfdt: sync fdt_wip.c with upstream
cover libfdt: sync fdt_wip.c with upstream
Masahiro Yamada (2):
libfdt: move fdt_find_regions() to fdt_region.c from fdt_wip.c
libfdt: migrate fdt_wip.c to a wrapper of scripts/dtc/libfdt/fdt_wip.c
lib/libfdt/Makefile | 4 +- lib/libfdt/fdt_region.c | 129 +++++++++++++++++++++++++++ lib/libfdt/fdt_wip.c | 229 +----------------------------------------------- tools/Makefile | 4 +- tools/libfdt/fdt_wip.c | 2 + 5 files changed, 137 insertions(+), 231 deletions(-) create mode 100644 tools/libfdt/fdt_wip.c
Signature · 1 line
2.7.4
PATCH 1/2 libfdt: move fdt_find_regions() to fdt_region.c from fdt_wip.c
All the other fdt_*_region() functions are located in fdt_region.c, while only fdt_find_regions() was added to fdt_wip.c, strangely.
Move it to the suitable place.
---
lib/libfdt/fdt_region.c | 129 ++++++++++++++++++++++++++++++++++++++++++++++++ lib/libfdt/fdt_wip.c | 129 ------------------------------------------------ 2 files changed, 129 insertions(+), 129 deletions(-)
lib/libfdt/fdt_region.c +129 -0
@@ -16,6 +16,135 @@#include "libfdt_internal.h" +#define FDT_MAX_DEPTH 32 + +static int str_in_list (const char *str,char *const list[],int count) +{ +int i; + +for (i =0 ; i < count; i++) +if (!strcmp (list[i], str)) +return 1 ; + +return 0 ; +} + +int fdt_find_regions (const void *fdt,char *const inc[],int inc_count, +char *const exc_prop[],int exc_prop_count, +struct fdt_region region[],int max_regions, +char *path,int path_len,int add_string_tab) +{ +int stack[FDT_MAX_DEPTH ] = {0 }; +char *end; +int nextoffset =0 ; +uint32_t tag; +int count =0 ; +int start =-1 ; +int depth =-1 ; +int want =0 ; +int base =fdt_off_dt_struct (fdt); + + end = path; + *end ='\0' ; +do { +const struct fdt_property *prop; +const char *name; +const char *str; +int include =0 ; +int stop_at =0 ; +int offset; +int len; + + offset = nextoffset; + tag =fdt_next_tag (fdt, offset, &nextoffset); + stop_at = nextoffset; + +switch (tag) { +case FDT_PROP : + include = want >=2 ; + stop_at = offset; + prop =fdt_get_property_by_offset (fdt, offset,NULL ); + str =fdt_string (fdt,fdt32_to_cpu (prop->nameoff)); +if (str_in_list (str, exc_prop, exc_prop_count)) + include =0 ; +break ; + +case FDT_NOP : + include = want >=2 ; + stop_at = offset; +break ; + +case FDT_BEGIN_NODE : + depth++; +if (depth ==FDT_MAX_DEPTH ) +return -FDT_ERR_BADSTRUCTURE ; + name =fdt_get_name (fdt, offset, &len); +if (end - path +2 + len >= path_len) +return -FDT_ERR_NOSPACE ; +if (end != path +1 ) + *end++ ='/' ; +strcpy (end, name); + end += len; + stack[depth] = want; +if (want ==1 ) + stop_at = offset; +if (str_in_list (path, inc, inc_count)) + want =2 ; +else if (want) + want--; +else + stop_at = offset; + include = want; +break ; + +case FDT_END_NODE : + include = want; + want = stack[depth--]; +while (end > path && *--end !='/' ) + ; + *end ='\0' ; +break ; + +case FDT_END : + include =1 ; +break ; + } + +if (include && start ==-1 ) { +/* Should we merge with previous? */ +if (count && count <= max_regions && + offset == region[count -1 ].offset + + region[count -1 ].size - base) + start = region[--count].offset - base; +else + start = offset; + } + +if (!include && start !=-1 ) { +if (count < max_regions) { + region[count].offset = base + start; + region[count].size = stop_at - start; + } + count++; + start =-1 ; + } + }while (tag !=FDT_END ); + +if (nextoffset !=fdt_size_dt_struct (fdt)) +return -FDT_ERR_BADLAYOUT ; + +/* Add a region for the END tag and the string table */ +if (count < max_regions) { + region[count].offset = base + start; + region[count].size = nextoffset - start; +if (add_string_tab) + region[count].size +=fdt_size_dt_strings (fdt); + } + count++; + +return count; +} +/** * fdt_add_region() - Add a new region to our list * @info: State information
lib/libfdt/fdt_wip.c +0 -129
132 lines not on this page · raw message
Signature · 1 line
2.7.4
PATCH 1/2 libfdt: move fdt_find_regions() to fdt_region.c from fdt_wip.c
Quoted 11 lines · Masahiro Yamada
All the other fdt_*_region() functions are located in
fdt_region.c, while onlyfdt_find_regions()was added tofdt_wip.c, strangely.Move it to the suitable place.
Signed-off-by Masahiro Yamada <[email protected]>---
lib/libfdt/fdt_region.c | 129 ++++++++++++++++++++++++++++++++++++++++++++++++ lib/libfdt/fdt_wip.c | 129 ------------------------------------------------ 2 files changed, 129 insertions(+), 129 deletions(-)
PATCH 1/2 libfdt: move fdt_find_regions() to fdt_region.c from fdt_wip.c
In reply to Masahiro YamadaQuoted 7 lines · Masahiro Yamada
All the other fdt_*_region() functions are located in
fdt_region.c, while onlyfdt_find_regions()was added tofdt_wip.c, strangely.Move it to the suitable place.
Signed-off-by Masahiro Yamada <[email protected]>Reviewed-by Simon Glass <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171204/a1c7811a/attachment.sig>
PATCH 2/2 libfdt: migrate fdt_wip.c to a wrapper of scripts/dtc/libfdt/fdt_wip.c
In reply to Masahiro YamadaNow, lib/libfdt/fdt_wip.c is the same as scripts/dtc/libfdt/fdt_wip.c
Change the former to a wrapper of the latter.
---
lib/libfdt/Makefile | 4 +- lib/libfdt/fdt_wip.c | 100 +------------------------------------------------ tools/Makefile | 4 +- tools/libfdt/fdt_wip.c | 2 + 4 files changed, 8 insertions(+), 102 deletions(-) create mode 100644 tools/libfdt/fdt_wip.c
lib/libfdt/Makefile +2 -2
@@ -8,6 +8,7 @@ # Use upstream code. obj-y += \ fdt.o \ + fdt_wip.o \ fdt_strerror.o \ fdt_sw.o \ fdt_empty_tree.o \
@@ -19,8 +20,7 @@ obj-$(CONFIG_OF_LIBFDT_OVERLAY) += fdt_overlay.o # TODO: split out the local modifiction. obj-y += \ fdt_ro.o \ - fdt_rw.o \ - fdt_wip.o \ + fdt_rw.o # U-Boot own file obj-y += fdt_region.o
lib/libfdt/fdt_wip.c +2 -98
100 lines not on this page · raw message
tools/Makefile +2 -2
@@ -61,11 +61,11 @@ FIT_SIG_OBJS-$(CONFIG_FIT_SIGNATURE) := common/image-sig.o # The following files are synced with upstream DTC. # Use synced versions from scripts/dtc/libfdt/. -LIBFDT_SRCS_SYNCED := fdt.c fdt_sw.c fdt_strerror.c fdt_empty_tree.c \ +LIBFDT_SRCS_SYNCED := fdt.c fdt_wip.c fdt_sw.c fdt_strerror.c fdt_empty_tree.c \ fdt_addresses.c fdt_overlay.c # The following files are locally modified for U-Boot (unfotunately). # Use U-Boot own versions from lib/libfdt/. -LIBFDT_SRCS_UNSYNCED := fdt_ro.c fdt_wip.c fdt_rw.c fdt_region.c +LIBFDT_SRCS_UNSYNCED := fdt_ro.c fdt_rw.c fdt_region.c LIBFDT_OBJS := $(addprefix libfdt/, $(patsubst %.c, %.o, $(LIBFDT_SRCS_SYNCED))) \ $(addprefix lib/libfdt/, $(patsubst %.c, %.o, $(LIBFDT_SRCS_UNSYNCED)))
tools/libfdt/fdt_wip.c new file +2 -0
@@ -0,0 +1,2 @@ +#include "fdt_host.h" +#include "../scripts/dtc/libfdt/fdt_wip.c"
Signature · 1 line
2.7.4
PATCH 2/2 libfdt: migrate fdt_wip.c to a wrapper of scripts/dtc/libfdt/fdt_wip.c
Quoted 5 lines · Masahiro Yamada
Now,
lib/libfdt/fdt_wip.cis the same asscripts/dtc/libfdt/fdt_wip.cChange the former to a wrapper of the latter.
Signed-off-by Masahiro Yamada <[email protected]>
Quoted 8 lines
---
lib/libfdt/Makefile | 4 +- lib/libfdt/fdt_wip.c | 100 +------------------------------------------------ tools/Makefile | 4 +- tools/libfdt/fdt_wip.c | 2 + 4 files changed, 8 insertions(+), 102 deletions(-) create mode 100644 tools/libfdt/fdt_wip.c
PATCH 2/2 libfdt: migrate fdt_wip.c to a wrapper of scripts/dtc/libfdt/fdt_wip.c
In reply to Masahiro YamadaQuoted 6 lines · Masahiro Yamada
Now,
lib/libfdt/fdt_wip.cis the same asscripts/dtc/libfdt/fdt_wip.cChange the former to a wrapper of the latter.
Signed-off-by Masahiro Yamada <[email protected]>Reviewed-by Simon Glass <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171204/28a6665f/attachment.sig>