Message ID | 20250210204204.54407-5-philmd@linaro.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [PULL,01/32] backends/tpm: Use qemu_hexdump_line() to avoid sprintf() | expand |
On 10/02/2025 21.41, Philippe Mathieu-Daudé wrote: > Replace the DEVICE_NATIVE_ENDIAN MemoryRegionOps by a pair > of DEVICE_LITTLE_ENDIAN / DEVICE_BIG_ENDIAN. > Add the "little-endian" property to select the device > endianness, defaulting to little endian. > Set the proper endianness for each machine using the device. > > Reviewed-by: Richard Henderson <richard.henderson@linaro.org> > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > Message-Id: <20250206131052.30207-5-philmd@linaro.org> > --- > hw/microblaze/petalogix_ml605_mmu.c | 1 + > hw/microblaze/petalogix_s3adsp1800_mmu.c | 1 + > hw/ppc/virtex_ml507.c | 1 + > hw/timer/xilinx_timer.c | 35 +++++++++++++++--------- > 4 files changed, 25 insertions(+), 13 deletions(-) > > diff --git a/hw/microblaze/petalogix_ml605_mmu.c b/hw/microblaze/petalogix_ml605_mmu.c > index cf3b9574db3..bbda70aa93b 100644 > --- a/hw/microblaze/petalogix_ml605_mmu.c > +++ b/hw/microblaze/petalogix_ml605_mmu.c > @@ -127,6 +127,7 @@ petalogix_ml605_init(MachineState *machine) > > /* 2 timers at irq 2 @ 100 Mhz. */ > dev = qdev_new("xlnx.xps-timer"); > + qdev_prop_set_bit(dev, "little-endian", true); > qdev_prop_set_uint32(dev, "one-timer-only", 0); > qdev_prop_set_uint32(dev, "clock-frequency", 100 * 1000000); > sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); > diff --git a/hw/microblaze/petalogix_s3adsp1800_mmu.c b/hw/microblaze/petalogix_s3adsp1800_mmu.c > index fbf52ba8f2f..9d4316b4036 100644 > --- a/hw/microblaze/petalogix_s3adsp1800_mmu.c > +++ b/hw/microblaze/petalogix_s3adsp1800_mmu.c > @@ -114,6 +114,7 @@ petalogix_s3adsp1800_init(MachineState *machine) > > /* 2 timers at irq 2 @ 62 Mhz. */ > dev = qdev_new("xlnx.xps-timer"); > + qdev_prop_set_bit(dev, "little-endian", !TARGET_BIG_ENDIAN); > qdev_prop_set_uint32(dev, "one-timer-only", 0); > qdev_prop_set_uint32(dev, "clock-frequency", 62 * 1000000); > sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); > diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c > index 23238119273..f87c221d076 100644 > --- a/hw/ppc/virtex_ml507.c > +++ b/hw/ppc/virtex_ml507.c > @@ -230,6 +230,7 @@ static void virtex_init(MachineState *machine) > > /* 2 timers at irq 2 @ 62 Mhz. */ > dev = qdev_new("xlnx.xps-timer"); > + qdev_prop_set_bit(dev, "little-endian", false); > qdev_prop_set_uint32(dev, "one-timer-only", 0); > qdev_prop_set_uint32(dev, "clock-frequency", 62 * 1000000); > sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); Hi, with this patch applied, the ppc_virtex_ml507 functional test is now failing for me ... could you please double-check whether "make check-functional-ppc" still works for you? Thanks, Thomas
On 12/2/25 09:27, Thomas Huth wrote: > On 10/02/2025 21.41, Philippe Mathieu-Daudé wrote: >> Replace the DEVICE_NATIVE_ENDIAN MemoryRegionOps by a pair >> of DEVICE_LITTLE_ENDIAN / DEVICE_BIG_ENDIAN. >> Add the "little-endian" property to select the device >> endianness, defaulting to little endian. >> Set the proper endianness for each machine using the device. >> >> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> >> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> >> Message-Id: <20250206131052.30207-5-philmd@linaro.org> >> --- >> hw/microblaze/petalogix_ml605_mmu.c | 1 + >> hw/microblaze/petalogix_s3adsp1800_mmu.c | 1 + >> hw/ppc/virtex_ml507.c | 1 + >> hw/timer/xilinx_timer.c | 35 +++++++++++++++--------- >> 4 files changed, 25 insertions(+), 13 deletions(-) >> >> diff --git a/hw/microblaze/petalogix_ml605_mmu.c b/hw/microblaze/ >> petalogix_ml605_mmu.c >> index cf3b9574db3..bbda70aa93b 100644 >> --- a/hw/microblaze/petalogix_ml605_mmu.c >> +++ b/hw/microblaze/petalogix_ml605_mmu.c >> @@ -127,6 +127,7 @@ petalogix_ml605_init(MachineState *machine) >> /* 2 timers at irq 2 @ 100 Mhz. */ >> dev = qdev_new("xlnx.xps-timer"); >> + qdev_prop_set_bit(dev, "little-endian", true); >> qdev_prop_set_uint32(dev, "one-timer-only", 0); >> qdev_prop_set_uint32(dev, "clock-frequency", 100 * 1000000); >> sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); >> diff --git a/hw/microblaze/petalogix_s3adsp1800_mmu.c b/hw/microblaze/ >> petalogix_s3adsp1800_mmu.c >> index fbf52ba8f2f..9d4316b4036 100644 >> --- a/hw/microblaze/petalogix_s3adsp1800_mmu.c >> +++ b/hw/microblaze/petalogix_s3adsp1800_mmu.c >> @@ -114,6 +114,7 @@ petalogix_s3adsp1800_init(MachineState *machine) >> /* 2 timers at irq 2 @ 62 Mhz. */ >> dev = qdev_new("xlnx.xps-timer"); >> + qdev_prop_set_bit(dev, "little-endian", !TARGET_BIG_ENDIAN); >> qdev_prop_set_uint32(dev, "one-timer-only", 0); >> qdev_prop_set_uint32(dev, "clock-frequency", 62 * 1000000); >> sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); >> diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c >> index 23238119273..f87c221d076 100644 >> --- a/hw/ppc/virtex_ml507.c >> +++ b/hw/ppc/virtex_ml507.c >> @@ -230,6 +230,7 @@ static void virtex_init(MachineState *machine) >> /* 2 timers at irq 2 @ 62 Mhz. */ >> dev = qdev_new("xlnx.xps-timer"); >> + qdev_prop_set_bit(dev, "little-endian", false); >> qdev_prop_set_uint32(dev, "one-timer-only", 0); >> qdev_prop_set_uint32(dev, "clock-frequency", 62 * 1000000); >> sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); > > Hi, > > with this patch applied, the ppc_virtex_ml507 functional test is now > failing for me ... could you please double-check whether "make check- > functional-ppc" still works for you? Thanks, not this patch problem, but patch #2 misses: -- >8 -- diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c index 23238119273..723f62c904b 100644 --- a/hw/ppc/virtex_ml507.c +++ b/hw/ppc/virtex_ml507.c @@ -219,2 +219,3 @@ static void virtex_init(MachineState *machine) dev = qdev_new("xlnx.xps-intc"); + qdev_prop_set_bit(dev, "little-endian", false); qdev_prop_set_uint32(dev, "kind-of-intr", 0); --- Why is my CI green?
On 12/2/25 10:19, Philippe Mathieu-Daudé wrote: > On 12/2/25 09:27, Thomas Huth wrote: >> On 10/02/2025 21.41, Philippe Mathieu-Daudé wrote: >>> Replace the DEVICE_NATIVE_ENDIAN MemoryRegionOps by a pair >>> of DEVICE_LITTLE_ENDIAN / DEVICE_BIG_ENDIAN. >>> Add the "little-endian" property to select the device >>> endianness, defaulting to little endian. >>> Set the proper endianness for each machine using the device. >>> >>> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> >>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> >>> Message-Id: <20250206131052.30207-5-philmd@linaro.org> >>> --- >>> hw/microblaze/petalogix_ml605_mmu.c | 1 + >>> hw/microblaze/petalogix_s3adsp1800_mmu.c | 1 + >>> hw/ppc/virtex_ml507.c | 1 + >>> hw/timer/xilinx_timer.c | 35 +++++++++++++++--------- >>> 4 files changed, 25 insertions(+), 13 deletions(-) >>> >>> diff --git a/hw/microblaze/petalogix_ml605_mmu.c b/hw/microblaze/ >>> petalogix_ml605_mmu.c >>> index cf3b9574db3..bbda70aa93b 100644 >>> --- a/hw/microblaze/petalogix_ml605_mmu.c >>> +++ b/hw/microblaze/petalogix_ml605_mmu.c >>> @@ -127,6 +127,7 @@ petalogix_ml605_init(MachineState *machine) >>> /* 2 timers at irq 2 @ 100 Mhz. */ >>> dev = qdev_new("xlnx.xps-timer"); >>> + qdev_prop_set_bit(dev, "little-endian", true); >>> qdev_prop_set_uint32(dev, "one-timer-only", 0); >>> qdev_prop_set_uint32(dev, "clock-frequency", 100 * 1000000); >>> sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); >>> diff --git a/hw/microblaze/petalogix_s3adsp1800_mmu.c b/hw/ >>> microblaze/ petalogix_s3adsp1800_mmu.c >>> index fbf52ba8f2f..9d4316b4036 100644 >>> --- a/hw/microblaze/petalogix_s3adsp1800_mmu.c >>> +++ b/hw/microblaze/petalogix_s3adsp1800_mmu.c >>> @@ -114,6 +114,7 @@ petalogix_s3adsp1800_init(MachineState *machine) >>> /* 2 timers at irq 2 @ 62 Mhz. */ >>> dev = qdev_new("xlnx.xps-timer"); >>> + qdev_prop_set_bit(dev, "little-endian", !TARGET_BIG_ENDIAN); >>> qdev_prop_set_uint32(dev, "one-timer-only", 0); >>> qdev_prop_set_uint32(dev, "clock-frequency", 62 * 1000000); >>> sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); >>> diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c >>> index 23238119273..f87c221d076 100644 >>> --- a/hw/ppc/virtex_ml507.c >>> +++ b/hw/ppc/virtex_ml507.c >>> @@ -230,6 +230,7 @@ static void virtex_init(MachineState *machine) >>> /* 2 timers at irq 2 @ 62 Mhz. */ >>> dev = qdev_new("xlnx.xps-timer"); >>> + qdev_prop_set_bit(dev, "little-endian", false); >>> qdev_prop_set_uint32(dev, "one-timer-only", 0); >>> qdev_prop_set_uint32(dev, "clock-frequency", 62 * 1000000); >>> sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); >> >> Hi, >> >> with this patch applied, the ppc_virtex_ml507 functional test is now >> failing for me ... could you please double-check whether "make check- >> functional-ppc" still works for you? > > Thanks, not this patch problem, but patch #2 misses: > > -- >8 -- > diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c > index 23238119273..723f62c904b 100644 > --- a/hw/ppc/virtex_ml507.c > +++ b/hw/ppc/virtex_ml507.c > @@ -219,2 +219,3 @@ static void virtex_init(MachineState *machine) > dev = qdev_new("xlnx.xps-intc"); > + qdev_prop_set_bit(dev, "little-endian", false); It looks to me like another "default value problem", where using a tri-state with default=unset would have catched. "disas/dis-asm.h" defines: enum bfd_endian { BFD_ENDIAN_BIG, BFD_ENDIAN_LITTLE, BFD_ENDIAN_UNKNOWN }; Maybe endianness is common enough than we can add a QAPI enum, in machine-common.json or even common.json? Then I'd use qdev_prop_set_enum() here. > qdev_prop_set_uint32(dev, "kind-of-intr", 0); > --- > > Why is my CI green?
On 12/2/25 10:34, Philippe Mathieu-Daudé wrote: > On 12/2/25 10:19, Philippe Mathieu-Daudé wrote: >> On 12/2/25 09:27, Thomas Huth wrote: >>> On 10/02/2025 21.41, Philippe Mathieu-Daudé wrote: >>>> Replace the DEVICE_NATIVE_ENDIAN MemoryRegionOps by a pair >>>> of DEVICE_LITTLE_ENDIAN / DEVICE_BIG_ENDIAN. >>>> Add the "little-endian" property to select the device >>>> endianness, defaulting to little endian. >>>> Set the proper endianness for each machine using the device. >>>> >>>> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> >>>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> >>>> Message-Id: <20250206131052.30207-5-philmd@linaro.org> >>>> --- >>>> hw/microblaze/petalogix_ml605_mmu.c | 1 + >>>> hw/microblaze/petalogix_s3adsp1800_mmu.c | 1 + >>>> hw/ppc/virtex_ml507.c | 1 + >>>> hw/timer/xilinx_timer.c | 35 ++++++++++++++ >>>> +--------- >>>> 4 files changed, 25 insertions(+), 13 deletions(-) >>>> >>>> diff --git a/hw/microblaze/petalogix_ml605_mmu.c b/hw/microblaze/ >>>> petalogix_ml605_mmu.c >>>> index cf3b9574db3..bbda70aa93b 100644 >>>> --- a/hw/microblaze/petalogix_ml605_mmu.c >>>> +++ b/hw/microblaze/petalogix_ml605_mmu.c >>>> @@ -127,6 +127,7 @@ petalogix_ml605_init(MachineState *machine) >>>> /* 2 timers at irq 2 @ 100 Mhz. */ >>>> dev = qdev_new("xlnx.xps-timer"); >>>> + qdev_prop_set_bit(dev, "little-endian", true); >>>> qdev_prop_set_uint32(dev, "one-timer-only", 0); >>>> qdev_prop_set_uint32(dev, "clock-frequency", 100 * 1000000); >>>> sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); >>>> diff --git a/hw/microblaze/petalogix_s3adsp1800_mmu.c b/hw/ >>>> microblaze/ petalogix_s3adsp1800_mmu.c >>>> index fbf52ba8f2f..9d4316b4036 100644 >>>> --- a/hw/microblaze/petalogix_s3adsp1800_mmu.c >>>> +++ b/hw/microblaze/petalogix_s3adsp1800_mmu.c >>>> @@ -114,6 +114,7 @@ petalogix_s3adsp1800_init(MachineState *machine) >>>> /* 2 timers at irq 2 @ 62 Mhz. */ >>>> dev = qdev_new("xlnx.xps-timer"); >>>> + qdev_prop_set_bit(dev, "little-endian", !TARGET_BIG_ENDIAN); >>>> qdev_prop_set_uint32(dev, "one-timer-only", 0); >>>> qdev_prop_set_uint32(dev, "clock-frequency", 62 * 1000000); >>>> sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); >>>> diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c >>>> index 23238119273..f87c221d076 100644 >>>> --- a/hw/ppc/virtex_ml507.c >>>> +++ b/hw/ppc/virtex_ml507.c >>>> @@ -230,6 +230,7 @@ static void virtex_init(MachineState *machine) >>>> /* 2 timers at irq 2 @ 62 Mhz. */ >>>> dev = qdev_new("xlnx.xps-timer"); >>>> + qdev_prop_set_bit(dev, "little-endian", false); >>>> qdev_prop_set_uint32(dev, "one-timer-only", 0); >>>> qdev_prop_set_uint32(dev, "clock-frequency", 62 * 1000000); >>>> sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); >>> >>> Hi, >>> >>> with this patch applied, the ppc_virtex_ml507 functional test is now >>> failing for me ... could you please double-check whether "make check- >>> functional-ppc" still works for you? >> >> Thanks, not this patch problem, but patch #2 misses: >> >> -- >8 -- >> diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c >> index 23238119273..723f62c904b 100644 >> --- a/hw/ppc/virtex_ml507.c >> +++ b/hw/ppc/virtex_ml507.c >> @@ -219,2 +219,3 @@ static void virtex_init(MachineState *machine) >> dev = qdev_new("xlnx.xps-intc"); >> + qdev_prop_set_bit(dev, "little-endian", false); > > It looks to me like another "default value problem", where using > a tri-state with default=unset would have catched. > > "disas/dis-asm.h" defines: > > enum bfd_endian { BFD_ENDIAN_BIG, BFD_ENDIAN_LITTLE, BFD_ENDIAN_UNKNOWN }; > > Maybe endianness is common enough than we can add a QAPI enum, > in machine-common.json or even common.json? > > Then I'd use qdev_prop_set_enum() here. I'll post a series doing that.
On 12/02/2025 10.19, Philippe Mathieu-Daudé wrote: > On 12/2/25 09:27, Thomas Huth wrote: >> On 10/02/2025 21.41, Philippe Mathieu-Daudé wrote: >>> Replace the DEVICE_NATIVE_ENDIAN MemoryRegionOps by a pair >>> of DEVICE_LITTLE_ENDIAN / DEVICE_BIG_ENDIAN. >>> Add the "little-endian" property to select the device >>> endianness, defaulting to little endian. >>> Set the proper endianness for each machine using the device. >>> >>> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> >>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> >>> Message-Id: <20250206131052.30207-5-philmd@linaro.org> >>> --- >>> hw/microblaze/petalogix_ml605_mmu.c | 1 + >>> hw/microblaze/petalogix_s3adsp1800_mmu.c | 1 + >>> hw/ppc/virtex_ml507.c | 1 + >>> hw/timer/xilinx_timer.c | 35 +++++++++++++++--------- >>> 4 files changed, 25 insertions(+), 13 deletions(-) >>> >>> diff --git a/hw/microblaze/petalogix_ml605_mmu.c b/hw/microblaze/ >>> petalogix_ml605_mmu.c >>> index cf3b9574db3..bbda70aa93b 100644 >>> --- a/hw/microblaze/petalogix_ml605_mmu.c >>> +++ b/hw/microblaze/petalogix_ml605_mmu.c >>> @@ -127,6 +127,7 @@ petalogix_ml605_init(MachineState *machine) >>> /* 2 timers at irq 2 @ 100 Mhz. */ >>> dev = qdev_new("xlnx.xps-timer"); >>> + qdev_prop_set_bit(dev, "little-endian", true); >>> qdev_prop_set_uint32(dev, "one-timer-only", 0); >>> qdev_prop_set_uint32(dev, "clock-frequency", 100 * 1000000); >>> sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); >>> diff --git a/hw/microblaze/petalogix_s3adsp1800_mmu.c b/hw/microblaze/ >>> petalogix_s3adsp1800_mmu.c >>> index fbf52ba8f2f..9d4316b4036 100644 >>> --- a/hw/microblaze/petalogix_s3adsp1800_mmu.c >>> +++ b/hw/microblaze/petalogix_s3adsp1800_mmu.c >>> @@ -114,6 +114,7 @@ petalogix_s3adsp1800_init(MachineState *machine) >>> /* 2 timers at irq 2 @ 62 Mhz. */ >>> dev = qdev_new("xlnx.xps-timer"); >>> + qdev_prop_set_bit(dev, "little-endian", !TARGET_BIG_ENDIAN); >>> qdev_prop_set_uint32(dev, "one-timer-only", 0); >>> qdev_prop_set_uint32(dev, "clock-frequency", 62 * 1000000); >>> sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); >>> diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c >>> index 23238119273..f87c221d076 100644 >>> --- a/hw/ppc/virtex_ml507.c >>> +++ b/hw/ppc/virtex_ml507.c >>> @@ -230,6 +230,7 @@ static void virtex_init(MachineState *machine) >>> /* 2 timers at irq 2 @ 62 Mhz. */ >>> dev = qdev_new("xlnx.xps-timer"); >>> + qdev_prop_set_bit(dev, "little-endian", false); >>> qdev_prop_set_uint32(dev, "one-timer-only", 0); >>> qdev_prop_set_uint32(dev, "clock-frequency", 62 * 1000000); >>> sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); >> >> Hi, >> >> with this patch applied, the ppc_virtex_ml507 functional test is now >> failing for me ... could you please double-check whether "make check- >> functional-ppc" still works for you? > > Thanks, not this patch problem, but patch #2 misses: > > -- >8 -- > diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c > index 23238119273..723f62c904b 100644 > --- a/hw/ppc/virtex_ml507.c > +++ b/hw/ppc/virtex_ml507.c > @@ -219,2 +219,3 @@ static void virtex_init(MachineState *machine) > dev = qdev_new("xlnx.xps-intc"); > + qdev_prop_set_bit(dev, "little-endian", false); > qdev_prop_set_uint32(dev, "kind-of-intr", 0); > --- > > Why is my CI green? Looking at https://gitlab.com/philmd/qemu/-/pipelines/1664238124 it seems like you did not start the functional test jobs? Thomas
On 12/2/25 11:24, Thomas Huth wrote: > On 12/02/2025 10.19, Philippe Mathieu-Daudé wrote: >> On 12/2/25 09:27, Thomas Huth wrote: >>> On 10/02/2025 21.41, Philippe Mathieu-Daudé wrote: >>>> Replace the DEVICE_NATIVE_ENDIAN MemoryRegionOps by a pair >>>> of DEVICE_LITTLE_ENDIAN / DEVICE_BIG_ENDIAN. >>>> Add the "little-endian" property to select the device >>>> endianness, defaulting to little endian. >>>> Set the proper endianness for each machine using the device. >>>> >>>> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> >>>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> >>>> Message-Id: <20250206131052.30207-5-philmd@linaro.org> >>>> --- >>>> hw/microblaze/petalogix_ml605_mmu.c | 1 + >>>> hw/microblaze/petalogix_s3adsp1800_mmu.c | 1 + >>>> hw/ppc/virtex_ml507.c | 1 + >>>> hw/timer/xilinx_timer.c | 35 ++++++++++++++ >>>> +--------- >>>> 4 files changed, 25 insertions(+), 13 deletions(-) >>>> >>>> diff --git a/hw/microblaze/petalogix_ml605_mmu.c b/hw/microblaze/ >>>> petalogix_ml605_mmu.c >>>> index cf3b9574db3..bbda70aa93b 100644 >>>> --- a/hw/microblaze/petalogix_ml605_mmu.c >>>> +++ b/hw/microblaze/petalogix_ml605_mmu.c >>>> @@ -127,6 +127,7 @@ petalogix_ml605_init(MachineState *machine) >>>> /* 2 timers at irq 2 @ 100 Mhz. */ >>>> dev = qdev_new("xlnx.xps-timer"); >>>> + qdev_prop_set_bit(dev, "little-endian", true); >>>> qdev_prop_set_uint32(dev, "one-timer-only", 0); >>>> qdev_prop_set_uint32(dev, "clock-frequency", 100 * 1000000); >>>> sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); >>>> diff --git a/hw/microblaze/petalogix_s3adsp1800_mmu.c b/hw/ >>>> microblaze/ petalogix_s3adsp1800_mmu.c >>>> index fbf52ba8f2f..9d4316b4036 100644 >>>> --- a/hw/microblaze/petalogix_s3adsp1800_mmu.c >>>> +++ b/hw/microblaze/petalogix_s3adsp1800_mmu.c >>>> @@ -114,6 +114,7 @@ petalogix_s3adsp1800_init(MachineState *machine) >>>> /* 2 timers at irq 2 @ 62 Mhz. */ >>>> dev = qdev_new("xlnx.xps-timer"); >>>> + qdev_prop_set_bit(dev, "little-endian", !TARGET_BIG_ENDIAN); >>>> qdev_prop_set_uint32(dev, "one-timer-only", 0); >>>> qdev_prop_set_uint32(dev, "clock-frequency", 62 * 1000000); >>>> sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); >>>> diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c >>>> index 23238119273..f87c221d076 100644 >>>> --- a/hw/ppc/virtex_ml507.c >>>> +++ b/hw/ppc/virtex_ml507.c >>>> @@ -230,6 +230,7 @@ static void virtex_init(MachineState *machine) >>>> /* 2 timers at irq 2 @ 62 Mhz. */ >>>> dev = qdev_new("xlnx.xps-timer"); >>>> + qdev_prop_set_bit(dev, "little-endian", false); >>>> qdev_prop_set_uint32(dev, "one-timer-only", 0); >>>> qdev_prop_set_uint32(dev, "clock-frequency", 62 * 1000000); >>>> sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); >>> >>> Hi, >>> >>> with this patch applied, the ppc_virtex_ml507 functional test is now >>> failing for me ... could you please double-check whether "make check- >>> functional-ppc" still works for you? >> >> Thanks, not this patch problem, but patch #2 misses: >> >> -- >8 -- >> diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c >> index 23238119273..723f62c904b 100644 >> --- a/hw/ppc/virtex_ml507.c >> +++ b/hw/ppc/virtex_ml507.c >> @@ -219,2 +219,3 @@ static void virtex_init(MachineState *machine) >> dev = qdev_new("xlnx.xps-intc"); >> + qdev_prop_set_bit(dev, "little-endian", false); >> qdev_prop_set_uint32(dev, "kind-of-intr", 0); >> --- >> >> Why is my CI green? > > Looking at https://gitlab.com/philmd/qemu/-/pipelines/1664238124 it > seems like you did not start the functional test jobs? Doh, while doing my PR process I forgot even using push-ci-now these need to be triggered manually :S > > Thomas >
diff --git a/hw/microblaze/petalogix_ml605_mmu.c b/hw/microblaze/petalogix_ml605_mmu.c index cf3b9574db3..bbda70aa93b 100644 --- a/hw/microblaze/petalogix_ml605_mmu.c +++ b/hw/microblaze/petalogix_ml605_mmu.c @@ -127,6 +127,7 @@ petalogix_ml605_init(MachineState *machine) /* 2 timers at irq 2 @ 100 Mhz. */ dev = qdev_new("xlnx.xps-timer"); + qdev_prop_set_bit(dev, "little-endian", true); qdev_prop_set_uint32(dev, "one-timer-only", 0); qdev_prop_set_uint32(dev, "clock-frequency", 100 * 1000000); sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); diff --git a/hw/microblaze/petalogix_s3adsp1800_mmu.c b/hw/microblaze/petalogix_s3adsp1800_mmu.c index fbf52ba8f2f..9d4316b4036 100644 --- a/hw/microblaze/petalogix_s3adsp1800_mmu.c +++ b/hw/microblaze/petalogix_s3adsp1800_mmu.c @@ -114,6 +114,7 @@ petalogix_s3adsp1800_init(MachineState *machine) /* 2 timers at irq 2 @ 62 Mhz. */ dev = qdev_new("xlnx.xps-timer"); + qdev_prop_set_bit(dev, "little-endian", !TARGET_BIG_ENDIAN); qdev_prop_set_uint32(dev, "one-timer-only", 0); qdev_prop_set_uint32(dev, "clock-frequency", 62 * 1000000); sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c index 23238119273..f87c221d076 100644 --- a/hw/ppc/virtex_ml507.c +++ b/hw/ppc/virtex_ml507.c @@ -230,6 +230,7 @@ static void virtex_init(MachineState *machine) /* 2 timers at irq 2 @ 62 Mhz. */ dev = qdev_new("xlnx.xps-timer"); + qdev_prop_set_bit(dev, "little-endian", false); qdev_prop_set_uint32(dev, "one-timer-only", 0); qdev_prop_set_uint32(dev, "clock-frequency", 62 * 1000000); sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); diff --git a/hw/timer/xilinx_timer.c b/hw/timer/xilinx_timer.c index 6595cf5f517..d942ac226e6 100644 --- a/hw/timer/xilinx_timer.c +++ b/hw/timer/xilinx_timer.c @@ -3,6 +3,9 @@ * * Copyright (c) 2009 Edgar E. Iglesias. * + * DS573: https://docs.amd.com/v/u/en-US/xps_timer + * LogiCORE IP XPS Timer/Counter (v1.02a) + * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights @@ -69,6 +72,7 @@ struct XpsTimerState { SysBusDevice parent_obj; + bool little_endian_model; MemoryRegion mmio; qemu_irq irq; uint8_t one_timer_only; @@ -189,18 +193,21 @@ timer_write(void *opaque, hwaddr addr, timer_update_irq(t); } -static const MemoryRegionOps timer_ops = { - .read = timer_read, - .write = timer_write, - .endianness = DEVICE_NATIVE_ENDIAN, - .impl = { - .min_access_size = 4, - .max_access_size = 4, +static const MemoryRegionOps timer_ops[2] = { + [0 ... 1] = { + .read = timer_read, + .write = timer_write, + .impl = { + .min_access_size = 4, + .max_access_size = 4, + }, + .valid = { + .min_access_size = 4, + .max_access_size = 4, + }, }, - .valid = { - .min_access_size = 4, - .max_access_size = 4 - } + [0].endianness = DEVICE_BIG_ENDIAN, + [1].endianness = DEVICE_LITTLE_ENDIAN, }; static void timer_hit(void *opaque) @@ -233,8 +240,9 @@ static void xilinx_timer_realize(DeviceState *dev, Error **errp) ptimer_transaction_commit(xt->ptimer); } - memory_region_init_io(&t->mmio, OBJECT(t), &timer_ops, t, "xlnx.xps-timer", - R_MAX * 4 * num_timers(t)); + memory_region_init_io(&t->mmio, OBJECT(t), + &timer_ops[t->little_endian_model], t, + "xlnx.xps-timer", R_MAX * 4 * num_timers(t)); sysbus_init_mmio(SYS_BUS_DEVICE(dev), &t->mmio); } @@ -247,6 +255,7 @@ static void xilinx_timer_init(Object *obj) } static const Property xilinx_timer_properties[] = { + DEFINE_PROP_BOOL("little-endian", XpsTimerState, little_endian_model, true), DEFINE_PROP_UINT32("clock-frequency", XpsTimerState, freq_hz, 62 * 1000000), DEFINE_PROP_UINT8("one-timer-only", XpsTimerState, one_timer_only, 0), };