From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44802) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bbruG-0001Qz-3p for qemu-devel@nongnu.org; Mon, 22 Aug 2016 12:17:03 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bbru9-0002ax-LD for qemu-devel@nongnu.org; Mon, 22 Aug 2016 12:16:59 -0400 Received: from mail-pa0-x236.google.com ([2607:f8b0:400e:c03::236]:34580) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bbru8-0002Zs-7D for qemu-devel@nongnu.org; Mon, 22 Aug 2016 12:16:53 -0400 Received: by mail-pa0-x236.google.com with SMTP id fi15so39046221pac.1 for ; Mon, 22 Aug 2016 09:16:51 -0700 (PDT) From: Prem Mallappa Date: Mon, 22 Aug 2016 21:47:33 +0530 Message-Id: <20160822161740.4252-3-prem.mallappa@broadcom.com> In-Reply-To: <20160822161740.4252-1-prem.mallappa@broadcom.com> References: <20160822161740.4252-1-prem.mallappa@broadcom.com> Subject: [Qemu-devel] [PATCH v2 2/9] devicetree: Added new APIs to make use of more fdt functions List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell , "Edgar E . Iglesias" , qemu-devel@nongnu.org Cc: Prem Mallappa 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 --- 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 6e06320..5d5966e 100644 --- a/device_tree.c +++ b/device_tree.c @@ -297,6 +297,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) { @@ -319,6 +337,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 705650a..5a0a297 100644 --- a/include/sysemu/device_tree.h +++ b/include/sysemu/device_tree.h @@ -45,12 +45,16 @@ char **qemu_fdt_node_path(void *fdt, const char *name, char *compat, 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); @@ -98,6 +102,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.9.3