From nobody Thu Nov 14 17:20:06 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1712478243; cv=none; d=zohomail.com; s=zohoarc; b=NKpFg1u2X2npvPGQQl3H4Bbc2sZz23Px/CoBY91LKl5wC/mUGS/xnMpiwCnXg/VsmUNajFFBAyvRmMpPJ1cX+mrFAFLaHxIocYejJh7oqL+QVkPSGjR5108UrxrERlQzHnJucnQoLolP+dlFtSXFe0K3KuaEpK1kGMiZ7qL+hZw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1712478243; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=5eGol9aDxzRuIPTJ4AV+Djt/y3IV6sZuZZKmuXJUzPU=; b=aXMAtwh131flWeYYjHWT/Wd2/jmDp6Uw8r/oQwGfGL+/VX0xDJwEWrm4ppLI/Yag3ROhF9qEvdKD1d2CElnlL5kF2m+3/UIei6U4i0ZafrAjkuVW8N1akzFY7mWDkOPYPd20eIRs2u09I3/Eyb1gvtVxlSwgqmB/j0Q2IAbGDCw= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1712478243629612.0792789824302; Sun, 7 Apr 2024 01:24:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rtNlL-0004XJ-Eq; Sun, 07 Apr 2024 04:20:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rtNlA-0004Km-HG; Sun, 07 Apr 2024 04:20:19 -0400 Received: from szxga04-in.huawei.com ([45.249.212.190]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rtNl7-0002Hg-M8; Sun, 07 Apr 2024 04:20:15 -0400 Received: from mail.maildlp.com (unknown [172.19.163.17]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4VC4p60drkz29dNV; Sun, 7 Apr 2024 16:17:18 +0800 (CST) Received: from kwepemi500008.china.huawei.com (unknown [7.221.188.139]) by mail.maildlp.com (Postfix) with ESMTPS id 418041A0172; Sun, 7 Apr 2024 16:20:07 +0800 (CST) Received: from huawei.com (10.67.174.55) by kwepemi500008.china.huawei.com (7.221.188.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.35; Sun, 7 Apr 2024 16:20:06 +0800 To: , , , , , , , CC: Subject: [PATCH v13 24/24] hw/arm/virt: Add FEAT_GICv3_NMI feature support in virt GIC Date: Sun, 7 Apr 2024 08:17:33 +0000 Message-ID: <20240407081733.3231820-25-ruanjinjie@huawei.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240407081733.3231820-1-ruanjinjie@huawei.com> References: <20240407081733.3231820-1-ruanjinjie@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.67.174.55] X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To kwepemi500008.china.huawei.com (7.221.188.139) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=45.249.212.190; envelope-from=ruanjinjie@huawei.com; helo=szxga04-in.huawei.com X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-to: Jinjie Ruan From: Jinjie Ruan via Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZM-MESSAGEID: 1712478256174100002 Content-Type: text/plain; charset="utf-8" FEAT_GICv3_NMI introduces GIC support for non-maskable interrupts (NMIs). A PE that implements FEAT_NMI and FEAT_GICv3 also implements FEAT_GICv3_NMI. A PE that does not implement FEAT_NMI, does not implement FEAT_GICv3_NMI. So included support FEAT_GICv3_NMI feature as part of virt platform GIC initialization if FEAT_NMI and FEAT_GICv3 supported. And as Peter suggested, neither KVM nor hvf support FEAT_NMI yet, so add tcg_enabled() to the condition. Defaulting QEMU to not trying to enable NMI in the GIC device is the safe option. As and when those accelerators get NMI support, we can add the handling to QEMU and update this code in the virt b= oard. Signed-off-by: Jinjie Ruan Reviewed-by: Richard Henderson Suggested-by: Peter Maydell --- v13: - Check tcg_enabled() for gicv3_nmi_present(). - Update the comment for gicv3_nmi_present(). - Update the commit message. - Add Suggested-by. v4: - Add Reviewed-by. v3: - Adjust to be the last after add FEAT_NMI to max. - Check whether support FEAT_NMI and FEAT_GICv3 for FEAT_GICv3_NMI. --- hw/arm/virt.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index dca509d082..a8c9156b24 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -729,6 +729,18 @@ static void create_v2m(VirtMachineState *vms) vms->msi_controller =3D VIRT_MSI_CTRL_GICV2M; } =20 +/* + * A PE that implements FEAT_NMI and FEAT_GICv3 also implements FEAT_GICv3= _NMI. + * A PE that does not implement FEAT_NMI, does not implement FEAT_GICv3_NM= I. + */ +static bool gicv3_nmi_present(VirtMachineState *vms) +{ + ARMCPU *cpu =3D ARM_CPU(qemu_get_cpu(0)); + + return tcg_enabled() && cpu_isar_feature(aa64_nmi, cpu) && + (vms->gic_version !=3D VIRT_GIC_VERSION_2); +} + static void create_gic(VirtMachineState *vms, MemoryRegion *mem) { MachineState *ms =3D MACHINE(vms); @@ -802,6 +814,11 @@ static void create_gic(VirtMachineState *vms, MemoryRe= gion *mem) vms->virt); } } + + if (gicv3_nmi_present(vms)) { + qdev_prop_set_bit(vms->gic, "has-nmi", true); + } + gicbusdev =3D SYS_BUS_DEVICE(vms->gic); sysbus_realize_and_unref(gicbusdev, &error_fatal); sysbus_mmio_map(gicbusdev, 0, vms->memmap[VIRT_GIC_DIST].base); --=20 2.34.1