From nobody Tue Feb 10 19:14:34 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1521919947173405.01130077176606; Sat, 24 Mar 2018 12:32:27 -0700 (PDT) Received: from localhost ([::1]:47315 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ezott-0003gI-3j for importer@patchew.org; Sat, 24 Mar 2018 15:32:25 -0400 Received: from eggs.gnu.org ([208.118.235.92]:42626) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ezooB-0007s8-A4 for qemu-devel@nongnu.org; Sat, 24 Mar 2018 15:30:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ezon7-0005ua-AS for qemu-devel@nongnu.org; Sat, 24 Mar 2018 15:26:31 -0400 Received: from mail-pg0-x242.google.com ([2607:f8b0:400e:c05::242]:39685) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ezon7-0005sr-0d for qemu-devel@nongnu.org; Sat, 24 Mar 2018 15:25:25 -0400 Received: by mail-pg0-x242.google.com with SMTP id a19so5796060pgw.6 for ; Sat, 24 Mar 2018 12:25:24 -0700 (PDT) Received: from localhost.localdomain (c-73-158-53-43.hsd1.ca.comcast.net. [73.158.53.43]) by smtp.gmail.com with ESMTPSA id o2sm13353501pgq.87.2018.03.24.12.25.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 24 Mar 2018 12:25:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=N7CDduSNcQh9F1KpJLs9Pfik2T9mwplkd61MV9qnuQE=; b=hen4PY+NGqnLViHR/sRd/JiR6c6zAa9TsKbrvmnzO2nF7wNhcGBsCdBZQ9vfjQdcuI cCBuDpYz7PjEkRzvFLopHVr8LhPGgfl1Y3E/1l22HAVqs63vvs1cMiOllvBTZ4zhyHzD T8yzFyiNvb2ytnUciywe01kXAa7Cy7YODjdAyQo6uZ3nT8AkyaV8IVqgEI7qoUQ4rprh PGNmF9RcerDPK0YLnbGfEpWcbKjf2kkFQGxDKXXBEYXC6kV201WbIQlSaEaiQLcRuiUE ofLZPs+X46mfFoXrMTBtjUz+vy3nsAkulkyuAHxgKdZDV/JrnaOVzKSmUR6Fidlt8YK3 xYLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=N7CDduSNcQh9F1KpJLs9Pfik2T9mwplkd61MV9qnuQE=; b=AgQLVtnL7aggjBgU16Pzn3xbfWl7vAxGfsKRQ2U1sYfGFdHLR9mJDnUsjAnbRy+E6k INQ9NXQrzr/BlEGzGlnDIdO1FxJ+rfB/2xxlPisuJiV0++34nvXaV3Iv1uZvZO3Q0uHG uGvvD93v9DC1jWTe1USgSqgFePJ8uGTDXTUTvjvLYSsVAWcsY8IF+SulELbcWGBjku+/ KAPeHzfxRhdcxwUXp/PlbYimk7Han9wFXHPtNSh8K3UD8fdigtCuYxdBMvZNJpXmLzrJ uyxM4KCdEe3vzxppw+zoUZxR/3lkwhqgqYdQ5xIkzytdxBXWGA8/dq3NQam1S6S488wL fzJg== X-Gm-Message-State: AElRT7Fgw8Rasg9yeo25+Nj3Lga/VebWzd7wgUEnhXPNXqT520qtfUnB 4S8U0aQevU/bIwOTDx2ysOQ5TA== X-Google-Smtp-Source: AG47ELvKdY295yMMT02qn78A94GYIUAVP9D6py+9y+Rew07IsId6UIUOMay+k9qEr5Xp6xsEasbG/g== X-Received: by 10.101.93.5 with SMTP id e5mr6499970pgr.247.1521919524046; Sat, 24 Mar 2018 12:25:24 -0700 (PDT) From: Michael Davidsaver To: Peter Maydell , Thomas Huth Date: Sat, 24 Mar 2018 12:24:53 -0700 Message-Id: <20180324192455.12254-13-mdavidsaver@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180324192455.12254-1-mdavidsaver@gmail.com> References: <20180324192455.12254-1-mdavidsaver@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::242 Subject: [Qemu-devel] [PATCH 12/14] timer: ds-rtc handle CENTURY bit X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Antoine Mathys , Michael Davidsaver , qemu-devel@nongnu.org, David Gibson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Michael Davidsaver Reviewed-by: Peter Maydell --- 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; =20 + bool has_century; /* actual address space size must be <=3D NVRAM_SIZE */ unsigned addr_size; unsigned ctrl_offset; @@ -91,7 +92,7 @@ static const VMStateDescription vmstate_dsrtc =3D { } }; =20 -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] =3D to_bcd(now.tm_mday); s->nvram[R_MONTH] =3D to_bcd(now.tm_mon + 1); - s->nvram[R_YEAR] =3D to_bcd(now.tm_year - 100); + s->nvram[R_YEAR] =3D to_bcd(now.tm_year % 100u); + + ARRAY_FIELD_DP32(s->nvram, MONTH, CENTURY, + k->has_century && now.tm_year >=3D 100) } =20 -static void inc_regptr(DSRTCState *s) +static void inc_regptr(DSRTCState *s, DSRTCClass *k) { - DSRTCClass *k =3D DSRTC_GET_CLASS(s); /* The register pointer wraps around after k->addr_size-1; wraparound * causes the current time/date to be retransferred into * the secondary registers. */ s->ptr =3D (s->ptr + 1) % k->addr_size; if (!s->ptr) { - capture_current_time(s); + capture_current_time(s, k); } } =20 static int dsrtc_event(I2CSlave *i2c, enum i2c_event event) { DSRTCState *s =3D DSRTC(i2c); + DSRTCClass *k =3D DSRTC_GET_CLASS(s); =20 switch (event) { case I2C_START_RECV: @@ -150,7 +154,7 @@ static int dsrtc_event(I2CSlave *i2c, enum i2c_event ev= ent) * START_SEND, because the guest can't get at that data * without going through a START_RECV which would overwrite it. */ - capture_current_time(s); + capture_current_time(s, k); break; case I2C_START_SEND: s->addr_byte =3D true; @@ -165,10 +169,11 @@ static int dsrtc_event(I2CSlave *i2c, enum i2c_event = event) static int dsrtc_recv(I2CSlave *i2c) { DSRTCState *s =3D DSRTC(i2c); + DSRTCClass *k =3D DSRTC_GET_CLASS(s); uint8_t res; =20 res =3D s->nvram[s->ptr]; - inc_regptr(s); + inc_regptr(s, k); return res; } =20 @@ -230,7 +235,7 @@ static int dsrtc_send(I2CSlave *i2c, uint8_t data) if (s->ptr <=3D R_YEAR) { dsrtc_update(s); } - inc_regptr(s); + inc_regptr(s, k); return 0; } =20 @@ -278,6 +283,7 @@ static void ds1338_class_init(ObjectClass *klass, void = *data) { DSRTCClass *k =3D DSRTC_CLASS(klass); =20 + k->has_century =3D false; k->addr_size =3D 0x40; k->ctrl_offset =3D R_DS1338_CTRL; k->ctrl_write =3D ds1338_control_write; --=20 2.11.0