From 09d343e941e039afa19b5ead777780e1f799cab4 Mon Sep 17 00:00:00 2001 From: Marc Kleine-Budde Date: Tue, 3 Mar 2015 13:14:47 +0100 Subject: sandbox: add support to pass dtb to barebox Signed-off-by: Marc Kleine-Budde Signed-off-by: Sascha Hauer --- arch/sandbox/os/common.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) (limited to 'arch/sandbox/os') diff --git a/arch/sandbox/os/common.c b/arch/sandbox/os/common.c index 65dc4a1ab7..cfb261acf2 100644 --- a/arch/sandbox/os/common.c +++ b/arch/sandbox/os/common.c @@ -265,6 +265,42 @@ err_out: return -1; } +static int add_dtb(const char *file) +{ + struct stat s; + void *dtb = NULL; + int fd; + + fd = open(file, O_RDONLY); + if (fd < 0) { + perror("open"); + goto err_out; + } + + if (fstat(fd, &s)) { + perror("fstat"); + goto err_out; + } + + dtb = mmap(NULL, s.st_size, PROT_READ, MAP_SHARED, fd, 0); + if (dtb == MAP_FAILED) { + perror("mmap"); + goto err_out; + } + + if (barebox_register_dtb(dtb)) + goto err_out; + + return 0; + + err_out: + if (dtb) + munmap(dtb, s.st_size); + if (fd > 0) + close(fd); + return -1; +} + static void print_usage(const char*); static struct option long_options[] = { @@ -272,6 +308,7 @@ static struct option long_options[] = { {"malloc", 1, 0, 'm'}, {"image", 1, 0, 'i'}, {"env", 1, 0, 'e'}, + {"dtb", 1, 0, 'd'}, {"stdout", 1, 0, 'O'}, {"stdin", 1, 0, 'I'}, {"xres", 1, 0, 'x'}, @@ -279,7 +316,7 @@ static struct option long_options[] = { {0, 0, 0, 0}, }; -static const char optstring[] = "hm:i:e:O:I:x:y:"; +static const char optstring[] = "hm:i:e:d:O:I:x:y:"; int main(int argc, char *argv[]) { @@ -308,6 +345,13 @@ int main(int argc, char *argv[]) break; case 'e': break; + case 'd': + ret = add_dtb(optarg); + if (ret) { + printf("Failed to load dtb: '%s'\n", optarg); + exit(1); + } + break; case 'O': fd = open(optarg, O_WRONLY); if (fd < 0) { @@ -408,6 +452,7 @@ static void print_usage(const char *prgname) " and thus are used as the default environment.\n" " An empty file generated with dd will do to get started\n" " with an empty environment.\n" +" -d, --dtb= Map a device tree binary blob (dtb) into barebox.\n" " -O, --stdout= Register a file as a console capable of doing stdout.\n" " can be a regular file or a FIFO.\n" " -I, --stdin= Register a file as a console capable of doing stdin.\n" -- cgit v1.2.3