Message ID | 20191108194758.17813-3-palmer@dabbelt.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | device_tree: Allow for and use string arrays [Was: RISC-V: virt: This is a "sifive, test1" test finisher] | expand |
On Fri, 8 Nov 2019 at 19:48, Palmer Dabbelt <palmer@dabbelt.com> wrote: > > This new helper function encodes the idiom used by the ARM virt board to > set a string array. I don't currently have a working ARM userspace, so I haven't tested > this, but I made the helper function because I wanted to use it for the > RISC-V virt board where I have tested it. > > Signed-off-by: Palmer Dabbelt <palmer@dabbelt.com> > --- > hw/arm/virt.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > > diff --git a/hw/arm/virt.c b/hw/arm/virt.c > index d4bedc2607..4dc00f54d5 100644 > --- a/hw/arm/virt.c > +++ b/hw/arm/virt.c > @@ -304,9 +304,8 @@ static void fdt_add_timer_nodes(const VirtMachineState *vms) > > armcpu = ARM_CPU(qemu_get_cpu(0)); > if (arm_feature(&armcpu->env, ARM_FEATURE_V8)) { > - const char compat[] = "arm,armv8-timer\0arm,armv7-timer"; > - qemu_fdt_setprop(vms->fdt, "/timer", "compatible", > - compat, sizeof(compat)); > + qemu_fdt_setprop_strings(vms->fdt, "/timer", "compatible", > + "arm,armv8-timer\0arm,armv7-timer\0"); > } else { This seems to be changing the property we put in -- in the old code it is 'foo\0bar\0', but in the new code there will end up being two \0 at the end: 'foo\0bar\0\0'. thanks -- PMM
On Sat, Nov 09, 2019 at 03:56:21PM +0000, Peter Maydell wrote: > On Fri, 8 Nov 2019 at 19:48, Palmer Dabbelt <palmer@dabbelt.com> wrote: > > > > This new helper function encodes the idiom used by the ARM virt board to > > set a string array. I don't currently have a working ARM userspace, so I haven't tested > > this, but I made the helper function because I wanted to use it for the > > RISC-V virt board where I have tested it. > > > > Signed-off-by: Palmer Dabbelt <palmer@dabbelt.com> > > --- > > hw/arm/virt.c | 5 ++--- > > 1 file changed, 2 insertions(+), 3 deletions(-) > > > > diff --git a/hw/arm/virt.c b/hw/arm/virt.c > > index d4bedc2607..4dc00f54d5 100644 > > --- a/hw/arm/virt.c > > +++ b/hw/arm/virt.c > > @@ -304,9 +304,8 @@ static void fdt_add_timer_nodes(const VirtMachineState *vms) > > > > armcpu = ARM_CPU(qemu_get_cpu(0)); > > if (arm_feature(&armcpu->env, ARM_FEATURE_V8)) { > > - const char compat[] = "arm,armv8-timer\0arm,armv7-timer"; > > - qemu_fdt_setprop(vms->fdt, "/timer", "compatible", > > - compat, sizeof(compat)); > > + qemu_fdt_setprop_strings(vms->fdt, "/timer", "compatible", > > + "arm,armv8-timer\0arm,armv7-timer\0"); > > } else { > > > This seems to be changing the property we put in -- in > the old code it is 'foo\0bar\0', but in the new code > there will end up being two \0 at the end: 'foo\0bar\0\0'. In fact it's not because the setprop_strings() helper just uses the \0\0 to detect the end, but truncates what it actually puts into the dtb at the first \0. But I agree this is confusing enough not to really be an improvement over the original version.
diff --git a/hw/arm/virt.c b/hw/arm/virt.c index d4bedc2607..4dc00f54d5 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -304,9 +304,8 @@ static void fdt_add_timer_nodes(const VirtMachineState *vms) armcpu = ARM_CPU(qemu_get_cpu(0)); if (arm_feature(&armcpu->env, ARM_FEATURE_V8)) { - const char compat[] = "arm,armv8-timer\0arm,armv7-timer"; - qemu_fdt_setprop(vms->fdt, "/timer", "compatible", - compat, sizeof(compat)); + qemu_fdt_setprop_strings(vms->fdt, "/timer", "compatible", + "arm,armv8-timer\0arm,armv7-timer\0"); } else { qemu_fdt_setprop_string(vms->fdt, "/timer", "compatible", "arm,armv7-timer");
This new helper function encodes the idiom used by the ARM virt board to set a string array. I don't currently have a working ARM userspace, so I haven't tested this, but I made the helper function because I wanted to use it for the RISC-V virt board where I have tested it. Signed-off-by: Palmer Dabbelt <palmer@dabbelt.com> --- hw/arm/virt.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)