From patchwork Fri Aug 2 09:34:57 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yicong Yang X-Patchwork-Id: 13751362 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 EBE9FC3DA49 for ; Fri, 2 Aug 2024 09:43:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Type: Content-Transfer-Encoding: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=r0qzz2Y+wL5LPfFaF/dpcDsCAekAnKWNS8Kgo+sUcMM=; b=ppKnMS8KsZS5bGq4Ip6Z3j8Pyv 3ZOvC2nMl8DrWyf9E2hQeaDzPQSFz7CZkWm4GE2zaNKq4sRBybQZs46ML0YcyfAKoNRXiW27QYwdv 6NmpqkTexg4DHMe3bRoNS8B8++WlkiKkICTTH+ty6804YTm0MZvKDA7cVfgkb7zRdrANUL4tTzTOs rgpcS0ZV13sMdvBAABp91AZGVXdv/edW+AQIrmbi9iyVVo6DXGjvr5FVtaYtW0PpzuhYwya5dlwaZ nDCQErHJs2fRtGi3y+omUl1JR31X1YAWi7yVVY9oJCIo9j+xJNwjZ7UsQJU2jfdDnf2OJCm1dO9RB QAx3MagA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sZooG-00000008KGh-31JH; Fri, 02 Aug 2024 09:42:52 +0000 Received: from szxga04-in.huawei.com ([45.249.212.190]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sZomb-00000008Jcp-2ZGu for linux-arm-kernel@lists.infradead.org; Fri, 02 Aug 2024 09:41:12 +0000 Received: from mail.maildlp.com (unknown [172.19.88.234]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4Wb11n2RpPz20l21; Fri, 2 Aug 2024 17:36:45 +0800 (CST) Received: from kwepemd200014.china.huawei.com (unknown [7.221.188.8]) by mail.maildlp.com (Postfix) with ESMTPS id 0C1DA140429; Fri, 2 Aug 2024 17:41:06 +0800 (CST) Received: from localhost.localdomain (10.50.165.33) by kwepemd200014.china.huawei.com (7.221.188.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.34; Fri, 2 Aug 2024 17:41:05 +0800 From: Yicong Yang To: , , , , CC: , , , , , , , , , Subject: [PATCH 1/2] arm64: Add support for FEAT_HAFT Date: Fri, 2 Aug 2024 17:34:57 +0800 Message-ID: <20240802093458.32683-2-yangyicong@huawei.com> X-Mailer: git-send-email 2.31.0 In-Reply-To: <20240802093458.32683-1-yangyicong@huawei.com> References: <20240802093458.32683-1-yangyicong@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To kwepemd200014.china.huawei.com (7.221.188.8) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240802_024110_002963_7EBEC3D1 X-CRM114-Status: GOOD ( 17.78 ) 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 From: Yicong Yang Armv8.9/v9.4 introduces the feature Hardware managed Access Flag for Table descriptors (FEAT_HAFT). The feature is indicated by ID_AA64MMFR1_EL1.HAFDBS == 0b0011 and can be enabled by TCR2_EL1.HAFT so it has a dependency on FEAT_TCR2. This patch adds the Kconfig for FEAT_HAFT and support detecting and enabling the feature. Signed-off-by: Yicong Yang --- arch/arm64/Kconfig | 20 ++++++++++++++ arch/arm64/include/asm/pgtable-hwdef.h | 5 ++++ arch/arm64/kernel/cpufeature.c | 38 ++++++++++++++++++++++++++ arch/arm64/tools/cpucaps | 1 + arch/arm64/tools/sysreg | 1 + 5 files changed, 65 insertions(+) diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index b3fc891f1544..f263ae4139a5 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -2127,6 +2127,26 @@ config ARM64_EPAN if the cpu does not implement the feature. endmenu # "ARMv8.7 architectural features" +menu "ARMv8.9 architectural features" + +config ARM64_HAFT + bool "Support for Hardware managed Access Flag for Table Descriptor" + depends on ARM64_HW_AFDBM + default y + help + The ARMv8.9/ARMv9.5 introduces the feature Hardware managed Access + Flag for Table descriptors. When enabled in TCR_EL1 (HAFT bit) on + capable processors, an architectural executed memory access will + update the Access Flag in each Table descriptor which is accessed + during the translation table walk and for which the Access Flag is + 0. The Access Flag of the Table descriptor use the same bit of + PTE_AF. + + The feature will only be enabled on supported CPUs. If unsure, + say Y. + +endmenu # "ARMv8.9 architectural features" + config ARM64_SVE bool "ARM Scalable Vector Extension support" default y diff --git a/arch/arm64/include/asm/pgtable-hwdef.h b/arch/arm64/include/asm/pgtable-hwdef.h index 1f60aa1bc750..47bd29874e62 100644 --- a/arch/arm64/include/asm/pgtable-hwdef.h +++ b/arch/arm64/include/asm/pgtable-hwdef.h @@ -308,6 +308,11 @@ #define TCR_TCMA1 (UL(1) << 58) #define TCR_DS (UL(1) << 59) +/* + * TCR2 Flags + */ +#define TCR2_HAFT (UL(1) << 11) + /* * TTBR. */ diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c index 646ecd3069fd..99402fd00f16 100644 --- a/arch/arm64/kernel/cpufeature.c +++ b/arch/arm64/kernel/cpufeature.c @@ -2044,6 +2044,29 @@ static bool has_hw_dbm(const struct arm64_cpu_capabilities *cap, #endif +#if CONFIG_ARM64_HAFT + +static void cpu_enable_haft(struct arm64_cpu_capabilities const *cap) +{ + u64 reg = read_sysreg_s(SYS_TCR2_EL1); + + reg |= TCR2_HAFT; + write_sysreg_s(reg, SYS_TCR2_EL1); + isb(); + local_flush_tlb_all(); +} + +static bool has_haft(const struct arm64_cpu_capabilities *cap, int scope) +{ + /* FEAT_HAFT relies on FEAT_TCR2 */ + if (!this_cpu_has_cap(ARM64_HAS_TCR2)) + return false; + + return has_cpuid_feature(cap, scope); +} + +#endif + #ifdef CONFIG_ARM64_AMU_EXTN /* @@ -2580,6 +2603,21 @@ static const struct arm64_cpu_capabilities arm64_features[] = { .cpus = &dbm_cpus, ARM64_CPUID_FIELDS(ID_AA64MMFR1_EL1, HAFDBS, DBM) }, +#endif +#ifdef CONFIG_ARM64_HAFT + { + .desc = "Hardware managed Access Flag for Table Descriptor", + /* + * Per Spec, software management of Access Flag for Table + * descriptor is not supported, so make this feature system + * wide. + */ + .type = ARM64_CPUCAP_BOOT_CPU_FEATURE, + .capability = ARM64_HAFT, + .matches = has_haft, + .cpu_enable = cpu_enable_haft, + ARM64_CPUID_FIELDS(ID_AA64MMFR1_EL1, HAFDBS, HAFT) + }, #endif { .desc = "CRC32 instructions", diff --git a/arch/arm64/tools/cpucaps b/arch/arm64/tools/cpucaps index ac3429d892b9..0b7a3a237e5d 100644 --- a/arch/arm64/tools/cpucaps +++ b/arch/arm64/tools/cpucaps @@ -55,6 +55,7 @@ HAS_TLB_RANGE HAS_VA52 HAS_VIRT_HOST_EXTN HAS_WFXT +HAFT HW_DBM KVM_HVHE KVM_PROTECTED_MODE diff --git a/arch/arm64/tools/sysreg b/arch/arm64/tools/sysreg index 7ceaa1e0b4bc..9b3d15ea8a63 100644 --- a/arch/arm64/tools/sysreg +++ b/arch/arm64/tools/sysreg @@ -1688,6 +1688,7 @@ UnsignedEnum 3:0 HAFDBS 0b0000 NI 0b0001 AF 0b0010 DBM + 0b0011 HAFT EndEnum EndSysreg