On 24 March 2018 at 19:24, Michael Davidsaver <mdavidsa...@gmail.com> wrote: > Signed-off-by: Michael Davidsaver <mdavidsa...@gmail.com> > --- > hw/timer/ds-rtc.c | 22 ++++++++++++++-------- > 1 file changed, 14 insertions(+), 8 deletions(-) > > diff --git a/hw/timer/ds-rtc.c b/hw/timer/ds-rtc.c > index 2df1bce3f8..5a4df1b115 100644 > --- a/hw/timer/ds-rtc.c > +++ b/hw/timer/ds-rtc.c > @@ -70,6 +70,7 @@ typedef struct DSRTCState { > typedef struct DSRTCClass { > I2CSlaveClass parent_obj; > > + bool has_century; > /* actual address space size must be <= NVRAM_SIZE */ > unsigned addr_size; > unsigned ctrl_offset; > @@ -91,7 +92,7 @@ static const VMStateDescription vmstate_dsrtc = { > } > }; > > -static void capture_current_time(DSRTCState *s) > +static void capture_current_time(DSRTCState *s, DSRTCClass *k) > { > /* Capture the current time into the secondary registers > * which will be actually read by the data transfer operation. > @@ -123,25 +124,28 @@ static void capture_current_time(DSRTCState *s) > } > s->nvram[R_DATE] = to_bcd(now.tm_mday); > s->nvram[R_MONTH] = to_bcd(now.tm_mon + 1); > - s->nvram[R_YEAR] = to_bcd(now.tm_year - 100); > + s->nvram[R_YEAR] = to_bcd(now.tm_year % 100u); > + > + ARRAY_FIELD_DP32(s->nvram, MONTH, CENTURY, > + k->has_century && now.tm_year >= 100) > } > > -static void inc_regptr(DSRTCState *s) > +static void inc_regptr(DSRTCState *s, DSRTCClass *k) > { > - DSRTCClass *k = DSRTC_GET_CLASS(s);
I would just leave this function the way it is rather than changing it to take the class pointer. Otherwise Reviewed-by: Peter Maydell <peter.mayd...@linaro.org> thanks -- PMM