From patchwork Mon Nov 20 12:37:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marc Zyngier X-Patchwork-Id: 13461187 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 627FCC197A0 for ; Mon, 20 Nov 2023 12:39:38 +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:References:In-Reply-To: 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: List-Owner; bh=pLYtK00DVrsE7u7vEm/oldPeS/VOhqxqI6r0kCo+TiU=; b=KnWZVyYqaRUmNE ezil9a8mRofDtPL8AxCRU4W8/ykflpkeqaMdRb0X30YzoigqIyODI0fcVoAm6v8FQ0prdb3Pwl87w g3UqHnQ9OmC++W6wfwRjd6OL5X4RsWyyRvBLk2Zpob3pv7UqQQZdEwvcRuIxY0iE7a6WPBX9VifOT KyhMBqlFWjjss/sAbhfCs3pv9oOHdokNj8PkamM/ZDaC7FkmGCCD9X0kW/JLmv5YW+kHbtd/17wZk VNPA2MWcDSoMepT2ArQIFVr6WD0/Mc8uZBXFqHgvZARI5LQDg8aqVYjBN36+PO+8RzClsH2sN61Ob aO3SI+VAPn9Eg7TabRCQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r53YU-00C1GB-3B; Mon, 20 Nov 2023 12:39:10 +0000 Received: from sin.source.kernel.org ([2604:1380:40e1:4800::1]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r53XC-00C0yA-2r for linux-arm-kernel@lists.infradead.org; Mon, 20 Nov 2023 12:37:53 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id F0B1CCE12AF; Mon, 20 Nov 2023 12:37:46 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2B505C433C8; 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=lIi+zFJNZlbWCfVHsKPQOCscvSP7nlPXR3Yer+d2ZO8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VuJSUeXZloNObekmNDuxZZUd+YRtd3+UDW9KL96RdZ+qtSoTH8l0TMt2X0eP2rIuo sXHPcWdThGoI/XwmPg6WYVyJ5vBFfV3UlGYLfeWez204FmD2waQ+a+vA2GYw5rQ0iy cnMAP/lRsuZoyUH6zRaT+1rOYYG4ZygRwx3r/d9OKaVeijBlqU9Z9CE/2KMHRp06Vx 47fNPMnK/h3Ompbsw27+DVbp/tGN5TGbaBmrpSTWtwU4xjX0lWES45U76R3p1QRaIh JXMjwbWgO3eE1Ek1oNAhqxoDqYr2BlmMXtH96SB8uO81gDDqS0Cx7CYTJYWWq65ri7 LqkL9GnLgKWsA== 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 1r53X6-00EjJv-02; Mon, 20 Nov 2023 12:37:44 +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 01/13] arm64: Add macro to compose a sysreg field value Date: Mon, 20 Nov 2023 12:37:09 +0000 Message-Id: <20231120123721.851738-2-maz@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231120123721.851738-1-maz@kernel.org> References: <20231120123721.851738-1-maz@kernel.org> 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-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 A common idiom is to compose a tupple (reg, field, val) into a symbol matching an autogenerated definition. Add a help performing the concatenation and replace it when open-coded implementations exist. Suggested-by: Oliver Upton Signed-off-by: Marc Zyngier --- arch/arm64/include/asm/sysreg.h | 5 ++++- arch/arm64/kvm/sys_regs.c | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/arch/arm64/include/asm/sysreg.h b/arch/arm64/include/asm/sysreg.h index 5e65f51c10d2..3cb18c7a1ef0 100644 --- a/arch/arm64/include/asm/sysreg.h +++ b/arch/arm64/include/asm/sysreg.h @@ -1156,6 +1156,8 @@ par; \ }) +#define SYS_FIELD_VALUE(reg, field, val) reg##_##field##_##val + #define SYS_FIELD_GET(reg, field, val) \ FIELD_GET(reg##_##field##_MASK, val) @@ -1163,7 +1165,8 @@ FIELD_PREP(reg##_##field##_MASK, val) #define SYS_FIELD_PREP_ENUM(reg, field, val) \ - FIELD_PREP(reg##_##field##_MASK, reg##_##field##_##val) + FIELD_PREP(reg##_##field##_MASK, \ + SYS_FIELD_VALUE(reg, field, val)) #endif diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index 4735e1b37fb3..9f76f24b96f8 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -1561,7 +1561,8 @@ static u64 read_sanitised_id_aa64pfr0_el1(struct kvm_vcpu *vcpu, u64 __f_val = FIELD_GET(reg##_##field##_MASK, val); \ (val) &= ~reg##_##field##_MASK; \ (val) |= FIELD_PREP(reg##_##field##_MASK, \ - min(__f_val, (u64)reg##_##field##_##limit)); \ + min(__f_val, \ + (u64)SYS_FIELD_VALUE(reg, field, limit))); \ (val); \ }) From patchwork Mon Nov 20 12:37:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marc Zyngier X-Patchwork-Id: 13461194 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 040C9C54E76 for ; Mon, 20 Nov 2023 12:40:31 +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:References:In-Reply-To: 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: List-Owner; bh=pvb8qKOwz4oZGAgqDD+e9PrxbA/d+WhsQN3rAP4y9PY=; b=bhvwZ9DXIxg41L VP2Nmt4LQelnZQZXvMDvkBN4clDTb2XLjFrOZmg6Lv8PtbKPhoc8gm64Y9TMlqAOfOvzt7UtTrLeG KcDU5lO5bQw28y+Q+6LolxlC/PYfsDgZm9FxBpg28Nxizk4Vk6+thcwfen18Xn52P3buuhVbF439v 1MOOM68NHthXCqFXGcZPLDMWlccY3QlPdSUZIuxSn31x23CC/4zKt6jq0/SIQOKM35dQWTuPmuyiu YdSK83UMXKexgjHQFCWlLX4mBgqPZo191L/uxAItHDyeEM8MQydrg5L3B8QsroNkmuEDCBewr44am baRi8tYfCYPPwuCbfU3Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r53Z5-00C1RK-05; Mon, 20 Nov 2023 12:39:47 +0000 Received: from sin.source.kernel.org ([145.40.73.55]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r53XG-00C0y9-1b for linux-arm-kernel@lists.infradead.org; Mon, 20 Nov 2023 12:38:09 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 5FA03CE12BC; Mon, 20 Nov 2023 12:37:47 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 38AB6C433CC; 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=2/jpT2ThMNpF5uIulka4/RucBPTS/TEVnwOufL80Y8k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JgHNNg/mgUYigDWSbDSKBi7SsIIejqwHkcPyDyvoqvmhIYzw2xf8UdEJGo5u25AJ2 UBVlYuGnMZfyDd9DKg7zGek0kV+2+eAhmk4GjRvA3NEi8GyUNXFwXt4i6eS9iAaA8D mEYsOytHRBL/qufhyC8Hlf1mLqlXaE+vyFWwnIMkJYI1QnEl0LUQD8h8rBuJ5oxE40 OmPuMdz+Z0YuzRRAjr99765BKymzdim85oFrDmtI+Sy5L/JFNGCgpwTXI/5Zumuq8b 2jw+kY0tWoKDwax10ldwfBW1zIIheQ7kCEVw1V2BjDdqzeIhtVsdqMBPEoR2B1S9fg fhgjEwOtlu7uQ== 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 1r53X6-00EjJv-6K; Mon, 20 Nov 2023 12:37:44 +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 02/13] arm64: cpufeatures: Correctly handle signed values Date: Mon, 20 Nov 2023 12:37:10 +0000 Message-Id: <20231120123721.851738-3-maz@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231120123721.851738-1-maz@kernel.org> References: <20231120123721.851738-1-maz@kernel.org> 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_043756_066983_982EDEE3 X-CRM114-Status: GOOD ( 18.08 ) 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 Although we've had signed values for some features such as PMUv3 and FP, the code that handles the comparaison with some limit has a couple of annoying issues: - the min_field_value is always unsigned, meaning that we cannot easily compare it with a negative value - it is not possible to have a range of values, let alone a range of negative values Fix this by: - adding an upper limit to the comparison, defaulting to all bits being set to the maximum positive value - ensuring that the signess of the min and max values are taken into account A ARM64_CPUID_FIELDS_NEG() macro is provided for signed features, but nothing is using it yet. Signed-off-by: Marc Zyngier --- arch/arm64/include/asm/cpufeature.h | 1 + arch/arm64/kernel/cpufeature.c | 66 +++++++++++++++++++++++++---- 2 files changed, 58 insertions(+), 9 deletions(-) diff --git a/arch/arm64/include/asm/cpufeature.h b/arch/arm64/include/asm/cpufeature.h index f6d416fe49b0..5f3f62efebd5 100644 --- a/arch/arm64/include/asm/cpufeature.h +++ b/arch/arm64/include/asm/cpufeature.h @@ -363,6 +363,7 @@ struct arm64_cpu_capabilities { u8 field_pos; u8 field_width; u8 min_field_value; + u8 max_field_value; u8 hwcap_type; bool sign; unsigned long hwcap; diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c index 646591c67e7a..e52d2c2b757f 100644 --- a/arch/arm64/kernel/cpufeature.c +++ b/arch/arm64/kernel/cpufeature.c @@ -140,12 +140,43 @@ void dump_cpu_features(void) pr_emerg("0x%*pb\n", ARM64_NCAPS, &system_cpucaps); } +#define __ARM64_EXPAND_RFV(reg, field, val) reg##_##field##_##val +#define __ARM64_MAX_POSITIVE(reg, field) \ + ((reg##_##field##_SIGNED ? \ + BIT(reg##_##field##_WIDTH - 1) : \ + BIT(reg##_##field##_WIDTH)) - 1) + +#define __ARM64_MIN_NEGATIVE(reg, field) BIT(reg##_##field##_WIDTH - 1) + +#define __ARM64_CPUID_FIELDS(reg, field, min_value, max_value) \ + .sys_reg = SYS_##reg, \ + .field_pos = reg##_##field##_SHIFT, \ + .field_width = reg##_##field##_WIDTH, \ + .sign = reg##_##field##_SIGNED, \ + .min_field_value = min_value, \ + .max_field_value = max_value, + +/* + * ARM64_CPUID_FIELDS() encodes a field with a range from min_value to + * an implicit maximum that depends on the sign-ess of the field. + * + * An unsigned field will be capped at all ones, while a signed field + * will be limited to the positive half only. + */ #define ARM64_CPUID_FIELDS(reg, field, min_value) \ - .sys_reg = SYS_##reg, \ - .field_pos = reg##_##field##_SHIFT, \ - .field_width = reg##_##field##_WIDTH, \ - .sign = reg##_##field##_SIGNED, \ - .min_field_value = reg##_##field##_##min_value, + __ARM64_CPUID_FIELDS(reg, field, \ + __ARM64_EXPAND_RFV(reg, field, min_value), \ + __ARM64_MAX_POSITIVE(reg, field)) + +/* + * ARM64_CPUID_FIELDS_NEG() encodes a field with a range from an + * implicit minimal value to max_value. This should be used when + * matching a non-implemented property. + */ +#define ARM64_CPUID_FIELDS_NEG(reg, field, max_value) \ + __ARM64_CPUID_FIELDS(reg, field, \ + __ARM64_MIN_NEGATIVE(reg, field), \ + __ARM64_EXPAND_RFV(reg, field, max_value)) #define __ARM64_FTR_BITS(SIGNED, VISIBLE, STRICT, TYPE, SHIFT, WIDTH, SAFE_VAL) \ { \ @@ -1470,11 +1501,28 @@ has_always(const struct arm64_cpu_capabilities *entry, int scope) static bool feature_matches(u64 reg, const struct arm64_cpu_capabilities *entry) { - int val = cpuid_feature_extract_field_width(reg, entry->field_pos, - entry->field_width, - entry->sign); + int val, min, max; + u64 tmp; + + val = cpuid_feature_extract_field_width(reg, entry->field_pos, + entry->field_width, + entry->sign); + + tmp = entry->min_field_value; + tmp <<= entry->field_pos; + + min = cpuid_feature_extract_field_width(tmp, entry->field_pos, + entry->field_width, + entry->sign); + + tmp = entry->max_field_value; + tmp <<= entry->field_pos; + + max = cpuid_feature_extract_field_width(tmp, entry->field_pos, + entry->field_width, + entry->sign); - return val >= entry->min_field_value; + return val >= min && val <= max; } static u64 From patchwork Mon Nov 20 12:37:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marc Zyngier X-Patchwork-Id: 13461190 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 88066C5AD4C for ; Mon, 20 Nov 2023 12:40:09 +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:References:In-Reply-To: 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: List-Owner; bh=RYI+l+PzMmLDVT60HGaCl49gGgX6R8JKUGDrbaeAhNQ=; b=RZ28Vby+788h8i nVWthqjfJ0pdYI4PTCBeuibNjrB/uZc4nNp6EEfh0VeOOl26+qk7CSPf2N9KC9rlIQYANSvMLBiEm YOBZYP+3MGssMOI0jdffiMpKnQ5QW4JzzubzTKkfogjLHogjE0tCdHG6EfosM6IpZCiWvEuig6dr3 HedaWFU7HXyyTstaPoeoZgMfmf4/sf1OxggKyi1l2qL4XLOUx9XvUBJhLgVgKSEqKC9NunEn5+Rg3 LAO7HRQ6qNHDaYmsm0bU5lIwvuwgO9QlGWjeC4ecShDvwNvmTYvDFqwt8wxurvzQmBrmuM/cGXaaK fiqWUOA+VWijGHiWjauQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r53Z0-00C1Nw-0e; Mon, 20 Nov 2023 12:39:42 +0000 Received: from ams.source.kernel.org ([145.40.68.75]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r53XB-00C0xx-14 for linux-arm-kernel@lists.infradead.org; Mon, 20 Nov 2023 12:37:55 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by ams.source.kernel.org (Postfix) with ESMTP id D1743B816A4; Mon, 20 Nov 2023 12:37:47 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 76E25C433A9; 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=vtc/5i6kKGwwu5BufGLykkpy1F0YD84NHR2T4NoIoUU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dRNxqfbh1jzkFJf77g7zg7wNraBJPkF5RGRNx3zpH8aUKLRNoDC8rWq8qHAatPA2R vgO0aouZ8392ckzEzJuUb1usSOWfOQ8YjS+u/WQoOVWaExddZ2sIVwqi+yf7kL06Do PmgntSz+icctQMp5+LukVrZyrSYFIW/J7HJxCryYHbbBJqBUZ0bil3vdokk/472KXE 6QfdzPRCodMoQmfBODS+n+qyF2039WRSt9NMa48GcLMRROJ9vPHSJlUtQwVT2qo4sz OCWf7WRlRfdhv/yzFk8ELTyQui6mwSVF2DmLNGIOlK1vIaolHwpySkUc9pcqp+fm4I IkCh0VMQR79rQ== 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 1r53X6-00EjJv-CI; Mon, 20 Nov 2023 12:37:44 +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 03/13] arm64: cpufeature: Correctly display signed override values Date: Mon, 20 Nov 2023 12:37:11 +0000 Message-Id: <20231120123721.851738-4-maz@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231120123721.851738-1-maz@kernel.org> References: <20231120123721.851738-1-maz@kernel.org> 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_043749_816132_5C3D63EE X-CRM114-Status: GOOD ( 12.14 ) 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 When a field gets overriden, the kernel indicates the result of the override in dmesg. This works well with unsigned fields, but results in a pretty ugly output when the field is signed. Truncate the field to its width before displaying it. Reviewed-by: Oliver Upton Signed-off-by: Marc Zyngier Reviewed-by: Suzuki K Poulose --- arch/arm64/kernel/cpufeature.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c index e52d2c2b757f..767a6f288755 100644 --- a/arch/arm64/kernel/cpufeature.c +++ b/arch/arm64/kernel/cpufeature.c @@ -950,7 +950,8 @@ static void init_cpu_ftr_reg(u32 sys_reg, u64 new) pr_warn("%s[%d:%d]: %s to %llx\n", reg->name, ftrp->shift + ftrp->width - 1, - ftrp->shift, str, tmp); + ftrp->shift, str, + tmp & (BIT(ftrp->width) - 1)); } else if ((ftr_mask & reg->override->val) == ftr_mask) { reg->override->val &= ~ftr_mask; pr_warn("%s[%d:%d]: impossible override, ignored\n", From patchwork Mon Nov 20 12:37:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marc Zyngier X-Patchwork-Id: 13461191 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 D4EC7C54E76 for ; Mon, 20 Nov 2023 12:40:10 +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:References:In-Reply-To: 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: List-Owner; bh=4TEpe2KuQz3JzfODu6ODORNYQ/vnj2nKiF021Kcn1uk=; b=mJ6LAbpDPFWG0u 4CPhB8c2R5o24Bx9y8NFQiSWW5R9E+yyQUBadY23YAMf1DYP4XETgOEnR+RJaz9RLdYR4GEzhtLzJ yxqddap/qAg87t/dciprlmOuLHbLZM3IeYFjIdmg24aJLrsWxg8xk/gxrucchRimKzMMz3BP+vpbB lw2Hx0iO1SfuQW7wROHgvkAiDF67Rpr+W+C7gQqo4J+iIyjO6FFKFf2TFw+RzZjonNQNHd6Lj2aAf dPNbcHcrb5RCKi75ydzR+t5s7+vkC7nMCLR2C7T1GjSb3PvJzSLFyAlp51XJn3vnKNKeVkvJtvXMH B87mflTMNE0X2wLkaykw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r53Yx-00C1MD-0O; Mon, 20 Nov 2023 12:39:39 +0000 Received: from ams.source.kernel.org ([145.40.68.75]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r53XB-00C0xw-14 for linux-arm-kernel@lists.infradead.org; Mon, 20 Nov 2023 12:37:55 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by ams.source.kernel.org (Postfix) with ESMTP id D36ECB816F9; Mon, 20 Nov 2023 12:37:47 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id A030AC433AB; 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=A5I5Ank97gMJHjlMkiOS6x44usmfYJbXquzi5rguQ0s=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=APrL7bq+srqyXeaR3vd/7GDSTCg+tLtoLMfEMCm0DXHLcMWb+LShKjiw4cUmeWgHE 07dfbVrG6ppZyHGWfeNoSZ/t3Jr1x4pcxzc14xOmnxeqx0JoYTYlU4Vk8r8XOngn8Q ltgJ+/WafbiqtUMn2AcRLTWqpNRzQKx5mSrYIEAsQRHqCEg9+pBsq3a1iLcFRotF2W xt3tdpT4C8RoketuzCtOLCTBAfm5yMupFSEqSoUyofDVqZjIF8NitJB2NdydRYx9NG 2crYd5KDssIrFCtMmfPzaKnPtPxLnwksTgNRjK2HvJ69P/kJeRcze6xVEuIEwEcY3Z uPWsDbt7X+dmQ== 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 1r53X6-00EjJv-ID; Mon, 20 Nov 2023 12:37:44 +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 04/13] arm64: sysreg: Add layout for ID_AA64MMFR4_EL1 Date: Mon, 20 Nov 2023 12:37:12 +0000 Message-Id: <20231120123721.851738-5-maz@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231120123721.851738-1-maz@kernel.org> References: <20231120123721.851738-1-maz@kernel.org> 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_043749_806150_27022BE2 X-CRM114-Status: UNSURE ( 9.78 ) X-CRM114-Notice: Please train this message. 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 ARMv9.5 has infroduced ID_AA64MMFR4_EL1 with a bunch of new features. Add the corresponding layout. This is extracted from the public ARM SysReg_xml_A_profile-2023-09 delivery, timestamped d55f5af8e09052abe92a02adf820deea2eaed717. Signed-off-by: Marc Zyngier Reviewed-by: Suzuki K Poulose --- arch/arm64/tools/sysreg | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/arch/arm64/tools/sysreg b/arch/arm64/tools/sysreg index 96cbeeab4eec..7fb3a4928256 100644 --- a/arch/arm64/tools/sysreg +++ b/arch/arm64/tools/sysreg @@ -1675,6 +1675,43 @@ UnsignedEnum 3:0 TCRX EndEnum EndSysreg +Sysreg ID_AA64MMFR4_EL1 3 0 0 7 4 +Res0 63:40 +UnsignedEnum 39:36 E3DSE + 0b0000 NI + 0b0001 IMP +EndEnum +Res0 35:28 +SignedEnum 27:24 E2H0 + 0b0000 IMP + 0b1110 NI_NV1 + 0b1111 NI +EndEnum +UnsignedEnum 23:20 NV_frac + 0b0000 NV_NV2 + 0b0001 NV2_ONLY +EndEnum +UnsignedEnum 19:16 FGWTE3 + 0b0000 NI + 0b0001 IMP +EndEnum +UnsignedEnum 15:12 HACDBS + 0b0000 NI + 0b0001 IMP +EndEnum +UnsignedEnum 11:8 ASID2 + 0b0000 NI + 0b0001 IMP +EndEnum +SignedEnum 7:4 EIESB + 0b0000 NI + 0b0001 ToEL3 + 0b0010 ToELx + 0b1111 ANY +EndEnum +Res0 3:0 +EndSysreg + Sysreg SCTLR_EL1 3 0 1 0 0 Field 63 TIDCP Field 62 SPINTMASK From patchwork Mon Nov 20 12:37:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marc Zyngier X-Patchwork-Id: 13461198 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 5B113C54E76 for ; Mon, 20 Nov 2023 12:41:07 +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:References:In-Reply-To: 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: List-Owner; bh=T5b4fRrMUwRng7XVFyAoUUSP8XM8PggPYnMykvVzCps=; b=H/bf6hAOeCPTBR 99LAuQJZP/zOsqDuaJkbNwL+2MWIX8ZZww5GKDD3nT8SCEPCyK9g8+x9e9linzrM0AoEvauLmK35S O7xW01nPMrCRVCe2O7gkxkM94JleyJr1UXsa6vL3cQQzlRLBhO4p3xOPv5wl1sz0vdjzLgf+XUUmv A2CMe6NG+OmdZuoYodrMbbGRmlbsI7sKgYmZtbWoBfEggmBYVpUjeRKzKUGPN8E6ioJpVBR8wCZzs z5PZzdNud9GkCJw6+PZB+AY8VPTFioWTbsbVlroQok0iSi/aLcjrBbnLDRRPv0Bwe84AJCduq7kQ0 fEhggwXLZ4jsAb8sEUZQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r53ZN-00C1dO-1n; Mon, 20 Nov 2023 12:40:05 +0000 Received: from sin.source.kernel.org ([2604:1380:40e1:4800::1]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r53XD-00C0yB-0r for linux-arm-kernel@lists.infradead.org; Mon, 20 Nov 2023 12:39:02 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id F1825CE12B6; Mon, 20 Nov 2023 12:37:47 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id D57A7C433B9; 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=xyv7IeaSGe8th527glL17xgGvdT9ZXoUm+tJwOJ5XoU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mgw5POOKQS0XnPo+vsBu5USAoDMJiJRWAqS//ZF8dR/YHJYtprpUgrJ2BYofnK0Gy PJQuzwsUYHKlQyJinzD7Aog8TrD/s/Y3oxZCnatbPbJI4dlEcOEM+SkqB6H83PkxNA Xk76Dtvn66kiSi2sYhW/XFe5JFYrpWg2Nj+ddgn2kh2U6NHRBrVA7sH1YItXoCWllE 6AN+hq1KCPbpcyz9ra5t6UQdR1pOUcKTEjhX41ZuVA2tR4F6ant93WA8YenjsEfQZT 7wDgz94rt4fzqZFtlIj/TeoFD98O4l4pN9z/WaE2uiHq7q03y0T7ntaG4+vmcYbIMd YhlbZ/n5C/Afg== 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 1r53X6-00EjJv-O9; Mon, 20 Nov 2023 12:37:44 +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 05/13] arm64: cpufeature: Add ID_AA64MMFR4_EL1 handling Date: Mon, 20 Nov 2023 12:37:13 +0000 Message-Id: <20231120123721.851738-6-maz@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231120123721.851738-1-maz@kernel.org> References: <20231120123721.851738-1-maz@kernel.org> 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_043752_357698_30DDFB1B X-CRM114-Status: GOOD ( 11.98 ) 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 Add ID_AA64MMFR4_EL1 to the list of idregs the kernel knows about, and describe the E2H0 field. Reviewed-by: Oliver Upton Signed-off-by: Marc Zyngier Reviewed-by: Suzuki K Poulose --- arch/arm64/include/asm/cpu.h | 1 + arch/arm64/kernel/cpufeature.c | 7 +++++++ arch/arm64/kernel/cpuinfo.c | 1 + 3 files changed, 9 insertions(+) diff --git a/arch/arm64/include/asm/cpu.h b/arch/arm64/include/asm/cpu.h index f3034099fd95..d5ba6ec9f711 100644 --- a/arch/arm64/include/asm/cpu.h +++ b/arch/arm64/include/asm/cpu.h @@ -57,6 +57,7 @@ struct cpuinfo_arm64 { u64 reg_id_aa64mmfr1; u64 reg_id_aa64mmfr2; u64 reg_id_aa64mmfr3; + u64 reg_id_aa64mmfr4; u64 reg_id_aa64pfr0; u64 reg_id_aa64pfr1; u64 reg_id_aa64zfr0; diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c index 767a6f288755..41db7f993eef 100644 --- a/arch/arm64/kernel/cpufeature.c +++ b/arch/arm64/kernel/cpufeature.c @@ -438,6 +438,11 @@ static const struct arm64_ftr_bits ftr_id_aa64mmfr3[] = { ARM64_FTR_END, }; +static const struct arm64_ftr_bits ftr_id_aa64mmfr4[] = { + S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR4_EL1_E2H0_SHIFT, 4, 0), + ARM64_FTR_END, +}; + static const struct arm64_ftr_bits ftr_ctr[] = { ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_EXACT, 31, 1, 1), /* RES1 */ ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_EL0_DIC_SHIFT, 1, 1), @@ -755,6 +760,7 @@ static const struct __ftr_reg_entry { &id_aa64mmfr1_override), ARM64_FTR_REG(SYS_ID_AA64MMFR2_EL1, ftr_id_aa64mmfr2), ARM64_FTR_REG(SYS_ID_AA64MMFR3_EL1, ftr_id_aa64mmfr3), + ARM64_FTR_REG(SYS_ID_AA64MMFR4_EL1, ftr_id_aa64mmfr4), /* Op1 = 1, CRn = 0, CRm = 0 */ ARM64_FTR_REG(SYS_GMID_EL1, ftr_gmid), @@ -1079,6 +1085,7 @@ void __init init_cpu_features(struct cpuinfo_arm64 *info) init_cpu_ftr_reg(SYS_ID_AA64MMFR1_EL1, info->reg_id_aa64mmfr1); init_cpu_ftr_reg(SYS_ID_AA64MMFR2_EL1, info->reg_id_aa64mmfr2); init_cpu_ftr_reg(SYS_ID_AA64MMFR3_EL1, info->reg_id_aa64mmfr3); + init_cpu_ftr_reg(SYS_ID_AA64MMFR4_EL1, info->reg_id_aa64mmfr4); init_cpu_ftr_reg(SYS_ID_AA64PFR0_EL1, info->reg_id_aa64pfr0); init_cpu_ftr_reg(SYS_ID_AA64PFR1_EL1, info->reg_id_aa64pfr1); init_cpu_ftr_reg(SYS_ID_AA64ZFR0_EL1, info->reg_id_aa64zfr0); diff --git a/arch/arm64/kernel/cpuinfo.c b/arch/arm64/kernel/cpuinfo.c index a257da7b56fe..a4205effca46 100644 --- a/arch/arm64/kernel/cpuinfo.c +++ b/arch/arm64/kernel/cpuinfo.c @@ -452,6 +452,7 @@ static void __cpuinfo_store_cpu(struct cpuinfo_arm64 *info) info->reg_id_aa64mmfr1 = read_cpuid(ID_AA64MMFR1_EL1); info->reg_id_aa64mmfr2 = read_cpuid(ID_AA64MMFR2_EL1); info->reg_id_aa64mmfr3 = read_cpuid(ID_AA64MMFR3_EL1); + info->reg_id_aa64mmfr4 = read_cpuid(ID_AA64MMFR4_EL1); info->reg_id_aa64pfr0 = read_cpuid(ID_AA64PFR0_EL1); info->reg_id_aa64pfr1 = read_cpuid(ID_AA64PFR1_EL1); info->reg_id_aa64zfr0 = read_cpuid(ID_AA64ZFR0_EL1); From patchwork Mon Nov 20 12:37:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marc Zyngier X-Patchwork-Id: 13461186 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 15C5CC197A0 for ; Mon, 20 Nov 2023 12:39:26 +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:References:In-Reply-To: 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: List-Owner; bh=CrS6EF/b7wwjgXX1Yu6jS1xrb1MUN97+hAkQN+VeFOY=; b=PXyiJm7UAIYpGq YM+UZjXRpGGwEGnk7/E6kF0XO3XU9UY96q7NZlG9oopPjZ92n7eiAPaEIm64RL6cjvYz5VVkPtCUr /hexP63cjdY0QP7dpZGOwUxQMl5CtpGWoUBUzcvLiJ43mGdNI00Y90kk4UG4q59qU1X1Tt1dtxKmT Aqjc4FVptvFdgXIfZboJDs+0ux5Aw0vxVM33ADGzYns6DUHUOV7YWyA/2KhR1vK8PB1YaVBQ1RDC4 YaInXILKmSSjmOQ71ifkA1PEVDPPCzka7s5suWIh4pRAU1iXS8GWLdnRWnM3DahocfUXT6zNIwgpk H93/kfNDvHXVT3R2aHiQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r53XI-00C12S-2X; Mon, 20 Nov 2023 12:37:57 +0000 Received: from sin.source.kernel.org ([2604:1380:40e1:4800::1]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r53XC-00C0y8-17 for linux-arm-kernel@lists.infradead.org; Mon, 20 Nov 2023 12:37:51 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 03909CE12B0; Mon, 20 Nov 2023 12:37:48 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 01306C433BA; Mon, 20 Nov 2023 12:37:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1700483867; bh=lynjrJEz/BHjtI6s1T8jQIpyNGuzaukrA+2hTJuP2Mg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=FxgOtxzgBfL3MrT+WDvbYYZ+8lmrpyKaunIiejSDZ+81ZgUXpmxcIvpCsWFwGPP1o ZqF3C0z1pnUJqAGcg+1ttwo5jVsjAegnmkTL/hYiVD6LepakHsreVwYiz7XH2RFq5G LjQDBwUDEvqcxWU+JE4VlZrh9N1H54HVjsP9LWGQ9mcYmcmJLUJTp73Kbffecln3dG GwGjq2yTzLkBdBJ9V/rUMxKTKAEBU2YNcBXYVymjHSOr4/8cPUF6MpcYft2A/piMtp gkTrVD4KjmKandlBdCsT4M0m9yizUDLBmiznb2wyjB/P2JDfOkGGX2DREw0wzNLIfE tb5xEMYmKG/nQ== 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 1r53X6-00EjJv-UR; Mon, 20 Nov 2023 12:37:45 +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 06/13] arm64: cpufeature: Detect E2H0 not being implemented Date: Mon, 20 Nov 2023 12:37:14 +0000 Message-Id: <20231120123721.851738-7-maz@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231120123721.851738-1-maz@kernel.org> References: <20231120123721.851738-1-maz@kernel.org> 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-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 FEAT_E2H0 is a new feature that indicates whether or not HCR_EL2.E2H can be set to 0. Amusingly, this feature is set to 0 when implemented, and otherwise negative. Add a new capability and detection infrastructure to detect the absence of FEAT_E2H0. Signed-off-by: Marc Zyngier Reviewed-by: Suzuki K Poulose --- arch/arm64/kernel/cpufeature.c | 7 +++++++ arch/arm64/tools/cpucaps | 1 + 2 files changed, 8 insertions(+) diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c index 41db7f993eef..e0d64e8b4851 100644 --- a/arch/arm64/kernel/cpufeature.c +++ b/arch/arm64/kernel/cpufeature.c @@ -2787,6 +2787,13 @@ static const struct arm64_cpu_capabilities arm64_features[] = { .matches = has_cpuid_feature, ARM64_CPUID_FIELDS(ID_AA64MMFR2_EL1, EVT, IMP) }, + { + .desc = "FEAT_E2H0 not implemented", + .capability = ARM64_HCR_E2H_RES1, + .type = ARM64_CPUCAP_SYSTEM_FEATURE, + .matches = has_cpuid_feature, + ARM64_CPUID_FIELDS_NEG(ID_AA64MMFR4_EL1, E2H0, NI) + }, {}, }; diff --git a/arch/arm64/tools/cpucaps b/arch/arm64/tools/cpucaps index b98c38288a9d..8866ea9bf995 100644 --- a/arch/arm64/tools/cpucaps +++ b/arch/arm64/tools/cpucaps @@ -52,6 +52,7 @@ HAS_TIDCP1 HAS_TLB_RANGE HAS_VIRT_HOST_EXTN HAS_WFXT +HCR_E2H_RES1 HW_DBM KVM_HVHE KVM_PROTECTED_MODE From patchwork Mon Nov 20 12:37:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marc Zyngier X-Patchwork-Id: 13461192 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 31B89C5AE5E for ; Mon, 20 Nov 2023 12:40:29 +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:References:In-Reply-To: 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: List-Owner; bh=E9zlsSdPmw+cgNOCwVnYoanzrq0pmmD2obiZzeOaDzQ=; b=ljMlL1iayKojGH gZm8IsJcp8/oMy9ZS3KMvH74Qr4rF5VJnoWJUoBCqcoy1f/syAQAzgpKQvYzwn3fJh0M6SJoU2EwU EXYpo3oblZEt2Mdro+EELEurpTIpt6ZO+rADGPyJgSfhdC6Gf5gtSDMa1EeQvoMxfSYvGnP2aS5EG J+eOZyWJYj9oquVIcYVfJApnOwjT6zkr/bcTvSwlDeB3igjDIHhUB/BsHtS92w3h9558yoteuHmUN nisDDi+xfPN99g5SI2md3EGSUiI3H1QHGyue2Jn/5DrmJjeBqdXBfdSB4Z9jP1KFl5N3hcTCsGM2s wWQ+Wx3Qf1YGTfYghqGg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r53Yy-00C1NH-37; Mon, 20 Nov 2023 12:39:41 +0000 Received: from ams.source.kernel.org ([145.40.68.75]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r53XB-00C0y2-1g 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 ams.source.kernel.org (Postfix) with ESMTP id 2A5C4B8169C; Mon, 20 Nov 2023 12:37:48 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 21AECC433BD; Mon, 20 Nov 2023 12:37:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1700483867; bh=FnZ4kYwF2iimP4yf8r3esEh3L5uELbTgTCOPS2apUzA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Ur9Wtmc1leGWlau75pkRFwrcU6d2xUpjyK3iGKMdOzG/h2RF7Wn5nFsREn86UaL81 Evd3x2PmbAqQ6Kzo/z/nLEJFjHugW25EI/bVHYFaa0Z1Nm/1rfoxlSFJuIo70oHSlL poqu3oi4Ex4U8IUKitA9G63TJZwSdA7QDvefaS2x+utLjKRWqP7juG13llAlX0rJ9O fu0uOgauA0EC45DL8+0doihTOmjLqsLCBYEWePvr9ZBJng5NqxOpphvc8ru/KC2r5t 8IYUT382/xg8zB/Qj+HNMvSETAVlVh10FwwxgNJWMYO50cgh0odYV0kfmx4BttBL35 Sz6XTQNNk3kHA== 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 1r53X7-00EjJv-68; Mon, 20 Nov 2023 12:37:45 +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 07/13] arm64: cpufeature: Detect HCR_EL2.NV1 being RES0 Date: Mon, 20 Nov 2023 12:37:15 +0000 Message-Id: <20231120123721.851738-8-maz@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231120123721.851738-1-maz@kernel.org> References: <20231120123721.851738-1-maz@kernel.org> 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_043749_800037_152C43CB X-CRM114-Status: GOOD ( 11.97 ) 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 A variant of FEAT_E2H0 not being implemented exists in the form of HCR_EL2.E2H being RES1 *and* HCR_EL2.NV1 being RES0 (indicating that only VHE is supported on the host and nested guests). Add the necessary infrastructure for this new CPU capability. Signed-off-by: Marc Zyngier Reviewed-by: Suzuki K Poulose --- arch/arm64/kernel/cpufeature.c | 7 +++++++ arch/arm64/tools/cpucaps | 1 + 2 files changed, 8 insertions(+) diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c index e0d64e8b4851..a733c9a83f83 100644 --- a/arch/arm64/kernel/cpufeature.c +++ b/arch/arm64/kernel/cpufeature.c @@ -2794,6 +2794,13 @@ static const struct arm64_cpu_capabilities arm64_features[] = { .matches = has_cpuid_feature, ARM64_CPUID_FIELDS_NEG(ID_AA64MMFR4_EL1, E2H0, NI) }, + { + .desc = "FEAT_E2H0 not implemented (NV1 RES0)", + .capability = ARM64_HCR_NV1_RES0, + .type = ARM64_CPUCAP_SYSTEM_FEATURE, + .matches = has_cpuid_feature, + ARM64_CPUID_FIELDS_NEG(ID_AA64MMFR4_EL1, E2H0, NI_NV1) + }, {}, }; diff --git a/arch/arm64/tools/cpucaps b/arch/arm64/tools/cpucaps index 8866ea9bf995..fea24bcd6252 100644 --- a/arch/arm64/tools/cpucaps +++ b/arch/arm64/tools/cpucaps @@ -53,6 +53,7 @@ HAS_TLB_RANGE HAS_VIRT_HOST_EXTN HAS_WFXT HCR_E2H_RES1 +HCR_NV1_RES0 HW_DBM KVM_HVHE KVM_PROTECTED_MODE From patchwork Mon Nov 20 12:37:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marc Zyngier X-Patchwork-Id: 13461197 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 EF9CDC197A0 for ; Mon, 20 Nov 2023 12:40:57 +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:References:In-Reply-To: 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: List-Owner; bh=5EumbryerhH3vemImjA2dBRxHyqHshRz4yFismM/Kro=; b=OXUjHc4okoZpTl kTXF6aIcdprXyqjJZ9JS+Ghf34UjhTbuqLw1ryLamUnfAMtwhmzb5LAkT3jXHeSX5nqA77ccwNOgW vOTMyMsdYPdVjLP18c31w64cnLVx7FrlN2jbYPwi3nwn1GhV0hj7YOOh8k3mJ81Z97b54rXeC73PE IG9TwE9ylHYj4dkDna4+cVkQm/qAcwFlMLLCa0pCp6uj9ie3cJYhbBigpyb+CK9EJnWUzTklsqFPl gQGMyHoEGC3AgnfwtdFqLvvtg0P6a0ZCS6JIgK17lAQTnrwFOlvLEi/ujfadZlziLLnZlOQM2mZLc KzctVEMe7uVW6tYav1Sg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r53ZO-00C1eP-1x; Mon, 20 Nov 2023 12:40:06 +0000 Received: from ams.source.kernel.org ([145.40.68.75]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r53XB-00C0y7-2c for linux-arm-kernel@lists.infradead.org; Mon, 20 Nov 2023 12:37:56 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by ams.source.kernel.org (Postfix) with ESMTP id 533F8B816FB; Mon, 20 Nov 2023 12:37:48 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6CE4FC433C9; Mon, 20 Nov 2023 12:37:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1700483867; bh=drqdatwZNNrfZOfvVDcMLo2myB2+/5lGPticb1sXcDE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=j6ZWZmvr+CYaXXzHHi4WlFCbdE+q5lKQTt1zGJCErNst6AaHMvL4ZBQQosiA8OSDR ilgyIvC8GPFcBLHE8m0dOFLHYyjg4b1an4B7b35werZykpALW69tu8dddyHxUA39x1 NqCRMjCRwDgKPT0+Fj6x39i0TjREeRqkCCmhRXD8PPAlZa0P85ABzATlXxD2jK2Th1 LJTMCxLRRbML24xkYPvblxybqIUczltHdp9Nwq6pE9YD2gCgZow+3cvcwIalkC3zP1 q+5hjl6eqKDr9QiIp9uIJsOh29GjhKtzEyTkkdDsvzmTSeuU99QtlhQkLBTllQC5SR qenVY3xh/eewQ== 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 1r53X7-00EjJv-Cd; Mon, 20 Nov 2023 12:37:45 +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 08/13] arm64: Treat HCR_EL2.E2H as RES1 when ID_AA64MMFR4_EL1.E2H0 is negative Date: Mon, 20 Nov 2023 12:37:16 +0000 Message-Id: <20231120123721.851738-9-maz@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231120123721.851738-1-maz@kernel.org> References: <20231120123721.851738-1-maz@kernel.org> 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_043750_180888_546AFE1F X-CRM114-Status: GOOD ( 14.18 ) 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 For CPUs that have ID_AA64MMFR4_EL1.E2H0 as negative, it is important to avoid the boot path that sets HCR_EL2.E2H=0. Fortunately, we already have this path to cope with fruity CPUs. Tweak init_el2 to look at ID_AA64MMFR4_EL1.E2H0 first. Signed-off-by: Marc Zyngier Reviewed-by: Suzuki K Poulose --- arch/arm64/kernel/cpufeature.c | 5 ++--- arch/arm64/kernel/head.S | 23 +++++++++++++++-------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c index a733c9a83f83..64a026cc5cec 100644 --- a/arch/arm64/kernel/cpufeature.c +++ b/arch/arm64/kernel/cpufeature.c @@ -140,7 +140,6 @@ void dump_cpu_features(void) pr_emerg("0x%*pb\n", ARM64_NCAPS, &system_cpucaps); } -#define __ARM64_EXPAND_RFV(reg, field, val) reg##_##field##_##val #define __ARM64_MAX_POSITIVE(reg, field) \ ((reg##_##field##_SIGNED ? \ BIT(reg##_##field##_WIDTH - 1) : \ @@ -165,7 +164,7 @@ void dump_cpu_features(void) */ #define ARM64_CPUID_FIELDS(reg, field, min_value) \ __ARM64_CPUID_FIELDS(reg, field, \ - __ARM64_EXPAND_RFV(reg, field, min_value), \ + SYS_FIELD_VALUE(reg, field, min_value), \ __ARM64_MAX_POSITIVE(reg, field)) /* @@ -176,7 +175,7 @@ void dump_cpu_features(void) #define ARM64_CPUID_FIELDS_NEG(reg, field, max_value) \ __ARM64_CPUID_FIELDS(reg, field, \ __ARM64_MIN_NEGATIVE(reg, field), \ - __ARM64_EXPAND_RFV(reg, field, max_value)) + SYS_FIELD_VALUE(reg, field, max_value)) #define __ARM64_FTR_BITS(SIGNED, VISIBLE, STRICT, TYPE, SHIFT, WIDTH, SAFE_VAL) \ { \ diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S index 7b236994f0e1..57e39bc3b2b5 100644 --- a/arch/arm64/kernel/head.S +++ b/arch/arm64/kernel/head.S @@ -584,25 +584,32 @@ SYM_INNER_LABEL(init_el2, SYM_L_LOCAL) mov_q x1, INIT_SCTLR_EL1_MMU_OFF /* - * Fruity CPUs seem to have HCR_EL2.E2H set to RES1, - * making it impossible to start in nVHE mode. Is that - * compliant with the architecture? Absolutely not! + * Compliant CPUs advertise their VHE-onlyness with + * ID_AA64MMFR4_EL1.E2H0 < 0. HCR_EL2.E2H can be + * RES1 in that case. + * + * Fruity CPUs seem to have HCR_EL2.E2H set to RES1, but + * don't advertise it (they predate this relaxation). */ + mrs_s x0, SYS_ID_AA64MMFR4_EL1 + ubfx x0, x0, #ID_AA64MMFR4_EL1_E2H0_SHIFT, #ID_AA64MMFR4_EL1_E2H0_WIDTH + tbnz x0, #(ID_AA64MMFR4_EL1_E2H0_SHIFT + ID_AA64MMFR4_EL1_E2H0_WIDTH - 1), 1f + mrs x0, hcr_el2 and x0, x0, #HCR_E2H - cbz x0, 1f - + cbz x0, 2f +1: /* Set a sane SCTLR_EL1, the VHE way */ pre_disable_mmu_workaround msr_s SYS_SCTLR_EL12, x1 mov x2, #BOOT_CPU_FLAG_E2H - b 2f + b 3f -1: +2: pre_disable_mmu_workaround msr sctlr_el1, x1 mov x2, xzr -2: +3: __init_el2_nvhe_prepare_eret mov w0, #BOOT_CPU_MODE_EL2 From patchwork Mon Nov 20 12:37:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marc Zyngier X-Patchwork-Id: 13461185 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 CB10BC197A0 for ; Mon, 20 Nov 2023 12:38:27 +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:References:In-Reply-To: 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: List-Owner; bh=F7v3zVOvHZR+b2yHdh08i93dVu2n/w9zpd4SXSNs0Ds=; b=g35Q+7xQBkMbL4 Jk7Yma9PSXgE6reBk5ohHY3SFEYgervzBa+nmZHeY6lQtInPsgLNj1hJBC6OJAHUyfkaa9sUrxGeI ne5H6HuprXyBCBp+m7KM9JCAvdI9XWCeghMCshmutdBbX4XCNZMv0e/HnsxGxVz6yVR9OMTNjiBor p1s6PsxxsJOpk8sTT9Oy1aRhJ5ojaNr7F3oiMqCXrobZUw29PlRyHTWIc3Z6wsDzoNIXw3yD0U5IA uKikocAJn0MJ3jVGV5Rx21h6jdiwqLTkI9RKd2dU8bi6AyKWyzPt/eRdpoc1IJyzc/UB1suK6Zb8b bxlk1GBy6Ntm8qcyq3aQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r53XF-00C110-1y; Mon, 20 Nov 2023 12:37:54 +0000 Received: from ams.source.kernel.org ([2604:1380:4601:e00::1]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r53XC-00C0yC-0r for linux-arm-kernel@lists.infradead.org; Mon, 20 Nov 2023 12:37:51 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by ams.source.kernel.org (Postfix) with ESMTP id AF03EB81701; Mon, 20 Nov 2023 12:37:48 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 86377C433BF; Mon, 20 Nov 2023 12:37:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1700483867; bh=9EORvHTRj5Hyk03GKOs6Xv6B5LFUITT1V1qzyzuUTPY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IFBv3IxKFOGv3uLv70IFty9MIvKnBJU0J8GhZF5C4uiSHYubN/ZQEpv3DDTicoYet 9I5mIRVuthWTA9DcxHNt6ef55CPPl2Y9K7VEVyLLkn3s6oRufgeIXBsM1RbmaA6Z9E dD+SPGppzrZhB3xMVQaSmxYJvIf+hkGZpDpp1XCO4NQBP4fhyvIBouybH7MK4mNkP8 dsWamIOS1LpKmIB2jvkUy0M8qQlFWfhLwdn31xPBQzYNugHhvTanIVXPc+a2z/e4n0 i/ZyvS26ELOI+TtdQoWHed5cUinYKqr1YB92gOPD3aKs05MxXfWbSWEUVp92I6v2rl yZSQlg3VyNlcg== 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 1r53X7-00EjJv-K1; Mon, 20 Nov 2023 12:37:45 +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 09/13] arm64: Add override for ID_AA64MMFR4_EL1.E2H0 Date: Mon, 20 Nov 2023 12:37:17 +0000 Message-Id: <20231120123721.851738-10-maz@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231120123721.851738-1-maz@kernel.org> References: <20231120123721.851738-1-maz@kernel.org> 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-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 Allow ID_AA64MMFR4_EL1.E2H0 to be overriden from the command-line. This will subsequently be of use for non-compliant CPUs. Signed-off-by: Marc Zyngier Reviewed-by: Suzuki K Poulose --- arch/arm64/include/asm/cpufeature.h | 1 + arch/arm64/kernel/cpufeature.c | 4 +++- arch/arm64/kernel/idreg-override.c | 10 ++++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/arch/arm64/include/asm/cpufeature.h b/arch/arm64/include/asm/cpufeature.h index 5f3f62efebd5..d465db251939 100644 --- a/arch/arm64/include/asm/cpufeature.h +++ b/arch/arm64/include/asm/cpufeature.h @@ -901,6 +901,7 @@ s64 arm64_ftr_safe_value(const struct arm64_ftr_bits *ftrp, s64 new, s64 cur); struct arm64_ftr_reg *get_arm64_ftr_reg(u32 sys_id); extern struct arm64_ftr_override id_aa64mmfr1_override; +extern struct arm64_ftr_override id_aa64mmfr4_override; extern struct arm64_ftr_override id_aa64pfr0_override; extern struct arm64_ftr_override id_aa64pfr1_override; extern struct arm64_ftr_override id_aa64zfr0_override; diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c index 64a026cc5cec..7dcda39537f8 100644 --- a/arch/arm64/kernel/cpufeature.c +++ b/arch/arm64/kernel/cpufeature.c @@ -691,6 +691,7 @@ static const struct arm64_ftr_bits ftr_raz[] = { __ARM64_FTR_REG_OVERRIDE(#id, id, table, &no_override) struct arm64_ftr_override __ro_after_init id_aa64mmfr1_override; +struct arm64_ftr_override __ro_after_init id_aa64mmfr4_override; struct arm64_ftr_override __ro_after_init id_aa64pfr0_override; struct arm64_ftr_override __ro_after_init id_aa64pfr1_override; struct arm64_ftr_override __ro_after_init id_aa64zfr0_override; @@ -759,7 +760,8 @@ static const struct __ftr_reg_entry { &id_aa64mmfr1_override), ARM64_FTR_REG(SYS_ID_AA64MMFR2_EL1, ftr_id_aa64mmfr2), ARM64_FTR_REG(SYS_ID_AA64MMFR3_EL1, ftr_id_aa64mmfr3), - ARM64_FTR_REG(SYS_ID_AA64MMFR4_EL1, ftr_id_aa64mmfr4), + ARM64_FTR_REG_OVERRIDE(SYS_ID_AA64MMFR4_EL1, ftr_id_aa64mmfr4, + &id_aa64mmfr4_override), /* Op1 = 1, CRn = 0, CRm = 0 */ ARM64_FTR_REG(SYS_GMID_EL1, ftr_gmid), diff --git a/arch/arm64/kernel/idreg-override.c b/arch/arm64/kernel/idreg-override.c index 3addc09f8746..7b5b9dc20e6b 100644 --- a/arch/arm64/kernel/idreg-override.c +++ b/arch/arm64/kernel/idreg-override.c @@ -55,6 +55,15 @@ static const struct ftr_set_desc mmfr1 __initconst = { }, }; +static const struct ftr_set_desc mmfr4 __initconst = { + .name = "id_aa64mmfr4", + .override = &id_aa64mmfr4_override, + .fields = { + FIELD("e2h0", ID_AA64MMFR4_EL1_E2H0_SHIFT, NULL ), + {} + }, +}; + static bool __init pfr0_sve_filter(u64 val) { /* @@ -161,6 +170,7 @@ static const struct ftr_set_desc sw_features __initconst = { static const struct ftr_set_desc * const regs[] __initconst = { &mmfr1, + &mmfr4, &pfr0, &pfr1, &isar1, From patchwork Mon Nov 20 12:37:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marc Zyngier X-Patchwork-Id: 13461193 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 D8099C54FB9 for ; Mon, 20 Nov 2023 12:40:28 +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:References:In-Reply-To: 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: List-Owner; bh=erdP9KX4lImTvLUKRiwiyfwoU3Crj94xUB4O+oKX45o=; b=xKyW2QMah6Wdsw 0Kzu5c7o0H2pSDCofmwqqoQURZcSBOxA74Pl77xwE+1+xDK1ccfRX53JU3pGczWjeXV4VFbrY+vL1 /wA7qnQbb/R43/z73YFhYTNQZs6iB/d2p81JzNO+xThatL32DnWQ3sCDjQjmsCMZTU9+lcAzPnDKI samPLHVeA9aAWRMQVdtKVRU29J1++rKYZHSdOpl3FmV7Rdso0OFQUPK/4ZJwKbja4jIRkFlIw++Hz BA02PASo7F2QSVn8C3DL14D3PHg709omB27eH6M4ONY4JdyIegGgY7arvGM+lKwj6rrKbiWVcdpem Po7gZfsWIZExiL0FeIaQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r53Z0-00C1OQ-2d; Mon, 20 Nov 2023 12:39:42 +0000 Received: from dfw.source.kernel.org ([2604:1380:4641:c500::1]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r53XC-00C0yJ-01 for linux-arm-kernel@lists.infradead.org; Mon, 20 Nov 2023 12:37:56 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 1129A6123E; Mon, 20 Nov 2023 12:37:49 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B982CC433CC; Mon, 20 Nov 2023 12:37:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1700483867; bh=J11CtFVHtqBhTKJa3YGjPeX49bSAPr/MKFFq1o+SJc4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KdkvXORB6GX0oMhAbwziRyLprTu3HSP5BlVEy+t4jcBGouRRAjGYWvWdPPKGj1XcT TZfRI6KWQDZEbETCGu3EdJ2W80ejyHCFetWhV/P9fAI4+3Btob5aeL7qX/vzksZr8J AHFtEvMqAUHmtQxTqh054dZO+QBjAEDI/wR+lY9uJmZJ9i5E1Ab2EqYvirTtEwyO31 mS2yzwL/jJeX/3quTKXkY404juCUULmCue2w1NmQgDO/wYribUiymx5rRS6jbdSNQ8 j2GrZejq2oZZTqgkKqsjCnvwsimha+pjsB/4mebGVdwZNpaxaP78Qr1b8EAxL2Zs1Z DcBKkua4rAGdg== 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 1r53X7-00EjJv-QZ; Mon, 20 Nov 2023 12:37:45 +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 10/13] arm64: Add MIDR-based override infrastructure Date: Mon, 20 Nov 2023 12:37:18 +0000 Message-Id: <20231120123721.851738-11-maz@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231120123721.851738-1-maz@kernel.org> References: <20231120123721.851738-1-maz@kernel.org> 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_043750_170671_A029A5E6 X-CRM114-Status: GOOD ( 12.76 ) 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 In order to be able to use the override infrastructure to "fix" CPUs that have deviated from teh architecture spec, add a new pile of hacks on top of the existing one, allowing a feature to be overriden based on matching a MIDR list. Signed-off-by: Marc Zyngier Reviewed-by: Suzuki K Poulose --- arch/arm64/kernel/idreg-override.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/arch/arm64/kernel/idreg-override.c b/arch/arm64/kernel/idreg-override.c index 7b5b9dc20e6b..57c145bf50b7 100644 --- a/arch/arm64/kernel/idreg-override.c +++ b/arch/arm64/kernel/idreg-override.c @@ -321,6 +321,23 @@ static __init void parse_cmdline(void) __parse_cmdline(prop, true); } +struct midr_override_data { + const char feature[FTR_ALIAS_OPTION_LEN]; + const struct midr_range ranges[]; +}; + +static const struct midr_override_data * const midr_ovr_data[] __initconst = { +}; + +static void __init apply_midr_overrides(void) +{ + const u64 midr = read_cpuid_id(); + + for (int i = 0; i < ARRAY_SIZE(midr_ovr_data); i++) + if (is_midr_in_range_list(midr, midr_ovr_data[i]->ranges)) + __parse_cmdline(midr_ovr_data[i]->feature, false); +} + /* Keep checkers quiet */ void init_feature_override(u64 boot_status); @@ -337,6 +354,8 @@ asmlinkage void __init init_feature_override(u64 boot_status) __boot_status = boot_status; + apply_midr_overrides(); + parse_cmdline(); for (i = 0; i < ARRAY_SIZE(regs); i++) { From patchwork Mon Nov 20 12:37:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marc Zyngier X-Patchwork-Id: 13461195 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 E8218C197A0 for ; Mon, 20 Nov 2023 12:40:33 +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:References:In-Reply-To: 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: List-Owner; bh=+y/mrrIV3IUSxEqJn/sha0E4lYXpsPq/Opa7SYqOuy0=; b=ma9jGcJ23hCAel VkHEgaP7GAwNVm3HCOcfl1kuUTvmc6WwDmChP67P5biXNDgakRGNouelguT6eF73dJdLbSu1jWygQ 05315AFYEAp219Pw3W+HC+7RKMFoGSgHpEo0fKApzSBbWiu2irQx6sAJ25V9Vemmw5dWOsrEB66eA KcHHlWzgH4W+4hGfekIjs83nurM39eKOI/1uB7f1y8BO9VPBwjeiT0xOUFTI4rPAXOmqZtmhKzqOy YrgAbinbDe6oF4q1FBI00EXmDQ1O6t5DqAMlCjyCeqT6H1XIct+L+WzPrTni0vvh1Kgqzz5hJAUHO BmW4x3FK/VCTRbOG/f2w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r53Z7-00C1Sv-3B; Mon, 20 Nov 2023 12:39:50 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r53XK-00C135-1G for linux-arm-kernel@bombadil.infradead.org; Mon, 20 Nov 2023 12:39:02 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:MIME-Version :References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=DC2A2Kf7drVlD1T7L6d/GJRA5DOWD6tRdqjsifiEB8Y=; b=mNXVehKwyIo+R3QFGXSkLaEd9l ftwqNpAEM9/CE+SwfJt+Al/epPH5m13JyyId9ov6X16zlN2CH5P6FQ1tyX3r2H0mzDgoVqQXsUn0/ 2xxj9zVsSGKg/dC/4xSwpPSNrKu7qYOCRqOkRMr+18mWCN76fFOKtnxDzMG9K4NnqTEV6RuJiRDYz mVzdxpywil5rAzHISyU5bVDDweSv8ONNI9nO579QYwMFLKzrEg0OzJJjEHdYHHbIAguXAgN5Tknni UAGa7KL4TN1ZI/Bgs4SiVF5p9E+EWxHpdTFlQDpHo8su6gETVivcCAXzhyU1t+Myj5utBSjo0hnhr qe+s3XgA==; Received: from dfw.source.kernel.org ([2604:1380:4641:c500::1]) by desiato.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r53XG-00AxJh-03 for linux-arm-kernel@lists.infradead.org; Mon, 20 Nov 2023 12:37:57 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 3CD3A6123F; Mon, 20 Nov 2023 12:37:49 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2501FC433AB; Mon, 20 Nov 2023 12:37:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1700483868; bh=MtPSu5LUzrRw8/ng+e1jkKKFUThsGpUNJoMyASnhWfA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RjsG+u+QDN8i8hO3TFQZXzpmAuFAKd/GymB5Gkd3DoMumVX4KxHzfAYh3YgJUA3Qs HYtSmrqXkSar4Deed6v1XwbopUvhs3R/YcIh0EWTjz0eansREr0LuBiST34knSivwN 5L5mULkH0XHXDaN3JzXfIlZpUifViWtNh/tRd9BDIJz1fnlZdQ310z9n9QOefby2+z /F+nEJOS/Eq0Fwm/FbIKDeMNX3FvkekUKT5gDxIrjfGOW6aoNmVZ2if0dOodxK4flZ dnZ958qY8UXSk5O6LG65azPIx4wonLkC4pDc8koHTcUt7nCaYo3MmcDSq8HoLMsYuR HS7KrDEh0Jlgg== 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 1r53X8-00EjJv-0w; Mon, 20 Nov 2023 12:37:46 +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 11/13] arm64: Add MIDR-based overrides for ID_AA64MMFR4_EL1.E2H0 Date: Mon, 20 Nov 2023 12:37:19 +0000 Message-Id: <20231120123721.851738-12-maz@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231120123721.851738-1-maz@kernel.org> References: <20231120123721.851738-1-maz@kernel.org> 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_123754_343522_5D448EDD X-CRM114-Status: GOOD ( 11.83 ) 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 None the Apple M1/M2 CPUs effectively implement E2H=0, and M2 doesn't correctly implement NV1=1 (the EL2 S1 PTW seems to barf on the nVHE format). Override ID_AA64MMFR4_EL1.E2H0 for these CPUs to reflect what they actually support. Signed-off-by: Marc Zyngier Reviewed-by: Suzuki K Poulose --- arch/arm64/kernel/idreg-override.c | 36 ++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/arch/arm64/kernel/idreg-override.c b/arch/arm64/kernel/idreg-override.c index 57c145bf50b7..f7be459e5ff3 100644 --- a/arch/arm64/kernel/idreg-override.c +++ b/arch/arm64/kernel/idreg-override.c @@ -326,7 +326,43 @@ struct midr_override_data { const struct midr_range ranges[]; }; +static const struct midr_override_data e2h0_ni __initconst = { + /* + * These CPUs predate FEAT_E2H0, but have HCR_EL2.E2H RES1 + * anyway. + */ + .feature = "id_aa64mmfr4.e2h0=0xf", + .ranges = { + MIDR_ALL_VERSIONS(MIDR_APPLE_M1_ICESTORM), + MIDR_ALL_VERSIONS(MIDR_APPLE_M1_FIRESTORM), + MIDR_ALL_VERSIONS(MIDR_APPLE_M1_ICESTORM_PRO), + MIDR_ALL_VERSIONS(MIDR_APPLE_M1_FIRESTORM_PRO), + MIDR_ALL_VERSIONS(MIDR_APPLE_M1_ICESTORM_MAX), + MIDR_ALL_VERSIONS(MIDR_APPLE_M1_FIRESTORM_MAX), + {} + }, +}; + +static const struct midr_override_data e2h0_nv1_ni __initconst = { + /* + * These CPUs predate FEAT_E2H0, but have both HCR_EL2.E2H + * RES1 and a non-functional HCR_EL2.NV1. + */ + .feature = "id_aa64mmfr4.e2h0=0xe", + .ranges = { + MIDR_ALL_VERSIONS(MIDR_APPLE_M2_BLIZZARD), + MIDR_ALL_VERSIONS(MIDR_APPLE_M2_AVALANCHE), + MIDR_ALL_VERSIONS(MIDR_APPLE_M2_BLIZZARD_PRO), + MIDR_ALL_VERSIONS(MIDR_APPLE_M2_AVALANCHE_PRO), + MIDR_ALL_VERSIONS(MIDR_APPLE_M2_BLIZZARD_MAX), + MIDR_ALL_VERSIONS(MIDR_APPLE_M2_AVALANCHE_MAX), + {} + }, +}; + static const struct midr_override_data * const midr_ovr_data[] __initconst = { + &e2h0_ni, + &e2h0_nv1_ni, }; static void __init apply_midr_overrides(void) From patchwork Mon Nov 20 12:37:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marc Zyngier X-Patchwork-Id: 13461189 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 43A82C54FB9 for ; Mon, 20 Nov 2023 12:40:08 +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:References:In-Reply-To: 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: List-Owner; bh=dCeDbO6TwC02+P1+RkzTP6ALlmyG4vJ6ybWoTsWLZ2A=; b=4NefIIstUI8M59 m72uUorR7PZQ9W0be0IkZs0BN9cAXrIc6VXu5PAYr6B8EdI+ZAp/tUywUbqOYXo6O3fHsdK9AcmX8 u9Cu0UWdZQ787gBNYKu9F4+MthRypAg0TkPMvKQLYp7kfc7HSC+1OqJPvSuzBsTi75hpYt4AjJJ+n HIIc+XzYyWJ6lhMC6ygpnZuxyqwbk2UOoUBvx80KONPZLef/AYcT425ut6B2jn1qTNyv4dYKNC37P d1CcGTwHxATG4UUPknfeYisr2blUka+niE7zD9Q5d4Uc9gTiK74KgkqzNI1AeiAeU4SdQh3x/P1OD bc4d7Hc1mnADCge8Mnzg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r53Yx-00C1Mh-34; Mon, 20 Nov 2023 12:39:40 +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 1r53XB-00C0yK-2u for linux-arm-kernel@lists.infradead.org; Mon, 20 Nov 2023 12:37:55 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 43FB761248; Mon, 20 Nov 2023 12:37:49 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 322E2C4163D; Mon, 20 Nov 2023 12:37:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1700483868; bh=WhHzN5W2I/wpV1unvPuXPKLCNSFax8QDUQeeKfUM8/Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=o+1/dbKeA6MPXeGvvDnjkKhYyNMHmYeEBbEaWsJ9GWViXxQAPfmZMb6dGyJijaGQZ D+kl4+O2DHnkX9cd7W/tZXjnDyEPH9toElC3D02i8aapwulW7Z7r29ALrfMhc+yRDh ersbWu3mjIgJ3gwW8KgoDbb1AjL8SYOaSZa5bPmsIv9mQuT+0JKXjc0VwwEiUFsXkU dlcPl+Jgw45ksv7BydrosEfhJqiVjkfFwojwApwMyRgmhBqwpuq+w6ynA/Nei2h55V b0onVtJxY997dafrdNCsIKvgNGmVTA85OGoPrFChly2noY8vCQPtn4af85KvgMeLaf dA7ZnKrS6BLGA== 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 1r53X8-00EjJv-D2; Mon, 20 Nov 2023 12:37:46 +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 12/13] KVM: arm64: Expose ID_AA64MMFR4_EL1 to guests Date: Mon, 20 Nov 2023 12:37:20 +0000 Message-Id: <20231120123721.851738-13-maz@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231120123721.851738-1-maz@kernel.org> References: <20231120123721.851738-1-maz@kernel.org> 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_043750_170413_ECD08EA4 X-CRM114-Status: GOOD ( 11.87 ) 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 We can now expose ID_AA64MMFR4_EL1 to guests, and let NV guests understand that they cannot really switch HCR_EL2.E2H to 0 on some platforms. Signed-off-by: Marc Zyngier Reviewed-by: Suzuki K Poulose --- arch/arm64/kvm/nested.c | 4 ++++ arch/arm64/kvm/sys_regs.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/arch/arm64/kvm/nested.c b/arch/arm64/kvm/nested.c index 042695a210ce..3885f1c93979 100644 --- a/arch/arm64/kvm/nested.c +++ b/arch/arm64/kvm/nested.c @@ -137,6 +137,10 @@ void access_nested_id_reg(struct kvm_vcpu *v, struct sys_reg_params *p, val |= FIELD_PREP(NV_FTR(MMFR2, TTL), 0b0001); break; + case SYS_ID_AA64MMFR4_EL1: + val &= NV_FTR(MMFR4, E2H0); + break; + case SYS_ID_AA64DFR0_EL1: /* Only limited support for PMU, Debug, BPs and WPs */ val &= (NV_FTR(DFR0, PMUVer) | diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index 9f76f24b96f8..ff2e66f0bda1 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -2197,7 +2197,7 @@ static const struct sys_reg_desc sys_reg_descs[] = { ID_AA64MMFR2_EL1_NV | ID_AA64MMFR2_EL1_CCIDX)), ID_SANITISED(ID_AA64MMFR3_EL1), - ID_UNALLOCATED(7,4), + ID_SANITISED(ID_AA64MMFR4_EL1), ID_UNALLOCATED(7,5), ID_UNALLOCATED(7,6), ID_UNALLOCATED(7,7), From patchwork Mon Nov 20 12:37:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marc Zyngier X-Patchwork-Id: 13461196 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 783D1C54E76 for ; Mon, 20 Nov 2023 12:40:41 +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:References:In-Reply-To: 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: List-Owner; bh=DBbjDfAjKu+HB3r15FT7c2Lm6AeWR0gBiC4Bs0sakeY=; b=L93QNtCW2qUC7I eIYtil9L9oCIVoc16Xao+rBx/iAr+rEQAgWLvWjyhOHp6l1vva+fXO2HCTTqONpTtJEq1pIjUFo9/ RCILSBZznGnfmJYhgkmZJiSV/c9F8CnZGDeDKqiNGsemQLcDTIeDVltNK4rPJrQxZRb2JAgvNpec8 JitqkNvxSs3OyN76H9IrwSrA22SUnK2R76MusEHc9bW0lxoRAIiSbSFSTEHIHfIW4720jLEx27bnt f5UhOvRqoIiH3Qo33c/brQWCsEPre8a65Owhr6SUrC49xd7oJp6e184/fgaHagQ4rv7vMypAtDMcv KmqvIg3w5JFKzceSFFSg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r53ZC-00C1VH-18; Mon, 20 Nov 2023 12:39:54 +0000 Received: from ams.source.kernel.org ([145.40.68.75]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r53XF-00C10c-1m for linux-arm-kernel@lists.infradead.org; Mon, 20 Nov 2023 12:38:07 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by ams.source.kernel.org (Postfix) with ESMTP id 12B91B816FD; Mon, 20 Nov 2023 12:37:49 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9AC08C433C8; Mon, 20 Nov 2023 12:37:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1700483868; bh=mLhQRkBfIM93kMIuiwmrPCgI94Mp6OTqOwf/eAgfh1I=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=a4lH0pjDnp3kxNXmG83qwzTZlb7/3glNY5XFAn45/zE91raosyD06qsq/Ve59I3Is TOgh9Lc5Ddfhim3DIvoU6rzKBhgkcm7+jL1Yg/eQ66Y6+z8WoBH2jbf9vdkqSnmf9V yzIbAy3dzV0hLNLpKhQLJargHxhmBP2chWaoRzuFZ3nsgn78KXgDZOu2JW8lrHa4Ke EH0jRo0g4ON+eHwejmfVdDMFt/pzSNH4MLBUWCM7xIpDHU4xkVGrMWk/baAl3B9OGj e6HikHDGnaMDzZSDq8l+CDvb8aKqIzlUxyc+27TwvyKPY+R8p8whJs27XJZOW+yo+T JkfmBU4O7q80g== 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 1r53X8-00EjJv-M3; Mon, 20 Nov 2023 12:37:46 +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 13/13] KVM: arm64: Force guest's HCR_EL2.E2H RES1 when NV1 is not implemented Date: Mon, 20 Nov 2023 12:37:21 +0000 Message-Id: <20231120123721.851738-14-maz@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231120123721.851738-1-maz@kernel.org> References: <20231120123721.851738-1-maz@kernel.org> 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_043754_502062_9888225C X-CRM114-Status: GOOD ( 12.84 ) 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 If NV1 isn't supported on a system, make sure we always evaluate the guest's HCR_EL2.E2H as RES1, irrespective of what the guest may have written there. Signed-off-by: Marc Zyngier Reviewed-by: Suzuki K Poulose --- arch/arm64/include/asm/kvm_emulate.h | 3 ++- arch/arm64/kvm/sys_regs.c | 12 +++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/arch/arm64/include/asm/kvm_emulate.h b/arch/arm64/include/asm/kvm_emulate.h index 78a550537b67..7b10a44189d0 100644 --- a/arch/arm64/include/asm/kvm_emulate.h +++ b/arch/arm64/include/asm/kvm_emulate.h @@ -213,7 +213,8 @@ static inline bool vcpu_is_el2(const struct kvm_vcpu *vcpu) static inline bool __vcpu_el2_e2h_is_set(const struct kvm_cpu_context *ctxt) { - return ctxt_sys_reg(ctxt, HCR_EL2) & HCR_E2H; + return (cpus_have_final_cap(ARM64_HCR_NV1_RES0) || + (ctxt_sys_reg(ctxt, HCR_EL2) & HCR_E2H)); } static inline bool vcpu_el2_e2h_is_set(const struct kvm_vcpu *vcpu) diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index ff2e66f0bda1..9e1e3da2ed4a 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -2022,6 +2022,16 @@ static bool access_spsr(struct kvm_vcpu *vcpu, return true; } +static u64 reset_hcr(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r) +{ + u64 val = r->val; + + if (cpus_have_final_cap(ARM64_HCR_NV1_RES0)) + val |= HCR_E2H; + + return __vcpu_sys_reg(vcpu, r->reg) = val; +} + /* * Architected system registers. * Important: Must be sorted ascending by Op0, Op1, CRn, CRm, Op2 @@ -2513,7 +2523,7 @@ static const struct sys_reg_desc sys_reg_descs[] = { EL2_REG(VMPIDR_EL2, access_rw, reset_unknown, 0), EL2_REG(SCTLR_EL2, access_rw, reset_val, SCTLR_EL2_RES1), EL2_REG(ACTLR_EL2, access_rw, reset_val, 0), - EL2_REG(HCR_EL2, access_rw, reset_val, 0), + EL2_REG(HCR_EL2, access_rw, reset_hcr, 0), EL2_REG(MDCR_EL2, access_rw, reset_val, 0), EL2_REG(CPTR_EL2, access_rw, reset_val, CPTR_NVHE_EL2_RES1), EL2_REG(HSTR_EL2, access_rw, reset_val, 0),