From nobody Thu May 2 17:45:11 2024 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 1516746693039519.548426209511; Tue, 23 Jan 2018 14:31:33 -0800 (PST) Received: from localhost ([::1]:57821 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ee76J-00044K-UB for importer@patchew.org; Tue, 23 Jan 2018 17:31:31 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38635) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ee74J-00033Z-GX for qemu-devel@nongnu.org; Tue, 23 Jan 2018 17:29:31 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ee74E-00009e-J0 for qemu-devel@nongnu.org; Tue, 23 Jan 2018 17:29:27 -0500 Received: from mail-cys01nam02on0040.outbound.protection.outlook.com ([104.47.37.40]:45344 helo=NAM02-CY1-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 1ee74E-000076-91 for qemu-devel@nongnu.org; Tue, 23 Jan 2018 17:29:22 -0500 Received: from MWHPR0201CA0104.namprd02.prod.outlook.com (10.167.161.45) by BY2PR02MB1331.namprd02.prod.outlook.com (10.162.79.26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.428.17; Tue, 23 Jan 2018 22:29:12 +0000 Received: from BL2NAM02FT038.eop-nam02.prod.protection.outlook.com (2a01:111:f400:7e46::205) by MWHPR0201CA0104.outlook.office365.com (2603:10b6:301:75::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.428.17 via Frontend Transport; Tue, 23 Jan 2018 22:29:11 +0000 Received: from xsj-pvapsmtpgw01 (149.199.60.83) by BL2NAM02FT038.mail.protection.outlook.com (10.152.77.25) 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:10 +0000 Received: from unknown-38-66.xilinx.com ([149.199.38.66] helo=xsj-pvapsmtp01) by xsj-pvapsmtpgw01 with esmtp (Exim 4.63) (envelope-from ) id 1ee742-00068q-6x; Tue, 23 Jan 2018 14:29:10 -0800 Received: from [127.0.0.1] (helo=localhost) by xsj-pvapsmtp01 with smtp (Exim 4.63) (envelope-from ) id 1ee742-00088G-6G; Tue, 23 Jan 2018 14:29:10 -0800 Received: from [172.19.2.220] (helo=xsjalistai50.xilinx.com) by xsj-pvapsmtp01 with esmtp (Exim 4.63) (envelope-from ) id 1ee740-000883-7c; Tue, 23 Jan 2018 14:29:08 -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=wWyaNoDr0duRtZJyOBmZ9NbVU4Zqx5RMNqW5FiKyqPw=; b=tqMSmXoze2To8Dyzr0E3FxlXhO0nBVEgvE/OunESZbJOQPi+AAFJK1d/4HV+E0B3/atdfGciP1zRT+RIcCeA3FRp/f1x/S+q8B/piAlfYojQPsXjqZRzUPmdpy4eqTYpkBHfE4R1/c5hDnwBxuRWw5qowyncrDfkR8TwEzz+oXE= Authentication-Results: spf=pass (sender IP is 149.199.60.83) 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.83 as permitted sender) receiver=protection.outlook.com; client-ip=149.199.60.83; helo=xsj-pvapsmtpgw01; From: Alistair Francis To: , Date: Tue, 23 Jan 2018 14:24:45 -0800 Message-ID: <7c26fde24cace1295746fbfc759bdfd5e1e6518a.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.83; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(346002)(396003)(39380400002)(376002)(39860400002)(2980300002)(438002)(199004)(189003)(36756003)(106466001)(4326008)(63266004)(50226002)(77096007)(59450400001)(356003)(81156014)(2870700001)(26005)(81166006)(305945005)(230783001)(2906002)(8936002)(36386004)(106002)(50466002)(336011)(110136005)(2950100002)(8676002)(54906003)(118296001)(6666003)(76176011)(5660300001)(7696005)(478600001)(47776003)(39060400002)(5820100001)(316002)(9786002)(23676004)(107986001); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR02MB1331; H:xsj-pvapsmtpgw01; FPR:; SPF:Pass; PTR:unknown-60-83.xilinx.com; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2NAM02FT038; 1:ZqqQFGgvRSI5m/24kM0D+TB6GG5AT3RjI8Qp7LSr3J3Z1dZFJWjdYCwom9HDr3uEO5Yp8sPEnVwqXwfSCh8/KDuHMroJaCu1XW+PHkbg1Z6ETExJgcdGSms2o7zUVA5p X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 686c4a55-7344-4113-9a91-08d562b0b9c5 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(5600026)(4604075)(4608076)(2017052603307)(7153060); SRVR:BY2PR02MB1331; X-Microsoft-Exchange-Diagnostics: 1; BY2PR02MB1331; 3:EyBbWQlDWFs4GlrP7iQW2IwLgb+gTegaMQWg2bb4CYFcCZ3W5KJrr6llxHE5CJcWFlFfGieABp3O2l9X7rfUuMtjUuOZf084ZrShyLKu0ycMSq9X8MmMRmtQFXtfZtGc9rv94AgNOelsTcAzVoBm/4JpXpH65ZEYrZC3YG75zW8/m2E7dZI0TJYhK93/O9Nb5dn5I/kYIrpmQz9ijYSQPVuyJTK44EnlKtvcHH/dAcLi18MSiDTSs4G6getVuQFdvcEm+EYl243jZol9fUpqFylbXtTyBGHuCREvGBPynkJUkBSWD+PMnVlOpMmujafySvFuMnUg1jDrI7E0gVSdshrWn4E4JclbbUUiUmrxddw=; 25:R9dMrDFtMRRgWrk/5C9duvPPINkNPB2wUj136oZb1Tjy8mREMJlFLgb5gafhZDg8Cv3atYMYRSynFcxMILFBdQn9XdCa8VpW3QKNm9aOS87erpNn4ckgTVtMtohJoupEbbK/Zn3U8/zUCVS4hPOVsbOMWV6/+BuKkawvtVoupJrNoDo7MJxiq+vZQrHkjogZQQEGgYUyzuIWGV2RXihPgLWwOsf7JUM0GafaMM4GIAT45mSFyQ01Hfk0eaKDpCn1QcSnyp+yNchG08kXWCntNl6FsSlLGWkPxTQtkHaRopzzQ/5MhzrHwmb9HXK3OoDp0Rbuz8WSIkTyy5liI5tamw== X-MS-TrafficTypeDiagnostic: BY2PR02MB1331: X-Microsoft-Exchange-Diagnostics: 1; BY2PR02MB1331; 31:z0+bbGAK8zbAInUJJZnKRkokCNulorBzlKkWNe6iE7GCp99F4xHCk/4Oi3jzbaKUAscJp2AVfJGVUlIfKQecjAuRmHEiKn/7cdoE4+0FgdYQNixiSjkDfkGstAqXJtxhtv48aVOjEbxiz8N1BCpvBrEKW8JX/Zw3S4NGM4AREn98UginunPTjiGdleyHSwm0SeO0dMPixsZCprKG+zGxIaLA3Zj8ikHZMco7Jv9stkA=; 20:TnX0lCvXqwo1AwySILizU4TbJEwXb+/+QX0xwVfUm+yU1EZrxyaOswBIPyHwzU77YPgGSiGS1PBrBthnVIUARasw1JGga44gZ/vA9V7PIEm0YrUCg0Cxp8yqbQ6cN2GR++NdfE5GbF4b5df+3GGE7oqSnZ94a9U8aJnup9ZwANyj8H3cHYe05sDnZCKn/QRGIWwBTC51dyRVBY0hj0eL4+5nIflEI2xpQeMOu9zE3VMjigXWhk55rJuc8swh1LYzL1cEerUa97d3B5OgiNlQUF1fo0YRg13MgGKd93JlDw1ENRa/gKo8XIpBtwHcmCU4U1z4TdWDiEq1ELUXBiLaEdCLx8UgQ5cpB5xJKIQ0PsKR0poNsuvQQ0mNwEm2FTN28qIc0Bn2/XbUqcNVwNUn7UatvCpuH3eWWbxWQWFlyecsy7jc9JkCli0qbYvnpLxhjSbHqrgIFZ+eRf60FLuW5i3wqZcoLgnDmvKQsRFdjUYuGGF9oFASpZBD2/IAmQiw 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)(8121501046)(5005006)(3002001)(10201501046)(93006095)(93004095)(3231023)(2400081)(944501161)(6055026)(6041288)(20161123564045)(20161123562045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(6072148)(201708071742011); SRVR:BY2PR02MB1331; BCL:0; PCL:0; RULEID:; SRVR:BY2PR02MB1331; X-Microsoft-Exchange-Diagnostics: 1; BY2PR02MB1331; 4:5NvK/8S5nILpXKZjUqstF8WviSC0AVK/BYMP2cNWCF3Q73RYrB+FaFBwOqrgDdjXO+wIGM/28jg2RgeyULWBF0vM01eGFeFseEQ9k39+7WsUzJBTpkFXYzwZL/hh13i7N2PqAmvkPUYdo94AG0vb3R5i6Xv5x3mbVvd9pExpi7k+ElMT9ogQ7hZA1rtraTJ3BBrdvoRj/wWse7ioZTY7n5aXlK5v9hfgZG9lfIe80fGDe1hxIvYqHSm/6zIMS+RVRVIB0gU2KMlCpjhuh0SgH2wywF+jIlUJD3SiW1sRqMgoTJB/d6L5GI8Dyol4x7ly X-Forefront-PRVS: 05610E64EE X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY2PR02MB1331; 23:bHY8SnDf6Dvn/bTgm5TgAij+hT306ZWeoF/d0N2YZ?= =?us-ascii?Q?kvYp52HDiINYybiN8D1m5YlZIs0fsfXb89Qnd4c3xsTHb/NVc5okwObCei1f?= =?us-ascii?Q?3jxacYM1TQQ7SiGY8mJUkUUMjV17VSbxa6LMS+eSLZP9GdXojSs9I4T9SZcx?= =?us-ascii?Q?OwMqjQ+ZTJxNhOxRhdtWRiJ2CMooYPNoYWc69rIzKKhfB32NHTRzJyUGyobT?= =?us-ascii?Q?l66ep+BQnAU2l5OEceerIpbaRDRdvaHDOfivnkRAQzqkFtQ8ch6wuXA3uy3r?= =?us-ascii?Q?RHanaskyk32rEdek07eiLmgUEpwM98UV8mffqsMrokJByfBQYHYADQCpghL1?= =?us-ascii?Q?vkydw2hoLKl+/l9YdubW8S0H2lZNYZBflQLBzj7Mn4h6tXQpZ1e9ezE+qodX?= =?us-ascii?Q?87KJQ8EYXZvwPaz9kxyPPQ/ek+2SnwINRUPOnebyniwL63uQm/GukuDz8OKH?= =?us-ascii?Q?LLmt5xmX9NOBpWiCL06qDSvzljTOl5qi+NTz/NmLTUBFlXO17jltn9NMo4vo?= =?us-ascii?Q?4CFVZyEOwM0AfPCRA/Kmmu/cAavgOekwbItFn6POGyd76qmKAwCuX7sMSSnZ?= =?us-ascii?Q?B7LdTwsEFoKq3nf79WXKrDemS/iloRjtKC2mpUft0QEUsVtiFpQUVa/HUUnT?= =?us-ascii?Q?GDPtL1oNmzG1oYqQ/iOQ6t3knAu3cZxarIl2tIQOBw+p+Gr0OKdnYwTiYOwT?= =?us-ascii?Q?DAfYKK3JEV9VLBL6K6FO8/NR5YcdXYp2zP8pMaSvKKQKS1P6K5ZAO+G75/Pu?= =?us-ascii?Q?s+Cj9zF4DYYwto8C3UrJ/hgtnvwf+pyBkr0ITx7IaAAWcOBJdVvcrrRQCxru?= =?us-ascii?Q?RxaKTcLybP1WAaGw92X2JgaGlfiZcj3OYKjFcmNNB1ztI1DCN7J+7q/drwjW?= =?us-ascii?Q?TXA/6EnnDdk3kFcp3L1pb30oFYbWXWLNM2zbd1opJ3NDk7pUpF5Ig9GIy3VO?= =?us-ascii?Q?U9Ti4WSs4YsC3Hmjy6IZYJn6m7bhdzA4BU2iFGuOWLbMoEub+bMyDVGxki/C?= =?us-ascii?Q?7T7Ul6z6ohHcNaGW7jZ9XgjJyoZDjXW9BmVY/FPjmJMDDgMKMZHziYAuZIoM?= =?us-ascii?Q?swfH26os/0Ia6r9Cs1JMZJwdlHEjnYzVvnzcfsoZIONzMv26A=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; BY2PR02MB1331; 6:z3kdDlIXOfg5y0gMhHwfrrrdC3CBe3wJU0eU+ufVubANIE4GDzFbwrezZvt5Ycph8xN5bqXQNcOHHKC67JzXS762uV5+aOEm0M/c1yK5M2loEatdmQ1vKn4+hHWgiWwmW1bNzbKCUv4EqvafQ2y2J0GjeTAhmx+JR5zzWDrHGYtS0Vya8i+dJ0Ls8Gay9V6LJtQEuBKdwsAa21YDnfbNF793KI/avRn+o8mbpHhy1MXXIIp30vwfie8/tuKciqn6k0LmiaH1QqK8NfU+DYX/uuedobjiY5rp6GpPHc4U5zuLhOdDqpIE7XWYMgyBJZNBbxiL/+PxZOvogAr3EhqMNZu4xA3PE0TWQFsJDqd1/7o=; 5:x/j9s9UDDXB8uT+A4S2R7DgUdD1vZyZpElNND62Rm4tq6aSrdqMwovjS0hnlE5RRDB5WdUlw8MqPPdwgofp7ix8kdhI3JHyiNWQr7uIkn5waxgZynrUkzL7hcjUVUd44FuPPdyYQRNP+q0nh+Y/6VB861dTfF0TG3T9n2r5Zk7k=; 24:DUTLNU0X13GB44j5TE4D8oLTPlTwKmdVV+oZumW5oousd2nFRLidwm8A35u6YwrAJMhhG8qjCvzxgDSP8vwhkIjPUv8UBR+9J67yxww/x+U=; 7:Rb4+qVGiT3Kiq90g7DMzV//R2itMXsTTihUAhORxLFzVddVNbX5czSdJVjoOv4cXbrkbSu2dUupYM2F6mexn/w3i+fMC5MkWy7n458Fwj3F7aFisMHR+7JUqI5JtrG+VEB+uuUQn1cCSrlkJ4SiH7MR1rkYTZ3ht9hVsyxT5cLJOPoZpa5z2skyYZT0dvhi6bnVJcrDOx0g377Yl4598sajlc+wB4QRQw0FGVGgwJFU32miw8ghcXB4zCohdrVS+ SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2018 22:29:10.9856 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 686c4a55-7344-4113-9a91-08d562b0b9c5 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.83]; Helo=[xsj-pvapsmtpgw01] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR02MB1331 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.37.40 Subject: [Qemu-devel] [PATCH v5 1/3] xlnx-zynqmp-rtc: Initial commit 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" Initial commit of the ZynqMP RTC device. Signed-off-by: Alistair Francis Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- v5: - Don't use intermediate val V2: - Delete unused realise function - Remove DB_PRINT() include/hw/timer/xlnx-zynqmp-rtc.h | 84 +++++++++++++++ hw/timer/xlnx-zynqmp-rtc.c | 214 +++++++++++++++++++++++++++++++++= ++++ hw/timer/Makefile.objs | 1 + 3 files changed, 299 insertions(+) create mode 100644 include/hw/timer/xlnx-zynqmp-rtc.h create mode 100644 hw/timer/xlnx-zynqmp-rtc.c diff --git a/include/hw/timer/xlnx-zynqmp-rtc.h b/include/hw/timer/xlnx-zyn= qmp-rtc.h new file mode 100644 index 0000000000..87649836cc --- /dev/null +++ b/include/hw/timer/xlnx-zynqmp-rtc.h @@ -0,0 +1,84 @@ +/* + * QEMU model of the Xilinx ZynqMP Real Time Clock (RTC). + * + * Copyright (c) 2017 Xilinx Inc. + * + * Written-by: Alistair Francis + * + * Permission is hereby granted, free of charge, to any person obtaining a= copy + * of this software and associated documentation files (the "Software"), t= o deal + * in the Software without restriction, including without limitation the r= ights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or se= ll + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included= in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OT= HER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING= FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS = IN + * THE SOFTWARE. + */ + +#include "hw/register.h" + +#define TYPE_XLNX_ZYNQMP_RTC "xlnx-zynmp.rtc" + +#define XLNX_ZYNQMP_RTC(obj) \ + OBJECT_CHECK(XlnxZynqMPRTC, (obj), TYPE_XLNX_ZYNQMP_RTC) + +REG32(SET_TIME_WRITE, 0x0) +REG32(SET_TIME_READ, 0x4) +REG32(CALIB_WRITE, 0x8) + FIELD(CALIB_WRITE, FRACTION_EN, 20, 1) + FIELD(CALIB_WRITE, FRACTION_DATA, 16, 4) + FIELD(CALIB_WRITE, MAX_TICK, 0, 16) +REG32(CALIB_READ, 0xc) + FIELD(CALIB_READ, FRACTION_EN, 20, 1) + FIELD(CALIB_READ, FRACTION_DATA, 16, 4) + FIELD(CALIB_READ, MAX_TICK, 0, 16) +REG32(CURRENT_TIME, 0x10) +REG32(CURRENT_TICK, 0x14) + FIELD(CURRENT_TICK, VALUE, 0, 16) +REG32(ALARM, 0x18) +REG32(RTC_INT_STATUS, 0x20) + FIELD(RTC_INT_STATUS, ALARM, 1, 1) + FIELD(RTC_INT_STATUS, SECONDS, 0, 1) +REG32(RTC_INT_MASK, 0x24) + FIELD(RTC_INT_MASK, ALARM, 1, 1) + FIELD(RTC_INT_MASK, SECONDS, 0, 1) +REG32(RTC_INT_EN, 0x28) + FIELD(RTC_INT_EN, ALARM, 1, 1) + FIELD(RTC_INT_EN, SECONDS, 0, 1) +REG32(RTC_INT_DIS, 0x2c) + FIELD(RTC_INT_DIS, ALARM, 1, 1) + FIELD(RTC_INT_DIS, SECONDS, 0, 1) +REG32(ADDR_ERROR, 0x30) + FIELD(ADDR_ERROR, STATUS, 0, 1) +REG32(ADDR_ERROR_INT_MASK, 0x34) + FIELD(ADDR_ERROR_INT_MASK, MASK, 0, 1) +REG32(ADDR_ERROR_INT_EN, 0x38) + FIELD(ADDR_ERROR_INT_EN, MASK, 0, 1) +REG32(ADDR_ERROR_INT_DIS, 0x3c) + FIELD(ADDR_ERROR_INT_DIS, MASK, 0, 1) +REG32(CONTROL, 0x40) + FIELD(CONTROL, BATTERY_DISABLE, 31, 1) + FIELD(CONTROL, OSC_CNTRL, 24, 4) + FIELD(CONTROL, SLVERR_ENABLE, 0, 1) +REG32(SAFETY_CHK, 0x50) + +#define XLNX_ZYNQMP_RTC_R_MAX (R_SAFETY_CHK + 1) + +typedef struct XlnxZynqMPRTC { + SysBusDevice parent_obj; + MemoryRegion iomem; + qemu_irq irq_rtc_int; + qemu_irq irq_addr_error_int; + + 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 new file mode 100644 index 0000000000..707f145027 --- /dev/null +++ b/hw/timer/xlnx-zynqmp-rtc.c @@ -0,0 +1,214 @@ +/* + * QEMU model of the Xilinx ZynqMP Real Time Clock (RTC). + * + * Copyright (c) 2017 Xilinx Inc. + * + * Written-by: Alistair Francis + * + * Permission is hereby granted, free of charge, to any person obtaining a= copy + * of this software and associated documentation files (the "Software"), t= o deal + * in the Software without restriction, including without limitation the r= ights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or se= ll + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included= in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OT= HER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING= FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS = IN + * THE SOFTWARE. + */ + +#include "qemu/osdep.h" +#include "hw/sysbus.h" +#include "hw/register.h" +#include "qemu/bitops.h" +#include "qemu/log.h" +#include "hw/timer/xlnx-zynqmp-rtc.h" + +#ifndef XLNX_ZYNQMP_RTC_ERR_DEBUG +#define XLNX_ZYNQMP_RTC_ERR_DEBUG 0 +#endif + +static void rtc_int_update_irq(XlnxZynqMPRTC *s) +{ + bool pending =3D s->regs[R_RTC_INT_STATUS] & ~s->regs[R_RTC_INT_MASK]; + qemu_set_irq(s->irq_rtc_int, pending); +} + +static void addr_error_int_update_irq(XlnxZynqMPRTC *s) +{ + bool pending =3D s->regs[R_ADDR_ERROR] & ~s->regs[R_ADDR_ERROR_INT_MAS= K]; + qemu_set_irq(s->irq_addr_error_int, pending); +} + +static void rtc_int_status_postw(RegisterInfo *reg, uint64_t val64) +{ + XlnxZynqMPRTC *s =3D XLNX_ZYNQMP_RTC(reg->opaque); + rtc_int_update_irq(s); +} + +static uint64_t rtc_int_en_prew(RegisterInfo *reg, uint64_t val64) +{ + XlnxZynqMPRTC *s =3D XLNX_ZYNQMP_RTC(reg->opaque); + + s->regs[R_RTC_INT_MASK] &=3D (uint32_t) ~val64; + rtc_int_update_irq(s); + return 0; +} + +static uint64_t rtc_int_dis_prew(RegisterInfo *reg, uint64_t val64) +{ + XlnxZynqMPRTC *s =3D XLNX_ZYNQMP_RTC(reg->opaque); + + s->regs[R_RTC_INT_MASK] |=3D (uint32_t) val64; + rtc_int_update_irq(s); + return 0; +} + +static void addr_error_postw(RegisterInfo *reg, uint64_t val64) +{ + XlnxZynqMPRTC *s =3D XLNX_ZYNQMP_RTC(reg->opaque); + addr_error_int_update_irq(s); +} + +static uint64_t addr_error_int_en_prew(RegisterInfo *reg, uint64_t val64) +{ + XlnxZynqMPRTC *s =3D XLNX_ZYNQMP_RTC(reg->opaque); + + s->regs[R_ADDR_ERROR_INT_MASK] &=3D (uint32_t) ~val64; + addr_error_int_update_irq(s); + return 0; +} + +static uint64_t addr_error_int_dis_prew(RegisterInfo *reg, uint64_t val64) +{ + XlnxZynqMPRTC *s =3D XLNX_ZYNQMP_RTC(reg->opaque); + + s->regs[R_ADDR_ERROR_INT_MASK] |=3D (uint32_t) val64; + addr_error_int_update_irq(s); + return 0; +} + +static const RegisterAccessInfo rtc_regs_info[] =3D { + { .name =3D "SET_TIME_WRITE", .addr =3D A_SET_TIME_WRITE, + },{ .name =3D "SET_TIME_READ", .addr =3D A_SET_TIME_READ, + .ro =3D 0xffffffff, + },{ .name =3D "CALIB_WRITE", .addr =3D A_CALIB_WRITE, + },{ .name =3D "CALIB_READ", .addr =3D A_CALIB_READ, + .ro =3D 0x1fffff, + },{ .name =3D "CURRENT_TIME", .addr =3D A_CURRENT_TIME, + .ro =3D 0xffffffff, + },{ .name =3D "CURRENT_TICK", .addr =3D A_CURRENT_TICK, + .ro =3D 0xffff, + },{ .name =3D "ALARM", .addr =3D A_ALARM, + },{ .name =3D "RTC_INT_STATUS", .addr =3D A_RTC_INT_STATUS, + .w1c =3D 0x3, + .post_write =3D rtc_int_status_postw, + },{ .name =3D "RTC_INT_MASK", .addr =3D A_RTC_INT_MASK, + .reset =3D 0x3, + .ro =3D 0x3, + },{ .name =3D "RTC_INT_EN", .addr =3D A_RTC_INT_EN, + .pre_write =3D rtc_int_en_prew, + },{ .name =3D "RTC_INT_DIS", .addr =3D A_RTC_INT_DIS, + .pre_write =3D rtc_int_dis_prew, + },{ .name =3D "ADDR_ERROR", .addr =3D A_ADDR_ERROR, + .w1c =3D 0x1, + .post_write =3D addr_error_postw, + },{ .name =3D "ADDR_ERROR_INT_MASK", .addr =3D A_ADDR_ERROR_INT_MASK, + .reset =3D 0x1, + .ro =3D 0x1, + },{ .name =3D "ADDR_ERROR_INT_EN", .addr =3D A_ADDR_ERROR_INT_EN, + .pre_write =3D addr_error_int_en_prew, + },{ .name =3D "ADDR_ERROR_INT_DIS", .addr =3D A_ADDR_ERROR_INT_DIS, + .pre_write =3D addr_error_int_dis_prew, + },{ .name =3D "CONTROL", .addr =3D A_CONTROL, + .reset =3D 0x1000000, + .rsvd =3D 0x70fffffe, + },{ .name =3D "SAFETY_CHK", .addr =3D A_SAFETY_CHK, + } +}; + +static void rtc_reset(DeviceState *dev) +{ + XlnxZynqMPRTC *s =3D XLNX_ZYNQMP_RTC(dev); + unsigned int i; + + for (i =3D 0; i < ARRAY_SIZE(s->regs_info); ++i) { + register_reset(&s->regs_info[i]); + } + + rtc_int_update_irq(s); + addr_error_int_update_irq(s); +} + +static const MemoryRegionOps rtc_ops =3D { + .read =3D register_read_memory, + .write =3D register_write_memory, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .valid =3D { + .min_access_size =3D 4, + .max_access_size =3D 4, + }, +}; + +static void rtc_init(Object *obj) +{ + XlnxZynqMPRTC *s =3D XLNX_ZYNQMP_RTC(obj); + SysBusDevice *sbd =3D SYS_BUS_DEVICE(obj); + RegisterInfoArray *reg_array; + + memory_region_init(&s->iomem, obj, TYPE_XLNX_ZYNQMP_RTC, + XLNX_ZYNQMP_RTC_R_MAX * 4); + reg_array =3D + register_init_block32(DEVICE(obj), rtc_regs_info, + ARRAY_SIZE(rtc_regs_info), + s->regs_info, s->regs, + &rtc_ops, + XLNX_ZYNQMP_RTC_ERR_DEBUG, + XLNX_ZYNQMP_RTC_R_MAX * 4); + memory_region_add_subregion(&s->iomem, + 0x0, + ®_array->mem); + sysbus_init_mmio(sbd, &s->iomem); + sysbus_init_irq(sbd, &s->irq_rtc_int); + sysbus_init_irq(sbd, &s->irq_addr_error_int); +} + +static const VMStateDescription vmstate_rtc =3D { + .name =3D TYPE_XLNX_ZYNQMP_RTC, + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (VMStateField[]) { + VMSTATE_UINT32_ARRAY(regs, XlnxZynqMPRTC, XLNX_ZYNQMP_RTC_R_MAX), + VMSTATE_END_OF_LIST(), + } +}; + +static void rtc_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + + dc->reset =3D rtc_reset; + dc->vmsd =3D &vmstate_rtc; +} + +static const TypeInfo rtc_info =3D { + .name =3D TYPE_XLNX_ZYNQMP_RTC, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(XlnxZynqMPRTC), + .class_init =3D rtc_class_init, + .instance_init =3D rtc_init, +}; + +static void rtc_register_types(void) +{ + type_register_static(&rtc_info); +} + +type_init(rtc_register_types) diff --git a/hw/timer/Makefile.objs b/hw/timer/Makefile.objs index 8c19eac3b6..8b27a4b7ef 100644 --- a/hw/timer/Makefile.objs +++ b/hw/timer/Makefile.objs @@ -21,6 +21,7 @@ common-obj-$(CONFIG_IMX) +=3D imx_epit.o common-obj-$(CONFIG_IMX) +=3D imx_gpt.o common-obj-$(CONFIG_LM32) +=3D lm32_timer.o common-obj-$(CONFIG_MILKYMIST) +=3D milkymist-sysctl.o +common-obj-$(CONFIG_XLNX_ZYNQMP) +=3D xlnx-zynqmp-rtc.o =20 obj-$(CONFIG_ALTERA_TIMER) +=3D altera_timer.o obj-$(CONFIG_EXYNOS4) +=3D exynos4210_mct.o --=20 2.14.1 From nobody Thu May 2 17:45:11 2024 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 From nobody Thu May 2 17:45:11 2024 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 1516746702960958.4807623454054; Tue, 23 Jan 2018 14:31:42 -0800 (PST) Received: from localhost ([::1]:57824 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ee76U-00047O-58 for importer@patchew.org; Tue, 23 Jan 2018 17:31:42 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38679) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ee74K-00034K-Ul for qemu-devel@nongnu.org; Tue, 23 Jan 2018 17:29:32 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ee74H-0000CW-1N for qemu-devel@nongnu.org; Tue, 23 Jan 2018 17:29:28 -0500 Received: from mail-bl2nam02on0078.outbound.protection.outlook.com ([104.47.38.78]:14704 helo=NAM02-BL2-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-0000Be-PM for qemu-devel@nongnu.org; Tue, 23 Jan 2018 17:29:24 -0500 Received: from BY2PR02CA0098.namprd02.prod.outlook.com (10.163.44.152) by CY1PR02MB1336.namprd02.prod.outlook.com (10.161.170.27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.428.17; Tue, 23 Jan 2018 22:29:22 +0000 Received: from BL2NAM02FT012.eop-nam02.prod.protection.outlook.com (2a01:111:f400:7e46::203) by BY2PR02CA0098.outlook.office365.com (2a01:111:e400:5261::24) 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-pvapsmtpgw01 (149.199.60.83) by BL2NAM02FT012.mail.protection.outlook.com (10.152.77.27) 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] helo=xsj-pvapsmtp01) by xsj-pvapsmtpgw01 with esmtp (Exim 4.63) (envelope-from ) id 1ee74C-00068x-Da; 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-CY; 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 1ee745-00088c-22; Tue, 23 Jan 2018 14:29:13 -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=M/PIcj+/7ucopMK72QKwgVNpWrYpeocN7JUKROSjf8o=; b=0aiaLaBXRllGLI1i+kbVBhkcinjwIiT546BfAoO0jxbogGINHCOQDpcTK26NjjMmH7DhNQ6HpSx14PAbiAIgHZlOTzfmWonJz9Trokds61djoQlaPjRzQu20f8Lz7gaoDxKSLG+GhlCUdAW5Cg0sM3Nzg7FLccVK6En2JKVecyQ= Authentication-Results: spf=pass (sender IP is 149.199.60.83) 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.83 as permitted sender) receiver=protection.outlook.com; client-ip=149.199.60.83; helo=xsj-pvapsmtpgw01; From: Alistair Francis To: , Date: Tue, 23 Jan 2018 14:24:50 -0800 Message-ID: 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.83; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(39380400002)(346002)(396003)(376002)(39860400002)(2980300002)(438002)(189003)(199004)(5820100001)(9786002)(36386004)(575784001)(106002)(77096007)(50226002)(2950100002)(316002)(47776003)(6666003)(336011)(26005)(81156014)(8936002)(110136005)(478600001)(8676002)(54906003)(81166006)(2906002)(2870700001)(63266004)(76176011)(7696005)(23676004)(106466001)(50466002)(4326008)(118296001)(305945005)(36756003)(39060400002)(356003)(5660300001)(107986001); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR02MB1336; H:xsj-pvapsmtpgw01; FPR:; SPF:Pass; PTR:unknown-60-83.xilinx.com; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2NAM02FT012; 1:fLpDWPeseF0uvbp4kd7Sw5WIC7IWHd+9dautZLzixRredz4cp6OVfCoyVOJepT0BI4t/TddrdlJnbE06tMzXu7j1SMBrI79XdsQhMT5NK34/KNuNqQblpEfYfRm67Owi X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c3f65e02-15e4-4469-7037-08d562b0bfe4 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(5600026)(4604075)(4608076)(2017052603307)(7153060); SRVR:CY1PR02MB1336; X-Microsoft-Exchange-Diagnostics: 1; CY1PR02MB1336; 3:bnsh2OOfSTdLnEV9R1SRGmy3mPrCXK0xQFgJVRZ/xW3a6SHxV+OtQdOQT6+oB2twc9ptH0d2a3CwX6+AvOoDo8OC6OdFNHkM8y7eiZ2qqAC/c/JHh1U3agt/KutU9ajOm/vMH2vMpeCGkreoSAzqUoqKnejW8YXWg4nTBTlyZx38WCaLFm5JmZs28hIAy+6rnNfiO9V/Fs79fksGfWz7AxG/jsVFgeUOiRV4WCSfxVC5FM0SqEB9s/aE8K6NBgc2wMttB1OKVDH9qNWP+LpU7wlDvbA2LSYoQpEN5NTFERnPCx7ggGhHR57bkcSYKkk9jCGLuYOk8Q4ZsouQLkaDp/AJGZG69gMqMEIWRs3eAJ4=; 25:iHImZqwahxXXA1p8A0/rllFSFxfAdssY3RbkL1G1zNitY3CxqsP1A/0FkzCtX5LyA/+NqYIo193LrprjwoozEA8vemUsmGUf5j/YYdigATkWDx+nxPt+HCyme4+uDRynCbNFoUpObKDIFR+wW4+FOPSGYKHSomsTXCe4KvZNC6S0WSRF0Ez3Gz8u0CV4vfjkUpHCjiuzrM+//rGh7ZvfkM/h4H00+1eVNAw3YF7LwScE7s4572Wm2UwjzJBCCA70k/+IwAc7COMRYEQ3q9C9SKVaJ3+VR0Y+H5uwrngSLG5du9YKMX+fVsnXQWjHNxuVNvpVcdlt8CLnVhghm8eobQ== X-MS-TrafficTypeDiagnostic: CY1PR02MB1336: X-Microsoft-Exchange-Diagnostics: 1; CY1PR02MB1336; 31:yxARe+yNmiXXgZ4FzNfIuO4GzsWqWgHEnP4CzL+iQ12bpKDLkxCu6BzNLRyzfzKxrdY6Bu6UIB1N9Brg8RnUjHYsVua/nRRa+/fg96XSCXdUhLDTRiB73CBtGd8TKjQKPuxVGWq+T3UbkS9SL999XcBFO+9FyCNHx6LoFhy9SwDpZKjHzZOLT4HlqpXKpOAER4GVpuQjjf8Pp/cPnS1nTJm05NHAZvRQjWdI6y5dxcE=; 20:feyz6/INpEe+qGkezkrNvRZMeYy/PJfxV7IkrhpaHiJ9Js29FlYw45Hw6TGUGAYgTkbAYjyUGw0hlrT+sEpMS2d68f77r8cDN5lcAAOwhCqPpCdzRupMfHLrynDJN3dj6E/qLVyjYVa/hlTLBc9y/3H4VlmwYHbiKqtpQFPSUEryHLkQmoSuRFbgaGXiYRsR6+u8dqXqhLyySogQGaeXvMLcaF1Lml6G8XHV/YioufXJmYUaLgsGMSLaOO02C9+b1jiS0t/A/0tIW0DIidvpIFBy3RydICb+q7RZmpkB9cby//2Jxy+rW+6K2lnJLjKulmEqnd6Uk+clEZdfg82vdTkUvWhphyiGqhISFv1WNYhpZbjTgGv74dd0HlL3rnI8S7ab58nxrSX3GNHHMGf3nPFAFGiFxpAnEE4IAPPbYCQYzqLtmdT66Q/lgMPKd0kp0jPuo+gjCjq4UcSOmBZB5GtkoeZ8pdW+uxdJTMLbLeKl56NzpQTB2I2Esfdp+CPM X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(192813158149592)(21532816269658); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040501)(2401047)(5005006)(8121501046)(3231023)(2400081)(944501161)(3002001)(10201501046)(93006095)(93004095)(6055026)(6041288)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123558120)(6072148)(201708071742011); SRVR:CY1PR02MB1336; BCL:0; PCL:0; RULEID:; SRVR:CY1PR02MB1336; X-Microsoft-Exchange-Diagnostics: 1; CY1PR02MB1336; 4:sQwUtelDV/6NhRicL5d+khDh0BVeoRmVbLoqprpv7oMsCI6mZI/t6utSxzmrTsVZGI9MBAbJamm9jZgu88HOs9kxCMyNkOkwIOAN6Se9zgvrKk1RdCEIUJAMA+1WFGMJWGlCiI9ZHdvAEhhcDiGd8DwwLD4O1Cn29pT27kAMQph9df0z2VR/JucOoBEiDswHwQOedf5EpeecCfMcb2uIj26MmMRvX188eC1srDCYKl4znNEffStTSCqJcMAIppQUwjHkH0oW/jEl4joMntxiEHD/ioP6hWUR7p48iS+0Zwt7jaKQNvKLYKXxDjpIfB/SIxwJTet97AoSIQ1Tb9hZCFaaXmbq0DO8l2jo/MHH2XM= X-Forefront-PRVS: 05610E64EE X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR02MB1336; 23:3xqFz+ZRb3kLwnKSm99pR8Nm8cTn3vnuL7DiieFbU?= =?us-ascii?Q?VTXq2rO+NJAWmjfHncCuR42uj0USasFmQCqTDYZlXdCkLOyFvrvKv3pGKtS+?= =?us-ascii?Q?kRpYzhMUqdldUkUrPmn2cZMkYY47eOrzlZaDQhTKnDA8F+PlMM4Jy8K5B4MH?= =?us-ascii?Q?UcAgQqU5ZVoAFDk/W/pevcNVsGTyqLAFskNYEKzNBbxxC7KQCvZV2Gmpb2lP?= =?us-ascii?Q?/z/8FoOQZE4J3QLNVSYhMHQS+ZIKjSpoXwgQ4iwEiVgQ6H9FXxIQWTB0/lM6?= =?us-ascii?Q?ohF10T6UIKKNFEr3sAe2ac5b7FeAxkBlwDlizCF5J+mQbwIRIJC2CYae2jrm?= =?us-ascii?Q?LsDMlVz0WvDiAyq6YCGTL4a3urrtGDPDH51emgcr0/7bH7167x/hZR8kktYu?= =?us-ascii?Q?wXeTnaCbNkB3syoXWtMSb+oY/Cj8xULwsSUiWqLwVAr7t6zlV3r2uLTIBP/e?= =?us-ascii?Q?E6hcUWA3+SfUZot2Nj0gBU4OVReFft/S7hAZDMI96589QDeL3CMyGy5z3dvS?= =?us-ascii?Q?+ZfLgbNoBCmPXlhHGVm/bv5y+xzjrbZCxj1T9P2LZvrkONuf4NxLpPlg+Klb?= =?us-ascii?Q?8H36m02dCjs0QmuBVuUYq3n/GVaTAkheFCHRbJ+kWUJVj2Ltt16ZsSJMcNf9?= =?us-ascii?Q?h0+asHnHALzDIRlfDSU+SUgQYUWFXOKPMzz+s9csp2Wl3bxEyDm6jrMAWlGP?= =?us-ascii?Q?dLtXbz9fBRmOB4PDGUitz6adWDgvfVLz35TYMYEEic9zTVbBbJUFrZuzBo4Q?= =?us-ascii?Q?QpnT5LesiLFOr0O5jzop5Fq26EFr6robRCzN8qDFi0bU1O1U964ZumZruDFm?= =?us-ascii?Q?93eGz0iyBYk6dOVOoXM+xHVKLIZ3rrTJnGUKLg7uz836kH2SX8zMEu0YQ7us?= =?us-ascii?Q?zIN2JwwMrgKM2Y+H+Rr441uNEbaQN6YH6nmZLVP/70GHibchrKk+yFOv/iaJ?= =?us-ascii?Q?T2OpYLvig0Y2V7Ibksjn/YCsI05bQBOc/7WMrr8/4IhzWQTJnkNU39FJUtO3?= =?us-ascii?Q?0VBid0ml1QMjS7fq7B/Q6vv2x0To9b1sxbUEMcjpsW9Uq5Lp05qXiOa/jesS?= =?us-ascii?Q?WP4DUMjlx5evWiELpTZk1rJ2pfF?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR02MB1336; 6:vKIYKorKJFk+90uBDHK/9KLMAKfkFWeLnvnHKb/mdjkrVcdgH3Wdiec2frE0AQthPJ0SgR6J8P64lqwR62cnM+AiiwTmQWoHKptbifsTd6nOJ3J3GANfB5PR0HXrckLNEbqGKlADUyjSU4R3FBJk4exz2wtQbzN4gzrh2j8jJwyGvxSHSlfg029RspuTl/QTIrQGXRQRl+68+cC8GIClTxLu8y/RxAo7+vLqEm57vUh2mjU6lLpkZw1mC6L15u8YtSz2qg+g0aiH5qfbh24uof3x0DviO/mKUeg1kPMZUrSzG/UQlnpWeCg8QOW028UzA6ZcaxhUPyWN6kL+RGFK4oKN+y1CwjIjcj5cl0MREqY=; 5:kPqg6t/T6ovr1WQ2+4n0kU2l25P1MJjw+7mn4X/Kx5qCbu+zKgjnS8JGcz8txrqOysuxktNptI2mDTwghePXCKMGu3AG+6UBZX8pwGs4OOFB68uSoeoLGcvgZDWhaoxD0iowe8TaFbmxzA8YUHqhkiz/2aBaEUbpkUNd0USt5vk=; 24:4MUm2EZAFtI82MSCIKLBQy/2kBQJjPCLC2vf8b1uxn++5D9HIjt3OwPscI0c3OUG/H05bIN6dnRkmWXHD0Xd98K9ITUoT96HHqqen0kWIdI=; 7:Hd7mIob2sQj528f33Cb2XXbCBwGPukMzqLKMfgmR+kbF4PwQwPtdgpa2JtosW5uNdfkkb/KFvOOUW2b7gsiYsTDEibXD8grFOTA1UDUTrpfE3wsjVVFxBHhL4JmGU4nhsz/4vjlv6g4tvs6azuAB6OwebJxk01IrJhJc/oImBQlnF3tZkuXxJ/r22zDir0TEIN4MLuwm1hllaqsqW3xUo0nHnAeFyJ3W1djxEUxmlYUC6r1vA+L5UG45fQDgaupI SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2018 22:29:21.4259 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c3f65e02-15e4-4469-7037-08d562b0bfe4 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.83]; Helo=[xsj-pvapsmtpgw01] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR02MB1336 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.38.78 Subject: [Qemu-devel] [PATCH v5 3/3] xlnx-zynqmp: Connect the RTC device 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" Signed-off-by: Alistair Francis Reviewed-by: Peter Maydell Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- include/hw/arm/xlnx-zynqmp.h | 2 ++ hw/arm/xlnx-zynqmp.c | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/include/hw/arm/xlnx-zynqmp.h b/include/hw/arm/xlnx-zynqmp.h index 3e6fb9b7bd..9e8c9e18dd 100644 --- a/include/hw/arm/xlnx-zynqmp.h +++ b/include/hw/arm/xlnx-zynqmp.h @@ -28,6 +28,7 @@ #include "hw/ssi/xilinx_spips.h" #include "hw/dma/xlnx_dpdma.h" #include "hw/display/xlnx_dp.h" +#include "hw/timer/xlnx-zynqmp-rtc.h" =20 #define TYPE_XLNX_ZYNQMP "xlnx,zynqmp" #define XLNX_ZYNQMP(obj) OBJECT_CHECK(XlnxZynqMPState, (obj), \ @@ -90,6 +91,7 @@ typedef struct XlnxZynqMPState { XlnxZynqMPQSPIPS qspi; XlnxDPState dp; XlnxDPDMAState dpdma; + XlnxZynqMPRTC rtc; =20 char *boot_cpu; ARMCPU *boot_cpu_ptr; diff --git a/hw/arm/xlnx-zynqmp.c b/hw/arm/xlnx-zynqmp.c index 325642058b..deef583c2a 100644 --- a/hw/arm/xlnx-zynqmp.c +++ b/hw/arm/xlnx-zynqmp.c @@ -50,6 +50,9 @@ #define DPDMA_ADDR 0xfd4c0000 #define DPDMA_IRQ 116 =20 +#define RTC_ADDR 0xffa60000 +#define RTC_IRQ 26 + static const uint64_t gem_addr[XLNX_ZYNQMP_NUM_GEMS] =3D { 0xFF0B0000, 0xFF0C0000, 0xFF0D0000, 0xFF0E0000, }; @@ -183,6 +186,9 @@ static void xlnx_zynqmp_init(Object *obj) =20 object_initialize(&s->dpdma, sizeof(s->dpdma), TYPE_XLNX_DPDMA); qdev_set_parent_bus(DEVICE(&s->dpdma), sysbus_get_default()); + + object_initialize(&s->rtc, sizeof(s->rtc), TYPE_XLNX_ZYNQMP_RTC); + qdev_set_parent_bus(DEVICE(&s->rtc), sysbus_get_default()); } =20 static void xlnx_zynqmp_realize(DeviceState *dev, Error **errp) @@ -454,6 +460,14 @@ static void xlnx_zynqmp_realize(DeviceState *dev, Erro= r **errp) &error_abort); sysbus_mmio_map(SYS_BUS_DEVICE(&s->dpdma), 0, DPDMA_ADDR); sysbus_connect_irq(SYS_BUS_DEVICE(&s->dpdma), 0, gic_spi[DPDMA_IRQ]); + + object_property_set_bool(OBJECT(&s->rtc), true, "realized", &err); + if (err) { + error_propagate(errp, err); + return; + } + sysbus_mmio_map(SYS_BUS_DEVICE(&s->rtc), 0, RTC_ADDR); + sysbus_connect_irq(SYS_BUS_DEVICE(&s->rtc), 0, gic_spi[RTC_IRQ]); } =20 static Property xlnx_zynqmp_props[] =3D { --=20 2.14.1