From patchwork Mon Nov 20 12:37:08 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marc Zyngier X-Patchwork-Id: 13461188 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E30DBC197A0 for ; Mon, 20 Nov 2023 12:40:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:Cc :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=Qrv4pYPupDQIZ2YqEiZxp2DkxWFECQAnKfEREzhMEj8=; b=BYaaiWifo6ZZW5 EyipIS62yr5YTIa884kTZmw53RmRioUNSqwWksPQJEDmziYcl20QZz73shRFtbOMqItj5UUvKQCUS bzhM2K5oNu5YMxH9RibcbjEGUPYU2L3w6B0mowGivfTqtHbPfDPysDCiYQvSc1yfRIJToYo4PwmcP ngkICbqbzTufAlbiDlJf7ItndZpsiXp8uRUcU6wpfvC0CGlgjIPAC8/vuVXToSyxLtIu9K74+zT6g xpY0jGIFDz9L/3OMBdtsRyIiKtusi0Jc1pLrnQlAL5VfV0xsWkbImf4N4DC/i/98ZXNPkMePccBZo 9j3vI5L0qYScKIGbTzsA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r53Yw-00C1Ln-13; Mon, 20 Nov 2023 12:39:38 +0000 Received: from dfw.source.kernel.org ([139.178.84.217]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r53X9-00C0xg-2i for linux-arm-kernel@lists.infradead.org; Mon, 20 Nov 2023 12:37:54 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 12833611B4; Mon, 20 Nov 2023 12:37:47 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3352DC433CA; Mon, 20 Nov 2023 12:37:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1700483866; bh=o1Af8RlLYq5KNrqzHXwdQGYNbC5eu5P1hNsEZPEoKPc=; h=From:To:Cc:Subject:Date:From; b=Hywe6rTcw3kW8tKCaZ6sonscW528Sy6sme58bbKzxNI6c9EFSM6lI+bKGunEunOxW is/pSMzEtC4tfXxK8nyQT8biFIAFRoPVZcDl8Ujt3CzU71uAca1sTgj9HHdh9mgkA7 devS5Mjlk9huqZgIxfJ1nikspvrsGST8+dRReyJQl4wQZIzlZq21h+TWLvFZKccvs1 Ub2aVVjx0MFtA+Lc1HwSFouSfujczSac3qXFjj59xvo+cMydc5Pj2k+SnFOUYwMZq7 nAECsnzOO3qH8pKXN8i5CpiES4GuFoNV9dbmKqDwrboU6RGmqLG0X6MRl/fPGfJ2BI GuwjH9e3bCFNA== Received: from sofa.misterjones.org ([185.219.108.64] helo=valley-girl.lan) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1r53X5-00EjJv-EB; Mon, 20 Nov 2023 12:37:43 +0000 From: Marc Zyngier To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev Cc: Catalin Marinas , Will Deacon , Mark Rutland , Ard Biesheuvel , James Morse , Suzuki K Poulose , Oliver Upton , Zenghui Yu Subject: [PATCH v2 00/13] arm64: Add support for FEAT_E2H0, or lack thereof Date: Mon, 20 Nov 2023 12:37:08 +0000 Message-Id: <20231120123721.851738-1-maz@kernel.org> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 X-SA-Exim-Connect-IP: 185.219.108.64 X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, catalin.marinas@arm.com, will@kernel.org, mark.rutland@arm.com, ardb@kernel.org, james.morse@arm.com, suzuki.poulose@arm.com, oliver.upton@linux.dev, yuzenghui@huawei.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231120_043747_988430_566C5E5A X-CRM114-Status: GOOD ( 12.34 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Since ARMv8.1, the architecture has grown the VHE feature, which makes EL2 a superset of EL1. With ARMv9.5 (and retroactively allowed from ARMv8.1), the architecture allows implementations to have VHE as the *only* implemented behaviour, meaning that HCR_EL2.E2H can be implemented as RES1. As a follow-up, HCR_EL2.NV1 can also be implemented as RES0, making the VHE-ness of the architecture recursive. This has a number of consequences, both at boot time and for KVM, though the changes at that level are pretty minor. The real meat of this series is on the cpufeature front, as FEAT_E2H0 is a *negative* feature, where 0b1111 (-1) represents E2H being RES1 and 0b1110 (-2) additionally indicates that NV1 is RES0. Fun, isn't it? As a bonus, a popular crop of non-compliant HW gets promoted as the first batch of non-zero E2H0 users, making things easy for KVM. This series is a prefix for the next drop of NV support. * From v1: - Added a SYS_FIELD_VALUE() helper to handle the concatenation of various fields - Only test for the top bit of ID_AA64MMFR4_EL1.E2H0 to decide whether HCR_EL2.E2H is RES1. - Picked RBs from Oliver (thanks!) - Rebased on 6.7-rc2 Marc Zyngier (13): arm64: Add macro to compose a sysreg field value arm64: cpufeatures: Correctly handle signed values arm64: cpufeature: Correctly display signed override values arm64: sysreg: Add layout for ID_AA64MMFR4_EL1 arm64: cpufeature: Add ID_AA64MMFR4_EL1 handling arm64: cpufeature: Detect E2H0 not being implemented arm64: cpufeature: Detect HCR_EL2.NV1 being RES0 arm64: Treat HCR_EL2.E2H as RES1 when ID_AA64MMFR4_EL1.E2H0 is negative arm64: Add override for ID_AA64MMFR4_EL1.E2H0 arm64: Add MIDR-based override infrastructure arm64: Add MIDR-based overrides for ID_AA64MMFR4_EL1.E2H0 KVM: arm64: Expose ID_AA64MMFR4_EL1 to guests KVM: arm64: Force guest's HCR_EL2.E2H RES1 when NV1 is not implemented arch/arm64/include/asm/cpu.h | 1 + arch/arm64/include/asm/cpufeature.h | 2 + arch/arm64/include/asm/kvm_emulate.h | 3 +- arch/arm64/include/asm/sysreg.h | 7 ++- arch/arm64/kernel/cpufeature.c | 91 +++++++++++++++++++++++++--- arch/arm64/kernel/cpuinfo.c | 1 + arch/arm64/kernel/head.S | 23 ++++--- arch/arm64/kernel/idreg-override.c | 65 ++++++++++++++++++++ arch/arm64/kvm/nested.c | 4 ++ arch/arm64/kvm/sys_regs.c | 17 +++++- arch/arm64/tools/cpucaps | 2 + arch/arm64/tools/sysreg | 37 +++++++++++ 12 files changed, 229 insertions(+), 24 deletions(-)