From patchwork Tue Sep 12 14:16:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 13381862 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 8182FCA0EEB for ; Tue, 12 Sep 2023 15:30: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:Cc:To:From:Subject:Message-ID: References:Mime-Version:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=1V/k7qC5Ed7nT7hLlec71I66DLEOqoI3vkmo5HDnOQo=; b=1NAMn7AUMTaf1NgW4qYLdrYBTd qNZLQk0F/M04kVAoNJehnSU9tIJwNtS603nhf2k37jjmXWEPf8u0tBm9V2muAmMVp7ahYofsPF/Rd BeS9ZMd6eSwV9+I5RbDiYxDwb9TS1Hr7SfvBE0Q5IHPCZNs25JQgzWz4wBjGF6mqfSiG+9pD3Qbk2 fhMJcMqJfvYdns5JYfffXzzEVTD8Go8ioiFhxXkY/xFX4jTLB1CSHcs+nM27BjOC3LegQCnm5wVK7 pOJNO1fNpVtVWRwvXoEdJwFxRHBFxnbcr/JU9wDqrOmhoRVYM+1Ogjn2JFBJR5AiKmVEJMQjVJYVl cHWkT/SA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qg5LQ-003igl-0q; Tue, 12 Sep 2023 15:30:28 +0000 Received: from mail-wr1-f73.google.com ([209.85.221.73]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qg4Dk-003Wed-2f for linux-arm-kernel@lists.infradead.org; Tue, 12 Sep 2023 14:18:44 +0000 Received: by mail-wr1-f73.google.com with SMTP id ffacd0b85a97d-313c930ee0eso3512506f8f.0 for ; Tue, 12 Sep 2023 07:18:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1694528306; x=1695133106; darn=lists.infradead.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=LspRidsa25foHXSIlXGmghHoyWSkGb/bgHPv8hJ2YJk=; b=eDOCHyciiuJ/hy9TArOjFPx6R4S/hPhdIkxlc7KXSRMu6uWAk4qAzQABwGQ/44iHQN 4hh56uiiOyu6r2TaNdAAPVkHZb73mTx7ZV7/+26v63sjXyTLwkInrdauoRgwrRjAoLOD Bsan1ROADWwgfJacpqKhk4j89US5avhPxHKOa+4EULckIGYig8ju2lGGP3uUxlSBfWCP VrPiRMP+ZGEEj++DAz8qM0iEuUT+mc7bVeJ/XttjnHloHmiCtGoiuwrjC6r2VebqYBEa bVUmYyk6bF7K5p5R7eQRVwPnWwBByh7oLieGB0lcPQKD0D5ByfCzxL9JinSB2YVUbIYb dADA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694528306; x=1695133106; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=LspRidsa25foHXSIlXGmghHoyWSkGb/bgHPv8hJ2YJk=; b=IhpVEstgSaeFjMRLTWLdbNOQC1Xi9odEGNsPVm9DgQTikZhKJEom/M0P2EamVBK8/9 Y2y/Fb+FdxDwCjqPRn+YgiPNR5SMA1sM8hP+M+kY7Wca7Gc0/t+65HsInspDd4xFgWpT 33badOX9Tn0t17izF1rHPBWgP6lIaO0pp/bChMeOPwi4JGmHZ4JRc9ocsr9ywQo8xNrP 3DbxREdWhes91voKty5YVc9wjnm339+TnTd547ZiSc9uLHyVOcxWXrB2a1uUcBm0LVRN XFtgaDYGWve0168d9rm88meOz+6U+6O74Mf3lPrJQ+Gf8CdeeKrDBjVUp6EFrQLgv806 DJuQ== X-Gm-Message-State: AOJu0Yx4hp26ghTRvUxotfMnjpf/AwDki5KFMtaPKAA/MDo5CeoHo009 JBDgKyUaHCBjxdVUSjmCwnNtbG6Fy3qf6N6/thy1XhyYWdL8iRCyrApQI67CK4z0s/diSKXI0uE VjUD9g9Xjoo21+20nhSiyHnpYbb3A7zR/vx3TxBtk427Yja1i5KGfeggEncdXJMoFCELFDvoUEH M= X-Google-Smtp-Source: AGHT+IFPYnkhfDmC2DkIe65/AGU9Vi6pxuvU8YSJRbylF172J4nPJqV2+FI32L3kMcYPhe3rUqcuyN2l X-Received: from palermo.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:118a]) (user=ardb job=sendgmr) by 2002:a05:6000:156b:b0:31f:a664:f871 with SMTP id 11-20020a056000156b00b0031fa664f871mr85968wrz.9.1694528306217; Tue, 12 Sep 2023 07:18:26 -0700 (PDT) Date: Tue, 12 Sep 2023 14:16:19 +0000 In-Reply-To: <20230912141549.278777-63-ardb@google.com> Mime-Version: 1.0 References: <20230912141549.278777-63-ardb@google.com> X-Developer-Key: i=ardb@kernel.org; a=openpgp; fpr=F43D03328115A198C90016883D200E9CA6329909 X-Developer-Signature: v=1; a=openpgp-sha256; l=1935; i=ardb@kernel.org; h=from:subject; bh=rdu64O8XyYBq4cS+NuOmtgmdfARx1xl3BjG7WKGVVsI=; b=owGbwMvMwCFmkMcZplerG8N4Wi2JIZWhaMvEWYqqtvKt7urdLxgWKPOUnHpT8vj70S/HuCOq/ 3g0KrztKGVhEONgkBVTZBGY/ffdztMTpWqdZ8nCzGFlAhnCwMUpABNZIMnIcE1F88WPdwYNDyzm MAjaG/lksxg0J1k+Xdjzla/xm8ydWQz/Ayaqc3x58VqiKF/uVmz2qr5vemWZnoeK9i7zva7m48j DBwA= X-Mailer: git-send-email 2.42.0.283.g2d96d420d3-goog Message-ID: <20230912141549.278777-92-ardb@google.com> Subject: [PATCH v4 29/61] arm64: Add helpers to probe local CPU for PAC and BTI support From: Ard Biesheuvel To: linux-arm-kernel@lists.infradead.org Cc: Ard Biesheuvel , Catalin Marinas , Will Deacon , Marc Zyngier , Mark Rutland , Ryan Roberts , Anshuman Khandual , Kees Cook , Joey Gouly X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230912_071828_903865_3B00098D X-CRM114-Status: GOOD ( 13.38 ) 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: Ard Biesheuvel Add some helpers that will be used by the early kernel mapping code to check feature support on the local CPU. This permits the early kernel mapping to be created with the right attributes, removing the need for tearing it down and recreating it. Signed-off-by: Ard Biesheuvel --- arch/arm64/include/asm/cpufeature.h | 44 ++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/arch/arm64/include/asm/cpufeature.h b/arch/arm64/include/asm/cpufeature.h index 54f3dbeb9e80..128861e5d32d 100644 --- a/arch/arm64/include/asm/cpufeature.h +++ b/arch/arm64/include/asm/cpufeature.h @@ -933,6 +933,50 @@ static inline bool kaslr_disabled_cmdline(void) u32 get_kvm_ipa_limit(void); void dump_cpu_features(void); +static inline bool cpu_has_bti(void) +{ + u64 pfr1; + + if (!IS_ENABLED(CONFIG_ARM64_BTI)) + return false; + + pfr1 = read_cpuid(ID_AA64PFR1_EL1); + pfr1 &= ~id_aa64pfr1_override.mask; + pfr1 |= id_aa64pfr1_override.val; + + return cpuid_feature_extract_unsigned_field(pfr1, + ID_AA64PFR1_EL1_BT_SHIFT); +} + +static inline bool cpu_has_pac(void) +{ + u64 isar1, isar2; + u8 feat; + + if (!IS_ENABLED(CONFIG_ARM64_PTR_AUTH)) + return false; + + isar1 = read_cpuid(ID_AA64ISAR1_EL1); + isar1 &= ~id_aa64isar1_override.mask; + isar1 |= id_aa64isar1_override.val; + feat = cpuid_feature_extract_unsigned_field(isar1, + ID_AA64ISAR1_EL1_APA_SHIFT); + if (feat) + return true; + + feat = cpuid_feature_extract_unsigned_field(isar1, + ID_AA64ISAR1_EL1_API_SHIFT); + if (feat) + return true; + + isar2 = read_sysreg_s(SYS_ID_AA64ISAR2_EL1); + isar2 &= ~id_aa64isar2_override.mask; + isar2 |= id_aa64isar2_override.val; + feat = cpuid_feature_extract_unsigned_field(isar2, + ID_AA64ISAR2_EL1_APA3_SHIFT); + return feat; +} + #endif /* __ASSEMBLY__ */ #endif