From: Prem Mallappa <pmall...@broadcom.com> SMMUv3 needs device tree entry like below
interrupt-names = "gerror", "priq", "eventq", "cmdq-sync"; This patch introduces helper function to add entries like above Signed-off-by: Prem Mallappa <pmall...@broadcom.com> --- device_tree.c | 35 +++++++++++++++++++++++++++++++++++ include/sysemu/device_tree.h | 18 ++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/device_tree.c b/device_tree.c index a9f5f8e..7690ff4 100644 --- a/device_tree.c +++ b/device_tree.c @@ -146,6 +146,24 @@ int qemu_fdt_setprop(void *fdt, const char *node_path, return r; } +int qemu_fdt_appendprop(void *fdt, const char *node_path, + const char *property, const void *val, int size) +{ + int r; + + r = fdt_appendprop(fdt, findnode_nofail(fdt, node_path), property, + val, size); + if (r < 0) { + error_report("%s: Couldn't set %s/%s: %s", __func__, node_path, + property, fdt_strerror(r)); + exit(1); + } + + return r; +} + + + int qemu_fdt_setprop_cell(void *fdt, const char *node_path, const char *property, uint32_t val) { @@ -168,6 +186,23 @@ int qemu_fdt_setprop_u64(void *fdt, const char *node_path, return qemu_fdt_setprop(fdt, node_path, property, &val, sizeof(val)); } +int qemu_fdt_appendprop_string(void *fdt, const char *node_path, + const char *property, const char *string) +{ + int r; + + r = fdt_appendprop_string(fdt, findnode_nofail(fdt, node_path), + property, string); + if (r < 0) { + error_report("%s: Couldn't set %s/%s = %s: %s", __func__, + node_path, property, string, fdt_strerror(r)); + exit(1); + } + + return r; +} + + int qemu_fdt_setprop_string(void *fdt, const char *node_path, const char *property, const char *string) { diff --git a/include/sysemu/device_tree.h b/include/sysemu/device_tree.h index 359e143..d5d32b4 100644 --- a/include/sysemu/device_tree.h +++ b/include/sysemu/device_tree.h @@ -19,12 +19,16 @@ void *load_device_tree(const char *filename_path, int *sizep); int qemu_fdt_setprop(void *fdt, const char *node_path, const char *property, const void *val, int size); +int qemu_fdt_appendprop(void *fdt, const char *node_path, + const char *property, const void *val, int size); int qemu_fdt_setprop_cell(void *fdt, const char *node_path, const char *property, uint32_t val); int qemu_fdt_setprop_u64(void *fdt, const char *node_path, const char *property, uint64_t val); int qemu_fdt_setprop_string(void *fdt, const char *node_path, const char *property, const char *string); +int qemu_fdt_appendprop_string(void *fdt, const char *node_path, + const char *property, const char *string); int qemu_fdt_setprop_phandle(void *fdt, const char *node_path, const char *property, const char *target_node_path); @@ -49,6 +53,20 @@ int qemu_fdt_add_subnode(void *fdt, const char *name); sizeof(qdt_tmp)); \ } while (0) + +#define qemu_fdt_appendprop_cells(fdt, node_path, property, ...) \ + do { \ + uint32_t qdt_tmp[] = { __VA_ARGS__ }; \ + int i; \ + \ + for (i = 0; i < ARRAY_SIZE(qdt_tmp); i++) { \ + qdt_tmp[i] = cpu_to_be32(qdt_tmp[i]); \ + } \ + qemu_fdt_appendprop(fdt, node_path, property, qdt_tmp, \ + sizeof(qdt_tmp)); \ + } while (0) + + void qemu_fdt_dumpdtb(void *fdt, int size); /** -- 2.6.4