From patchwork Fri Jan 27 11:27:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 49239 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp782023wrn; Fri, 27 Jan 2023 03:30:54 -0800 (PST) X-Google-Smtp-Source: AMrXdXszbhGMGy6IH6VsNLEaHY6muWd0puXiPLXW4yiYjP2yu2kSRDwPNLafxJle6xD5nC2e5HKq X-Received: by 2002:a05:6a00:4289:b0:583:319a:4425 with SMTP id bx9-20020a056a00428900b00583319a4425mr39269048pfb.29.1674819054079; Fri, 27 Jan 2023 03:30:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674819054; cv=none; d=google.com; s=arc-20160816; b=a9M4mzLqlKkJn6t4EhHuYAK4JHLrEfpdFWw9hTXfC4OBWW9Xi60SsGxL81b3umUvq9 7Je6PAKZKNNTcxtq4JXqLae6g8+sFjfIPyUxZp5TYlsqbwZ5f8u4/V6gDEXQRrAHHYAi Tr28KKswHsv1DlQKW4BZt82HD7tk4fwZDGBMk5vTj7/tFqwqhVjwdteqkuq1NlPWf26X 2xUf1lKwzvGQCFvjM1fHwZnkMS/ez3hKORO1AEwGtVemGRd4Pd3SEW4SwRVwhGUwnCr3 kEMs3/Rg9TovNWiA8adyGNeoyJofXEo1qCrxXxXirJ++jmDcqHA8gb0Vp4P4+mhP5WqL herg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=ukGosgdc2kZoVdM1KEaQqzHPk2UUJlOZh5p35vcxiX4=; b=tHGFnypJB2gIHp4eCq850ozIv1MOjqvbxs2YuUjAXzI1NfqEC6Xux76DKFxrYHgngu T5o51d9GVcX8k04MHKq+c5fHAesd4G5ufAxxZM8TDzrTn6Rkex2VJX9dYo/0RnRX6coP 5B6vBu+L0IszcMzE7fBV5EGhkj8F/xGvbuQZqjpd+iyOiLwzNWZs0I8yIgP3qoX+xaw1 tn+UjrupUxGjFSF9qc27+A8YfDoFlKx+QSAojO8C89gf9KDE3PE49U52P2DkIv4fR9wo gBkN2cAdoxspbGS+7TWa5wlpaHBlE9uZjyYjZD8cgQxyFNU7An18XKVlE2lNfh+YCjei Fi2Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id 4-20020a621504000000b0053e8d0c9909si4167956pfv.221.2023.01.27.03.30.42; Fri, 27 Jan 2023 03:30:54 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231734AbjA0LaF (ORCPT + 99 others); Fri, 27 Jan 2023 06:30:05 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41688 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233188AbjA0L3Z (ORCPT ); Fri, 27 Jan 2023 06:29:25 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 8924D234E5 for ; Fri, 27 Jan 2023 03:28:37 -0800 (PST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 01B031576; Fri, 27 Jan 2023 03:29:04 -0800 (PST) Received: from e122027.cambridge.arm.com (e122027.cambridge.arm.com [10.1.35.16]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id F1EC93F64C; Fri, 27 Jan 2023 03:28:19 -0800 (PST) From: Steven Price To: kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org Cc: Steven Price , Catalin Marinas , Ard Biesheuvel , Marc Zyngier , Will Deacon , Suzuki K Poulose , James Morse , Oliver Upton , Zenghui Yu , linux-kernel@vger.kernel.org, Joey Gouly , Alexandru Elisei , Christoffer Dall , Fuad Tabba , linux-coco@lists.linux.dev Subject: [RFC PATCH 04/14] arm64: realm: Query IPA size from the RMM Date: Fri, 27 Jan 2023 11:27:48 +0000 Message-Id: <20230127112758.37891-5-steven.price@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230127112758.37891-1-steven.price@arm.com> References: <20230127112248.136810-1-suzuki.poulose@arm.com> <20230127112758.37891-1-steven.price@arm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1756175064353571573?= X-GMAIL-MSGID: =?utf-8?q?1756175064353571573?= The top bit of the configured IPA size is used as an attribute to control whether the address is protected or shared. Query the configuration from the RMM to assertain which bit this is. Co-developed-by: Suzuki K Poulose Signed-off-by: Suzuki K Poulose Signed-off-by: Steven Price --- arch/arm64/include/asm/pgtable-prot.h | 2 ++ arch/arm64/include/asm/rsi_cmds.h | 8 ++++++++ arch/arm64/kernel/rsi.c | 8 ++++++++ 3 files changed, 18 insertions(+) diff --git a/arch/arm64/include/asm/pgtable-prot.h b/arch/arm64/include/asm/pgtable-prot.h index 9b165117a454..3f24080d6cc9 100644 --- a/arch/arm64/include/asm/pgtable-prot.h +++ b/arch/arm64/include/asm/pgtable-prot.h @@ -33,7 +33,9 @@ #include extern bool arm64_use_ng_mappings; +extern unsigned long prot_ns_shared; +#define PROT_NS_SHARED ((prot_ns_shared)) #define _PROT_DEFAULT (PTE_TYPE_PAGE | PTE_AF | PTE_SHARED) #define _PROT_SECT_DEFAULT (PMD_TYPE_SECT | PMD_SECT_AF | PMD_SECT_S) diff --git a/arch/arm64/include/asm/rsi_cmds.h b/arch/arm64/include/asm/rsi_cmds.h index ee0df00efd87..e13f702de6c2 100644 --- a/arch/arm64/include/asm/rsi_cmds.h +++ b/arch/arm64/include/asm/rsi_cmds.h @@ -46,6 +46,14 @@ static inline void invoke_rsi_fn_smc_with_res(unsigned long function_id, arm_smccc_smc(function_id, arg0, arg1, arg2, arg3, 0, 0, 0, res); } +static inline unsigned long rsi_get_realm_config(struct realm_config *cfg) +{ + struct arm_smccc_res res; + + invoke_rsi_fn_smc_with_res(SMC_RSI_REALM_CONFIG, virt_to_phys(cfg), 0, 0, 0, &res); + return res.a0; +} + static inline unsigned long rsi_set_addr_range_state(phys_addr_t start, phys_addr_t end, enum ripas state, diff --git a/arch/arm64/kernel/rsi.c b/arch/arm64/kernel/rsi.c index b354ac661c9d..9c63ee1c6979 100644 --- a/arch/arm64/kernel/rsi.c +++ b/arch/arm64/kernel/rsi.c @@ -7,6 +7,11 @@ #include #include +struct realm_config __attribute((aligned(PAGE_SIZE))) config; + +unsigned long prot_ns_shared; +EXPORT_SYMBOL(prot_ns_shared); + DEFINE_STATIC_KEY_FALSE_RO(rsi_present); static bool rsi_version_matches(void) @@ -45,6 +50,9 @@ void __init arm64_rsi_init(void) { if (!rsi_version_matches()) return; + if (rsi_get_realm_config(&config)) + return; + prot_ns_shared = BIT(config.ipa_bits - 1); static_branch_enable(&rsi_present); }