xref: /openbmc/u-boot/tools/fit_info.c (revision e8f80a5a)
1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
26bf4ca07SHeiko Schocher /*
36bf4ca07SHeiko Schocher  * (C) Copyright 2014
46bf4ca07SHeiko Schocher  * DENX Software Engineering
56bf4ca07SHeiko Schocher  * Heiko Schocher <hs@denx.de>
66bf4ca07SHeiko Schocher  *
76bf4ca07SHeiko Schocher  * fit_info: print the offset and the len of a property from
86bf4ca07SHeiko Schocher  *	     node in a fit file.
96bf4ca07SHeiko Schocher  *
106bf4ca07SHeiko Schocher  * Based on:
116bf4ca07SHeiko Schocher  * (C) Copyright 2008 Semihalf
126bf4ca07SHeiko Schocher  *
136bf4ca07SHeiko Schocher  * (C) Copyright 2000-2004
146bf4ca07SHeiko Schocher  * DENX Software Engineering
156bf4ca07SHeiko Schocher  * Wolfgang Denk, wd@denx.de
166bf4ca07SHeiko Schocher  *
176bf4ca07SHeiko Schocher  * Updated-by: Prafulla Wadaskar <prafulla@marvell.com>
186bf4ca07SHeiko Schocher  *		FIT image specific code abstracted from mkimage.c
196bf4ca07SHeiko Schocher  *		some functions added to address abstraction
206bf4ca07SHeiko Schocher  *
216bf4ca07SHeiko Schocher  * All rights reserved.
226bf4ca07SHeiko Schocher  */
236bf4ca07SHeiko Schocher 
246bf4ca07SHeiko Schocher #include "mkimage.h"
256bf4ca07SHeiko Schocher #include "fit_common.h"
266bf4ca07SHeiko Schocher #include <image.h>
276bf4ca07SHeiko Schocher #include <u-boot/crc.h>
286bf4ca07SHeiko Schocher 
usage(char * cmdname)296bf4ca07SHeiko Schocher void usage(char *cmdname)
306bf4ca07SHeiko Schocher {
316bf4ca07SHeiko Schocher 	fprintf(stderr, "Usage: %s -f fit file -n node -p property\n"
326bf4ca07SHeiko Schocher 			 "          -f ==> set fit file which is used'\n"
336bf4ca07SHeiko Schocher 			 "          -n ==> set node name'\n"
346bf4ca07SHeiko Schocher 			 "          -p ==> set property name'\n",
356bf4ca07SHeiko Schocher 		cmdname);
366bf4ca07SHeiko Schocher 	exit(EXIT_FAILURE);
376bf4ca07SHeiko Schocher }
386bf4ca07SHeiko Schocher 
main(int argc,char ** argv)396bf4ca07SHeiko Schocher int main(int argc, char **argv)
406bf4ca07SHeiko Schocher {
416bf4ca07SHeiko Schocher 	int ffd = -1;
426bf4ca07SHeiko Schocher 	struct stat fsbuf;
436bf4ca07SHeiko Schocher 	void *fit_blob;
446bf4ca07SHeiko Schocher 	int len;
456bf4ca07SHeiko Schocher 	int  nodeoffset;	/* node offset from libfdt */
466bf4ca07SHeiko Schocher 	const void *nodep;	/* property node pointer */
476bf4ca07SHeiko Schocher 	char *fdtfile = NULL;
486bf4ca07SHeiko Schocher 	char *nodename = NULL;
496bf4ca07SHeiko Schocher 	char *propertyname = NULL;
50686dca0fSHeiko Schocher 	char cmdname[256];
516bf4ca07SHeiko Schocher 	int c;
526bf4ca07SHeiko Schocher 
53686dca0fSHeiko Schocher 	strncpy(cmdname, *argv, sizeof(cmdname) - 1);
54686dca0fSHeiko Schocher 	cmdname[sizeof(cmdname) - 1] = '\0';
556bf4ca07SHeiko Schocher 	while ((c = getopt(argc, argv, "f:n:p:")) != -1)
566bf4ca07SHeiko Schocher 		switch (c) {
576bf4ca07SHeiko Schocher 		case 'f':
586bf4ca07SHeiko Schocher 			fdtfile = optarg;
596bf4ca07SHeiko Schocher 			break;
606bf4ca07SHeiko Schocher 		case 'n':
616bf4ca07SHeiko Schocher 			nodename = optarg;
626bf4ca07SHeiko Schocher 			break;
636bf4ca07SHeiko Schocher 		case 'p':
646bf4ca07SHeiko Schocher 			propertyname = optarg;
656bf4ca07SHeiko Schocher 			break;
666bf4ca07SHeiko Schocher 		default:
676bf4ca07SHeiko Schocher 			usage(cmdname);
686bf4ca07SHeiko Schocher 			break;
696bf4ca07SHeiko Schocher 		}
706bf4ca07SHeiko Schocher 
71ba923cabSSimon Glass 	if (!fdtfile) {
72ba923cabSSimon Glass 		fprintf(stderr, "%s: Missing fdt file\n", *argv);
73ba923cabSSimon Glass 		usage(*argv);
74ba923cabSSimon Glass 	}
75ba923cabSSimon Glass 	if (!nodename) {
76ba923cabSSimon Glass 		fprintf(stderr, "%s: Missing node name\n", *argv);
77ba923cabSSimon Glass 		usage(*argv);
78ba923cabSSimon Glass 	}
79ba923cabSSimon Glass 	if (!propertyname) {
80ba923cabSSimon Glass 		fprintf(stderr, "%s: Missing property name\n", *argv);
81ba923cabSSimon Glass 		usage(*argv);
82ba923cabSSimon Glass 	}
83a9468115SSimon Glass 	ffd = mmap_fdt(cmdname, fdtfile, 0, &fit_blob, &fsbuf, false);
846bf4ca07SHeiko Schocher 
856bf4ca07SHeiko Schocher 	if (ffd < 0) {
866bf4ca07SHeiko Schocher 		printf("Could not open %s\n", fdtfile);
876bf4ca07SHeiko Schocher 		exit(EXIT_FAILURE);
886bf4ca07SHeiko Schocher 	}
896bf4ca07SHeiko Schocher 
906bf4ca07SHeiko Schocher 	nodeoffset = fdt_path_offset(fit_blob, nodename);
916bf4ca07SHeiko Schocher 	if (nodeoffset < 0) {
926bf4ca07SHeiko Schocher 		printf("%s not found.", nodename);
936bf4ca07SHeiko Schocher 		exit(EXIT_FAILURE);
946bf4ca07SHeiko Schocher 	}
956bf4ca07SHeiko Schocher 	nodep = fdt_getprop(fit_blob, nodeoffset, propertyname, &len);
966bf4ca07SHeiko Schocher 	if (len == 0) {
976bf4ca07SHeiko Schocher 		printf("len == 0 %s\n", propertyname);
986bf4ca07SHeiko Schocher 		exit(EXIT_FAILURE);
996bf4ca07SHeiko Schocher 	}
1006bf4ca07SHeiko Schocher 
1016bf4ca07SHeiko Schocher 	printf("NAME: %s\n", fit_get_name(fit_blob, nodeoffset, NULL));
1026bf4ca07SHeiko Schocher 	printf("LEN: %d\n", len);
1036bf4ca07SHeiko Schocher 	printf("OFF: %d\n", (int)(nodep - fit_blob));
1046bf4ca07SHeiko Schocher 	(void) munmap((void *)fit_blob, fsbuf.st_size);
1056bf4ca07SHeiko Schocher 
1066bf4ca07SHeiko Schocher 	close(ffd);
1076bf4ca07SHeiko Schocher 	exit(EXIT_SUCCESS);
1086bf4ca07SHeiko Schocher }
109