[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v3 1/7] RTC: Remove the logic to update time for
From: |
Zhang, Yang Z |
Subject: |
Re: [Qemu-devel] [PATCH v3 1/7] RTC: Remove the logic to update time format when DM bit changed |
Date: |
Fri, 9 Mar 2012 01:58:16 +0000 |
I think the better fixing is to update the cmos before reading the RTC. And in
my patch, it will do it.
best regards
yang
> -----Original Message-----
> From: Zhang, Yang Z
> Sent: Friday, March 09, 2012 9:54 AM
> To: Marcelo Tosatti
> Cc: address@hidden; Jan Kiszka; address@hidden;
> address@hidden; Paolo Bonzini
> Subject: RE: [PATCH v3 1/7] RTC: Remove the logic to update time format when
> DM bit changed
>
> > -----Original Message-----
> > From: Marcelo Tosatti [mailto:address@hidden
> > Sent: Friday, March 09, 2012 9:36 AM
> > > ---
> > > hw/mc146818rtc.c | 10 +---------
> > > 1 files changed, 1 insertions(+), 9 deletions(-)
> > >
> > > diff --git a/hw/mc146818rtc.c b/hw/mc146818rtc.c
> > > index a46fdfc..9b49cbc 100644
> > > --- a/hw/mc146818rtc.c
> > > +++ b/hw/mc146818rtc.c
> > > @@ -252,15 +252,7 @@ static void cmos_ioport_write(void *opaque,
> uint32_t
> > addr, uint32_t data)
> > > rtc_set_time(s);
> > > }
> > > }
> > > - if (((s->cmos_data[RTC_REG_B] ^ data) & (REG_B_DM |
> > REG_B_24H)) &&
> > > - !(data & REG_B_SET)) {
> > > - /* If the time format has changed and not in set mode,
> > > - update the registers immediately. */
> > > - s->cmos_data[RTC_REG_B] = data;
> > > - rtc_copy_date(s);
> > > - } else {
> > > - s->cmos_data[RTC_REG_B] = data;
> > > - }
> > > + s->cmos_data[RTC_REG_B] = data;
> > > rtc_timer_update(s, qemu_get_clock_ns(rtc_clock));
> > > break;
> > > case RTC_REG_C:
> >
> > Even though its not correct accordingly to the manual, guests can update
> > format and expect it to be reflected to time byte reads.
> >
> > commit 51e08f3e4b8a3b6d27fde9a9e75c8fa32eaa72d0
> > Author: Aurelien Jarno <address@hidden>
> > Date: Tue Jan 25 11:55:15 2011 +0100
> >
> > mc146818rtc: update registers after a format change
> >
> > For some unknown reason, the MIPS kernel briefly changes the RTC to
> > binary mode during boot, switch back to BCD mode and read the time. As
> > the registers are updated only every second, they may still be in the
> > old format when they are read.
> >
> > This patch forces a register update immediately after a format
> > change (BCD/binary or 12/24H). This avoid long fsck during boot due to
> > time wrap.
> >
> > Signed-off-by: Aurelien Jarno <address@hidden>
> >
> This is obvious a wrong fixing. Even for real RTC, changing date mode will not
> change the internal time register. So the MIPS kernel also should not boot up
> with real RTC. But it only fail in qemu, this means he not found the culprit.
> This
> just a workaround.
>
>
> best regards
> yang