summaryrefslogtreecommitdiffstats
path: root/tools/mkimage.c
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2016-02-22 22:55:52 -0700
committerTom Rini <trini@konsulko.com>2016-03-14 19:18:29 -0400
commitfb4cce0f98ea0784130ff544d7c85d0841bea2e6 (patch)
treef02ef53bf63df97448e0831b68d4581dad44839f /tools/mkimage.c
parent8e35bb07eb68e524804f2ef53dd18c7cec0b06fc (diff)
downloadtalos-obmc-uboot-fb4cce0f98ea0784130ff544d7c85d0841bea2e6.tar.gz
talos-obmc-uboot-fb4cce0f98ea0784130ff544d7c85d0841bea2e6.zip
mkimage: Support adding device tree files to a FIT
To make the auto-FIT feature useful we need to be able to provide a list of device tree files on the command line for mkimage to add into the FIT. Add support for this feature. So far there is no support for hashing or verified boot using this method. For those cases, a .its file must still be provided. Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'tools/mkimage.c')
-rw-r--r--tools/mkimage.c38
1 files changed, 36 insertions, 2 deletions
diff --git a/tools/mkimage.c b/tools/mkimage.c
index 7add86c13d..22fab1d535 100644
--- a/tools/mkimage.c
+++ b/tools/mkimage.c
@@ -85,7 +85,8 @@ static void usage(const char *msg)
" -x ==> set XIP (execute in place)\n",
params.cmdname);
fprintf(stderr,
- " %s [-D dtc_options] [-f fit-image.its|-f auto|-F] fit-image\n",
+ " %s [-D dtc_options] [-f fit-image.its|-f auto|-F] [-b <dtb_list>] fit-image\n"
+ " <dtb_list> is used with -f auto, and is a space-separated list of .dtb files\n",
params.cmdname);
fprintf(stderr,
" -D => set all options for device tree compiler\n"
@@ -109,6 +110,24 @@ static void usage(const char *msg)
exit(EXIT_FAILURE);
}
+static int add_content(int type, const char *fname)
+{
+ struct content_info *cont;
+
+ cont = calloc(1, sizeof(*cont));
+ if (!cont)
+ return -1;
+ cont->type = type;
+ cont->fname = fname;
+ if (params.content_tail)
+ params.content_tail->next = cont;
+ else
+ params.content_head = cont;
+ params.content_tail = cont;
+
+ return 0;
+}
+
static void process_args(int argc, char **argv)
{
char *ptr;
@@ -119,7 +138,7 @@ static void process_args(int argc, char **argv)
expecting = IH_TYPE_COUNT; /* Unknown */
while ((opt = getopt(argc, argv,
- "-a:A:cC:d:D:e:f:Fk:K:ln:O:rR:sT:vVx")) != -1) {
+ "-a:A:bcC:d:D:e:f:Fk:K:ln:O:rR:sT:vVx")) != -1) {
switch (opt) {
case 'a':
params.addr = strtoull(optarg, &ptr, 16);
@@ -134,6 +153,9 @@ static void process_args(int argc, char **argv)
if (params.arch < 0)
usage("Invalid architecture");
break;
+ case 'b':
+ expecting = IH_TYPE_FLATDT;
+ break;
case 'c':
params.comment = optarg;
break;
@@ -222,6 +244,18 @@ static void process_args(int argc, char **argv)
if (expecting == type || optind == argc) {
params.imagefile = optarg;
expecting = IH_TYPE_INVALID;
+ } else if (expecting == IH_TYPE_INVALID) {
+ fprintf(stderr,
+ "%s: Unknown content type: use -b before device tree files",
+ params.cmdname);
+ exit(EXIT_FAILURE);
+ } else {
+ if (add_content(expecting, optarg)) {
+ fprintf(stderr,
+ "%s: Out of memory adding content '%s'",
+ params.cmdname, optarg);
+ exit(EXIT_FAILURE);
+ }
}
break;
default:
OpenPOWER on IntegriCloud