diff options
author | Kory Maincent <kory.maincent@bootlin.com> | 2021-05-04 20:31:21 +0300 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2021-05-13 14:19:34 +0300 |
commit | bbdbcaf59dc518f26897f162f3512a8a596c5d97 (patch) | |
tree | a619741aed18c76714d07364c5aaeaf3e937a4e0 /common | |
parent | ea184cbff99ea1d82dcf94c95afe054e95da5069 (diff) | |
download | u-boot-bbdbcaf59dc518f26897f162f3512a8a596c5d97.tar.xz |
fdt_support: move fdt_valid from cmd_fdt.c to fdt_support.c
Move the fdt_valid function to fdt_support.
This changes allow to be able to test the validity of a devicetree in
other c files.
Update code syntax.
Signed-off-by: Kory Maincent <kory.maincent@bootlin.com>
Reviewed-by: Tom Rini <trini@konsulko.com>
Reviewed-by: Maxime Ripard <maxime@cerno.tech>
Diffstat (limited to 'common')
-rw-r--r-- | common/fdt_support.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/common/fdt_support.c b/common/fdt_support.c index 695d8e134a..a9a32df1e7 100644 --- a/common/fdt_support.c +++ b/common/fdt_support.c @@ -1904,3 +1904,49 @@ int fdt_overlay_apply_verbose(void *fdt, void *fdto) return err; } #endif + +/** + * fdt_valid() - Check if an FDT is valid. If not, change it to NULL + * + * @blobp: Pointer to FDT pointer + * @return 1 if OK, 0 if bad (in which case *blobp is set to NULL) + */ +int fdt_valid(struct fdt_header **blobp) +{ + const void *blob = *blobp; + int err; + + if (!blob) { + printf("The address of the fdt is invalid (NULL).\n"); + return 0; + } + + err = fdt_check_header(blob); + if (err == 0) + return 1; /* valid */ + + if (err < 0) { + printf("libfdt fdt_check_header(): %s", fdt_strerror(err)); + /* + * Be more informative on bad version. + */ + if (err == -FDT_ERR_BADVERSION) { + if (fdt_version(blob) < + FDT_FIRST_SUPPORTED_VERSION) { + printf(" - too old, fdt %d < %d", + fdt_version(blob), + FDT_FIRST_SUPPORTED_VERSION); + } + if (fdt_last_comp_version(blob) > + FDT_LAST_SUPPORTED_VERSION) { + printf(" - too new, fdt %d > %d", + fdt_version(blob), + FDT_LAST_SUPPORTED_VERSION); + } + } + printf("\n"); + *blobp = NULL; + return 0; + } + return 1; +} |