mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-12-28 18:20:29 -07:00
hw/rtc/goldfish: keep time offset when resetting
Currently resetting the leads to resynchronizing the Goldfish RTC with the system clock of the host. In real hardware an RTC reset would not change the wall time. Other RTCs like pl031 do not show this behavior. Move the synchronization of the RTC with the system clock to the instance realization. Cc: qemu-stable@nongnu.org Reported-by: Frederik Du Toit Lotter <fred.lotter@canonical.com> Fixes:9a5b40b842("hw: rtc: Add Goldfish RTC device") Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Message-ID: <20250321221248.17764-1-heinrich.schuchardt@canonical.com> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> (cherry picked from commit2542d5cf47) Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
This commit is contained in:
parent
ec877d2ab0
commit
d87ee29327
1 changed files with 6 additions and 7 deletions
|
|
@ -239,15 +239,8 @@ static const VMStateDescription goldfish_rtc_vmstate = {
|
|||
static void goldfish_rtc_reset(DeviceState *dev)
|
||||
{
|
||||
GoldfishRTCState *s = GOLDFISH_RTC(dev);
|
||||
struct tm tm;
|
||||
|
||||
timer_del(s->timer);
|
||||
|
||||
qemu_get_timedate(&tm, 0);
|
||||
s->tick_offset = mktimegm(&tm);
|
||||
s->tick_offset *= NANOSECONDS_PER_SECOND;
|
||||
s->tick_offset -= qemu_clock_get_ns(rtc_clock);
|
||||
s->tick_offset_vmstate = 0;
|
||||
s->alarm_next = 0;
|
||||
s->alarm_running = 0;
|
||||
s->irq_pending = 0;
|
||||
|
|
@ -258,6 +251,7 @@ static void goldfish_rtc_realize(DeviceState *d, Error **errp)
|
|||
{
|
||||
SysBusDevice *dev = SYS_BUS_DEVICE(d);
|
||||
GoldfishRTCState *s = GOLDFISH_RTC(d);
|
||||
struct tm tm;
|
||||
|
||||
memory_region_init_io(&s->iomem, OBJECT(s),
|
||||
&goldfish_rtc_ops[s->big_endian], s,
|
||||
|
|
@ -267,6 +261,11 @@ static void goldfish_rtc_realize(DeviceState *d, Error **errp)
|
|||
sysbus_init_irq(dev, &s->irq);
|
||||
|
||||
s->timer = timer_new_ns(rtc_clock, goldfish_rtc_interrupt, s);
|
||||
|
||||
qemu_get_timedate(&tm, 0);
|
||||
s->tick_offset = mktimegm(&tm);
|
||||
s->tick_offset *= NANOSECONDS_PER_SECOND;
|
||||
s->tick_offset -= qemu_clock_get_ns(rtc_clock);
|
||||
}
|
||||
|
||||
static Property goldfish_rtc_properties[] = {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue