#include "config.h"
#include "qemu-common.h"
+#include "qemu/error-report.h"
#include "sysemu/device_tree.h"
#include "sysemu/sysemu.h"
#include "hw/loader.h"
}
ret = fdt_open_into(fdt, fdt, *sizep);
if (ret) {
- fprintf(stderr, "Unable to copy device tree in memory\n");
+ error_report("Unable to copy device tree in memory");
exit(1);
}
return fdt;
fail:
- fprintf(stderr, "%s Couldn't create dt: %s\n", __func__, fdt_strerror(ret));
+ error_report("%s Couldn't create dt: %s", __func__, fdt_strerror(ret));
exit(1);
}
*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);
+ error_report("Unable to get size of device tree file '%s'",
+ filename_path);
goto fail;
}
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);
+ error_report("Unable to open device tree file '%s'",
+ filename_path);
goto fail;
}
ret = fdt_open_into(fdt, fdt, dt_size);
if (ret) {
- printf("Unable to copy device tree in memory\n");
+ error_report("Unable to copy device tree in memory");
goto fail;
}
/* Check sanity of device tree */
if (fdt_check_header(fdt)) {
- printf ("Device tree file loaded into memory is invalid: %s\n",
- filename_path);
+ error_report("Device tree file loaded into memory is invalid: %s",
+ filename_path);
goto fail;
}
*sizep = dt_size;
offset = fdt_path_offset(fdt, node_path);
if (offset < 0) {
- fprintf(stderr, "%s Couldn't find node %s: %s\n", __func__, node_path,
- fdt_strerror(offset));
+ error_report("%s Couldn't find node %s: %s", __func__, node_path,
+ fdt_strerror(offset));
exit(1);
}
r = fdt_setprop(fdt, findnode_nofail(fdt, node_path), property, val, size);
if (r < 0) {
- fprintf(stderr, "%s: Couldn't set %s/%s: %s\n", __func__, node_path,
- property, fdt_strerror(r));
+ error_report("%s: Couldn't set %s/%s: %s", __func__, node_path,
+ property, fdt_strerror(r));
exit(1);
}
r = fdt_setprop_cell(fdt, findnode_nofail(fdt, node_path), property, val);
if (r < 0) {
- fprintf(stderr, "%s: Couldn't set %s/%s = %#08x: %s\n", __func__,
- node_path, property, val, fdt_strerror(r));
+ error_report("%s: Couldn't set %s/%s = %#08x: %s", __func__,
+ node_path, property, val, fdt_strerror(r));
exit(1);
}
r = fdt_setprop_string(fdt, findnode_nofail(fdt, node_path), property, string);
if (r < 0) {
- fprintf(stderr, "%s: Couldn't set %s/%s = %s: %s\n", __func__,
- node_path, property, string, fdt_strerror(r));
+ error_report("%s: Couldn't set %s/%s = %s: %s", __func__,
+ node_path, property, string, fdt_strerror(r));
exit(1);
}
}
r = fdt_getprop(fdt, findnode_nofail(fdt, node_path), property, lenp);
if (!r) {
- fprintf(stderr, "%s: Couldn't get %s/%s: %s\n", __func__,
- node_path, property, fdt_strerror(*lenp));
+ error_report("%s: Couldn't get %s/%s: %s", __func__,
+ node_path, property, fdt_strerror(*lenp));
exit(1);
}
return r;
int len;
const uint32_t *p = qemu_fdt_getprop(fdt, node_path, property, &len);
if (len != 4) {
- fprintf(stderr, "%s: %s/%s not 4 bytes long (not a cell?)\n",
- __func__, node_path, property);
+ error_report("%s: %s/%s not 4 bytes long (not a cell?)",
+ __func__, node_path, property);
exit(1);
}
return be32_to_cpu(*p);
r = fdt_get_phandle(fdt, findnode_nofail(fdt, path));
if (r == 0) {
- fprintf(stderr, "%s: Couldn't get phandle for %s: %s\n", __func__,
- path, fdt_strerror(r));
+ error_report("%s: Couldn't get phandle for %s: %s", __func__,
+ path, fdt_strerror(r));
exit(1);
}
r = fdt_nop_node(fdt, findnode_nofail(fdt, node_path));
if (r < 0) {
- fprintf(stderr, "%s: Couldn't nop node %s: %s\n", __func__, node_path,
- fdt_strerror(r));
+ error_report("%s: Couldn't nop node %s: %s", __func__, node_path,
+ fdt_strerror(r));
exit(1);
}
retval = fdt_add_subnode(fdt, parent, basename);
if (retval < 0) {
- fprintf(stderr, "FDT: Failed to create subnode %s: %s\n", name,
- fdt_strerror(retval));
+ error_report("FDT: Failed to create subnode %s: %s", name,
+ fdt_strerror(retval));
exit(1);
}
uint64_t value;
int cellnum, vnum, ncells;
uint32_t hival;
+ int ret;
propcells = g_new0(uint32_t, numvalues * 2);
for (vnum = 0; vnum < numvalues; vnum++) {
ncells = values[vnum * 2];
if (ncells != 1 && ncells != 2) {
- return -1;
+ ret = -1;
+ goto out;
}
value = values[vnum * 2 + 1];
hival = cpu_to_be32(value >> 32);
if (ncells > 1) {
propcells[cellnum++] = hival;
} else if (hival != 0) {
- return -1;
+ ret = -1;
+ goto out;
}
propcells[cellnum++] = cpu_to_be32(value);
}
- return qemu_fdt_setprop(fdt, node_path, property, propcells,
- cellnum * sizeof(uint32_t));
+ ret = qemu_fdt_setprop(fdt, node_path, property, propcells,
+ cellnum * sizeof(uint32_t));
+out:
+ g_free(propcells);
+ return ret;
}