diff options
| author | Simon Glass <sjg@chromium.org> | 2013-04-20 08:42:42 +0000 | 
|---|---|---|
| committer | Tom Rini <trini@ti.com> | 2013-05-01 11:17:21 -0400 | 
| commit | d14da91307d8378ea9a99044165e83b79dec67a1 (patch) | |
| tree | bb8239c549cd7b9c8bccc77c9cd5c3c0e7fe6515 | |
| parent | f828bf25fe02f0d7148a9180988ab4d5681b8195 (diff) | |
| download | olio-uboot-2014.01-d14da91307d8378ea9a99044165e83b79dec67a1.tar.xz olio-uboot-2014.01-d14da91307d8378ea9a99044165e83b79dec67a1.zip | |
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>
| -rw-r--r-- | common/cmd_fdt.c | 38 | 
1 files changed, 20 insertions, 18 deletions
| diff --git a/common/cmd_fdt.c b/common/cmd_fdt.c index ac77a08b7..07072f328 100644 --- a/common/cmd_fdt.c +++ b/common/cmd_fdt.c @@ -43,7 +43,7 @@   */  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_print(const char *pathp, char *prop, int depth);  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.  		 */  		if (argc == 2) { -			if (!fdt_valid()) { +			if (!fdt_valid(&working_fdt))  				return 1; -			}  			printf("The address of the fdt is %p\n", working_fdt);  			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);  		set_working_fdt_addr((void *)addr); -		if (!fdt_valid()) { +		if (!fdt_valid(&working_fdt))  			return 1; -		}  		if (argc >= 4) {  			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.  		 */  		working_fdt = (struct fdt_header *)simple_strtoul(argv[2], NULL, 16); -		if (!fdt_valid()) { +		if (!fdt_valid(&working_fdt))  			return 1; -		}  		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");  		return 0;  	} -	err = fdt_check_header(working_fdt); +	err = fdt_check_header(blob);  	if (err == 0)  		return 1;	/* valid */ @@ -611,23 +615,21 @@ static int fdt_valid(void)  		 * Be more informative on bad version.  		 */  		if (err == -FDT_ERR_BADVERSION) { -			if (fdt_version(working_fdt) < +			if (fdt_version(blob) <  			    FDT_FIRST_SUPPORTED_VERSION) {  				printf (" - too old, fdt %d < %d", -					fdt_version(working_fdt), +					fdt_version(blob),  					FDT_FIRST_SUPPORTED_VERSION); -				working_fdt = NULL;  			} -			if (fdt_last_comp_version(working_fdt) > +			if (fdt_last_comp_version(blob) >  			    FDT_LAST_SUPPORTED_VERSION) {  				printf (" - too new, fdt %d > %d", -					fdt_version(working_fdt), +					fdt_version(blob),  					FDT_LAST_SUPPORTED_VERSION); -				working_fdt = NULL;  			} -			return 0;  		}  		printf("\n"); +		*blobp = NULL;  		return 0;  	}  	return 1; |