From patchwork Tue Jan 9 18:50:52 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 857678 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=xilinx.onmicrosoft.com header.i=@xilinx.onmicrosoft.com header.b="TjoZFE3n"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3zGLvf1x5Zz9sQm for ; Wed, 10 Jan 2018 05:56:14 +1100 (AEDT) Received: from localhost ([::1]:40828 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eYz4G-0005RR-9N for incoming@patchwork.ozlabs.org; Tue, 09 Jan 2018 13:56:12 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46680) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eYz3Z-0005Pm-RF for qemu-devel@nongnu.org; Tue, 09 Jan 2018 13:55:31 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eYz3V-0000lE-OX for qemu-devel@nongnu.org; Tue, 09 Jan 2018 13:55:29 -0500 Received: from mail-by2nam01on0046.outbound.protection.outlook.com ([104.47.34.46]:44896 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 1eYz3V-0000ju-B4 for qemu-devel@nongnu.org; Tue, 09 Jan 2018 13:55:25 -0500 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=lzoczlHbzcgHe/4DKlM6afJu3Rp03IAb1mcUI8jstCU=; b=TjoZFE3nyJ7vY2rNnI+HwEJ1fK1pyZrFcr9vtLBKAwRzIsJ9QPJnidgwm9wJ14oaumb8VtcODT1/HkPKxLUFWGYIpfIhNJEwzQO239mLAsfvsZL6c2d22GG2kVZB5MM0+ZKtD4v4M7hMcNhmYLSN+M6xmAamXa+INlrdi6W6G2I= Received: from BY2PR02CA0121.namprd02.prod.outlook.com (10.163.44.175) by SN1PR02MB1342.namprd02.prod.outlook.com (10.162.0.148) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.386.5; Tue, 9 Jan 2018 18:55:21 +0000 Received: from BL2NAM02FT004.eop-nam02.prod.protection.outlook.com (2a01:111:f400:7e46::200) by BY2PR02CA0121.outlook.office365.com (2a01:111:e400:5261::47) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.386.5 via Frontend Transport; Tue, 9 Jan 2018 18:55:21 +0000 Authentication-Results: spf=pass (sender IP is 149.199.60.100) smtp.mailfrom=xilinx.com; gmail.com; dkim=none (message not signed) header.d=none;gmail.com; dmarc=bestguesspass action=none header.from=xilinx.com; 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; Received: from xsj-pvapsmtpgw02 (149.199.60.100) by BL2NAM02FT004.mail.protection.outlook.com (10.152.76.168) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.20.345.12 via Frontend Transport; Tue, 9 Jan 2018 18:55:20 +0000 Received: from unknown-38-66.xilinx.com ([149.199.38.66]:45576 helo=xsj-pvapsmtp01) by xsj-pvapsmtpgw02 with esmtp (Exim 4.63) (envelope-from ) id 1eYz3P-00016w-WA; Tue, 09 Jan 2018 10:55:20 -0800 Received: from [127.0.0.1] (helo=localhost) by xsj-pvapsmtp01 with smtp (Exim 4.63) (envelope-from ) id 1eYz3P-00054d-TY; Tue, 09 Jan 2018 10:55:19 -0800 Received: from xsj-pvapsmtp01 (smtp3.xilinx.com [149.199.38.66]) by xsj-smtp-dlp1.xlnx.xilinx.com (8.13.8/8.13.1) with ESMTP id w09ItA2F017294; Tue, 9 Jan 2018 10:55:10 -0800 Received: from [172.19.2.220] (helo=xsjalistai50.xilinx.com) by xsj-pvapsmtp01 with esmtp (Exim 4.63) (envelope-from ) id 1eYz3G-00052N-6c; Tue, 09 Jan 2018 10:55:10 -0800 From: Alistair Francis To: , Date: Tue, 9 Jan 2018 10:50:52 -0800 Message-ID: X-Mailer: git-send-email 2.14.1 X-RCIS-Action: ALLOW X-TM-AS-Product-Ver: IMSS-7.1.0.1224-8.2.0.1013-23584.005 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)(39380400002)(346002)(39860400002)(396003)(2980300002)(438002)(199004)(189003)(7696005)(81156014)(48376002)(5660300001)(356003)(118296001)(305945005)(478600001)(230783001)(8936002)(47776003)(6666003)(50226002)(59450400001)(50466002)(4326008)(36386004)(51416003)(9786002)(39060400002)(81166006)(8676002)(106002)(77096006)(110136005)(36756003)(316002)(2906002)(106466001)(54906003)(16586007)(63266004)(107986001)(5001870100001); DIR:OUT; SFP:1101; SCL:1; SRVR:SN1PR02MB1342; H:xsj-pvapsmtpgw02; FPR:; SPF:Pass; PTR:xapps1.xilinx.com,unknown-60-100.xilinx.com; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2NAM02FT004; 1:06g5a54FNxpTeIrvIF//I6U7pq5ey2hutjVW1mavJZHDTuTjPsQEEq4fDQ6W7i2aUQRR7//7n0Ovld+Izxiz3MpY1A9dFInq5vdnMU8zCDhJWWTQAY/yNMVvhULZ9aIw MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 10677145-38d8-4ebf-dc2e-08d55792889d X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(4608076)(2017052603307)(7153060); SRVR:SN1PR02MB1342; X-Microsoft-Exchange-Diagnostics: 1; SN1PR02MB1342; 3:uJpNi1iuZ04BBJj2rVksSCrwXp3uO9m7ixRFeIhd2tqGWsU5JRit2W67RbFCnJoD9xsOiGeHM9wbfcZPeGFSJdzRUA0ipbAZ120fU6EPNmci9bf9yo1GyFkXKF4/9DLWAazJDx1eORUH1RJe2tmpZKd39UhiMyPegR1HOKhdRrLJEmFwMDwXzlArN/1B+IiXCX2kuoxuvIwpFDaWibVt0t55CU50V4tT3PS4yVGOg6AOa7TTWYCHbP43Dclk/733AQsj99BrEGbWcxnRaj/5sjULEnjMgKOMf+1M5lJEMVwYko/ndhCFT+mIZED0aFK0ud7vMQfkt/9SctJsjxOhWoRQ5p3/6UkrgYXolH2INCM=; 25:9Dap82/8ViUw2E2L0lWF/V9RpZQtrIyAX+czjL7cdnqBJcNpkDrDo3A/qHLHcWr4iLiVuIdWboc0+PB5Nd9Za4gk/14v7svoDuUVCWi6OOPzIodR65sWoyZ/m91jYzFANgGBMQbXRdzIZwXgpgM8bHSbw+8lCN8dOpmSE/Lc2qeHzfxXmonOinxz/rvMSxz27VZCqn4oCAVJZKJzPoZqXPctxhTPmYCcRbC9Mw5e19T+8JSpSTI8P6ILGDbXw18RBNcBIJfQWJuMZX/iUj39hLGsAPjbI8GuGLuPvIg2ZYBOOESR06xxKdPXcL9yL3lllCivrTUooZY+kP0x5l8oVA== X-MS-TrafficTypeDiagnostic: SN1PR02MB1342: X-Microsoft-Exchange-Diagnostics: 1; SN1PR02MB1342; 31:RJ2nAGBt6CsT6TJCbjCFwOYolvJ6dgtOg+UXQEHes5HmoB4JXejFJ7QjreSTjChpNHmMm5QZEmylWkVufJTpq/Cfm71ycQY6b8De00johSjTAMaPp2SCIJm5JPXZZDY1QahAS4CZVl+TGu6IJxNPsRY3N8T3wj7vMcGfIf8GkpbkJSK2fkfYWZNS3VMQFf6pZc+QXgiWn+tkZj82US1rP7pGkRMqd1fKf98bnGJo+gA=; 20:A+X9KYN/4luTNqmD5ywVZv1fAXMoJVhqYgZ+p1hHcwxz1QKbx8v5bsDVWy9cqho2T3F+2j8/XejkWMsSSTx3JUj0xT7PhP6PCcRcNQLxVMjboStN/xocf8c4i6DE8AC5FGUrMpqSJYz8o9nqexADgtVXq2Vg9hwJfSZC96BHFf9/huIZovvzuDf4nsDB33OaeUB6IhNJKlTHwT8LnVpTSVZYfORlkXY8ctupeUQSO8cmKQUBrKiR0rzIKhUXaM3G5mVk+0bJ91FaTzPt89yWWWDSNx62LQxGqTLWLiUnGfbnYLliLUasrFxpFd2Ai/AZzuCwd9UNChuCE2kcxPFQWXEgcoRrCA3GjhtdBe4YhHuXhKKnykD9Hy2yL9LcCRNRJJ4BskStkqrT8FAhKBae7kHu1zDwrxKVleJncEGbR22a6XlG4SKSF52LxmJ1QidYun1gjh0qe9kcpubmWExJkWwPdZEH1ULJh+N3tfo5gABpt0aFWW9ySgZrg8bPFK4h X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(192813158149592); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040470)(2401047)(5005006)(8121501046)(93006095)(93004095)(10201501046)(3002001)(3231023)(944501075)(6055026)(6041268)(20161123562045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(6072148)(201708071742011); SRVR:SN1PR02MB1342; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:SN1PR02MB1342; X-Microsoft-Exchange-Diagnostics: 1; SN1PR02MB1342; 4:7O3Ju/iKJlfCfz1Y4zGoLLgST7/2N2un2nfiUHcICewkv7hEt7ax5e16jq4fg3zrhOT+pnyIrndY2N9mmtQtkB657LMiYOq88zGcOG6smVubL+ZjMRrdO2DKCjr4Hzwe4KLBShjtsMYsx11HgHfMkNGnhENdENF9Z9XeVAnzx33A/lDuUC43+1KU5lp52oJvvSzXBeKyT4KXriHIVEU7ztgdmvYgbKo/q4PygPmPdTmhIlWLuVX26invYpv0VIRBvS0HYmMfhsTFSpNPyTOa9noj2GcuuMQYwsRvJoeFoG5YaHMO2oXbBaBl0TsVvyr1 X-Forefront-PRVS: 0547116B72 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN1PR02MB1342; 23:khPET3z1hTYWerSFt9lvGWApPD3dLWdRCWO98H0J1?= tX6/NSe5m1yukczpHNzsRGaaAj8jFQ04N3lCkt1nxT9UnGkTlRd+q258KYVFVjLHyZrEt5uFfYB2UvZOlFAAhjmfL/x09YP1+9u3mmk4LemEHAI9t08dryTqR2uZuSEfovZkPezQQ8TzwchNpV1Hz/THtBoYLNXBTDCs83HUFjbt3uhsuTzuwlpK8ebYHPSTHxUyk8KYIiS8TUYD5hXYV4Qy8U4qlgO11vebZC4gv8M7zITdT/zvONh4fHA/koxpvJ9ef/ixpz1iaIw591V7TNg9Ol6VcHDqOYm2iliBMM8EK52JWApGFxhNokB20U8jq6yHQZdU9e4M6XYMdsmgbIbck2aCWTebKkehBK4yHQPW1JtJR/uXd+TQmacGM80Cpr1kFftIO4zR3BZsmvoVnkJxr38cmI4DAUpXTkNm25hY4f8lHLoMxdgo3xTWKIpnP5B9zlnsEY71P5YWm7jA3q/lFjE4cPYOwVbegNRVlt9zqC9mObEAuqRlW2xc5nlTlgVYqPgDo9xTSkRv0RklAUrs/FQQooJ2epKKFLVj6iAR7B65Pa7xV2ww8iS/ZSo/uS1AR9aMYwMeNqUBlCt++AlroxXCb520natwq/4Kqc1jWX6NNOMsUX/YnWDziZ9+hZRLjsG22u3iIqkUKb6yz2s8M+Ym0BTmZvqT00NtkzudZfRZsKhwyO1OzAt5FhjpQ+DmgZpYnRVa1gTJDNSCtrkJHTy0pmFMkOABFEJxpZrELJ/35zheYqGqJaqtsCBZ3KV9st5ktmzSEI945FYmELtx5fcJ272H/zLi8wPWl41gGFdmqNgXGdr0KEe+zU9R4dTGsa5qcndiX+lF7ckbwbfV8sQ4c8Ne45FeeF36VfD7JT08PIDY6U6v69QkHSHq5UvHnpQhN47q3nQZKuLegtm8115Za7HYOXfOpfvvQwLv2Kigctd9FHQIMPwH2OKP+YXR4Tg1ylxAnYgQfMMtL2del310eFwB3pextEUlo+6Sw== X-Microsoft-Exchange-Diagnostics: 1; SN1PR02MB1342; 6:KNYZZ/WGfdGYY2YZw2aC0TlRwt8D5FEgWQHdE0Chtu2AJu+i7gBhGUlUjj1wInl1SvPgZkO+AU8rNAhgyq0b9APYpZ2Q7QHCjV5wZ0RTzPSe53CwlVUfVEJk1LFwdpDn7kqA0g4yD5bBAVPltwLeyiYtX1VyU2zGqAlithvPmiQBBq56MvOZtHJNW1zawR7rrZFMcwtnY9G3Z0hQdgMP1yvMSsXsRBuRavstIgqOGDRfNbE7v7MsKuY/3QnTaW/cc4uaJvZaa7W5TIyOISMDT/LKeUDBJkEJapty7QuPUzyEdgoUp9FDbRwDMlR+KZ8QCnScDEnH2UWhPQyB25UMqwCHxduVd9LXKt4D85ZWUjs=; 5:BJw/Dce/PA5flfAW4lLYhpL+St9ZY/lNNALgNYhCRzhtVCZawQ1A7GLsfSKjyXocmflxZPwk7/OQgnQP3cT7bzBGxpD8pfM/QTiocQ6TEsFnQngqW6n7tIAoehJMZyLdHZsYl5j/eXHWzO4+2Thi5t8SjOcwXsyA/6Fb6BYnYqs=; 24:5QIzZTsPPeA/F7ufMrG5vB1RhIE0nc1c6XSl4LTCjCVhbNjGEfNdSMLMzFxJMqn2qIACJQvB/FK6z16fPnXeqcVMa+mPFVqelTxccqumCQo=; 7:oxOlOSi+HVAvpJQfHCWOVyv63UgqqZZOEVsDeZBWxi67mz0/KRYtYS2/S1uoKjZbiyvEar/h0V4Tbl8l7A0JDDBrktrudPbk4wWmLYMQdgVuqx1AMpY8RRyC/kn6N/vLCmpVDzpMA2reXyFqb0MsOdHVE+WcONIm9RHOICasVjl0h2Mg06LpNKIoss7xS4erQ00QZysfsVrXKQ5mRELab522sx/r5PMNmL/a64hCHqy/jsQfwAWnnawKw0zg4RIg SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jan 2018 18:55:20.8400 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 10677145-38d8-4ebf-dc2e-08d55792889d 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: SN1PR02MB1342 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.34.46 Subject: [Qemu-devel] [PATCH v1 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, alistair.francis@xilinx.com Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Initial commit of the ZynqMP RTC device. Signed-off-by: Alistair Francis --- hw/timer/Makefile.objs | 1 + hw/timer/xlnx-zynqmp-rtc.c | 232 +++++++++++++++++++++++++++++++++++++ include/hw/timer/xlnx-zynqmp-rtc.h | 84 ++++++++++++++ 3 files changed, 317 insertions(+) create mode 100644 hw/timer/xlnx-zynqmp-rtc.c create mode 100644 include/hw/timer/xlnx-zynqmp-rtc.h 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) += imx_epit.o common-obj-$(CONFIG_IMX) += imx_gpt.o common-obj-$(CONFIG_LM32) += lm32_timer.o common-obj-$(CONFIG_MILKYMIST) += milkymist-sysctl.o +common-obj-$(CONFIG_XLNX_ZYNQMP) += xlnx-zynqmp-rtc.o obj-$(CONFIG_ALTERA_TIMER) += altera_timer.o obj-$(CONFIG_EXYNOS4) += exynos4210_mct.o diff --git a/hw/timer/xlnx-zynqmp-rtc.c b/hw/timer/xlnx-zynqmp-rtc.c new file mode 100644 index 0000000000..40533220fc --- /dev/null +++ b/hw/timer/xlnx-zynqmp-rtc.c @@ -0,0 +1,232 @@ +/* + * 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"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * 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 OTHER + * 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 + +#define DB_PRINT_L(lvl, fmt, args...) do { \ + if (XLNX_ZYNQMP_RTC_ERR_DEBUG >= lvl) { \ + qemu_log("%s: " fmt, __func__, ## args); \ + } \ +} while (0); + +#define DB_PRINT(fmt, args...) DB_PRINT_L(1, fmt, ## args) + +static void rtc_int_update_irq(XlnxZynqMPRTC *s) +{ + bool pending = 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 = s->regs[R_ADDR_ERROR] & ~s->regs[R_ADDR_ERROR_INT_MASK]; + qemu_set_irq(s->irq_addr_error_int, pending); +} + +static void rtc_int_status_postw(RegisterInfo *reg, uint64_t val64) +{ + XlnxZynqMPRTC *s = XLNX_ZYNQMP_RTC(reg->opaque); + rtc_int_update_irq(s); +} + +static uint64_t rtc_int_en_prew(RegisterInfo *reg, uint64_t val64) +{ + XlnxZynqMPRTC *s = XLNX_ZYNQMP_RTC(reg->opaque); + uint32_t val = val64; + + s->regs[R_RTC_INT_MASK] &= ~val; + rtc_int_update_irq(s); + return 0; +} + +static uint64_t rtc_int_dis_prew(RegisterInfo *reg, uint64_t val64) +{ + XlnxZynqMPRTC *s = XLNX_ZYNQMP_RTC(reg->opaque); + uint32_t val = val64; + + s->regs[R_RTC_INT_MASK] |= val; + rtc_int_update_irq(s); + return 0; +} + +static void addr_error_postw(RegisterInfo *reg, uint64_t val64) +{ + XlnxZynqMPRTC *s = 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 = XLNX_ZYNQMP_RTC(reg->opaque); + uint32_t val = val64; + + s->regs[R_ADDR_ERROR_INT_MASK] &= ~val; + addr_error_int_update_irq(s); + return 0; +} + +static uint64_t addr_error_int_dis_prew(RegisterInfo *reg, uint64_t val64) +{ + XlnxZynqMPRTC *s = XLNX_ZYNQMP_RTC(reg->opaque); + uint32_t val = val64; + + s->regs[R_ADDR_ERROR_INT_MASK] |= val; + addr_error_int_update_irq(s); + return 0; +} + +static const RegisterAccessInfo rtc_regs_info[] = { + { .name = "SET_TIME_WRITE", .addr = A_SET_TIME_WRITE, + },{ .name = "SET_TIME_READ", .addr = A_SET_TIME_READ, + .ro = 0xffffffff, + },{ .name = "CALIB_WRITE", .addr = A_CALIB_WRITE, + },{ .name = "CALIB_READ", .addr = A_CALIB_READ, + .ro = 0x1fffff, + },{ .name = "CURRENT_TIME", .addr = A_CURRENT_TIME, + .ro = 0xffffffff, + },{ .name = "CURRENT_TICK", .addr = A_CURRENT_TICK, + .ro = 0xffff, + },{ .name = "ALARM", .addr = A_ALARM, + },{ .name = "RTC_INT_STATUS", .addr = A_RTC_INT_STATUS, + .w1c = 0x3, + .post_write = rtc_int_status_postw, + },{ .name = "RTC_INT_MASK", .addr = A_RTC_INT_MASK, + .reset = 0x3, + .ro = 0x3, + },{ .name = "RTC_INT_EN", .addr = A_RTC_INT_EN, + .pre_write = rtc_int_en_prew, + },{ .name = "RTC_INT_DIS", .addr = A_RTC_INT_DIS, + .pre_write = rtc_int_dis_prew, + },{ .name = "ADDR_ERROR", .addr = A_ADDR_ERROR, + .w1c = 0x1, + .post_write = addr_error_postw, + },{ .name = "ADDR_ERROR_INT_MASK", .addr = A_ADDR_ERROR_INT_MASK, + .reset = 0x1, + .ro = 0x1, + },{ .name = "ADDR_ERROR_INT_EN", .addr = A_ADDR_ERROR_INT_EN, + .pre_write = addr_error_int_en_prew, + },{ .name = "ADDR_ERROR_INT_DIS", .addr = A_ADDR_ERROR_INT_DIS, + .pre_write = addr_error_int_dis_prew, + },{ .name = "CONTROL", .addr = A_CONTROL, + .reset = 0x1000000, + .rsvd = 0x70fffffe, + },{ .name = "SAFETY_CHK", .addr = A_SAFETY_CHK, + } +}; + +static void rtc_reset(DeviceState *dev) +{ + XlnxZynqMPRTC *s = XLNX_ZYNQMP_RTC(dev); + unsigned int i; + + for (i = 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 = { + .read = register_read_memory, + .write = register_write_memory, + .endianness = DEVICE_LITTLE_ENDIAN, + .valid = { + .min_access_size = 4, + .max_access_size = 4, + }, +}; + +static void rtc_realize(DeviceState *dev, Error **errp) +{ + /* Delete this if you don't need it */ +} + +static void rtc_init(Object *obj) +{ + XlnxZynqMPRTC *s = XLNX_ZYNQMP_RTC(obj); + SysBusDevice *sbd = 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 = + 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 = { + .name = TYPE_XLNX_ZYNQMP_RTC, + .version_id = 1, + .minimum_version_id = 1, + .fields = (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 = DEVICE_CLASS(klass); + + dc->reset = rtc_reset; + dc->realize = rtc_realize; + dc->vmsd = &vmstate_rtc; +} + +static const TypeInfo rtc_info = { + .name = TYPE_XLNX_ZYNQMP_RTC, + .parent = TYPE_SYS_BUS_DEVICE, + .instance_size = sizeof(XlnxZynqMPRTC), + .class_init = rtc_class_init, + .instance_init = rtc_init, +}; + +static void rtc_register_types(void) +{ + type_register_static(&rtc_info); +} + +type_init(rtc_register_types) diff --git a/include/hw/timer/xlnx-zynqmp-rtc.h b/include/hw/timer/xlnx-zynqmp-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"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * 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 OTHER + * 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; From patchwork Tue Jan 9 18:50:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 857676 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=xilinx.onmicrosoft.com header.i=@xilinx.onmicrosoft.com header.b="bjzFgjK+"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3zGLvd2gsbz9sPk for ; Wed, 10 Jan 2018 05:56:13 +1100 (AEDT) Received: from localhost ([::1]:40827 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eYz4F-0005R6-Dm for incoming@patchwork.ozlabs.org; Tue, 09 Jan 2018 13:56:11 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46676) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eYz3Z-0005Pe-Cl for qemu-devel@nongnu.org; Tue, 09 Jan 2018 13:55:30 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eYz3V-0000kf-2K for qemu-devel@nongnu.org; Tue, 09 Jan 2018 13:55:29 -0500 Received: from mail-by2nam01on0061.outbound.protection.outlook.com ([104.47.34.61]:2493 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 1eYz3U-0000jO-KD for qemu-devel@nongnu.org; Tue, 09 Jan 2018 13:55:24 -0500 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=3IRhj7USgJJzoZT4BiQdavW+yDoJm2xwyuzCy/CkdMA=; b=bjzFgjK+oCUZYfL4kSGhXH55weNAOrsEAsc2rdMR15Bi6539zIxsYFvR5w7afwsjzgv9hf2poQDCB4GfO4+zqxGmSPp98o8Q45jLDttEXBe69ou5KHL8cJjql1embC8qiwtb381iXtkHrMSDN3YgxAo21gpWgdcf2ubeuoE29/A= Received: from SN4PR0201CA0069.namprd02.prod.outlook.com (10.171.31.159) by CY1PR02MB1333.namprd02.prod.outlook.com (10.161.170.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.386.5; Tue, 9 Jan 2018 18:55:21 +0000 Received: from BL2NAM02FT061.eop-nam02.prod.protection.outlook.com (2a01:111:f400:7e46::205) by SN4PR0201CA0069.outlook.office365.com (2603:10b6:803:20::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.386.5 via Frontend Transport; Tue, 9 Jan 2018 18:55:21 +0000 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; Received: from xsj-pvapsmtpgw02 (149.199.60.100) by BL2NAM02FT061.mail.protection.outlook.com (10.152.77.7) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.20.345.12 via Frontend Transport; Tue, 9 Jan 2018 18:55:20 +0000 Received: from unknown-38-66.xilinx.com ([149.199.38.66]:45571 helo=xsj-pvapsmtp01) by xsj-pvapsmtpgw02 with esmtp (Exim 4.63) (envelope-from ) id 1eYz3P-00016u-Uf; Tue, 09 Jan 2018 10:55:19 -0800 Received: from [127.0.0.1] (helo=localhost) by xsj-pvapsmtp01 with smtp (Exim 4.63) (envelope-from ) id 1eYz3P-00054d-Ry; Tue, 09 Jan 2018 10:55:19 -0800 Received: from xsj-pvapsmtp01 (xsj-smtp.xilinx.com [149.199.38.66]) by xsj-smtp-dlp1.xlnx.xilinx.com (8.13.8/8.13.1) with ESMTP id w09ItCLG017318; Tue, 9 Jan 2018 10:55:12 -0800 Received: from [172.19.2.220] (helo=xsjalistai50.xilinx.com) by xsj-pvapsmtp01 with esmtp (Exim 4.63) (envelope-from ) id 1eYz3I-00052s-Ip; Tue, 09 Jan 2018 10:55:12 -0800 From: Alistair Francis To: , Date: Tue, 9 Jan 2018 10:50:54 -0800 Message-ID: X-Mailer: git-send-email 2.14.1 In-Reply-To: References: X-RCIS-Action: ALLOW X-TM-AS-Product-Ver: IMSS-7.1.0.1224-8.2.0.1013-23584.005 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)(346002)(39380400002)(396003)(39860400002)(376002)(2980300002)(438002)(189003)(199004)(50466002)(9786002)(16586007)(54906003)(305945005)(81156014)(106002)(110136005)(316002)(39060400002)(81166006)(118296001)(8676002)(230783001)(356003)(48376002)(4326008)(36386004)(77096006)(50226002)(8936002)(6666003)(106466001)(76176011)(36756003)(51416003)(478600001)(2906002)(7696005)(63266004)(59450400001)(2950100002)(5660300001)(47776003)(6346003)(107986001)(5001870100001); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR02MB1333; H:xsj-pvapsmtpgw02; FPR:; SPF:Pass; PTR:unknown-60-100.xilinx.com,xapps1.xilinx.com; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2NAM02FT061; 1:nbzDrK/WhoeXDv5oA/LpkRp/3Pb82qdyYZ2Ua84Loou3UJKPVTS92cW4wepFulXkQQfF0SNQuQc7IhuSTxFaQNI8CyI3hcRxdDtVWEco1fN/zAitN9nHFbf1ictJfxje MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: cf0d1e74-e131-4ae2-e237-08d557928874 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(4608076)(2017052603307)(7153060); SRVR:CY1PR02MB1333; X-Microsoft-Exchange-Diagnostics: 1; CY1PR02MB1333; 3:piSYY7ftGjngLobqMnY8s0gOr34mrBAn0CY9AZZcqCatJrqLcXAuNRimz4qJ88WC/yCNTuJHFtv3jmkOnp20qVgtHPjbXjYhOzsdBpiHchFuAuurjcJ8wGaJvJY+decqTpkCp205Uqroqb5ciDbG3FPsQA4pTKDERsS8ilLhxByd1905DFtUdG2xJCAtOa6QcUd23+lWJcg7406OvGce2Pc09uxXRmrw4mlsVkDvVvpDbO1+Cvtcxl8zl2DdLe0kN6lv5VGtsUmzKd3vLBbmzl5wbLDTHxWU0DcwcOpwghWz3uzzGI0LMOcjePdJ1EW//deoUn5uiDaN72xb2ORW8HH8oq7r2KzzcVpiNYRZ5BA=; 25:ubyI/O3eFt1TunzyCwy62260Cio47SblIv3L5/VX1xbcEQfjLSdPcY8KhTAr+5xGWmMqhftDoRV1Hz0fOgU8E1gTfnFZT2wurqqAMsBvRMd469jXMe30WbG1YxEP2o4pL1OSmJGAJN7QXhVzlgEwRBTMnyX3WAU1x4IDDG0A4Q5h6HG74Hm8l3HUQ1vfBD3pvUyshTauvWShnSMPsWluuEH8WU/njHMUjR5ii2IOaz2pU/Ijz8nkD97tSj3tXFu2IN8MZJRl6A52qsBoJ4SnOk7IKqKmImUjgdomw+qFynWi21bwWgMOfK7G916iQZaC2Qt7ltPz+YPRu0lm9l0JMQ== X-MS-TrafficTypeDiagnostic: CY1PR02MB1333: X-Microsoft-Exchange-Diagnostics: 1; CY1PR02MB1333; 31:A0IW3ByI+w+tl9ll7PFVCIlcw5a41KRHrSKD4dIMzAxkZHotBrlud3dortTL2dvAiM3hE/IVY27gD3w9horPkOgPE/EYxWWhjA/LzBbYeOAar2GNhP88szTBuH93lnP5z2WXolrtsuLQXQIPqrl3JJP+IY9YcMkQKnNl5Eyf4SJukGTGx8iCJ04ntqxj0KrWd8ctMhQ+lgcr9bhtmsAiraOwCCXWGi4ZSi7++k1yIZE=; 20:Hv/Oy4QTeC2iD+HU50COwtbWx1Ews9IPAayHNony63VceJs4xbUI0VGEQTvWvlcvg7BpyDA5DCd9iKc+RJDESkXjgcP9rn66wP9Z55ehb+At+YdbO4zNodQ4Gdg3k/6pj1woqYU+meQcKEIQqomvhOnEkNyr9E10TmeGJcrvroHSMNOJqdnGrnZhGtrvu7hkxsAScVImKEDkjKOkgLoLgaGA44DUTtwzoT5Tj5i8ft8DkZhMGcN3rMUJDoXi1E1AtzmbGXFpCffl7PajM4HH9OC0p0SfXUQAiBlo0b9SIavGwbEb3U+PpxKCnJ++/wcUwnpVNfP3ggAOE22DJOzujMItZbSFmAQ1VuS2rVuWjLXjEDOcND9cUiQoSSb+wpvE5DFuV5ka2D0kj6yfdFHu8IZt9fBj6PKMogwDnxf9mw7gCFwLJpU1LWaovfGREje8yjIQa0OIryub/MEF7sweb+x4sTy38H0vN0Z0yaxgw4IC6moLLcWGza+xYaOWSzKG X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(192813158149592); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040470)(2401047)(5005006)(8121501046)(3231023)(944501110)(3002001)(93006095)(93004095)(10201501046)(6055026)(6041268)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123562045)(6072148)(201708071742011); SRVR:CY1PR02MB1333; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:CY1PR02MB1333; X-Microsoft-Exchange-Diagnostics: 1; CY1PR02MB1333; 4:k8h7wQL3vCPAGJkW7hNi3wWAurS/ugw2/aMy43cAUqkUv+p4fjPRnkMSZ6C5h0SDa+31kzKrMHYwQj3X0Rggkpg4sLpXOguW1jgLv/unOVsq0YHuG7NEFGRnHDJOc3l8YhFhyYXKS10nJzN1AnldBZMRGKrTopg4mLgOozRHjE0sJNsBz2M0VMeWHt0/DDey+cC2227DGURHy2Lwy7h5fzAJByp/XpY2Yq9XmNbNegs68X27LaHngcRLmj2CztEG3bM27DIf/hZANb6O0XHULge6pwFEP5vQeL2BB2qsRaOlwtfh443qvSSkHZ1mGTns X-Forefront-PRVS: 0547116B72 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR02MB1333; 23:X2hWmzu1e7fscBXlydu4bOQE0Pp9dRAA0otkE2jBH?= aRd0/S5MbNDBLYJz1RVSwAEERfBUtvMxUVua8E4KcHZFRobb3mBVGIx41l2LL+V5MFvMQ5kalRBdYweTdN4W4Z2xSegya3sA59kreORyC+v4ssEGcaptyR8AkDC58zjbgW/Kh5epPi6BihXzIcIzYiKF7nJQQI3eTJJhFtQdq8MsOGnsxJWaBbx5LoBf5oq2jkdT5yuwwIT5TK6SYIjC+xPCArmehatt38zIK7EYRDO0hx2S3ue21b/Gz1EeXbSVjSE6xWbjnxOir8+yjJRTnJWepuN1M5R9lLOnOISyW8C+vDt9hbCNFUTN6VY2Q8mUVDcuCrWhC8Ve5PGXk0ShU0Hq4iOPWq5lRo4RcT4mxxubOdhUWjmkR4crXkOSO+LpKoWPcnGxw17XqQlc4PBllNdRuNb64IcJUGQuQ5YLokCQr5t3i2UBIWLMoga2wKnNwQN3TvuOJwaSWLDwUbL8gUblZq4qpdvgYmkin6wUtKys3XfS+NgJ6lGShb+1ttL04vLBoAqbm7siPUMkRts7heP1W2V7klkFO8eCjkonG3bJgqsv10pjTG9irNZ7M2a3dOjZtzAv0BNwifz+P4+f3rKwWE3d0aiC2ZXcHcL1/XciME57zd6Ph1lwqte02Ialhw0iSkgIGhXFOADNWRctJuIdJBFXdr8mE4uZh/q0eDAPB3qsPyrpa0WOD26kwaK7o7Xdme6P0/22BDljHu2+k4G1zwvtlulKfLkMUgTj9jyGvQH0Nd480w3T8OJu9Qs/aYp3cLd5jOIStcC2igP5RkaNMNxNaKH4LfFc2csxVCeljlJDRj+p0ahB45LDQUne/VGL4mcfzK4otwPLD9+qURVW/hxThW0OTYqhIbAGGyw4AHRKTA6tYREWfI/3+7bpoZHBKnIJyhPdxWndwxEQPgJRAAe02wgJeXouyYeQmMtF3v9I7n2WCla5/GOMGnl4pGyLjHDpn/Wht0x1tJuRw5xKZ45HYsrGPbNW1HMyLd4VJDFN8yMNnxBD4UlhuqpMCgORRo77Exyk9DZP+5RqEgstRYK4SglTQpCRjcVpu1hzA== X-Microsoft-Exchange-Diagnostics: 1; CY1PR02MB1333; 6:1tUHPxVgYPH/MBjUkUQ6n3qZb4WbF2wB69GsXUVy4HYLBl04qRhOfNidElewr4Whjd1La/MaE8Jq9g9ACOOjOsrs0MPdjG3PmrEjnj6Kvw+/K4Ow8X5DnOOMK7wEPZ0KFBxeyCHRn7C02VIMxZCdYd43dgu/KCFpQ37qHnr06hVI5pHx1lHcA44g7K+9NTH30V4Upo0A85FI44MGLwjMb3cz48srVm2F9q61QSGH09jbkXH/bvrvjS1JEUwsDRxAvZ+9HzpoUvaW6JvmOliV4/LnERCNkKwHTsjX+ZQ65+LLxh6g/A5nQ7ps1C6bl0Wy9PJZsX+eaSIEfxgH5unvIHC4blXDkqy1lTY7yYBY9po=; 5:ALpuFkNtl1HpjlLYZ/uZg9QhUCVGz//6S7RtlOWJgyEdpzSivVgB6Yv+v+puag+dDbSQXMiLwwSGHjqy/tsuIR9vHGH/Nyy815T7HGkhygTdoPGUuc9AhtNRP18TKzScs7j8T+bhAhw4CmfIJa37kgmbS1MpC9GI2/kZAjIEPGk=; 24:mN9LYpj/kQr9qkjdynedxFbkTrwifU6Rco04aUG9mstHnZG6zqNb6SXzIDs7KdhXTsbPl9NaobzKMPamsjoFYrKsBE1efRs/Z0WSzbrksjU=; 7:ncSRA4oOQ5gnLvUACpUTlApCFT7dHRKfKQfV2YQIdTm0exe9ghsOHHSkkWtnXaa1hMZWv597sGWXZZ3lWwn/ORJjUh1Yo7ahApn4HdUFjPAnNEWcumeGev1Yvv87NpdI9brxf1HBP+/S5Rq9h2KqPjd3x95OA5FQ27pO08stSSjTlIMRkrOz4EPo5fzdapEgSzMYUd9rjNIxZjbq3upAqXjd9T5loaUYTRN0pSODUPgLrWK9NYzifp74AW82fkFE SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jan 2018 18:55:20.6340 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: cf0d1e74-e131-4ae2-e237-08d557928874 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: CY1PR02MB1333 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.34.61 Subject: [Qemu-devel] [PATCH v1 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, alistair.francis@xilinx.com Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Allow the guest to determine the time set from the QEMU command line. Signed-off-by: Alistair Francis --- hw/timer/xlnx-zynqmp-rtc.c | 24 ++++++++++++++++++++++++ include/hw/timer/xlnx-zynqmp-rtc.h | 2 ++ 2 files changed, 26 insertions(+) diff --git a/hw/timer/xlnx-zynqmp-rtc.c b/hw/timer/xlnx-zynqmp-rtc.c index 40533220fc..eed17805ac 100644 --- a/hw/timer/xlnx-zynqmp-rtc.c +++ b/hw/timer/xlnx-zynqmp-rtc.c @@ -29,6 +29,7 @@ #include "hw/register.h" #include "qemu/bitops.h" #include "qemu/log.h" +#include "hw/ptimer.h" #include "hw/timer/xlnx-zynqmp-rtc.h" #ifndef XLNX_ZYNQMP_RTC_ERR_DEBUG @@ -55,6 +56,13 @@ static void addr_error_int_update_irq(XlnxZynqMPRTC *s) qemu_set_irq(s->irq_addr_error_int, pending); } +static uint64_t current_time_postr(RegisterInfo *reg, uint64_t val64) +{ + XlnxZynqMPRTC *s = XLNX_ZYNQMP_RTC(reg->opaque); + + return mktime(&s->current_tm); +} + static void rtc_int_status_postw(RegisterInfo *reg, uint64_t val64) { XlnxZynqMPRTC *s = XLNX_ZYNQMP_RTC(reg->opaque); @@ -111,11 +119,13 @@ static const RegisterAccessInfo rtc_regs_info[] = { { .name = "SET_TIME_WRITE", .addr = A_SET_TIME_WRITE, },{ .name = "SET_TIME_READ", .addr = A_SET_TIME_READ, .ro = 0xffffffff, + .post_read = current_time_postr, },{ .name = "CALIB_WRITE", .addr = A_CALIB_WRITE, },{ .name = "CALIB_READ", .addr = A_CALIB_READ, .ro = 0x1fffff, },{ .name = "CURRENT_TIME", .addr = A_CURRENT_TIME, .ro = 0xffffffff, + .post_read = current_time_postr, },{ .name = "CURRENT_TICK", .addr = A_CURRENT_TICK, .ro = 0xffff, },{ .name = "ALARM", .addr = A_ALARM, @@ -155,6 +165,13 @@ static void rtc_reset(DeviceState *dev) register_reset(&s->regs_info[i]); } + qemu_get_timedate(&s->current_tm, 0); + + DB_PRINT("Get time from host: %d-%d-%d %2d:%02d:%02d\n", + 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_sec); + rtc_int_update_irq(s); addr_error_int_update_irq(s); } @@ -203,6 +220,13 @@ static const VMStateDescription vmstate_rtc = { .minimum_version_id = 1, .fields = (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/include/hw/timer/xlnx-zynqmp-rtc.h b/include/hw/timer/xlnx-zynqmp-rtc.h index 87649836cc..51a49094ad 100644 --- a/include/hw/timer/xlnx-zynqmp-rtc.h +++ b/include/hw/timer/xlnx-zynqmp-rtc.h @@ -79,6 +79,8 @@ typedef struct XlnxZynqMPRTC { qemu_irq irq_rtc_int; qemu_irq irq_addr_error_int; + struct tm current_tm; + uint32_t regs[XLNX_ZYNQMP_RTC_R_MAX]; RegisterInfo regs_info[XLNX_ZYNQMP_RTC_R_MAX]; } XlnxZynqMPRTC; From patchwork Tue Jan 9 18:50:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 857675 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=xilinx.onmicrosoft.com header.i=@xilinx.onmicrosoft.com header.b="HipYqSus"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3zGLvX5SGsz9s4q for ; Wed, 10 Jan 2018 05:56:08 +1100 (AEDT) Received: from localhost ([::1]:40825 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eYz4A-0005Pw-M5 for incoming@patchwork.ozlabs.org; Tue, 09 Jan 2018 13:56:06 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46678) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eYz3Z-0005Pf-Dv for qemu-devel@nongnu.org; Tue, 09 Jan 2018 13:55:30 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eYz3V-0000km-3O for qemu-devel@nongnu.org; Tue, 09 Jan 2018 13:55:29 -0500 Received: from mail-sn1nam01on0040.outbound.protection.outlook.com ([104.47.32.40]:38793 helo=NAM01-SN1-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 1eYz3U-0000jh-Ij for qemu-devel@nongnu.org; Tue, 09 Jan 2018 13:55:24 -0500 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=QVbNVR7Vv4F/eHx9a3pYmthbMBTuCjJiJgXp2x0yumw=; b=HipYqSusuPcx+Dsqm/DDap1CR6i5zcbnRvVrb9LvEWSsmGAlxeHFU9OhIAjBZzJzPp2qxXYVDgwBwpP8PZNDCGfx+4vfTHCQ2Azg8Q+SpP82Uid7v+sc5pxAhR+OQXqFfWt8uiIlXzYTqDadIjZ56jDW4dTWiYr/ZIk6YnarpGU= Received: from CY4PR02CA0012.namprd02.prod.outlook.com (2603:10b6:903:18::22) by DM2PR02MB1337.namprd02.prod.outlook.com (2a01:111:e400:50c8::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.386.5; Tue, 9 Jan 2018 18:55:21 +0000 Received: from SN1NAM02FT008.eop-nam02.prod.protection.outlook.com (2a01:111:f400:7e44::201) by CY4PR02CA0012.outlook.office365.com (2603:10b6:903:18::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.386.5 via Frontend Transport; Tue, 9 Jan 2018 18:55:20 +0000 Authentication-Results: spf=pass (sender IP is 149.199.60.100) smtp.mailfrom=xilinx.com; gmail.com; dkim=none (message not signed) header.d=none;gmail.com; dmarc=bestguesspass action=none header.from=xilinx.com; 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; Received: from xsj-pvapsmtpgw02 (149.199.60.100) by SN1NAM02FT008.mail.protection.outlook.com (10.152.72.119) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.20.345.12 via Frontend Transport; Tue, 9 Jan 2018 18:55:20 +0000 Received: from unknown-38-66.xilinx.com ([149.199.38.66]:45564 helo=xsj-pvapsmtp01) by xsj-pvapsmtpgw02 with esmtp (Exim 4.63) (envelope-from ) id 1eYz3P-00016p-RZ; Tue, 09 Jan 2018 10:55:19 -0800 Received: from [127.0.0.1] (helo=localhost) by xsj-pvapsmtp01 with smtp (Exim 4.63) (envelope-from ) id 1eYz3P-00054d-Op; Tue, 09 Jan 2018 10:55:19 -0800 Received: from xsj-pvapsmtp01 (xsj-smtp1.xilinx.com [149.199.38.66]) by xsj-smtp-dlp1.xlnx.xilinx.com (8.13.8/8.13.1) with ESMTP id w09ItFmg017338; Tue, 9 Jan 2018 10:55:15 -0800 Received: from [172.19.2.220] (helo=xsjalistai50.xilinx.com) by xsj-pvapsmtp01 with esmtp (Exim 4.63) (envelope-from ) id 1eYz3K-00053M-UE; Tue, 09 Jan 2018 10:55:14 -0800 From: Alistair Francis To: , Date: Tue, 9 Jan 2018 10:50:57 -0800 Message-ID: <0ecd5644773477442fbaa0f4bcadb58bbe488c78.1515523657.git.alistair.francis@xilinx.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: References: X-RCIS-Action: ALLOW X-TM-AS-Product-Ver: IMSS-7.1.0.1224-8.2.0.1013-23584.005 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)(396003)(39860400002)(346002)(376002)(39380400002)(2980300002)(438002)(199004)(189003)(51416003)(305945005)(2950100002)(2906002)(36756003)(47776003)(7696005)(50226002)(63266004)(50466002)(81156014)(8676002)(9786002)(81166006)(48376002)(478600001)(6666003)(4326008)(76176011)(8936002)(106002)(36386004)(356003)(39060400002)(575784001)(118296001)(106466001)(16586007)(54906003)(316002)(110136005)(77096006)(5660300001)(107986001)(5001870100001); DIR:OUT; SFP:1101; SCL:1; SRVR:DM2PR02MB1337; H:xsj-pvapsmtpgw02; FPR:; SPF:Pass; PTR:unknown-60-100.xilinx.com,xapps1.xilinx.com; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; SN1NAM02FT008; 1:T9VzQ9KzvDcPPwhVdHo6JUYbjb+F3SkU8kDGdWvLyjH/Wt8HA8WkxuzdUr07BFJzitbiPqEWoh9qFi9B56hkYT5olmR2gVVd6pV+jPApyH5Ac0rEm1gSx/7jaZon5SGM MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e72e2086-a655-48d3-5d1b-08d557928847 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(4608076)(2017052603307)(7153060); SRVR:DM2PR02MB1337; X-Microsoft-Exchange-Diagnostics: 1; DM2PR02MB1337; 3:vF0eDG648hwHVUErHJL/uZG1qsUUlt7lk7oC+XAc5HwBtCMUMLXLjb2KgOzD665Zc9rGq5+JL7WVhM22A4u3w1pHSFW82FLl+CUmTUK+ABgZBbEtTQ4g/yNqhQJCBHO/rR5k8fwRXntiEexF/xJEqnt47Xiz3NsXouEv2XIbOWcAc5xADRy/Dw6aEEeerOX1SkY5Wc014TE0DhNC09QVDr9HWG9DB++Pnzd3cTVQZFyxUr2f2OgjiQvrNNSGJ+cq3FoJAGW0J6sTDniMmPSrrhIPCG2J5kDyB3ddB2WdRPCZZWCHQtWkA56oKcriXOiA/XPunMqHnWxx47FAhdYhisz6o9iTnmqaXSiqrsaGFHU=; 25:e1vO1DUCul3qQJdSHDrHGKe4SRL1AIomHGxqc35Pd9N4Kxwc4WSDsi2fxA1UPdNt5OfN+VAOAphBSwYw14/Wj+r1FfQ/dHLWmaW/DQ4wUNGNEwsMpdSZhBHDi1+pMEEpUXMjZsdfd91kjSeRRaGdhRAa8v47W3oIBRgVCiQwpsoeLv1wTXMlYgPAP9nPxh+TpAxTJlXVpIQMEPOfDFXDw3hDaFZ7Y2/QMAPh0EKYFibqNuEJgKL/X/PG6h1IsJdvGL2UBz45FydmrJ/NfDdvLEruppw3MqLMHLasZWy5MOl8RxPDwOiMRZPC3EvcTHiiHh0H+ZJRdwAycRZ+vFcjqg== X-MS-TrafficTypeDiagnostic: DM2PR02MB1337: X-Microsoft-Exchange-Diagnostics: 1; DM2PR02MB1337; 31:HH+qYb0qKSAIDaIAa2LSvTfxo7HCBtELtb1eZZUp819nTLWWZiaLjWlcnTu35EtUeKLVRmIuyVkltn6WmsRhDkUFnfbmKyw1NyVFYCcM07Y/vPmdoREj0kFe9szWDcrFwL6pHyshvAn93JfQhEroyECkDvq19OxgiGeXPKEcuHNTGj/vDSCupPVhuu7Keo7SxfYLKiXJuhz5fpxwxeLkj8eqdTMccxZAQTSy9UruvK4=; 20:RVsXofAEIeREw1BLy/jeYVQf4FIJe4gPKmNisY6sIc8xbHETHChyHUzAFebszwtUWSrEPChKawW2sVlHJ8kMpJ/tKyasiT5qMGc/DU5u1gk8pxgb7KdZRXRObxlA7NN0pSaqf27ca4ZjF5IG+gNCcpCPcvkdgLukRIesMX6nI35mw46u6S3uNebLsQvAcUfOAixc1c/2UcTTYr5q/eNNMIND9vVz0GLu+bqwr7dsIwXzfoOEWtDzDdxkRyvP6Vj3zlRNQcE7BvGu3AuD19mv+tUhNfR3Jj/wnYU4uimj0t+yJonPB9WXf1rQnE7ZlWKFCPzhRPG7GOmT1jmW0/Q7KQm3dM+Q+owIBxV5ZxHOZn5XUPv6KywpulAlOkeiBsCi5Z4bgwEgtux0tCbG0IoiWp+0KNmr2KnlsCybjm8xdgqYwji3lAVrTbT0QhSd16AKb6uqGJlGwhO36nzUHm6TOLK+rb+8peqsNpXcWl+eiJ/NMe+Bb6xVEWvqc6N/jC60 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(192813158149592)(21532816269658); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040470)(2401047)(5005006)(8121501046)(93006095)(93004095)(10201501046)(3002001)(3231023)(944501075)(6055026)(6041268)(20161123562045)(20161123558120)(20161123560045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:DM2PR02MB1337; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:DM2PR02MB1337; X-Microsoft-Exchange-Diagnostics: 1; DM2PR02MB1337; 4:uRgmiyw8FsfJhXOBWCk5voMULxzknTPcfWLkMuRQnocr/HrWCLMASgDwb8pzfyBGlwGGuuG8HpwEw1hKOwAaXStVgt2AdQjbUuGBQoXXZGkDRhI3V3GfKaBrYR7f+1x58L+ZjNZHTN14TfGh/vcZOG0oXF9UQMQTONB0L4THmaWVYscwwuWSE3j6+2RZKIRNy7pV2cchbIrZVxIULC3xzWZvwOC7IzBtF3xFyqqMt9F/R+IEivA/hxjz6S0LD2qE22WAy8hrFJmt7BMVTnl5ib/rRVIzOoX6/3cOjrJATHTr65TQIXidIJ5EQ72TMjV78Sp24eEflttm3eInZ7J5cGJyPQBFJ4Pa1MjW78Ub18k= X-Forefront-PRVS: 0547116B72 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM2PR02MB1337; 23:UqwSSbUDr2QL8f1RYZcB6QpP0qdpakB7qfaJbKha6?= LExjwn4Qwg6jjDbNgYafRUGpuvVJmRrCk4/zIV3okGw4cBeYw/2cTCSzz6wAUsuPswGk5XSSu4X9K+RdDxdPuhJ44pedtUX2mwHGCi3VZUamaG6j1RtV1Zb+ta23TajHJQ3TRLIL4RTQ6i0t5jjztvG3v4jUrGN7aYHbkMGjQ3Se8rygyNQVLVo57SYt//hbNpmzGH0mNk/KKE0EgV/BoaoOkhz9edbYin/YSvYoAvXj6dD/OaCluO9d7e0ROvecXMrCFZlSSeZy+Ht2X+vh9ILKDuFWQ9NgmqnGB96eEfW9d2NEka1Gez2MrJKEX1/rrF35LieoZDPtvhBBMRanl8wwrXxetTyFIduZ5rmYg7ZyHb3m43NDPSZsu1H8wX8B/cBiKPw8HR4K74ZWx+dI5lM2XI6Wasj2SVclN/xZQpUlzUsvRO7xRI6E8sBoo0iI+nZvTjGKOybTav+pCZKIe7uz9y8Lkfyk8DUQyTZPoCj91WX8BhL8hY8FJGlQI8JT3BpcDoFzYEKrEIJekNIre1rNjljjmifmS0uj2JP6yCOzFoUTJerxvEkMXadZHZdnUulg84eLnLHDIMo3dP1Wyu1+jcGHCRExwu/BtiTwH7NIvPe0xgOSCntxzM0qKI+KDy6RPyk8Eluycf8T4YrMlg8vVRcMxMStkgFupjEtad8832X+tDkZZAtITnHThyrXmS0gnl33ONd8XvQN4bU9xwdqzrJS/siKvJjS6N7nkHvqoEa+2fI9t68xF0UwLSTLgpX49r2HsGVstIiJZEE8dpXTXpPFUhd+TxNNDeEE6Kj/HA5lHHclBFSMGuJpWi2V27S4iPLvTwLBp8QOkvi8HNlRV13yDgX2DbokkJLU+S6a+uqicGlgH3dBetBxNlW9IDNeL6etffWcsWbdiXX1GS37FKNEnr2d8s+uQAqw+ge2W7D88+2rQHKo+eNnO6BBOpP0kVsLVp/YF9blm0AE2bcYHpc67v1oqrAcMYGo/hXge5wD96UIMqlDqsxQQ8192w= X-Microsoft-Exchange-Diagnostics: 1; DM2PR02MB1337; 6:NK5w8tvhwreT1Cc3WUydljMp5d99JVfRfqyKERfsqUQFI8eSGpFapD6HfEB08hzoTyvwp0LfkMKXpgAJxEsw+ojLdgsU3HCswFZbXFvsRnaxQaNT4u61uwqF/6mNN4AjUfqoudwW+1rwjjwkC/6y5UycqoXwEgcY6aizn56a3Se8+tTz28EBFAWBvyx9NfIDvutmnRN0b3ZxANOAxh+U56uDA/uHPeB7T6yyeak4n557fSTLqYICYlAF5D7HWCiZnDU9RcopjltrRWQMgojyvMT5XkvW6brn3+fB8LAT8b+Y521JBMgSTr3PDnOd6vHYqzb19u/aJHG1pWB+yyEdsGQHcwqalScuZ/eIKL4o2aM=; 5:WjdRsjpt2uQerK2eu6k3jv8IjI/dlNWowXrQKmcD0QKA+mGmKUdk84B6UrEwOIqKjkk3wNQGbX80N2YtUNOdjpTzdIjJKndhrWSroZQfhFltm03Pr1Q6SOSoGZTd1e3jQu8HFxvYnbiFfYN/ULUW2sWXI0r62SwciAnJQNMSjGE=; 24:j6GtK3oWEii6e1d0pEahc8JHRsvnanklwjGpSGxK4M4OBzMIrZT9erKG5/MXec//yNxdJWzpbK/gss0pp+zjX76gu66aFACUFMQRvObrtOo=; 7:xN7l1aBLzIkrfp17WbX/ie+sPpaQXo2/PknTnoug4fIfVH6ziIv9p25PAnzdAOYEGXOE049rslrcNSNHYDjLwR4Q8EvysJPAJ2sPV6OrlMs8SXwgUIySUZb7Qd/Zr7by6jt+4UOJumTFA7Qv0YvZzDIuQGVp5sGU5LuZbBISaxfa89L9TznxIzrQT3I95mZJE/LGya+4yyAcdkDtbd0LPpPCi78OuFquyT4mcdw4Pp/rhxsDhJbUDGLzxwSMYRth SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jan 2018 18:55:20.3825 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e72e2086-a655-48d3-5d1b-08d557928847 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: DM2PR02MB1337 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.32.40 Subject: [Qemu-devel] [PATCH v1 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, alistair.francis@xilinx.com Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Alistair Francis Reviewed-by: Philippe Mathieu-Daudé --- hw/arm/xlnx-zynqmp.c | 14 ++++++++++++++ include/hw/arm/xlnx-zynqmp.h | 2 ++ 2 files changed, 16 insertions(+) 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 +#define RTC_ADDR 0xffa60000 +#define RTC_IRQ 26 + static const uint64_t gem_addr[XLNX_ZYNQMP_NUM_GEMS] = { 0xFF0B0000, 0xFF0C0000, 0xFF0D0000, 0xFF0E0000, }; @@ -183,6 +186,9 @@ static void xlnx_zynqmp_init(Object *obj) 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()); } static void xlnx_zynqmp_realize(DeviceState *dev, Error **errp) @@ -454,6 +460,14 @@ static void xlnx_zynqmp_realize(DeviceState *dev, Error **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]); } static Property xlnx_zynqmp_props[] = { 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" #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; char *boot_cpu; ARMCPU *boot_cpu_ptr;