From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 74A65C433FE for ; Thu, 10 Dec 2020 19:11:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3BB6723D9A for ; Thu, 10 Dec 2020 19:11:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2393365AbgLJTKh (ORCPT ); Thu, 10 Dec 2020 14:10:37 -0500 Received: from foss.arm.com ([217.140.110.172]:45088 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390465AbgLJObA (ORCPT ); Thu, 10 Dec 2020 09:31:00 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 39190147A; Thu, 10 Dec 2020 06:29:35 -0800 (PST) Received: from donnerap.arm.com (donnerap.cambridge.arm.com [10.1.195.35]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 1F3853F718; Thu, 10 Dec 2020 06:29:34 -0800 (PST) From: Andre Przywara To: Will Deacon , Julien Thierry Cc: kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org, Alexandru Elisei , Marc Zyngier Subject: [PATCH kvmtool 10/21] hw/rtc: Refactor trap handlers Date: Thu, 10 Dec 2020 14:28:57 +0000 Message-Id: <20201210142908.169597-11-andre.przywara@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201210142908.169597-1-andre.przywara@arm.com> References: <20201210142908.169597-1-andre.przywara@arm.com> Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org With the planned retirement of the special ioport emulation code, we need to provide emulation functions compatible with the MMIO prototype. Merge the two different trap handlers into one function, checking for read/write and data/index register inside. Adjust the trap handlers to use that new function, and provide shims to implement the old ioport interface, for now. Signed-off-by: Andre Przywara --- hw/rtc.c | 70 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/hw/rtc.c b/hw/rtc.c index 5483879f..664d4cb0 100644 --- a/hw/rtc.c +++ b/hw/rtc.c @@ -42,11 +42,37 @@ static inline unsigned char bin2bcd(unsigned val) return ((val / 10) << 4) + val % 10; } -static bool cmos_ram_data_in(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size) +static void cmos_ram_io(struct kvm_cpu *vcpu, u64 addr, u8 *data, + u32 len, u8 is_write, void *ptr) { struct tm *tm; time_t ti; + if (is_write) { + if (addr == 0x70) { /* index register */ + u8 value = ioport__read8(data); + + vcpu->kvm->nmi_disabled = value & (1UL << 7); + rtc.cmos_idx = value & ~(1UL << 7); + + return; + } + + switch (rtc.cmos_idx) { + case RTC_REG_C: + case RTC_REG_D: + /* Read-only */ + break; + default: + rtc.cmos_data[rtc.cmos_idx] = ioport__read8(data); + break; + } + return; + } + + if (addr == 0x70) + return; + time(&ti); tm = gmtime(&ti); @@ -92,42 +118,23 @@ static bool cmos_ram_data_in(struct ioport *ioport, struct kvm_cpu *vcpu, u16 po ioport__write8(data, rtc.cmos_data[rtc.cmos_idx]); break; } - - return true; } -static bool cmos_ram_data_out(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size) +static bool cmos_ram_in(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size) { - switch (rtc.cmos_idx) { - case RTC_REG_C: - case RTC_REG_D: - /* Read-only */ - break; - default: - rtc.cmos_data[rtc.cmos_idx] = ioport__read8(data); - break; - } - + cmos_ram_io(vcpu, port, data, size, false, NULL); return true; } -static struct ioport_operations cmos_ram_data_ioport_ops = { - .io_out = cmos_ram_data_out, - .io_in = cmos_ram_data_in, -}; - -static bool cmos_ram_index_out(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size) +static bool cmos_ram_out(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size) { - u8 value = ioport__read8(data); - - vcpu->kvm->nmi_disabled = value & (1UL << 7); - rtc.cmos_idx = value & ~(1UL << 7); - + cmos_ram_io(vcpu, port, data, size, true, NULL); return true; } -static struct ioport_operations cmos_ram_index_ioport_ops = { - .io_out = cmos_ram_index_out, +static struct ioport_operations cmos_ram_ioport_ops = { + .io_out = cmos_ram_out, + .io_in = cmos_ram_in, }; #ifdef CONFIG_HAS_LIBFDT @@ -162,21 +169,15 @@ int rtc__init(struct kvm *kvm) return r; /* PORT 0070-007F - CMOS RAM/RTC (REAL TIME CLOCK) */ - r = ioport__register(kvm, 0x0070, &cmos_ram_index_ioport_ops, 1, NULL); + r = ioport__register(kvm, 0x0070, &cmos_ram_ioport_ops, 2, NULL); if (r < 0) goto out_device; - r = ioport__register(kvm, 0x0071, &cmos_ram_data_ioport_ops, 1, NULL); - if (r < 0) - goto out_ioport; - /* Set the VRT bit in Register D to indicate valid RAM and time */ rtc.cmos_data[RTC_REG_D] = RTC_REG_D_VRT; return r; -out_ioport: - ioport__unregister(kvm, 0x0070); out_device: device__unregister(&rtc_dev_hdr); @@ -188,7 +189,6 @@ int rtc__exit(struct kvm *kvm) { /* PORT 0070-007F - CMOS RAM/RTC (REAL TIME CLOCK) */ ioport__unregister(kvm, 0x0070); - ioport__unregister(kvm, 0x0071); return 0; } -- 2.17.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A6283C0018C for ; Thu, 10 Dec 2020 14:29:46 +0000 (UTC) Received: from mm01.cs.columbia.edu (mm01.cs.columbia.edu [128.59.11.253]) by mail.kernel.org (Postfix) with ESMTP id 2F14123E21 for ; Thu, 10 Dec 2020 14:29:46 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2F14123E21 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvmarm-bounces@lists.cs.columbia.edu Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id BECA94B263; Thu, 10 Dec 2020 09:29:45 -0500 (EST) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ez3QkDCYCXDr; Thu, 10 Dec 2020 09:29:40 -0500 (EST) Received: from mm01.cs.columbia.edu (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 2B0394B25A; Thu, 10 Dec 2020 09:29:40 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 34E694B201 for ; Thu, 10 Dec 2020 09:29:39 -0500 (EST) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id C+5M1sM2dNAM for ; Thu, 10 Dec 2020 09:29:38 -0500 (EST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 76E1E4B1F4 for ; Thu, 10 Dec 2020 09:29:35 -0500 (EST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 39190147A; Thu, 10 Dec 2020 06:29:35 -0800 (PST) Received: from donnerap.arm.com (donnerap.cambridge.arm.com [10.1.195.35]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 1F3853F718; Thu, 10 Dec 2020 06:29:34 -0800 (PST) From: Andre Przywara To: Will Deacon , Julien Thierry Subject: [PATCH kvmtool 10/21] hw/rtc: Refactor trap handlers Date: Thu, 10 Dec 2020 14:28:57 +0000 Message-Id: <20201210142908.169597-11-andre.przywara@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201210142908.169597-1-andre.przywara@arm.com> References: <20201210142908.169597-1-andre.przywara@arm.com> Cc: linux-arm-kernel@lists.infradead.org, Marc Zyngier , kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org X-BeenThere: kvmarm@lists.cs.columbia.edu X-Mailman-Version: 2.1.14 Precedence: list List-Id: Where KVM/ARM decisions are made List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu With the planned retirement of the special ioport emulation code, we need to provide emulation functions compatible with the MMIO prototype. Merge the two different trap handlers into one function, checking for read/write and data/index register inside. Adjust the trap handlers to use that new function, and provide shims to implement the old ioport interface, for now. Signed-off-by: Andre Przywara --- hw/rtc.c | 70 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/hw/rtc.c b/hw/rtc.c index 5483879f..664d4cb0 100644 --- a/hw/rtc.c +++ b/hw/rtc.c @@ -42,11 +42,37 @@ static inline unsigned char bin2bcd(unsigned val) return ((val / 10) << 4) + val % 10; } -static bool cmos_ram_data_in(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size) +static void cmos_ram_io(struct kvm_cpu *vcpu, u64 addr, u8 *data, + u32 len, u8 is_write, void *ptr) { struct tm *tm; time_t ti; + if (is_write) { + if (addr == 0x70) { /* index register */ + u8 value = ioport__read8(data); + + vcpu->kvm->nmi_disabled = value & (1UL << 7); + rtc.cmos_idx = value & ~(1UL << 7); + + return; + } + + switch (rtc.cmos_idx) { + case RTC_REG_C: + case RTC_REG_D: + /* Read-only */ + break; + default: + rtc.cmos_data[rtc.cmos_idx] = ioport__read8(data); + break; + } + return; + } + + if (addr == 0x70) + return; + time(&ti); tm = gmtime(&ti); @@ -92,42 +118,23 @@ static bool cmos_ram_data_in(struct ioport *ioport, struct kvm_cpu *vcpu, u16 po ioport__write8(data, rtc.cmos_data[rtc.cmos_idx]); break; } - - return true; } -static bool cmos_ram_data_out(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size) +static bool cmos_ram_in(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size) { - switch (rtc.cmos_idx) { - case RTC_REG_C: - case RTC_REG_D: - /* Read-only */ - break; - default: - rtc.cmos_data[rtc.cmos_idx] = ioport__read8(data); - break; - } - + cmos_ram_io(vcpu, port, data, size, false, NULL); return true; } -static struct ioport_operations cmos_ram_data_ioport_ops = { - .io_out = cmos_ram_data_out, - .io_in = cmos_ram_data_in, -}; - -static bool cmos_ram_index_out(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size) +static bool cmos_ram_out(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size) { - u8 value = ioport__read8(data); - - vcpu->kvm->nmi_disabled = value & (1UL << 7); - rtc.cmos_idx = value & ~(1UL << 7); - + cmos_ram_io(vcpu, port, data, size, true, NULL); return true; } -static struct ioport_operations cmos_ram_index_ioport_ops = { - .io_out = cmos_ram_index_out, +static struct ioport_operations cmos_ram_ioport_ops = { + .io_out = cmos_ram_out, + .io_in = cmos_ram_in, }; #ifdef CONFIG_HAS_LIBFDT @@ -162,21 +169,15 @@ int rtc__init(struct kvm *kvm) return r; /* PORT 0070-007F - CMOS RAM/RTC (REAL TIME CLOCK) */ - r = ioport__register(kvm, 0x0070, &cmos_ram_index_ioport_ops, 1, NULL); + r = ioport__register(kvm, 0x0070, &cmos_ram_ioport_ops, 2, NULL); if (r < 0) goto out_device; - r = ioport__register(kvm, 0x0071, &cmos_ram_data_ioport_ops, 1, NULL); - if (r < 0) - goto out_ioport; - /* Set the VRT bit in Register D to indicate valid RAM and time */ rtc.cmos_data[RTC_REG_D] = RTC_REG_D_VRT; return r; -out_ioport: - ioport__unregister(kvm, 0x0070); out_device: device__unregister(&rtc_dev_hdr); @@ -188,7 +189,6 @@ int rtc__exit(struct kvm *kvm) { /* PORT 0070-007F - CMOS RAM/RTC (REAL TIME CLOCK) */ ioport__unregister(kvm, 0x0070); - ioport__unregister(kvm, 0x0071); return 0; } -- 2.17.1 _______________________________________________ kvmarm mailing list kvmarm@lists.cs.columbia.edu https://lists.cs.columbia.edu/mailman/listinfo/kvmarm From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 20F91C4361B for ; Thu, 10 Dec 2020 14:32:19 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9172E23D9D for ; Thu, 10 Dec 2020 14:32:18 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9172E23D9D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:MIME-Version:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:References:In-Reply-To:Message-Id:Date:Subject:To: From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=iqx/Dm3APszDJuok3efvmm1WyrqQzqHjtrEuu9l5Zsk=; b=ANFFMcTpYJKSlX0RcInPf3vtF7 pVRE+oZVuo7swZdtkVYShETiawEhe/3YlyDsPpX78rYVU1f7BkeZacdNANmjy/SipRfo8vk3k00mN Jv7mFdmJeUqyfQfE3zXINXOn2dBkDZMYGhLKOoCK8dPwk6beERJ7pRBE195xPtfY5w1vFPH9fsZYl wJ/bXBH0qjUfLKyauzsGCzN0TGwD9b2S99J7PV6uJY4gty+7p0/yFpYQxUzvzQSo/QSjVHOtefh7k wB8k7mCYi9Oe8+QeCtOcEvR0AmWoHhIg5/Xx6GMvTv0XMsq4CZ5VqUJwngLvYH9QcfeZ93tMH55Ms LMH6edWw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1knMxx-000753-Ax; Thu, 10 Dec 2020 14:30:45 +0000 Received: from foss.arm.com ([217.140.110.172]) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1knMwr-0006h3-6U for linux-arm-kernel@lists.infradead.org; Thu, 10 Dec 2020 14:30:00 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 39190147A; Thu, 10 Dec 2020 06:29:35 -0800 (PST) Received: from donnerap.arm.com (donnerap.cambridge.arm.com [10.1.195.35]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 1F3853F718; Thu, 10 Dec 2020 06:29:34 -0800 (PST) From: Andre Przywara To: Will Deacon , Julien Thierry Subject: [PATCH kvmtool 10/21] hw/rtc: Refactor trap handlers Date: Thu, 10 Dec 2020 14:28:57 +0000 Message-Id: <20201210142908.169597-11-andre.przywara@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201210142908.169597-1-andre.przywara@arm.com> References: <20201210142908.169597-1-andre.przywara@arm.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201210_092937_388499_D0FB8565 X-CRM114-Status: GOOD ( 15.72 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-arm-kernel@lists.infradead.org, Marc Zyngier , Alexandru Elisei , kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org With the planned retirement of the special ioport emulation code, we need to provide emulation functions compatible with the MMIO prototype. Merge the two different trap handlers into one function, checking for read/write and data/index register inside. Adjust the trap handlers to use that new function, and provide shims to implement the old ioport interface, for now. Signed-off-by: Andre Przywara --- hw/rtc.c | 70 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/hw/rtc.c b/hw/rtc.c index 5483879f..664d4cb0 100644 --- a/hw/rtc.c +++ b/hw/rtc.c @@ -42,11 +42,37 @@ static inline unsigned char bin2bcd(unsigned val) return ((val / 10) << 4) + val % 10; } -static bool cmos_ram_data_in(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size) +static void cmos_ram_io(struct kvm_cpu *vcpu, u64 addr, u8 *data, + u32 len, u8 is_write, void *ptr) { struct tm *tm; time_t ti; + if (is_write) { + if (addr == 0x70) { /* index register */ + u8 value = ioport__read8(data); + + vcpu->kvm->nmi_disabled = value & (1UL << 7); + rtc.cmos_idx = value & ~(1UL << 7); + + return; + } + + switch (rtc.cmos_idx) { + case RTC_REG_C: + case RTC_REG_D: + /* Read-only */ + break; + default: + rtc.cmos_data[rtc.cmos_idx] = ioport__read8(data); + break; + } + return; + } + + if (addr == 0x70) + return; + time(&ti); tm = gmtime(&ti); @@ -92,42 +118,23 @@ static bool cmos_ram_data_in(struct ioport *ioport, struct kvm_cpu *vcpu, u16 po ioport__write8(data, rtc.cmos_data[rtc.cmos_idx]); break; } - - return true; } -static bool cmos_ram_data_out(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size) +static bool cmos_ram_in(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size) { - switch (rtc.cmos_idx) { - case RTC_REG_C: - case RTC_REG_D: - /* Read-only */ - break; - default: - rtc.cmos_data[rtc.cmos_idx] = ioport__read8(data); - break; - } - + cmos_ram_io(vcpu, port, data, size, false, NULL); return true; } -static struct ioport_operations cmos_ram_data_ioport_ops = { - .io_out = cmos_ram_data_out, - .io_in = cmos_ram_data_in, -}; - -static bool cmos_ram_index_out(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size) +static bool cmos_ram_out(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size) { - u8 value = ioport__read8(data); - - vcpu->kvm->nmi_disabled = value & (1UL << 7); - rtc.cmos_idx = value & ~(1UL << 7); - + cmos_ram_io(vcpu, port, data, size, true, NULL); return true; } -static struct ioport_operations cmos_ram_index_ioport_ops = { - .io_out = cmos_ram_index_out, +static struct ioport_operations cmos_ram_ioport_ops = { + .io_out = cmos_ram_out, + .io_in = cmos_ram_in, }; #ifdef CONFIG_HAS_LIBFDT @@ -162,21 +169,15 @@ int rtc__init(struct kvm *kvm) return r; /* PORT 0070-007F - CMOS RAM/RTC (REAL TIME CLOCK) */ - r = ioport__register(kvm, 0x0070, &cmos_ram_index_ioport_ops, 1, NULL); + r = ioport__register(kvm, 0x0070, &cmos_ram_ioport_ops, 2, NULL); if (r < 0) goto out_device; - r = ioport__register(kvm, 0x0071, &cmos_ram_data_ioport_ops, 1, NULL); - if (r < 0) - goto out_ioport; - /* Set the VRT bit in Register D to indicate valid RAM and time */ rtc.cmos_data[RTC_REG_D] = RTC_REG_D_VRT; return r; -out_ioport: - ioport__unregister(kvm, 0x0070); out_device: device__unregister(&rtc_dev_hdr); @@ -188,7 +189,6 @@ int rtc__exit(struct kvm *kvm) { /* PORT 0070-007F - CMOS RAM/RTC (REAL TIME CLOCK) */ ioport__unregister(kvm, 0x0070); - ioport__unregister(kvm, 0x0071); return 0; } -- 2.17.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel