[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 03/11] goldfish_rtc: Add big-endian property
From: |
Stafford Horne |
Subject: |
[PULL 03/11] goldfish_rtc: Add big-endian property |
Date: |
Sun, 4 Sep 2022 08:25:59 +0100 |
Add a new property "big-endian" to allow configuring the RTC as either
little or big endian, the default is little endian.
Currently overriding the default to big endian is only used by the m68k
virt platform. New platforms should prefer to use little endian and not
set this.
Cc: Laurent Vivier <lvivier@redhat.com>
Reviewed-by: Anup Patel <anup@brainfault.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Stafford Horne <shorne@gmail.com>
---
hw/m68k/virt.c | 1 +
hw/rtc/goldfish_rtc.c | 37 ++++++++++++++++++++++++++---------
include/hw/rtc/goldfish_rtc.h | 2 ++
3 files changed, 31 insertions(+), 9 deletions(-)
diff --git a/hw/m68k/virt.c b/hw/m68k/virt.c
index 3122c8ef2c..2f3ffc0de6 100644
--- a/hw/m68k/virt.c
+++ b/hw/m68k/virt.c
@@ -173,6 +173,7 @@ static void virt_init(MachineState *machine)
io_base = VIRT_GF_RTC_MMIO_BASE;
for (i = 0; i < VIRT_GF_RTC_NB; i++) {
dev = qdev_new(TYPE_GOLDFISH_RTC);
+ qdev_prop_set_bit(dev, "big-endian", true);
sysbus = SYS_BUS_DEVICE(dev);
sysbus_realize_and_unref(sysbus, &error_fatal);
sysbus_mmio_map(sysbus, 0, io_base);
diff --git a/hw/rtc/goldfish_rtc.c b/hw/rtc/goldfish_rtc.c
index 35e493be31..19a56402a0 100644
--- a/hw/rtc/goldfish_rtc.c
+++ b/hw/rtc/goldfish_rtc.c
@@ -216,14 +216,25 @@ static int goldfish_rtc_post_load(void *opaque, int
version_id)
return 0;
}
-static const MemoryRegionOps goldfish_rtc_ops = {
- .read = goldfish_rtc_read,
- .write = goldfish_rtc_write,
- .endianness = DEVICE_NATIVE_ENDIAN,
- .valid = {
- .min_access_size = 4,
- .max_access_size = 4
- }
+static const MemoryRegionOps goldfish_rtc_ops[2] = {
+ [false] = {
+ .read = goldfish_rtc_read,
+ .write = goldfish_rtc_write,
+ .endianness = DEVICE_LITTLE_ENDIAN,
+ .valid = {
+ .min_access_size = 4,
+ .max_access_size = 4
+ }
+ },
+ [true] = {
+ .read = goldfish_rtc_read,
+ .write = goldfish_rtc_write,
+ .endianness = DEVICE_BIG_ENDIAN,
+ .valid = {
+ .min_access_size = 4,
+ .max_access_size = 4
+ }
+ },
};
static const VMStateDescription goldfish_rtc_vmstate = {
@@ -265,7 +276,8 @@ static void goldfish_rtc_realize(DeviceState *d, Error
**errp)
SysBusDevice *dev = SYS_BUS_DEVICE(d);
GoldfishRTCState *s = GOLDFISH_RTC(d);
- memory_region_init_io(&s->iomem, OBJECT(s), &goldfish_rtc_ops, s,
+ memory_region_init_io(&s->iomem, OBJECT(s),
+ &goldfish_rtc_ops[s->big_endian], s,
"goldfish_rtc", 0x24);
sysbus_init_mmio(dev, &s->iomem);
@@ -274,10 +286,17 @@ static void goldfish_rtc_realize(DeviceState *d, Error
**errp)
s->timer = timer_new_ns(rtc_clock, goldfish_rtc_interrupt, s);
}
+static Property goldfish_rtc_properties[] = {
+ DEFINE_PROP_BOOL("big-endian", GoldfishRTCState, big_endian,
+ false),
+ DEFINE_PROP_END_OF_LIST(),
+};
+
static void goldfish_rtc_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
+ device_class_set_props(dc, goldfish_rtc_properties);
dc->realize = goldfish_rtc_realize;
dc->reset = goldfish_rtc_reset;
dc->vmsd = &goldfish_rtc_vmstate;
diff --git a/include/hw/rtc/goldfish_rtc.h b/include/hw/rtc/goldfish_rtc.h
index 79ca7daf5d..162be33863 100644
--- a/include/hw/rtc/goldfish_rtc.h
+++ b/include/hw/rtc/goldfish_rtc.h
@@ -42,6 +42,8 @@ struct GoldfishRTCState {
uint32_t irq_pending;
uint32_t irq_enabled;
uint32_t time_high;
+
+ bool big_endian;
};
#endif
--
2.37.2
- [PULL 00/11] OpenRISC updates for 7.2.0, Stafford Horne, 2022/09/04
- [PULL 02/11] target/openrisc: Fix memory reading in debugger, Stafford Horne, 2022/09/04
- [PULL 01/11] hw/openrisc: Split re-usable boot time apis out to boot.c, Stafford Horne, 2022/09/04
- [PULL 03/11] goldfish_rtc: Add big-endian property,
Stafford Horne <=
- [PULL 04/11] hw/openrisc: Add the OpenRISC virtual machine, Stafford Horne, 2022/09/04
- [PULL 06/11] hw/openrisc: Initialize timer time at startup, Stafford Horne, 2022/09/04
- [PULL 05/11] hw/openrisc: Add PCI bus support to virt, Stafford Horne, 2022/09/04
- [PULL 08/11] target/openrisc: Enable MTTCG, Stafford Horne, 2022/09/04
- [PULL 07/11] target/openrisc: Add interrupted CPU to log, Stafford Horne, 2022/09/04
- [PULL 09/11] target/openrisc: Interrupt handling fixes, Stafford Horne, 2022/09/04
- [PULL 10/11] hw/openrisc: virt: pass random seed to fdt, Stafford Horne, 2022/09/04
- [PULL 11/11] docs/system: openrisc: Add OpenRISC documentation, Stafford Horne, 2022/09/04
- Re: [PULL 00/11] OpenRISC updates for 7.2.0, Stefan Hajnoczi, 2022/09/05
- Re: [PULL 00/11] OpenRISC updates for 7.2.0, Stefan Hajnoczi, 2022/09/07