X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=tools%2Ffdtgrep.c;h=f2b8b71ed743478be80cb91375a7670c7f6e38d9;hb=3aba3fd65490eff5305160e92937dc5592ab9bfb;hp=8d3fef40279a5bdaf6ee48d6137f18be06d3a013;hpb=e6de55ec5bf306df3b3cc8e7a4cc17fa1e78ca6c;p=u-boot diff --git a/tools/fdtgrep.c b/tools/fdtgrep.c index 8d3fef4027..f2b8b71ed7 100644 --- a/tools/fdtgrep.c +++ b/tools/fdtgrep.c @@ -1,23 +1,25 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * Copyright (c) 2013, Google Inc. * Written by Simon Glass * - * SPDX-License-Identifier: GPL-2.0+ - * * Perform a grep of an FDT either displaying the source subset or producing * a new .dtb subset which can be used as required. */ #include #include +#include #include +#include +#include #include #include #include #include -#include <../include/libfdt.h> -#include +#include "fdt_host.h" +#include "libfdt_internal.h" /* Define DEBUG to get some debugging output on stderr */ #ifdef DEBUG @@ -405,7 +407,7 @@ static int display_fdt_by_regions(struct display_info *disp, const void *blob, * The output of this function may or may not be a valid FDT. To ensure it * is, these disp->flags must be set: * - * FDT_REG_SUPERNODES: ensures that subnodes are preceeded by their + * FDT_REG_SUPERNODES: ensures that subnodes are preceded by their * parents. Without this option, fragments of subnode data may be * output without the supernodes above them. This is useful for * hashing but cannot produce a valid FDT. @@ -522,18 +524,21 @@ static int check_type_include(void *priv, int type, const char *data, int size) * return 1 at the first match. For exclusive conditions, we must * check that there are no matches. */ - for (val = disp->value_head; val; val = val->next) { - if (!(type & val->type)) - continue; - match = fdt_stringlist_contains(data, size, val->string); - debug(" - val->type=%x, str='%s', match=%d\n", - val->type, val->string, match); - if (match && val->include) { - debug(" - match inc %s\n", val->string); - return 1; + if (data) { + for (val = disp->value_head; val; val = val->next) { + if (!(type & val->type)) + continue; + match = fdt_stringlist_contains(data, size, + val->string); + debug(" - val->type=%x, str='%s', match=%d\n", + val->type, val->string, match); + if (match && val->include) { + debug(" - match inc %s\n", val->string); + return 1; + } + if (match) + none_match &= ~val->type; } - if (match) - none_match &= ~val->type; } /* @@ -810,9 +815,6 @@ static int do_fdtgrep(struct display_info *disp, const char *filename) disp->flags); if (count < 0) { report_error("fdt_find_regions", count); - if (count == -FDT_ERR_BADLAYOUT) - fprintf(stderr, - "/aliases node must come before all other nodes\n"); return -1; } if (count <= max_regions)