mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-28 23:51:33 +00:00
fdt: Add a parameter to fdt_valid()
At present this only checks working_fdt, but we want to check other FDTs also. So add the FDT to check as a parameter to fdt_valid(). Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
f828bf25fe
commit
d14da91307
1 changed files with 20 additions and 18 deletions
|
@ -43,7 +43,7 @@
|
||||||
*/
|
*/
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
static int fdt_valid(void);
|
static int fdt_valid(struct fdt_header **blobp);
|
||||||
static int fdt_parse_prop(char *const*newval, int count, char *data, int *len);
|
static int fdt_parse_prop(char *const*newval, int count, char *data, int *len);
|
||||||
static int fdt_print(const char *pathp, char *prop, int depth);
|
static int fdt_print(const char *pathp, char *prop, int depth);
|
||||||
static int is_printable_string(const void *data, int len);
|
static int is_printable_string(const void *data, int len);
|
||||||
|
@ -104,9 +104,8 @@ static int do_fdt(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
* Set the address [and length] of the fdt.
|
* Set the address [and length] of the fdt.
|
||||||
*/
|
*/
|
||||||
if (argc == 2) {
|
if (argc == 2) {
|
||||||
if (!fdt_valid()) {
|
if (!fdt_valid(&working_fdt))
|
||||||
return 1;
|
return 1;
|
||||||
}
|
|
||||||
printf("The address of the fdt is %p\n", working_fdt);
|
printf("The address of the fdt is %p\n", working_fdt);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -114,9 +113,8 @@ static int do_fdt(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
addr = simple_strtoul(argv[2], NULL, 16);
|
addr = simple_strtoul(argv[2], NULL, 16);
|
||||||
set_working_fdt_addr((void *)addr);
|
set_working_fdt_addr((void *)addr);
|
||||||
|
|
||||||
if (!fdt_valid()) {
|
if (!fdt_valid(&working_fdt))
|
||||||
return 1;
|
return 1;
|
||||||
}
|
|
||||||
|
|
||||||
if (argc >= 4) {
|
if (argc >= 4) {
|
||||||
int len;
|
int len;
|
||||||
|
@ -167,9 +165,8 @@ static int do_fdt(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
* Set the address and length of the fdt.
|
* Set the address and length of the fdt.
|
||||||
*/
|
*/
|
||||||
working_fdt = (struct fdt_header *)simple_strtoul(argv[2], NULL, 16);
|
working_fdt = (struct fdt_header *)simple_strtoul(argv[2], NULL, 16);
|
||||||
if (!fdt_valid()) {
|
if (!fdt_valid(&working_fdt))
|
||||||
return 1;
|
return 1;
|
||||||
}
|
|
||||||
|
|
||||||
newaddr = (struct fdt_header *)simple_strtoul(argv[3],NULL,16);
|
newaddr = (struct fdt_header *)simple_strtoul(argv[3],NULL,16);
|
||||||
|
|
||||||
|
@ -592,16 +589,23 @@ static int do_fdt(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
static int fdt_valid(void)
|
/**
|
||||||
|
* 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)
|
||||||
|
*/
|
||||||
|
static int fdt_valid(struct fdt_header **blobp)
|
||||||
{
|
{
|
||||||
int err;
|
const void *blob = *blobp;
|
||||||
|
int err;
|
||||||
|
|
||||||
if (working_fdt == NULL) {
|
if (blob == NULL) {
|
||||||
printf ("The address of the fdt is invalid (NULL).\n");
|
printf ("The address of the fdt is invalid (NULL).\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = fdt_check_header(working_fdt);
|
err = fdt_check_header(blob);
|
||||||
if (err == 0)
|
if (err == 0)
|
||||||
return 1; /* valid */
|
return 1; /* valid */
|
||||||
|
|
||||||
|
@ -611,23 +615,21 @@ static int fdt_valid(void)
|
||||||
* Be more informative on bad version.
|
* Be more informative on bad version.
|
||||||
*/
|
*/
|
||||||
if (err == -FDT_ERR_BADVERSION) {
|
if (err == -FDT_ERR_BADVERSION) {
|
||||||
if (fdt_version(working_fdt) <
|
if (fdt_version(blob) <
|
||||||
FDT_FIRST_SUPPORTED_VERSION) {
|
FDT_FIRST_SUPPORTED_VERSION) {
|
||||||
printf (" - too old, fdt %d < %d",
|
printf (" - too old, fdt %d < %d",
|
||||||
fdt_version(working_fdt),
|
fdt_version(blob),
|
||||||
FDT_FIRST_SUPPORTED_VERSION);
|
FDT_FIRST_SUPPORTED_VERSION);
|
||||||
working_fdt = NULL;
|
|
||||||
}
|
}
|
||||||
if (fdt_last_comp_version(working_fdt) >
|
if (fdt_last_comp_version(blob) >
|
||||||
FDT_LAST_SUPPORTED_VERSION) {
|
FDT_LAST_SUPPORTED_VERSION) {
|
||||||
printf (" - too new, fdt %d > %d",
|
printf (" - too new, fdt %d > %d",
|
||||||
fdt_version(working_fdt),
|
fdt_version(blob),
|
||||||
FDT_LAST_SUPPORTED_VERSION);
|
FDT_LAST_SUPPORTED_VERSION);
|
||||||
working_fdt = NULL;
|
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
*blobp = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
|
Loading…
Reference in a new issue