From nobody Thu Apr 25 09:03:51 2024 Delivered-To: importer@patchew.org Received-SPF: none (zohomail.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; spf=none (zohomail.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1580845963766148.02857704608266; Tue, 4 Feb 2020 11:52:43 -0800 (PST) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iz4Eq-0000Fp-N4; Tue, 04 Feb 2020 19:52:00 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iz4Ep-0000Fk-8A for xen-devel@lists.xenproject.org; Tue, 04 Feb 2020 19:51:59 +0000 Received: from webmail.dornerworks.com (unknown [12.207.209.150]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTP id ccffdd54-4787-11ea-9006-12813bfff9fa; Tue, 04 Feb 2020 19:51:58 +0000 (UTC) X-Inumbo-ID: ccffdd54-4787-11ea-9006-12813bfff9fa From: Jeff Kubascik To: Date: Tue, 4 Feb 2020 14:51:50 -0500 Message-ID: <20200204195150.61532-1-jeff.kubascik@dornerworks.com> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 X-Originating-IP: [172.27.13.179] X-ClientProxiedBy: Mcbain.dw.local (172.27.1.45) To Mcbain.dw.local (172.27.1.45) X-spam-status: No, score=-2.9 required=3.5 tests=ALL_TRUSTED, BAYES_00, MAILSHELL_SCORE_0_4 X-Spam-Flag: NO Subject: [Xen-devel] [PATCH v3] xen/arm: Handle unimplemented VGICv3 dist registers as RAZ/WI X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Volodymyr Babchuk , Stefano Stabellini , Julien Grall Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" Per the ARM Generic Interrupt Controller Architecture Specification (ARM IHI 0069E), reserved registers should generally be treated as RAZ/WI. To simplify the VGICv3 design and improve guest compatibility, treat the default case for GICD and GICR registers as read_as_zero/write_ignore. Signed-off-by: Jeff Kubascik Acked-by: Julien Grall --- Changes in v3: - Fixed spelling error in commit message - Dropped misleading comments that were added in v2 - Added printk back in for default case - Implemented RAZ/WI for the redist registers as well - Update commit message to include GICR scope --- xen/arch/arm/vgic-v3.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/xen/arch/arm/vgic-v3.c b/xen/arch/arm/vgic-v3.c index 422b94f902..4e60ba15cc 100644 --- a/xen/arch/arm/vgic-v3.c +++ b/xen/arch/arm/vgic-v3.c @@ -320,7 +320,7 @@ static int __vgic_v3_rdistr_rd_mmio_read(struct vcpu *v= , mmio_info_t *info, printk(XENLOG_G_ERR "%pv: vGICR: unhandled read r%d offset %#08x\n", v, dabt.reg, gicr_reg); - return 0; + goto read_as_zero; } bad_width: printk(XENLOG_G_ERR "%pv vGICR: bad read width %d r%d offset %#08x\n", @@ -337,6 +337,10 @@ read_as_zero_32: *r =3D 0; return 1; =20 +read_as_zero: + *r =3D 0; + return 1; + read_impl_defined: printk(XENLOG_G_DEBUG "%pv: vGICR: RAZ on implementation defined register offset %#08= x\n", @@ -638,7 +642,7 @@ static int __vgic_v3_rdistr_rd_mmio_write(struct vcpu *= v, mmio_info_t *info, default: printk(XENLOG_G_ERR "%pv: vGICR: unhandled write r%d offset %#08x\= n", v, dabt.reg, gicr_reg); - return 0; + goto write_ignore; } bad_width: printk(XENLOG_G_ERR @@ -654,6 +658,9 @@ write_ignore_32: if ( dabt.size !=3D DABT_WORD ) goto bad_width; return 1; =20 +write_ignore: + return 1; + write_impl_defined: printk(XENLOG_G_DEBUG "%pv: vGICR: WI on implementation defined register offset %#08x= \n", @@ -925,7 +932,7 @@ static int vgic_v3_rdistr_sgi_mmio_read(struct vcpu *v,= mmio_info_t *info, printk(XENLOG_G_ERR "%pv: vGICR: SGI: unhandled read r%d offset %#08x\n", v, dabt.reg, gicr_reg); - return 0; + goto read_as_zero; } bad_width: printk(XENLOG_G_ERR "%pv: vGICR: SGI: bad read width %d r%d offset %#0= 8x\n", @@ -1002,7 +1009,7 @@ static int vgic_v3_rdistr_sgi_mmio_write(struct vcpu = *v, mmio_info_t *info, printk(XENLOG_G_ERR "%pv: vGICR: SGI: unhandled write r%d offset %#08x\n", v, dabt.reg, gicr_reg); - return 0; + goto write_ignore; } =20 bad_width: @@ -1014,6 +1021,9 @@ bad_width: write_ignore_32: if ( dabt.size !=3D DABT_WORD ) goto bad_width; return 1; + +write_ignore: + return 1; } =20 static struct vcpu *get_vcpu_from_rdist(struct domain *d, @@ -1252,7 +1262,7 @@ static int vgic_v3_distr_mmio_read(struct vcpu *v, mm= io_info_t *info, default: printk(XENLOG_G_ERR "%pv: vGICD: unhandled read r%d offset %#08x\n= ", v, dabt.reg, gicd_reg); - return 0; + goto read_as_zero; } =20 bad_width: @@ -1438,7 +1448,7 @@ static int vgic_v3_distr_mmio_write(struct vcpu *v, m= mio_info_t *info, printk(XENLOG_G_ERR "%pv: vGICD: unhandled write r%d=3D%"PRIregister" offset %#= 08x\n", v, dabt.reg, r, gicd_reg); - return 0; + goto write_ignore; } =20 bad_width: --=20 2.17.1 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel