diff options
Diffstat (limited to 'device_tree.c')
-rw-r--r-- | device_tree.c | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/device_tree.c b/device_tree.c index 4fc078159b..e213323dc2 100644 --- a/device_tree.c +++ b/device_tree.c @@ -25,34 +25,35 @@ #include <libfdt.h> -void *load_device_tree(const char *filename_path, void *load_addr) +void *load_device_tree(const char *filename_path, int *sizep) { - int dt_file_size; + int dt_size; int dt_file_load_size; int new_dt_size; int ret; - void *dt_file = NULL; - void *fdt; + void *fdt = NULL; - dt_file_size = get_image_size(filename_path); - if (dt_file_size < 0) { + *sizep = 0; + dt_size = get_image_size(filename_path); + if (dt_size < 0) { printf("Unable to get size of device tree file '%s'\n", filename_path); goto fail; } + /* Expand to 2x size to give enough room for manipulation. */ + dt_size *= 2; /* First allocate space in qemu for device tree */ - dt_file = qemu_mallocz(dt_file_size); + fdt = qemu_mallocz(dt_size); - dt_file_load_size = load_image(filename_path, dt_file); - - /* Second we place new copy of 2x size in guest memory - * This give us enough room for manipulation. - */ - new_dt_size = dt_file_size * 2; + dt_file_load_size = load_image(filename_path, fdt); + if (dt_file_load_size < 0) { + printf("Unable to open device tree file '%s'\n", + filename_path); + goto fail; + } - fdt = load_addr; - ret = fdt_open_into(dt_file, fdt, new_dt_size); + ret = fdt_open_into(fdt, fdt, dt_size); if (ret) { printf("Unable to copy device tree in memory\n"); goto fail; @@ -64,12 +65,11 @@ void *load_device_tree(const char *filename_path, void *load_addr) filename_path); goto fail; } - /* free qemu memory with old device tree */ - qemu_free(dt_file); + *sizep = dt_size; return fdt; fail: - qemu_free(dt_file); + qemu_free(fdt); return NULL; } |