From: Daniel Henrique Barboza <danielhb413@gmail.com>
To: qemu-devel@nongnu.org
Cc: alistair.francis@wdc.com, david@gibson.dropbear.id.au,
Daniel Henrique Barboza <danielhb413@gmail.com>
Subject: [PATCH for-7.2 v2 17/20] device_tree.c: support remaining FDT prop types
Date: Fri, 5 Aug 2022 06:39:45 -0300 [thread overview]
Message-ID: <20220805093948.82561-18-danielhb413@gmail.com> (raw)
In-Reply-To: <20220805093948.82561-1-danielhb413@gmail.com>
When printing a blob with 'dtc' using the '-O dts' option there are 3
distinct data types being printed: strings, arrays of uint32s and
regular byte arrays.
Previous patch added support to print strings. Let's add the remaining
formats. We want to resemble the format that 'dtc -O dts' uses, so every
uint32 array uses angle brackets (<>), and regular byte array uses square
brackets ([]). For properties that has no values we keep printing just
its name.
The /chosen FDT node from the pSeris machine gives an example of all
property types 'info fdt' is now able to display:
(qemu) info fdt /chosen
chosen {
ibm,architecture-vec-5 = [0 0]
rng-seed = <0x5967a270 0x62b0fb4f 0x8262b46a 0xabf48423 0xcce9615 0xf9daae64 0x66564790 0x357d1604>
ibm,arch-vec-5-platform-support = <0x178018c0 0x19001a40>
linux,pci-probe-only = <0x0>
stdout-path = '/vdevice/vty@71000000'
linux,stdout-path = '/vdevice/vty@71000000'
qemu,graphic-depth = <0x20>
qemu,graphic-height = <0x258>
qemu,graphic-width = <0x320>
}
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
---
softmmu/device_tree.c | 58 ++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 57 insertions(+), 1 deletion(-)
diff --git a/softmmu/device_tree.c b/softmmu/device_tree.c
index 8691c3ccc0..9d95e4120b 100644
--- a/softmmu/device_tree.c
+++ b/softmmu/device_tree.c
@@ -681,6 +681,53 @@ static bool fdt_prop_is_string(const void *data, int size)
return true;
}
+static bool fdt_prop_is_uint32_array(int size)
+{
+ return size % 4 == 0;
+}
+
+static void fdt_prop_format_uint32_array(GString *buf,
+ const char *propname,
+ const void *data,
+ int prop_size, int padding)
+{
+ const fdt32_t *array = data;
+ int array_len = prop_size / 4;
+ int i;
+
+ g_string_append_printf(buf, "%*s%s = <", padding, "", propname);
+
+ for (i = 0; i < array_len; i++) {
+ g_string_append_printf(buf, "0x%" PRIx32, fdt32_to_cpu(array[i]));
+
+ if (i < array_len - 1) {
+ g_string_append_printf(buf, " ");
+ }
+ }
+
+ g_string_append_printf(buf, ">\n");
+}
+
+static void fdt_prop_format_val(GString *buf, const char *propname,
+ const void *data, int prop_size,
+ int padding)
+{
+ const char *val = data;
+ int i;
+
+ g_string_append_printf(buf, "%*s%s = [", padding, "", propname);
+
+ for (i = 0; i < prop_size; i++) {
+ g_string_append_printf(buf, "%x", val[i]);
+
+ if (i < prop_size - 1) {
+ g_string_append_printf(buf, " ");
+ }
+ }
+
+ g_string_append_printf(buf, "]\n");
+}
+
static void fdt_format_node(GString *buf, int node, int depth)
{
const struct fdt_property *prop = NULL;
@@ -699,11 +746,20 @@ static void fdt_format_node(GString *buf, int node, int depth)
prop = fdt_get_property_by_offset(fdt, property, &prop_size);
propname = fdt_string(fdt, fdt32_to_cpu(prop->nameoff));
+ if (prop_size == 0) {
+ g_string_append_printf(buf, "%*s%s;\n", padding, "", propname);
+ continue;
+ }
+
if (fdt_prop_is_string(prop->data, prop_size)) {
g_string_append_printf(buf, "%*s%s = '%s'\n",
padding, "", propname, prop->data);
+ } else if (fdt_prop_is_uint32_array(prop_size)) {
+ fdt_prop_format_uint32_array(buf, propname, prop->data, prop_size,
+ padding);
} else {
- g_string_append_printf(buf, "%*s%s;\n", padding, "", propname);
+ fdt_prop_format_val(buf, propname, prop->data,
+ prop_size, padding);
}
}
--
2.36.1
next prev parent reply other threads:[~2022-08-05 10:13 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-05 9:39 [PATCH for-7.2 v2 00/20] QMP/HMP: add 'dumpdtb' and 'info fdt' commands Daniel Henrique Barboza
2022-08-05 9:39 ` [PATCH for-7.2 v2 01/20] hw/arm: do not free machine->fdt in arm_load_dtb() Daniel Henrique Barboza
2022-08-08 3:23 ` David Gibson
2022-08-08 23:00 ` Daniel Henrique Barboza
2022-08-12 22:03 ` Daniel Henrique Barboza
2022-08-15 2:36 ` David Gibson
2022-08-05 9:39 ` [PATCH for-7.2 v2 02/20] hw/microblaze: set machine->fdt in microblaze_load_dtb() Daniel Henrique Barboza
2022-08-05 9:39 ` [PATCH for-7.2 v2 03/20] hw/nios2: set machine->fdt in nios2_load_dtb() Daniel Henrique Barboza
2022-08-05 9:39 ` [PATCH for-7.2 v2 04/20] hw/ppc: set machine->fdt in ppce500_load_device_tree() Daniel Henrique Barboza
2022-08-05 9:39 ` [PATCH for-7.2 v2 05/20] hw/ppc: set machine->fdt in bamboo_load_device_tree() Daniel Henrique Barboza
2022-08-05 9:39 ` [PATCH for-7.2 v2 06/20] hw/ppc: set machine->fdt in sam460ex_load_device_tree() Daniel Henrique Barboza
2022-08-05 9:39 ` [PATCH for-7.2 v2 07/20] hw/ppc: set machine->fdt in xilinx_load_device_tree() Daniel Henrique Barboza
2022-08-05 9:39 ` [PATCH for-7.2 v2 08/20] hw/ppc: set machine->fdt in pegasos2_machine_reset() Daniel Henrique Barboza
2022-08-05 9:39 ` [PATCH for-7.2 v2 09/20] hw/ppc: set machine->fdt in pnv_reset() Daniel Henrique Barboza
2022-08-05 11:03 ` Frederic Barrat
2022-08-05 12:31 ` Daniel Henrique Barboza
2022-08-08 3:25 ` David Gibson
2022-08-08 6:47 ` Cédric Le Goater
2022-08-08 7:13 ` Cédric Le Goater
2022-08-10 19:30 ` Daniel Henrique Barboza
2022-08-05 9:39 ` [PATCH for-7.2 v2 10/20] hw/ppc: set machine->fdt in spapr machine Daniel Henrique Barboza
2022-08-08 3:26 ` David Gibson
2022-08-12 22:23 ` Daniel Henrique Barboza
2022-08-15 2:37 ` David Gibson
2022-08-19 2:11 ` Alexey Kardashevskiy
2022-08-19 2:33 ` David Gibson
2022-08-19 9:42 ` Daniel Henrique Barboza
2022-08-22 3:05 ` David Gibson
2022-08-22 3:29 ` Alexey Kardashevskiy
2022-08-22 10:30 ` Daniel Henrique Barboza
2022-08-23 8:58 ` Alexey Kardashevskiy
2022-08-23 18:09 ` Daniel Henrique Barboza
2022-09-01 1:57 ` David Gibson
2022-08-05 9:39 ` [PATCH for-7.2 v2 11/20] hw/riscv: set machine->fdt in sifive_u_machine_init() Daniel Henrique Barboza
2022-08-07 22:46 ` Alistair Francis
2022-08-05 9:39 ` [PATCH for-7.2 v2 12/20] hw/riscv: set machine->fdt in spike_board_init() Daniel Henrique Barboza
2022-08-07 22:46 ` Alistair Francis
2022-08-05 9:39 ` [PATCH for-7.2 v2 13/20] hw/xtensa: set machine->fdt in xtfpga_init() Daniel Henrique Barboza
2022-08-05 9:39 ` [PATCH for-7.2 v2 14/20] qmp/hmp, device_tree.c: introduce dumpdtb Daniel Henrique Barboza
2022-08-07 23:02 ` Alistair Francis
2022-08-08 3:30 ` David Gibson
2022-08-15 17:36 ` Daniel Henrique Barboza
2022-08-15 18:31 ` Dr. David Alan Gilbert
2022-08-15 19:20 ` Daniel Henrique Barboza
2022-08-05 9:39 ` [PATCH for-7.2 v2 15/20] qmp/hmp, device_tree.c: introduce 'info fdt' command Daniel Henrique Barboza
2022-08-08 4:21 ` David Gibson
2022-08-15 22:48 ` Daniel Henrique Barboza
2022-08-18 2:46 ` David Gibson
2022-08-05 9:39 ` [PATCH for-7.2 v2 16/20] device_tree.c: support string props in fdt_format_node() Daniel Henrique Barboza
2022-08-08 4:36 ` David Gibson
2022-08-10 19:40 ` Daniel Henrique Barboza
2022-08-11 4:09 ` David Gibson
2022-08-05 9:39 ` Daniel Henrique Barboza [this message]
2022-08-08 4:40 ` [PATCH for-7.2 v2 17/20] device_tree.c: support remaining FDT prop types David Gibson
2022-08-05 9:39 ` [PATCH for-7.2 v2 18/20] device_node.c: enable 'info fdt' to print subnodes Daniel Henrique Barboza
2022-08-05 9:39 ` [PATCH for-7.2 v2 19/20] device_tree.c: add fdt_format_property() helper Daniel Henrique Barboza
2022-08-05 9:39 ` [PATCH for-7.2 v2 20/20] hmp, device_tree.c: add 'info fdt <property>' support Daniel Henrique Barboza
2022-08-15 18:38 ` Dr. David Alan Gilbert
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220805093948.82561-18-danielhb413@gmail.com \
--to=danielhb413@gmail.com \
--cc=alistair.francis@wdc.com \
--cc=david@gibson.dropbear.id.au \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.