From nobody Mon Feb 9 19:08:53 2026 Delivered-To: importer@patchew.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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1516746829633913.6408807472019; Tue, 23 Jan 2018 14:33:49 -0800 (PST) Received: from localhost ([::1]:57963 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ee78L-0005TG-GI for importer@patchew.org; Tue, 23 Jan 2018 17:33:37 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38675) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ee74K-00034G-Qy for qemu-devel@nongnu.org; Tue, 23 Jan 2018 17:29:34 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ee74G-0000C1-KX for qemu-devel@nongnu.org; Tue, 23 Jan 2018 17:29:28 -0500 Received: from mail-by2nam01on0087.outbound.protection.outlook.com ([104.47.34.87]:49255 helo=NAM01-BY2-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ee74G-0000Am-8i for qemu-devel@nongnu.org; Tue, 23 Jan 2018 17:29:24 -0500 Received: from BY2PR02CA0095.namprd02.prod.outlook.com (10.163.44.149) by MWHPR02MB3390.namprd02.prod.outlook.com (10.164.187.167) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.444.14; Tue, 23 Jan 2018 22:29:22 +0000 Received: from SN1NAM02FT016.eop-nam02.prod.protection.outlook.com (2a01:111:f400:7e44::201) by BY2PR02CA0095.outlook.office365.com (2a01:111:e400:5261::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.444.14 via Frontend Transport; Tue, 23 Jan 2018 22:29:21 +0000 Received: from xsj-pvapsmtpgw02 (149.199.60.100) by SN1NAM02FT016.mail.protection.outlook.com (10.152.72.113) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.20.428.12 via Frontend Transport; Tue, 23 Jan 2018 22:29:21 +0000 Received: from unknown-38-66.xilinx.com ([149.199.38.66]:60371 helo=xsj-pvapsmtp01) by xsj-pvapsmtpgw02 with esmtp (Exim 4.63) (envelope-from ) id 1ee74C-0005GM-Fl; Tue, 23 Jan 2018 14:29:20 -0800 Received: from [127.0.0.1] (helo=localhost) by xsj-pvapsmtp01 with smtp (Exim 4.63) (envelope-from ) id 1ee74C-00089S-Fc; Tue, 23 Jan 2018 14:29:20 -0800 Received: from [172.19.2.220] (helo=xsjalistai50.xilinx.com) by xsj-pvapsmtp01 with esmtp (Exim 4.63) (envelope-from ) id 1ee742-00088W-Lc; Tue, 23 Jan 2018 14:29:10 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector1-xilinx-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=557ilcp9iQWboWbiHSZe/VmiupyIiAkK63mRsXVMdTY=; b=3pR0r2sWQfiI86mzpCOJMjEhzuASogd0G6pLng0vFYIYDLcI5Iu2BcT6mvGl6q1AwsquLb4NoV3Btfss96OiDD83iBsgX6+Jlxvp99d7XknU5OZcihusW2Czqt7YS7e1tvP6R2OWFoHGFNR/fATfWsNH+Sjc5rzeGpUvGZV5qvw= Authentication-Results: spf=pass (sender IP is 149.199.60.100) smtp.mailfrom=xilinx.com; nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=bestguesspass action=none header.from=xilinx.com; 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; Received-SPF: Pass (protection.outlook.com: domain of xilinx.com designates 149.199.60.100 as permitted sender) receiver=protection.outlook.com; client-ip=149.199.60.100; helo=xsj-pvapsmtpgw02; From: Alistair Francis To: , Date: Tue, 23 Jan 2018 14:24:47 -0800 Message-ID: <29c39a6f9ce3734bf693581348ed78f4bff3e0ef.1516746211.git.alistair.francis@xilinx.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-Product-Ver: IMSS-7.1.0.1224-8.2.0.1013-23614.006 X-TM-AS-User-Approved-Sender: Yes;Yes X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:149.199.60.100; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(376002)(346002)(396003)(39380400002)(39860400002)(2980300002)(438002)(189003)(199004)(5660300001)(106002)(316002)(8936002)(5820100001)(50226002)(36386004)(478600001)(9786002)(50466002)(47776003)(6666003)(2950100002)(336011)(106466001)(230783001)(2906002)(110136005)(2870700001)(36756003)(54906003)(8676002)(77096007)(63266004)(81156014)(76176011)(26005)(59450400001)(81166006)(4326008)(7696005)(23676004)(39060400002)(118296001)(356003)(305945005)(107986001)(5001870100001); DIR:OUT; SFP:1101; SCL:1; SRVR:MWHPR02MB3390; H:xsj-pvapsmtpgw02; FPR:; SPF:Pass; PTR:xapps1.xilinx.com,unknown-60-100.xilinx.com; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; SN1NAM02FT016; 1:mO8CxVJ9NyDhbQ0vzohWbNj7YSfpYT8A37smuezyZARFwesashxNoKru+TZkH7pSpHwf5YVq9cA7Yt/AaM4l9RNYP6oVLYySQduYSNaXJD1fnJs9NQHcyKsjZhJl2ajP X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ec2e2dd1-4004-4135-a223-08d562b0bfb6 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(4608076)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603307)(7153060); SRVR:MWHPR02MB3390; X-Microsoft-Exchange-Diagnostics: 1; MWHPR02MB3390; 3:rtL9pNXrKgAF/cPE0gNu77zVsfkVLmg/+9tVULDaboMwhVheqQtZ4A1PpTGI4gJAeg59oTeJv0dCDQVEdC5YxzEkKpMV0eNm7cyR0zBOHovezQfqB3nUaFX1YHjXpVESBVVo2SvfZWjMZ3Cj9R7MSLRa2bwfl4QTYhFmsNJAeQsaWUgCPE6aC1pCTdSE2Af8iMVClGCezG9kJQrHsKniJ9TNpyujmdAxx9IjK5nt9LHfGdbkBuVV/hMQqW44rn4h8qB2ViwG2GmTz5BDL7qIY2hjtC2G9/cctsDkbHT7wyj/QdC3whxmgzmZ6upwFJbUXs4IpyYwhn6TSgwiQDeEmSK9wu4EoP9eWOkEdRiWGlg=; 25:byGAokpIIWtNV+v+6cuiD7tdQzVRMBMup++nemlh+DAncfilrWtzMhqwshXZAjjE2rhBEnKnHtHxZDuhBXD2lKxvvuZoLe6msxt+3dcV6sPQldC069KrxISQsqhNGcXzTtg/DAdXViKJeilUNdgbOhvt1InEgrq71BX5F8uFmONyQByK09/YB5wJ9hisVPAVsFFHQi/XhvHY4uMyrsQASvIO/8ohd0RrEf2Zk+J9QyHw5pLSM2qS2IoIb68Cg9DA4kJUBbBKF7k8E6CZJv+mvy1mET+EHlFp4yp0H4fWIl2zfvy6agJ2URRrpz36cg3tbcqBt4LiK5qCdWCD2e49Mg== X-MS-TrafficTypeDiagnostic: MWHPR02MB3390: X-Microsoft-Exchange-Diagnostics: 1; MWHPR02MB3390; 31:9udL04fsm8kzXH8O1SdcV1PqhyqDPdaC+BaWdYIlshuu4VJaK4FTZHLIIMWUWTlujXBtu/P8egPfTbGuflwjCH1AbrtpI1YjLEKj+RPpGvQaUa0LH04ULzMOD2u3ddcwvLAU3yTDe61+Bwd7T0DBc/iqQSYWoLImMM0nfCRIxxyefbk3DP+2YJR9fs+n+hg5yI28Gu7MxGCni/SwIserf5uJ6U7nHyB4+cn7RmYEark=; 20:y64pxbpDQU1iQHoxfmxk2ayZwkm597d/GV54l7FHaheWss6WAFCGbqWD/P6vEkJkqnUOH5t/9WaEqOSUGhd1pZ0zHz4Xx3jqyj1v8Pje8phD/Eo3jA3O6z4fWRkSEPPIctugq/6v83eBNdBSvVjQnS18qP2zIIHP8CfIRtJyxLQAEPtNlhTdDajTSferXL6UqcP+QoUvWgTljqHrBh6vWSUuy9zuCkG0q2bKqaU7gE9wc4AgREaJoAGkQQlblBK+0MPSsSSZF5chumz2ctqhSrC7bXZogBaLxknFsfnaQMJB/WMhlNsioUtAeCz7LcPo3polr4mDyBMnUA4hG864/cq0aMQs1fJpHRD4GJqR9kDEluZs5ZIBN/8WXLNwkqR+XTrJBNHpdL2umHdzJ+kBnJueZ7yIqxHs32aNANwNPhe10vNkAvoDNp5SmYQGgmFlpuTkw8XKGy2OYK0/6EN+MrbtrDlAYPjRVLfAPJdRJJcxkIHNovMXJniFkwJTjAov X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(192813158149592); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040501)(2401047)(5005006)(8121501046)(10201501046)(3231023)(2400081)(944501161)(93006095)(93004095)(3002001)(6055026)(6041288)(20161123558120)(20161123562045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(6072148)(201708071742011); SRVR:MWHPR02MB3390; BCL:0; PCL:0; RULEID:; SRVR:MWHPR02MB3390; X-Microsoft-Exchange-Diagnostics: 1; MWHPR02MB3390; 4:v4HBqDfxMYxYRlxrieYaFOWqLcgEl0QgA7jodFUz0VGQkRqz79z0xMgtmANZuVtue6ZFBjf6GxvyeztDxcIfbuW6dMsMSfTF+GBpxuRmWO3xfoVyumbWQt3csIrzI2xwGMr1KY++zyvAH3jBRFqtD8TjoUmnlnRNLuCLEisiSgA+59c6TsH9g2W/Jh8VMXLaj9HugWmZSoCDrCPOS43aW9twF+Ge6ME6blq28tIK0WHGA3mPK9cOB3JTrao2kDnKk8TLqUkxoGy+xhpgRFJwa4nw7WN55Vqt3mAiFne/1+ksS6v6Vx0i4+loBeFsB46w X-Forefront-PRVS: 05610E64EE X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; MWHPR02MB3390; 23:9l4Y21zAY1AuLhT+M62qquu7l9IZBGOFjXMwjSyyG?= =?us-ascii?Q?fMbRN6sp7iD3AMOiXZ4Kk9XXLGd9t9Be4dbTlFGmcT2yONumOkMWCayvNad8?= =?us-ascii?Q?QxpJiYVAQCqLVcDDwJJi3H6psjjpChj9fLEPJaTgca/WvZ6/M1Hr8ewyHWM6?= =?us-ascii?Q?zKFOKQaeugPhfUvT3FA1x9YRjq9qgiJWNoTuYbgFgjM5X3JP2UMwqMriUSAX?= =?us-ascii?Q?YcCdUvScVowKyP3yWP5BgF5G1w8H1EVre5/+2WJwyRjndhq/69iOv88dQ0OW?= =?us-ascii?Q?iVjOLrkB974Y/nBc3WMARzcKkOOy6AoPqGMElyAcQp/J33N/jrsaL6h033Lg?= =?us-ascii?Q?qkdbArg3Ae2lTSDeh97dQ8tqbcXIx4vFWsc3OpVZFThAmthvknQzaumeUgC1?= =?us-ascii?Q?vgDe3+It9KYqkEC274018B5qHwliudBIKNZyGwtre8lVP1YXbi3TkBdZW7Ig?= =?us-ascii?Q?Qo3++x3s9vadC0+SjaBstvdPH5AEb6MrhzAmDo9FFmC0STBdBhJ6usEvnXnJ?= =?us-ascii?Q?iPk45muKvZNU9WnTHIUIKFn1CbLLlLPgG7+vMT4TZABJRk2mSHhDDGNCWQ6f?= =?us-ascii?Q?fbJbn0rwMRc65jh/PE4aPcTQ3CvrS1Q4FTxydeOUyddtNoHsh4dML5Uozm+Y?= =?us-ascii?Q?vC2uTamyLrZym8YO06WGs3miQn6V2RXJbjeHy9zsK9TlH086hT1A72PIcCPv?= =?us-ascii?Q?Wxq8bCXYXmMHoMQ0jUwNsLSDN+XpJmhsMNz3JqDnb5jpY5qxv19H33xpJ3XA?= =?us-ascii?Q?yYGzkHTqHkCcS9v8vKXgsLTHtSaS8HuzGHvZypCWG1xaNfYnT6dudK8OfJKw?= =?us-ascii?Q?8h11PyyeQjl37kPBW+poyWBOUUcbTVPdHz76yJ5ZfmOGJoBLt9d0c74TI5xD?= =?us-ascii?Q?0O6HVUiHV2LiuYiQOLpw8VQ8HuxPvxgT7nj8oU0jLoWkFXLrAlhbH8lC+/CL?= =?us-ascii?Q?jRDZv78aRZmNrucgIbL5HriRt+zBq/wooPb8gPdpIBJu+bQvElUiPVbdw2jS?= =?us-ascii?Q?wpKdxv/sv03djASN6413AtPFKrnjzLpzzeo6dRyAhFWZki7HqyZrgkBc0JoN?= =?us-ascii?Q?9KS4zTQQjt/2+INS9/m+bzMQvfrAy5wrUqbd6Lxbsy9KuXvKclYe+mt9apps?= =?us-ascii?Q?KtDEcCtHRg=3D?= X-Microsoft-Exchange-Diagnostics: 1; MWHPR02MB3390; 6:ShLxvT1hMqebkeRF7sWYk9MLFX7zBP5k0s1Wsv7/n3QQjmxRGWPE8osyGBQlLqeRBlvDNrpF/NKt/bp1mDV6shBudqQTj/aBAcw1MXXp9sO+KQwhDsdBqRyYbWkFp8bI3S376SOfzqKf/pzbSZJWvR1RzDGRtoUThbY0/g1njktfwTYcmtcwhPGWagjQLCaFeg5V2NbVUivXCh80Q/Uk2a38GAQVtW1RBOn4peLf2dj+Pcm5iA5e8wut2RoqJC+HB8Uxsnvfk8lYEHH6bGCwYzD9RKrCKrgPD6x87mliMRAVlKme6mdik/MBOXgLsq8hFV1hdFUu6QFuvvPi1OI9bgaHLq2dWvsuTahYDeOaGHo=; 5:yDLBHqE7nQC7HE9StgjeVu5swPzlcYT8qir2RzRxIaSsmphVTPT+onb9uA7b1Bk4sEZvdYypWYocQZ/bnJ167/mhwvpPUSGu+DPA9tlrj61U2fcRIUT8GS02pz4HGEcYijCy3nNWs8TbNGkpuhQnQ8gelAsCxtFB0Cd5fUoN/ys=; 24:OVwYt+jEAtrkeHBjFNdXV+hFuZ2kM5mJRkRL73FbXQS/qtN1iHW7wswkm4ljwgRxFFrV7m7gTgzepKYj49kaURmEpdtzbPdrfjah4pSl8YA=; 7:/nFT1w+ZqYdYiChyVgnSZGQtYq51VMUluC6EQ7y2A40/We3HokYFX96RJ7nIkLgtwH2LB+EBuRzL/eDiTixgwtLe0XS5IZxjmKCMEYxUE5/ktLVhYrL1CuYywbZfr4JdiX8ZM/9GsoCTKv6wWKFltbGbqPLYI1+jNp6S0mglRWBkUMLISU3h6QmCTBgcRqpy1UoSR34/TSWbmNHmZQfVn3dUWaiYEEy6NZpNMWM9jk5ud5miS9a2NFMT8TbvP/dT SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2018 22:29:21.0007 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ec2e2dd1-4004-4135-a223-08d562b0bfb6 X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c; Ip=[149.199.60.100]; Helo=[xsj-pvapsmtpgw02] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR02MB3390 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.34.87 Subject: [Qemu-devel] [PATCH v5 2/3] xlnx-zynqmp-rtc: Add basic time support 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: edgar.iglesias@xilinx.com, alistair23@gmail.com, edgar.iglesias@gmail.com, f4bug@amsat.org, alistair.francis@xilinx.com 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-Type: text/plain; charset="utf-8" Allow the guest to determine the time set from the QEMU command line. This includes adding a trace event to debug the new time. Signed-off-by: Alistair Francis --- V5: - Recalculate tick_offset after migration V4: - Use the .unimp property V3: - Store an offset value - Use mktimegm() - Log unimplemented writes V2: - Convert DB_PRINT() macro to trace include/hw/timer/xlnx-zynqmp-rtc.h | 3 +++ hw/timer/xlnx-zynqmp-rtc.c | 52 ++++++++++++++++++++++++++++++++++= ++++ hw/timer/trace-events | 3 +++ 3 files changed, 58 insertions(+) diff --git a/include/hw/timer/xlnx-zynqmp-rtc.h b/include/hw/timer/xlnx-zyn= qmp-rtc.h index 87649836cc..2867563bdd 100644 --- a/include/hw/timer/xlnx-zynqmp-rtc.h +++ b/include/hw/timer/xlnx-zynqmp-rtc.h @@ -79,6 +79,9 @@ typedef struct XlnxZynqMPRTC { qemu_irq irq_rtc_int; qemu_irq irq_addr_error_int; =20 + struct tm current_tm; + uint32_t tick_offset; + uint32_t regs[XLNX_ZYNQMP_RTC_R_MAX]; RegisterInfo regs_info[XLNX_ZYNQMP_RTC_R_MAX]; } XlnxZynqMPRTC; diff --git a/hw/timer/xlnx-zynqmp-rtc.c b/hw/timer/xlnx-zynqmp-rtc.c index 707f145027..1d229870c5 100644 --- a/hw/timer/xlnx-zynqmp-rtc.c +++ b/hw/timer/xlnx-zynqmp-rtc.c @@ -29,6 +29,10 @@ #include "hw/register.h" #include "qemu/bitops.h" #include "qemu/log.h" +#include "hw/ptimer.h" +#include "qemu/cutils.h" +#include "sysemu/sysemu.h" +#include "trace.h" #include "hw/timer/xlnx-zynqmp-rtc.h" =20 #ifndef XLNX_ZYNQMP_RTC_ERR_DEBUG @@ -47,6 +51,19 @@ static void addr_error_int_update_irq(XlnxZynqMPRTC *s) qemu_set_irq(s->irq_addr_error_int, pending); } =20 +static uint32_t rtc_get_count(XlnxZynqMPRTC *s) +{ + int64_t now =3D qemu_clock_get_ns(rtc_clock); + return s->tick_offset + now / NANOSECONDS_PER_SECOND; +} + +static uint64_t current_time_postr(RegisterInfo *reg, uint64_t val64) +{ + XlnxZynqMPRTC *s =3D XLNX_ZYNQMP_RTC(reg->opaque); + + return rtc_get_count(s); +} + static void rtc_int_status_postw(RegisterInfo *reg, uint64_t val64) { XlnxZynqMPRTC *s =3D XLNX_ZYNQMP_RTC(reg->opaque); @@ -97,13 +114,17 @@ static uint64_t addr_error_int_dis_prew(RegisterInfo *= reg, uint64_t val64) =20 static const RegisterAccessInfo rtc_regs_info[] =3D { { .name =3D "SET_TIME_WRITE", .addr =3D A_SET_TIME_WRITE, + .unimp =3D MAKE_64BIT_MASK(0, 32), },{ .name =3D "SET_TIME_READ", .addr =3D A_SET_TIME_READ, .ro =3D 0xffffffff, + .post_read =3D current_time_postr, },{ .name =3D "CALIB_WRITE", .addr =3D A_CALIB_WRITE, + .unimp =3D MAKE_64BIT_MASK(0, 32), },{ .name =3D "CALIB_READ", .addr =3D A_CALIB_READ, .ro =3D 0x1fffff, },{ .name =3D "CURRENT_TIME", .addr =3D A_CURRENT_TIME, .ro =3D 0xffffffff, + .post_read =3D current_time_postr, },{ .name =3D "CURRENT_TICK", .addr =3D A_CURRENT_TICK, .ro =3D 0xffff, },{ .name =3D "ALARM", .addr =3D A_ALARM, @@ -143,6 +164,10 @@ static void rtc_reset(DeviceState *dev) register_reset(&s->regs_info[i]); } =20 + trace_xlnx_zynqmp_rtc_gettime(s->current_tm.tm_year, s->current_tm.tm_= mon, + s->current_tm.tm_mday, s->current_tm.tm_= hour, + s->current_tm.tm_min, s->current_tm.tm_s= ec); + rtc_int_update_irq(s); addr_error_int_update_irq(s); } @@ -178,14 +203,41 @@ static void rtc_init(Object *obj) sysbus_init_mmio(sbd, &s->iomem); sysbus_init_irq(sbd, &s->irq_rtc_int); sysbus_init_irq(sbd, &s->irq_addr_error_int); + + qemu_get_timedate(&s->current_tm, 0); + s->tick_offset =3D mktimegm(&s->current_tm) - + qemu_clock_get_ns(rtc_clock) / NANOSECONDS_PER_SECOND; +} + +static int rtc_post_load(void *opaque, int version_id) +{ + XlnxZynqMPRTC *s =3D opaque; + + /* The tick_offset is added to the current time to determine the guest + * time. After migration we don't want to use the original time as that + * will indicate to the guest that time has passed, so we need to + * recalculate the tick_offset here. + */ + s->tick_offset =3D mktimegm(&s->current_tm) - + qemu_clock_get_ns(rtc_clock) / NANOSECONDS_PER_SECOND; + + return 0; } =20 static const VMStateDescription vmstate_rtc =3D { .name =3D TYPE_XLNX_ZYNQMP_RTC, .version_id =3D 1, .minimum_version_id =3D 1, + .post_load =3D rtc_post_load, .fields =3D (VMStateField[]) { VMSTATE_UINT32_ARRAY(regs, XlnxZynqMPRTC, XLNX_ZYNQMP_RTC_R_MAX), + VMSTATE_INT32(current_tm.tm_sec, XlnxZynqMPRTC), + VMSTATE_INT32(current_tm.tm_min, XlnxZynqMPRTC), + VMSTATE_INT32(current_tm.tm_hour, XlnxZynqMPRTC), + VMSTATE_INT32(current_tm.tm_wday, XlnxZynqMPRTC), + VMSTATE_INT32(current_tm.tm_mday, XlnxZynqMPRTC), + VMSTATE_INT32(current_tm.tm_mon, XlnxZynqMPRTC), + VMSTATE_INT32(current_tm.tm_year, XlnxZynqMPRTC), VMSTATE_END_OF_LIST(), } }; diff --git a/hw/timer/trace-events b/hw/timer/trace-events index 640722b5d1..e6e042fddb 100644 --- a/hw/timer/trace-events +++ b/hw/timer/trace-events @@ -60,3 +60,6 @@ systick_write(uint64_t addr, uint32_t value, unsigned siz= e) "systick write addr cmsdk_apb_timer_read(uint64_t offset, uint64_t data, unsigned size) "CMSDK= APB timer read: offset 0x%" PRIx64 " data 0x%" PRIx64 " size %u" cmsdk_apb_timer_write(uint64_t offset, uint64_t data, unsigned size) "CMSD= K APB timer write: offset 0x%" PRIx64 " data 0x%" PRIx64 " size %u" cmsdk_apb_timer_reset(void) "CMSDK APB timer: reset" + +# hw/timer/xlnx-zynqmp-rtc.c +xlnx_zynqmp_rtc_gettime(int year, int month, int day, int hour, int min, i= nt sec) "Get time from host: %d-%d-%d %2d:%02d:%02d" --=20 2.14.1