From patchwork Fri Jan 27 11:27:45 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 49236 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp781704wrn; Fri, 27 Jan 2023 03:30:21 -0800 (PST) X-Google-Smtp-Source: AK7set/SI/JkqGWIzv772c5a1pTsbacCBguWjT575WvTui34D4UQ7oXrs1g8+OzTtvouI4kjk856 X-Received: by 2002:a05:6a00:3490:b0:590:6d2f:d23a with SMTP id cp16-20020a056a00349000b005906d2fd23amr5458482pfb.10.1674819021378; Fri, 27 Jan 2023 03:30:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674819021; cv=none; d=google.com; s=arc-20160816; b=BdT0A+JH+bDE4NJwpDbyTjoKc6xPjrqze2/t3n/3O0k/kVBl990HjE/joT3jjcYA3m 2nGmsZT+CeEI0PlBl2iZmCqaluKyhYsAHabsiWqC6l/DTNGKbk1oFcYym7CLT4S27Yah JHrsd7ekvoTQ72u5dK+Kn71lyRMgM6EQuFwUOVvNlnGoMQeG0pnrF9qlXQQ+LSegfZsw DJCWMtaDECgaIx0bQJJ3VkHVw6H9x73Fdgg+oN0ACADmtRDWVumpDXc6HDZ7n0M1h7FC t5lTUQl2Tmek90xwNM5IqqXCJ7JjkkSUP7bwCy04HLT+N8Q4EtdtIj1vLtP23WZB9Vkc p+Tg== 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=m7gbkmuRZBTf1O9OWbfGxp3mxc59jZIfjFDUW89D6IY=; b=EoHJ/11FJYWA/DfiqCexK98nNQGvo+PxsPPJrbJewWCGa4Io4SxBU6+AjWAgHhSQOt Vi3mkGl0nkPVWYG7fwA89Ub8IhcBfKIQ6LYI7Ki99mFMOL7z8xxM+VlUS/FYqbFUvs/2 nHcJR9ZBSdDd+DASfMN+vp/MlFXY8wi4JmY7CKy35NvLZhYZuYQJHcNRzN+89rfyf28L rhT3OZJyva0Ih3fLpmjzZqTKBdX61UaN29ATPEWE0MAbaRx/gLJpQ3MiwdXINTa+O7hu YlAgNEjf+EyGE53WFO3fXn4rFGaxRpyBvgy8lTdH4i6xxp6+OPY4+JEJQtooyCh9W5is LEgA== 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 i11-20020aa78b4b000000b00582b674de4dsi3918103pfd.337.2023.01.27.03.30.07; Fri, 27 Jan 2023 03:30:21 -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 S233375AbjA0L3g (ORCPT + 99 others); Fri, 27 Jan 2023 06:29:36 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41864 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233356AbjA0L3R (ORCPT ); Fri, 27 Jan 2023 06:29:17 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 7F7A472651 for ; Fri, 27 Jan 2023 03:28:27 -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 DFBAF1570; Fri, 27 Jan 2023 03:28:55 -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 9AA8A3F64C; Fri, 27 Jan 2023 03:28:11 -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 01/14] arm64: remove redundant 'extern' Date: Fri, 27 Jan 2023 11:27:45 +0000 Message-Id: <20230127112758.37891-2-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?1756175030100223388?= X-GMAIL-MSGID: =?utf-8?q?1756175030100223388?= It isn't necessary to mark function definitions extern and goes against the kernel coding style. Remove the redundant extern keyword. Signed-off-by: Steven Price --- arch/arm64/include/asm/fixmap.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm64/include/asm/fixmap.h b/arch/arm64/include/asm/fixmap.h index 71ed5fdf718b..09ba9fe3b02c 100644 --- a/arch/arm64/include/asm/fixmap.h +++ b/arch/arm64/include/asm/fixmap.h @@ -107,7 +107,7 @@ void __init early_fixmap_init(void); #define __late_set_fixmap __set_fixmap #define __late_clear_fixmap(idx) __set_fixmap((idx), 0, FIXMAP_PAGE_CLEAR) -extern void __set_fixmap(enum fixed_addresses idx, phys_addr_t phys, pgprot_t prot); +void __set_fixmap(enum fixed_addresses idx, phys_addr_t phys, pgprot_t prot); #include From patchwork Fri Jan 27 11:27:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 49237 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp781832wrn; Fri, 27 Jan 2023 03:30:33 -0800 (PST) X-Google-Smtp-Source: AK7set/iKuIixIHYffAYbZEqII5Uh9HR9vbRLKiBCOtPpDME96uCFIFrN7qM9qKTR0v+1yUZlGhi X-Received: by 2002:aa7:9acc:0:b0:58d:ac19:8950 with SMTP id x12-20020aa79acc000000b0058dac198950mr5257540pfp.33.1674819033624; Fri, 27 Jan 2023 03:30:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674819033; cv=none; d=google.com; s=arc-20160816; b=UE77yfvjznqK5H8B42lCVKtVM5a8AHpg+bHxq1ng+SZvFnTlRGkfKWmTrVQ5MG1/Zw KRV/qUaWymqymOzLz24oiuLGEx7kFLAK/6tIhjKXAjTTnIa+Kk7iuAZ8ab+7j1qbFG/S 1VWfyzR/lIlobYlg20DQzV3Fp5Ghj/0mDwSiynZjCIk39tGEURkXd7PSOH+xYUJ2NYoq sdtnHOKF/Tz71Fvu8Q5i65ehBIsqftnmnZSUPDPyE7qNjnMkAtCfULUBE+UyckpkgAx3 0KgcYm8BBmPqGbYPLqIIzWOnQDjJzbHF7hooSlztsQmxFjL3UltNujMG/l7bb2xQFbon pqYQ== 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=pxC0SbOfriucSX3VgPek0lA2mT4kQhfDy3aHE7zRD40=; b=E9ElTYufY+J8ljrUK2mL725yoIt9zNFhByIGmkXnWzOAHShpoW7XWWTkuEV+aeWLDh y4WxdQk8pai4CPLlfKzbJHtwZsm3SbhRtc+RmITZcnl8YYGSDhjai/uziIY6A/fO7Ehb BNQtKajK5CtQIQg72wn2gCwGFOPEn8JtZR36elKfVxdzDKQegqJc3kKd0CYvUZisaOPY +vlqHlLeV9wjHlSDjyaOh1kmHaCr5C6ahpdj4hqdLEYIWhPgk7WbEV6XCFU5ulz6LyOx 9KgJzRrh7LgrTWfjz8N13XknNFaIt4DP9Bep/VR15oUGfsXp4PeLDuXHieK8n6RFHadi xLtg== 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 139-20020a621591000000b005926239f67bsi1740569pfv.238.2023.01.27.03.30.19; Fri, 27 Jan 2023 03:30:33 -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 S233392AbjA0L3p (ORCPT + 99 others); Fri, 27 Jan 2023 06:29:45 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41948 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233169AbjA0L3X (ORCPT ); Fri, 27 Jan 2023 06:29:23 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 84D4772640 for ; Fri, 27 Jan 2023 03:28:31 -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 DF7481595; Fri, 27 Jan 2023 03:28:58 -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 4DEBC3F64C; Fri, 27 Jan 2023 03:28:14 -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 02/14] arm64: rsi: Add RSI definitions Date: Fri, 27 Jan 2023 11:27:46 +0000 Message-Id: <20230127112758.37891-3-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?1756175043113598591?= X-GMAIL-MSGID: =?utf-8?q?1756175043113598591?= From: Suzuki K Poulose The RMM (Realm Management Monitor) provides functionality that can be accessed by a realm guest through SMC (Realm Services Interface) calls. The SMC definitions are based on DEN0137[1] version A-bet0. [1] https://developer.arm.com/documentation/den0137/latest Signed-off-by: Suzuki K Poulose Signed-off-by: Steven Price --- arch/arm64/include/asm/rsi_cmds.h | 57 +++++++++++++ arch/arm64/include/asm/rsi_smc.h | 130 ++++++++++++++++++++++++++++++ 2 files changed, 187 insertions(+) create mode 100644 arch/arm64/include/asm/rsi_cmds.h create mode 100644 arch/arm64/include/asm/rsi_smc.h diff --git a/arch/arm64/include/asm/rsi_cmds.h b/arch/arm64/include/asm/rsi_cmds.h new file mode 100644 index 000000000000..a0b3c1bd786a --- /dev/null +++ b/arch/arm64/include/asm/rsi_cmds.h @@ -0,0 +1,57 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (C) 2023 ARM Ltd. + */ + +#ifndef __ASM_RSI_CMDS_H +#define __ASM_RSI_CMDS_H + +#include + +#include + +enum ripas { + RSI_RIPAS_EMPTY, + RSI_RIPAS_RAM, +}; + +static inline unsigned long rsi_get_version(void) +{ + struct arm_smccc_res res; + + arm_smccc_smc(SMC_RSI_ABI_VERSION, 0, 0, 0, 0, 0, 0, 0, &res); + + return res.a0; +} + +static inline unsigned long invoke_rsi_fn_smc(unsigned long function_id, + unsigned long arg0, + unsigned long arg1, + unsigned long arg2, + unsigned long arg3) +{ + struct arm_smccc_res res; + + arm_smccc_smc(function_id, arg0, arg1, arg2, arg3, 0, 0, 0, &res); + return res.a0; +} + +static inline void invoke_rsi_fn_smc_with_res(unsigned long function_id, + unsigned long arg0, + unsigned long arg1, + unsigned long arg2, + unsigned long arg3, + struct arm_smccc_res *res) +{ + arm_smccc_smc(function_id, arg0, arg1, arg2, arg3, 0, 0, 0, res); +} + +static inline unsigned long rsi_set_addr_range_state(phys_addr_t start, + phys_addr_t end, + enum ripas state) +{ + return invoke_rsi_fn_smc(SMC_RSI_IPA_STATE_SET, + start, (end - start), state, 0); +} + +#endif diff --git a/arch/arm64/include/asm/rsi_smc.h b/arch/arm64/include/asm/rsi_smc.h new file mode 100644 index 000000000000..bc0cdd83f164 --- /dev/null +++ b/arch/arm64/include/asm/rsi_smc.h @@ -0,0 +1,130 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (C) 2023 ARM Ltd. + */ + +#ifndef __SMC_RSI_H_ +#define __SMC_RSI_H_ + +/* + * This file describes the Realm Services Interface (RSI) Application Binary + * Interface (ABI) for SMC calls made from within the Realm to the RMM and + * serviced by the RMM. + */ + +#define SMC_RSI_CALL_BASE 0xC4000000 + +/* + * The major version number of the RSI implementation. Increase this whenever + * the binary format or semantics of the SMC calls change. + */ +#define RSI_ABI_VERSION_MAJOR 1 + +/* + * The minor version number of the RSI implementation. Increase this when + * a bug is fixed, or a feature is added without breaking binary compatibility. + */ +#define RSI_ABI_VERSION_MINOR 0 + +#define RSI_ABI_VERSION ((RSI_ABI_VERSION_MAJOR << 16) | \ + RSI_ABI_VERSION_MINOR) + +#define RSI_ABI_VERSION_GET_MAJOR(_version) ((_version) >> 16) +#define RSI_ABI_VERSION_GET_MINOR(_version) ((_version) & 0xFFFF) + +#define RSI_SUCCESS 0 +#define RSI_ERROR_INPUT 1 +#define RSI_ERROR_STATE 2 +#define RSI_INCOMPLETE 3 + +#define SMC_RSI_FID(_x) (SMC_RSI_CALL_BASE + (_x)) + +#define SMC_RSI_ABI_VERSION SMC_RSI_FID(0x190) + +/* + * arg1 == The IPA of token buffer + * arg2 == Challenge value, bytes: 0 - 7 + * arg3 == Challenge value, bytes: 7 - 15 + * arg4 == Challenge value, bytes: 16 - 23 + * arg5 == Challenge value, bytes: 24 - 31 + * arg6 == Challenge value, bytes: 32 - 39 + * arg7 == Challenge value, bytes: 40 - 47 + * arg8 == Challenge value, bytes: 48 - 55 + * arg9 == Challenge value, bytes: 56 - 63 + * ret0 == Status / error + */ +#define SMC_RSI_ATTESTATION_TOKEN_INIT SMC_RSI_FID(0x194) + +/* + * arg1 == The IPA of token buffer + * ret0 == Status / error + * ret1 == Size of completed token in bytes + */ +#define SMC_RSI_ATTESTATION_TOKEN_CONTINUE SMC_RSI_FID(0x195) + +/* + * arg1 == Index, which measurements slot to extend + * arg2 == Size of realm measurement in bytes, max 64 bytes + * arg3 == Measurement value, bytes: 0 - 7 + * arg4 == Measurement value, bytes: 7 - 15 + * arg5 == Measurement value, bytes: 16 - 23 + * arg6 == Measurement value, bytes: 24 - 31 + * arg7 == Measurement value, bytes: 32 - 39 + * arg8 == Measurement value, bytes: 40 - 47 + * arg9 == Measurement value, bytes: 48 - 55 + * arg10 == Measurement value, bytes: 56 - 63 + * ret0 == Status / error + */ +#define SMC_RSI_MEASUREMENT_EXTEND SMC_RSI_FID(0x193) + +/* + * arg1 == Index, which measurements slot to read + * ret0 == Status / error + * ret1 == Measurement value, bytes: 0 - 7 + * ret2 == Measurement value, bytes: 7 - 15 + * ret3 == Measurement value, bytes: 16 - 23 + * ret4 == Measurement value, bytes: 24 - 31 + * ret5 == Measurement value, bytes: 32 - 39 + * ret6 == Measurement value, bytes: 40 - 47 + * ret7 == Measurement value, bytes: 48 - 55 + * ret8 == Measurement value, bytes: 56 - 63 + */ +#define SMC_RSI_MEASUREMENT_READ SMC_RSI_FID(0x192) + +#ifndef __ASSEMBLY__ + +struct realm_config { + unsigned long ipa_bits; /* Width of IPA in bits */ +}; + +#endif /* __ASSEMBLY__ */ + +/* + * arg1 == struct realm_config addr + * ret0 == Status / error + */ +#define SMC_RSI_REALM_CONFIG SMC_RSI_FID(0x196) + +/* + * arg1 == IPA address of target region + * arg2 == size of target region in bytes + * arg3 == RIPAS value + * ret0 == Status / error + * ret1 == Top of modified IPA range + */ +#define SMC_RSI_IPA_STATE_SET SMC_RSI_FID(0x197) + +/* + * arg1 == IPA of target page + * ret0 == Status / error + * ret1 == RIPAS value + */ +#define SMC_RSI_IPA_STATE_GET SMC_RSI_FID(0x198) + +/* + * arg1 == IPA of host call structure + * ret0 == Status / error + */ +#define SMC_RSI_HOST_CALL SMC_RSI_FID(0x199) + +#endif /* __SMC_RSI_H_ */ From patchwork Fri Jan 27 11:27:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 49238 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp781889wrn; Fri, 27 Jan 2023 03:30:39 -0800 (PST) X-Google-Smtp-Source: AMrXdXswoaRRNQ7JbZkIBZmgOqKET2BPueiZ2zULEv+Q1wEFObr2K3jLmODgw+JRT1NI0VAa0JDZ X-Received: by 2002:a17:903:32c8:b0:194:de51:9af with SMTP id i8-20020a17090332c800b00194de5109afmr33325181plr.22.1674819039174; Fri, 27 Jan 2023 03:30:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674819039; cv=none; d=google.com; s=arc-20160816; b=BOayH8Lai5w26TsBShwuw3um9hoG4nZppHfe4UarPRudFA/fWxT5Ta9mNwZ+nejylo YDbx5Mx+fn4TFJI6L6b+MDZbpQq3J7YMfw/BR2jXNH116zR6CC6vOsRxF+l9f53EQNRF CwAAvsonKpRstQhHOoExPq2M19d3qZcKXBG3QK4B3d6PigTPe1nT/2r9nksl8mrD8ESL q/VBmOduycXTIOYRm6gKrsE7X6t5sTjZN3CQzKAgERtiu+RyFzwP9c4fSsUbm35xysI2 aBUrEDwYF+WQq2hv0IBees8daGMYYNmBrWfMPTAdvWrUg2luu0iPDr8SIqF9DU1S3exi 99HA== 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=IW+hf52rFPPANPB2esYSCTccq6+byl7HGEYleCJLpEQ=; b=Dp9dqBkXHU+U2IfqcK9ha7tFzkynSah0yMYzCyi+Ya9K+vPxpfEH8l435nkM8lAPsR jkv9iCEefcN004az7622t3KDuev8DC9oM8KrhCWPcEg/K9eqVNPTzDqDgyFDW031aWlR Jh19O3WtqHQzpo+qFAEGKWhp+jB+wLX5fctPlw7P8KGKyMESCdiKBG1ysMDqqtoqbazr 6l4nlm+O+LghhsXDNvAzIMivvsXjtcKLbd1VWoo8i6dPtW5v6rtLbgWui285vVsKLN9o 8wRK3aU1QmBJdtsKgqID1salWjN2BlsoLitVp7e8rml2v1/4249uHhaDFBcoAb8yR9ON IfNQ== 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 b12-20020a170902d50c00b00189655d51f5si4923864plg.260.2023.01.27.03.30.24; Fri, 27 Jan 2023 03:30:39 -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 S233426AbjA0L3t (ORCPT + 99 others); Fri, 27 Jan 2023 06:29:49 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41674 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230060AbjA0L3Z (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 929727AE6A for ; Fri, 27 Jan 2023 03:28:34 -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 8617B1596; Fri, 27 Jan 2023 03:29:01 -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 418763F64C; Fri, 27 Jan 2023 03:28:17 -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 03/14] arm64: Detect if in a realm and set RIPAS RAM Date: Fri, 27 Jan 2023 11:27:47 +0000 Message-Id: <20230127112758.37891-4-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?1756175048720772124?= X-GMAIL-MSGID: =?utf-8?q?1756175048720772124?= Detect that the VM is a realm guest by the presence of the RSI interface. If in a realm then all memory needs to be marked as RIPAS RAM initially, the loader may or may not have done this for us. To be sure iterate over all RAM and mark it as such. Any failure is fatal as that implies the RAM regions passed to Linux are incorrect - which would mean failing later when attempting to access non-existent RAM. Co-developed-by: Suzuki K Poulose Signed-off-by: Suzuki K Poulose Signed-off-by: Steven Price --- arch/arm64/include/asm/rsi.h | 46 ++++++++++++++++++++++++++++ arch/arm64/include/asm/rsi_cmds.h | 12 ++++++-- arch/arm64/kernel/Makefile | 2 +- arch/arm64/kernel/rsi.c | 50 +++++++++++++++++++++++++++++++ arch/arm64/kernel/setup.c | 3 ++ arch/arm64/mm/init.c | 2 ++ 6 files changed, 111 insertions(+), 4 deletions(-) create mode 100644 arch/arm64/include/asm/rsi.h create mode 100644 arch/arm64/kernel/rsi.c diff --git a/arch/arm64/include/asm/rsi.h b/arch/arm64/include/asm/rsi.h new file mode 100644 index 000000000000..3b56aac5dc43 --- /dev/null +++ b/arch/arm64/include/asm/rsi.h @@ -0,0 +1,46 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (C) 2023 ARM Ltd. + */ + +#ifndef __ASM_RSI_H_ +#define __ASM_RSI_H_ + +#include +#include + +extern struct static_key_false rsi_present; + +void arm64_setup_memory(void); + +void __init arm64_rsi_init(void); +static inline bool is_realm_world(void) +{ + return static_branch_unlikely(&rsi_present); +} + +static inline void set_memory_range(phys_addr_t start, phys_addr_t end, + enum ripas state) +{ + unsigned long ret; + phys_addr_t top; + + while (start != end) { + ret = rsi_set_addr_range_state(start, end, state, &top); + BUG_ON(ret); + BUG_ON(top < start); + BUG_ON(top > end); + start = top; + } +} + +static inline void set_memory_range_protected(phys_addr_t start, phys_addr_t end) +{ + set_memory_range(start, end, RSI_RIPAS_RAM); +} + +static inline void set_memory_range_shared(phys_addr_t start, phys_addr_t end) +{ + set_memory_range(start, end, RSI_RIPAS_EMPTY); +} +#endif diff --git a/arch/arm64/include/asm/rsi_cmds.h b/arch/arm64/include/asm/rsi_cmds.h index a0b3c1bd786a..ee0df00efd87 100644 --- a/arch/arm64/include/asm/rsi_cmds.h +++ b/arch/arm64/include/asm/rsi_cmds.h @@ -48,10 +48,16 @@ static inline void invoke_rsi_fn_smc_with_res(unsigned long function_id, static inline unsigned long rsi_set_addr_range_state(phys_addr_t start, phys_addr_t end, - enum ripas state) + enum ripas state, + phys_addr_t *top) { - return invoke_rsi_fn_smc(SMC_RSI_IPA_STATE_SET, - start, (end - start), state, 0); + struct arm_smccc_res res; + + invoke_rsi_fn_smc_with_res(SMC_RSI_IPA_STATE_SET, + start, (end - start), state, 0, &res); + + *top = res.a1; + return res.a0; } #endif diff --git a/arch/arm64/kernel/Makefile b/arch/arm64/kernel/Makefile index ceba6792f5b3..f301c2ad2fa7 100644 --- a/arch/arm64/kernel/Makefile +++ b/arch/arm64/kernel/Makefile @@ -34,7 +34,7 @@ obj-y := debug-monitors.o entry.o irq.o fpsimd.o \ cpufeature.o alternative.o cacheinfo.o \ smp.o smp_spin_table.o topology.o smccc-call.o \ syscall.o proton-pack.o idreg-override.o idle.o \ - patching.o + patching.o rsi.o obj-$(CONFIG_COMPAT) += sys32.o signal32.o \ sys_compat.o diff --git a/arch/arm64/kernel/rsi.c b/arch/arm64/kernel/rsi.c new file mode 100644 index 000000000000..b354ac661c9d --- /dev/null +++ b/arch/arm64/kernel/rsi.c @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (C) 2023 ARM Ltd. + */ + +#include +#include +#include + +DEFINE_STATIC_KEY_FALSE_RO(rsi_present); + +static bool rsi_version_matches(void) +{ + unsigned long ver = rsi_get_version(); + + if (ver == SMCCC_RET_NOT_SUPPORTED) + return false; + + pr_info("RME: RSI version %lu.%lu advertised\n", + RSI_ABI_VERSION_GET_MAJOR(ver), + RSI_ABI_VERSION_GET_MINOR(ver)); + + return (ver >= RSI_ABI_VERSION && + RSI_ABI_VERSION_GET_MAJOR(ver) == RSI_ABI_VERSION_MAJOR); +} + +void arm64_setup_memory(void) +{ + u64 i; + phys_addr_t start, end; + + if (!static_branch_unlikely(&rsi_present)) + return; + + /* + * Iterate over the available memory ranges + * and convert the state to protected memory. + */ + for_each_mem_range(i, &start, &end) { + set_memory_range_protected(start, end); + } +} + +void __init arm64_rsi_init(void) +{ + if (!rsi_version_matches()) + return; + + static_branch_enable(&rsi_present); +} diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c index 12cfe9d0d3fa..ea89ee563135 100644 --- a/arch/arm64/kernel/setup.c +++ b/arch/arm64/kernel/setup.c @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -312,6 +313,8 @@ void __init __no_sanitize_address setup_arch(char **cmdline_p) * cpufeature code and early parameters. */ jump_label_init(); + /* Init RSI after jump_labels are active */ + arm64_rsi_init(); parse_early_param(); dynamic_scs_init(); diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index 58a0bb2c17f1..fa9088add624 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -39,6 +39,7 @@ #include #include #include +#include #include #include #include @@ -412,6 +413,7 @@ void __init arm64_memblock_init(void) reserve_crashkernel(); high_memory = __va(memblock_end_of_DRAM() - 1) + 1; + arm64_setup_memory(); } void __init bootmem_init(void) 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); } From patchwork Fri Jan 27 11:27:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 49241 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp782085wrn; Fri, 27 Jan 2023 03:31:00 -0800 (PST) X-Google-Smtp-Source: AK7set/YzlLGWfhnwrXuaOIR+9XWEPcot0MqOCurFDmcW8p7D+uvJLAtLdBnU0LIqP48z+2hMFtK X-Received: by 2002:a05:6a20:3d81:b0:bc:50a6:594e with SMTP id s1-20020a056a203d8100b000bc50a6594emr1250339pzi.29.1674819059766; Fri, 27 Jan 2023 03:30:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674819059; cv=none; d=google.com; s=arc-20160816; b=OyCKl/5QQu6BCy2AtFzG3ngSflNR7WdNOtcZlMBorC2kfhjsce14A9izM7e2DcJ29M dl+jIaySGgwNeUU5gOKZDHZFJLJuxU2X2anLAlcS8pD+b78b/J1HM95vy2r3rRdH/rx+ CXOIN8Z5WYu6aE3Yel2tFFHayeslg383ZMqhC64craXGkvofmWfv2D/0A8/28JekdNT9 Dae4quehe6bYA/IS8ETEs6Ow8+u7VHNtzOZFB687jdFsnLONKyvDbo5rrVCuQLzEqNVf 42gwtRKsF/00G5sXegz4bqqxL5BkXbzxxp8MGBj2NpK3l8w+T2+LZh92OwMBRJYAE9+P 51Pg== 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=xuffqG6X+i9I+4hWhhWrVRA59Af+rVaYwbtz0HKpIdw=; b=ZCoQC0jnZiPrDaGXM8NO7AUHrwn9kbUlCVqQDDQsj5bF3p8osCm1ODnZjdWxlnnWbB Pqv/n8oDunCIwQP33NoFRwhYbCOl89QOuw4W2389ywmi+KygQjgTt2NTxgi578swl4yR uMtEBTg7d8fIFpc83+xy4CItMWhS1aPYXmfBh9b7I6/7KAMxYWjrIRx2MbvZeoJT8oM/ C95hTalX3vEn2EfQ3N0pwuvS18bwDbq5oRhlv8SJqQgWVBxhBxtxRrP3nzZ0DRwdx/Eq CmijImRkstFeohYgl6548hywY046z2xZ9Sl4tRFJAzsd26rCTuKvDJcUKcNdJK4Z+2zu XHeQ== 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 l185-20020a6388c2000000b004a42c4cc051si4099047pgd.657.2023.01.27.03.30.47; Fri, 27 Jan 2023 03:30:59 -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 S233364AbjA0LaV (ORCPT + 99 others); Fri, 27 Jan 2023 06:30:21 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38040 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233356AbjA0L3n (ORCPT ); Fri, 27 Jan 2023 06:29:43 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id D499C72649 for ; Fri, 27 Jan 2023 03:28:57 -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 C9BDF15BF; Fri, 27 Jan 2023 03:29:06 -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 6CF793F64C; Fri, 27 Jan 2023 03:28:22 -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 05/14] arm64: Mark all I/O as non-secure shared Date: Fri, 27 Jan 2023 11:27:49 +0000 Message-Id: <20230127112758.37891-6-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?1756175070450380461?= X-GMAIL-MSGID: =?utf-8?q?1756175070450380461?= All I/O is by default considered non-secure for realms. As such mark them as shared with the host. Co-developed-by: Suzuki K Poulose Signed-off-by: Suzuki K Poulose Signed-off-by: Steven Price --- arch/arm64/include/asm/io.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/arm64/include/asm/io.h b/arch/arm64/include/asm/io.h index 877495a0fd0c..b1a9c22aed72 100644 --- a/arch/arm64/include/asm/io.h +++ b/arch/arm64/include/asm/io.h @@ -142,12 +142,12 @@ extern void __memset_io(volatile void __iomem *, int, size_t); bool ioremap_allowed(phys_addr_t phys_addr, size_t size, unsigned long prot); #define ioremap_allowed ioremap_allowed -#define _PAGE_IOREMAP PROT_DEVICE_nGnRE +#define _PAGE_IOREMAP (PROT_DEVICE_nGnRE | PROT_NS_SHARED) #define ioremap_wc(addr, size) \ - ioremap_prot((addr), (size), PROT_NORMAL_NC) + ioremap_prot((addr), (size), (PROT_NORMAL_NC | PROT_NS_SHARED)) #define ioremap_np(addr, size) \ - ioremap_prot((addr), (size), PROT_DEVICE_nGnRnE) + ioremap_prot((addr), (size), (PROT_DEVICE_nGnRnE | PROT_NS_SHARED)) /* * io{read,write}{16,32,64}be() macros From patchwork Fri Jan 27 11:27:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 49240 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp782058wrn; Fri, 27 Jan 2023 03:30:57 -0800 (PST) X-Google-Smtp-Source: AMrXdXstUBiRBAtHXzLiTgrZwJaxvOVIqZasZOgCmwDYMNoQ4p4TxVp9RhzHSnLtsDZnXJjZmDID X-Received: by 2002:a17:902:8309:b0:192:5ec4:6656 with SMTP id bd9-20020a170902830900b001925ec46656mr35696575plb.3.1674819056955; Fri, 27 Jan 2023 03:30:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674819056; cv=none; d=google.com; s=arc-20160816; b=YfPJ3JNEZ6rQ70hAeKb5fcQnN1KF7QINisbXmliFqEeq6wq+IsmtkWmmg7niyjks+Y vMPWGDkwbf8v0GzirUrK7DwNgiOmqVs0KQ5ocCuQvupUkqi6rI3iPMmgKvDzf0QLITvE Z93xiasaQ0Pte/GKGeTuLsqEKZxuyuct5YzB4ewPH8n24PerFD6z19jAd+X53aDma+Fk Q9rqCinSNUj7jy3Si/5Asv0loHeVHD1hg+pCg9uMLx33NRRLQUEd0zn72dd3LO7KmVhC zXMk0F9UsrCGiZC+fYxlXtmnjG6qYbIJO6deAEDNiDZWIHKTgjB72ixkJcuR/WSCefuo Bk2Q== 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=aNW/jW/zcZb0X9zZ0EGV7IURArZuKNEloHawawvdNaQ=; b=kj4PAXfTumvvubxeKhFe09eOuX1KNAFtA3hlSV092WAwfz1BmVD78rljBsK/gdk4Lt jy5QAQUWQbICozy2j54cJI2Rt4yvhexhOHt3KfyO3vMq+28hq6QaovOi629nQk24Nsg3 MuCyRG4Fqxfj7GTwfLgi90HtYDu+lPTERsyJWzbMjkA+kzvUoIBCnnSknXlwU8CWUaCZ oLq5fD0Fz3H6AhYb8ySNaZ+qQCDrHsj3VMgTojdeXfJNZqHDRLXroZEMAddzNfD68nQb 4isyTWG7ft/aL5tUtVWF5YF/5jNGx059/MlK2s61JOh5gPLg16CEnjzBiqt9n7R7GVf8 ROhw== 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 q14-20020a170902a3ce00b0019338acc12bsi4137140plb.343.2023.01.27.03.30.44; Fri, 27 Jan 2023 03:30:56 -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 S233149AbjA0LaR (ORCPT + 99 others); Fri, 27 Jan 2023 06:30:17 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38032 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232997AbjA0L3n (ORCPT ); Fri, 27 Jan 2023 06:29:43 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id C7FB0402F6 for ; Fri, 27 Jan 2023 03:28:57 -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 3D7DB15DB; Fri, 27 Jan 2023 03:29:09 -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 297B53F64C; Fri, 27 Jan 2023 03:28:25 -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 06/14] fixmap: Allow architecture overriding set_fixmap_io Date: Fri, 27 Jan 2023 11:27:50 +0000 Message-Id: <20230127112758.37891-7-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?1756175067454505422?= X-GMAIL-MSGID: =?utf-8?q?1756175067454505422?= From: Suzuki K Poulose For a realm guest it will be necessary to ensure IO mappings are shared so that the VMM can emulate the device. The following patch will provide an implementation of set_fixmap_io for arm64 setting the shared bit (if in a realm). Signed-off-by: Suzuki K Poulose Signed-off-by: Steven Price --- include/asm-generic/fixmap.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/asm-generic/fixmap.h b/include/asm-generic/fixmap.h index 8cc7b09c1bc7..c5ce0368c1ee 100644 --- a/include/asm-generic/fixmap.h +++ b/include/asm-generic/fixmap.h @@ -94,8 +94,10 @@ static inline unsigned long virt_to_fix(const unsigned long vaddr) /* * Some fixmaps are for IO */ +#ifndef set_fixmap_io #define set_fixmap_io(idx, phys) \ __set_fixmap(idx, phys, FIXMAP_PAGE_IO) +#endif #define set_fixmap_offset_io(idx, phys) \ __set_fixmap_offset(idx, phys, FIXMAP_PAGE_IO) From patchwork Fri Jan 27 11:27:51 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 49242 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp782100wrn; Fri, 27 Jan 2023 03:31:01 -0800 (PST) X-Google-Smtp-Source: AK7set80Ml3JoUC2iMRkq6JERlzJH006eTmInKX4huaAlc4dJbqh4ZyX1etdSrCoCrM3Tj90EZt6 X-Received: by 2002:a17:903:18f:b0:196:cea:487a with SMTP id z15-20020a170903018f00b001960cea487amr18596327plg.53.1674819061426; Fri, 27 Jan 2023 03:31:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674819061; cv=none; d=google.com; s=arc-20160816; b=SAPDe53vJ21ILvwCLTNZOAZ9dQYPgsPXq3QFmyiwj9vFd4Kn1AuOJctKFeL/gbVIpQ TR7r7Wajat7JUphX2PRHZRE2ZrMcqEohFFGp9SpIyjCkuEqsTPiw+SJMLD8pr4md6f1H qwoF4tMubU1EupuJSAsF8CdVGbdVnrWH9lqpMqf3KzrpUnDbRoJg9h9G5b89v1s2W8U3 C/Xzow87eH1I68DR5bVCX/kA2cjsDH2E6DpvFFRIY3edrM4W9pnpjN8sDD8SjTQpbiAb Js70xMn6R+RJ9wAURD01BWj4rPtCVrTkvGay++m1gfRGd8G/jYfHbSvShSjf9hpBlu2T BAMg== 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=0F3Ck+xUdYWUA3WHxgKNA0RoM6xHQyivcE+c04dGsmA=; b=V7KNEKHmWRW2oaKN3NyStoANp3pAz+eXjNKxtz0O6jybXqhzzupvjynFerA+Nnahhv 8hzwTrZQyx2Pr3hqkBiuWRMxw7GEZhZLBcYPTGD5UWMtH09DqhWUnr/Fl3Qyo7jiwO/2 SuPonYiBsBxJuduy2zNKK3SJ86y37XKNx7LYyp1IMix066jazHxFXG07x4SQe/TWJIme VhsXcESvMiseQ14tUeT+PWTlKZt/t8yUzLbFw7s+56qVyQdDTh4eoIUXsER7Kr+RkAtI E28cNTuC1akAy1dT5voeDAgnAMqplAVvW+jXyKwTA/sz6DjO1U92lb3Bot4JkHI9YEtL LxGg== 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 jw18-20020a170903279200b0016f1eb1317esi4056050plb.471.2023.01.27.03.30.49; Fri, 27 Jan 2023 03:31:01 -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 S233427AbjA0LaY (ORCPT + 99 others); Fri, 27 Jan 2023 06:30:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43432 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233416AbjA0L3r (ORCPT ); Fri, 27 Jan 2023 06:29:47 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 749FF74C3E for ; Fri, 27 Jan 2023 03:29:01 -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 D99D51650; Fri, 27 Jan 2023 03:29:11 -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 B39DE3F64C; Fri, 27 Jan 2023 03:28:27 -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 07/14] arm64: Override set_fixmap_io Date: Fri, 27 Jan 2023 11:27:51 +0000 Message-Id: <20230127112758.37891-8-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?1756175072356485553?= X-GMAIL-MSGID: =?utf-8?q?1756175072356485553?= From: Suzuki K Poulose Override the set_fixmap_io to set shared permission for the host in case of a CC guest. For now we mark it shared unconditionally. Future changes could filter the physical address and make the decision accordingly. Signed-off-by: Suzuki K Poulose Signed-off-by: Steven Price --- arch/arm64/include/asm/fixmap.h | 2 ++ arch/arm64/mm/mmu.c | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/arch/arm64/include/asm/fixmap.h b/arch/arm64/include/asm/fixmap.h index 09ba9fe3b02c..1acafc1c7fae 100644 --- a/arch/arm64/include/asm/fixmap.h +++ b/arch/arm64/include/asm/fixmap.h @@ -107,6 +107,8 @@ void __init early_fixmap_init(void); #define __late_set_fixmap __set_fixmap #define __late_clear_fixmap(idx) __set_fixmap((idx), 0, FIXMAP_PAGE_CLEAR) +#define set_fixmap_io set_fixmap_io +void set_fixmap_io(enum fixed_addresses idx, phys_addr_t phys); void __set_fixmap(enum fixed_addresses idx, phys_addr_t phys, pgprot_t prot); #include diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c index 14c87e8d69d8..33fda73c669b 100644 --- a/arch/arm64/mm/mmu.c +++ b/arch/arm64/mm/mmu.c @@ -1279,6 +1279,19 @@ void __set_fixmap(enum fixed_addresses idx, } } +void set_fixmap_io(enum fixed_addresses idx, phys_addr_t phys) +{ + pgprot_t prot = FIXMAP_PAGE_IO; + + /* + * For now we consider all I/O as non-secure. For future + * filter the I/O base for setting appropriate permissions. + */ + prot = __pgprot(pgprot_val(prot) | PROT_NS_SHARED); + + return __set_fixmap(idx, phys, prot); +} + void *__init fixmap_remap_fdt(phys_addr_t dt_phys, int *size, pgprot_t prot) { const u64 dt_virt_base = __fix_to_virt(FIX_FDT); From patchwork Fri Jan 27 11:27:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 49243 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp782174wrn; Fri, 27 Jan 2023 03:31:08 -0800 (PST) X-Google-Smtp-Source: AMrXdXvolW0U1+UoH4loNki48gWRvJC35T/iAAQRIhTEm9xy1MgWQ0W/iHKujgRu8jcmUDN6h0tk X-Received: by 2002:a05:6a20:ca5f:b0:b6:157d:bf48 with SMTP id hg31-20020a056a20ca5f00b000b6157dbf48mr29900806pzb.43.1674819068399; Fri, 27 Jan 2023 03:31:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674819068; cv=none; d=google.com; s=arc-20160816; b=Pd38Z6Yx/Sd30dmzTQWgvld1cuILlpi6FlyWiuEKf6gb/+rRgOdWqhn/zKMmWLn/9q F5qBd16loAGDQGomaGhhAuC3SQoDMEaNUbnCKW0PAB04D2n/4m8XpfM8GcmtF8wA1Mc9 f3JORQl1KFV8L37vIOynLyQ04oC58GdsuIZk6E4dqeS789JmDqJDBqytOiYM4EYTLl7F mHadmQodNdzkpdBAZ7gAT8uRViMEsw8RNRH+ws/fu/gTVK3HmUX7CAalJgeMeKKuU+43 mpBHyGsulbFqj2hkbz6Ff5dg+xB7TNTgjHr8RDhNRCR7sUjQDRz7wywGXti36BpHTh2i BisA== 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=vVEA64m6RjNEy767qP8ZMKdZ/MBT354OKz2axxvchGQ=; b=KFlH9nNpy1DMzvE32dgCB/Je4DFFpbjvtrGMIOWQh/oBVHgVg0AqRq272oWtpxv9FL hCmtStMPzZ/OtwtUH5qA0vd8zNG+CSf1nFxOsdAZvsdC3piiCbCMCIE4oVAecuXYIBwE JREpBgMarr/jfABFqK5HqIp902Y/QzkUNnJV913/E3OxW/GYKghUhTJch48mT1tjdtMP beGsMj/S4twiQkJfCycb5Q6g6x6mwCxhjUyUAbDQ+WB9gl/dtjvBA9DU9Qywy6pZWpmn lutdh2n2RwTc8/5icF7dgMcdmy4vXCb8dAHZdvKNswGKlZ4MWaIJaXfq+hStqmTfQZEg k/RA== 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 v191-20020a6389c8000000b0043a93738a14si3744721pgd.167.2023.01.27.03.30.55; Fri, 27 Jan 2023 03:31:08 -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 S233442AbjA0Lab (ORCPT + 99 others); Fri, 27 Jan 2023 06:30:31 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41702 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233421AbjA0L3s (ORCPT ); Fri, 27 Jan 2023 06:29:48 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 657BC72679 for ; Fri, 27 Jan 2023 03:29:01 -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 555F5165C; Fri, 27 Jan 2023 03:29:14 -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 34CC63F64C; Fri, 27 Jan 2023 03:28:30 -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 08/14] arm64: Make the PHYS_MASK_SHIFT dynamic Date: Fri, 27 Jan 2023 11:27:52 +0000 Message-Id: <20230127112758.37891-9-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?1756175079133461604?= X-GMAIL-MSGID: =?utf-8?q?1756175079133461604?= Make the PHYS_MASK_SHIFT dynamic for Realms. This is only is required for masking the PFN from a pte entry. Elsewhere, we could still use the PA bits configured by the kernel. So, this patch: -> renames PHYS_MASK_SHIFT -> MAX_PHYS_SHIFT as supported by the kernel -> Makes PHYS_MASK_SHIFT -> Dynamic value of the (I)PA bit width -> For a realm: reduces phys_mask_shift if the RMM reports a smaller configured size for the guest. Co-developed-by: Suzuki K Poulose Signed-off-by: Suzuki K Poulose Signed-off-by: Steven Price --- arch/arm64/include/asm/kvm_arm.h | 2 +- arch/arm64/include/asm/pgtable-hwdef.h | 4 ++-- arch/arm64/include/asm/pgtable.h | 5 +++++ arch/arm64/kernel/head.S | 2 +- arch/arm64/kernel/rsi.c | 5 +++++ 5 files changed, 14 insertions(+), 4 deletions(-) diff --git a/arch/arm64/include/asm/kvm_arm.h b/arch/arm64/include/asm/kvm_arm.h index 0df3fc3a0173..924f84024009 100644 --- a/arch/arm64/include/asm/kvm_arm.h +++ b/arch/arm64/include/asm/kvm_arm.h @@ -346,7 +346,7 @@ * bits in PAR are res0. */ #define PAR_TO_HPFAR(par) \ - (((par) & GENMASK_ULL(52 - 1, 12)) >> 8) + (((par) & GENMASK_ULL(MAX_PHYS_MASK_SHIFT - 1, 12)) >> 8) #define ECN(x) { ESR_ELx_EC_##x, #x } diff --git a/arch/arm64/include/asm/pgtable-hwdef.h b/arch/arm64/include/asm/pgtable-hwdef.h index f658aafc47df..677bf7a91616 100644 --- a/arch/arm64/include/asm/pgtable-hwdef.h +++ b/arch/arm64/include/asm/pgtable-hwdef.h @@ -178,8 +178,8 @@ /* * Highest possible physical address supported. */ -#define PHYS_MASK_SHIFT (CONFIG_ARM64_PA_BITS) -#define PHYS_MASK ((UL(1) << PHYS_MASK_SHIFT) - 1) +#define MAX_PHYS_MASK_SHIFT (CONFIG_ARM64_PA_BITS) +#define MAX_PHYS_MASK ((UL(1) << PHYS_MASK_SHIFT) - 1) #define TTBR_CNP_BIT (UL(1) << 0) diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h index b4bbeed80fb6..a1319a743b38 100644 --- a/arch/arm64/include/asm/pgtable.h +++ b/arch/arm64/include/asm/pgtable.h @@ -35,6 +35,11 @@ #include #include +extern unsigned int phys_mask_shift; + +#define PHYS_MASK_SHIFT (phys_mask_shift) +#define PHYS_MASK ((1UL << PHYS_MASK_SHIFT) - 1) + #ifdef CONFIG_TRANSPARENT_HUGEPAGE #define __HAVE_ARCH_FLUSH_PMD_TLB_RANGE diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S index 952e17bd1c0b..a05504667b69 100644 --- a/arch/arm64/kernel/head.S +++ b/arch/arm64/kernel/head.S @@ -321,7 +321,7 @@ SYM_FUNC_START_LOCAL(create_idmap) #error "Mismatch between VA_BITS and page size/number of translation levels" #endif #else -#define IDMAP_PGD_ORDER (PHYS_MASK_SHIFT - PGDIR_SHIFT) +#define IDMAP_PGD_ORDER (MAX_PHYS_MASK_SHIFT - PGDIR_SHIFT) #define EXTRA_SHIFT /* * If VA_BITS == 48, we don't have to configure an additional diff --git a/arch/arm64/kernel/rsi.c b/arch/arm64/kernel/rsi.c index 9c63ee1c6979..49d36dfe0064 100644 --- a/arch/arm64/kernel/rsi.c +++ b/arch/arm64/kernel/rsi.c @@ -12,6 +12,8 @@ struct realm_config __attribute((aligned(PAGE_SIZE))) config; unsigned long prot_ns_shared; EXPORT_SYMBOL(prot_ns_shared); +unsigned int phys_mask_shift = CONFIG_ARM64_PA_BITS; + DEFINE_STATIC_KEY_FALSE_RO(rsi_present); static bool rsi_version_matches(void) @@ -54,5 +56,8 @@ void __init arm64_rsi_init(void) return; prot_ns_shared = BIT(config.ipa_bits - 1); + if (config.ipa_bits - 1 < phys_mask_shift) + phys_mask_shift = config.ipa_bits - 1; + static_branch_enable(&rsi_present); } From patchwork Fri Jan 27 11:27:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 49244 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp782194wrn; Fri, 27 Jan 2023 03:31:09 -0800 (PST) X-Google-Smtp-Source: AMrXdXvcSy3ho3rJpn19plANhYQpEEY1jclNKu7A5R4N6jrPS3fe21Ien672e7IqJtCfMAD5BDJD X-Received: by 2002:a05:6a20:4e02:b0:b8:915c:477a with SMTP id gk2-20020a056a204e0200b000b8915c477amr37936272pzb.8.1674819069649; Fri, 27 Jan 2023 03:31:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674819069; cv=none; d=google.com; s=arc-20160816; b=sdmhjvBtXdt8GMuIYV1M2hjT85DdxqjBKJmr/PBar/QUGB4y/Vj6jZ6wRH6LGRRk8Y eFK8KGtQ84qEKoLE5GvMJmdhVThIMjDBv19d1zZOonEREpwbjosGfq3IHhG5ctvxBu4l JwkvwvU3Xxtq7DPw1DTnC8WiJqetKFeFoYHaYu5aVULlVv0jpZ+aeu+aS68Q7vZljhOt H0LN0xcuQkljPNukHm24xvOi9soZXOWseaynFfg51x3LRVDKIjW2iJJiEsg96GM6MNNs wckiiu2hQnL3nP4+y0Tzvx7Oi8iNZWGwGdsVuFt0ZnCU5gEdUxDopzUtIuJN4KAUd2kM yJwQ== 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=5xk0N7bSs3HcJnNyEjihvhYrR9lCqNYvFM1Yxd4QulQ=; b=D3zSddgO3fcsCpp0kChIdLt8DSQRUgCWQx9H2ZRJys15t3nEbLSAvLF4R32605OURo jxccNIoj97nXgENQ/UjRDg2BxOcvsIXeKg3MbYeYsh4QVyMdgA6+y82Ps166/NIokZPW clZUX4z2UZ2a5L+kMUmLFPgKyz+g+2P9FxAbqcazCBvx5dH/hDlN7FoJyBXYro0OCSVb 5G4crvvcxX6CIGkM9i5HzTuiU/Os0Xs4wO9Z++OSEVO5X9QjG/06vdaG1y/Dlrh5Tlpc gVamkyaIZ5VJlXm6IwxvebIIfChnmrdIAb7HqoxHjzWs8qzUA2wATLv7RcMKjnrcpRsV hPFw== 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 e20-20020aa79814000000b0059261b044b1si1868152pfl.217.2023.01.27.03.30.57; Fri, 27 Jan 2023 03:31:09 -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 S233477AbjA0Lal (ORCPT + 99 others); Fri, 27 Jan 2023 06:30:41 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41798 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233484AbjA0L35 (ORCPT ); Fri, 27 Jan 2023 06:29:57 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 6164378AE3 for ; Fri, 27 Jan 2023 03:29:05 -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 0D1D41682; Fri, 27 Jan 2023 03:29:17 -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 A49D33F64C; Fri, 27 Jan 2023 03:28:32 -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 09/14] arm64: Enforce bounce buffers for realm DMA Date: Fri, 27 Jan 2023 11:27:53 +0000 Message-Id: <20230127112758.37891-10-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?1756175080608329595?= X-GMAIL-MSGID: =?utf-8?q?1756175080608329595?= Within a realm guest it's not possible for a device emulated by the VMM to access arbitrary guest memory. So force the use of bounce buffers to ensure that the memory the emulated devices are accessing is in memory which is explicitly shared with the host. Co-developed-by: Suzuki K Poulose Signed-off-by: Suzuki K Poulose Signed-off-by: Steven Price --- arch/arm64/kernel/rsi.c | 2 ++ arch/arm64/mm/init.c | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/arch/arm64/kernel/rsi.c b/arch/arm64/kernel/rsi.c index 49d36dfe0064..1a07eefdd2e9 100644 --- a/arch/arm64/kernel/rsi.c +++ b/arch/arm64/kernel/rsi.c @@ -5,6 +5,8 @@ #include #include +#include + #include struct realm_config __attribute((aligned(PAGE_SIZE))) config; diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index fa9088add624..32a4710ad861 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -472,7 +472,13 @@ void __init bootmem_init(void) */ void __init mem_init(void) { - swiotlb_init(max_pfn > PFN_DOWN(arm64_dma_phys_limit), SWIOTLB_VERBOSE); + if (is_realm_world()) { + swiotlb_init(true, SWIOTLB_VERBOSE | SWIOTLB_FORCE); + swiotlb_update_mem_attributes(); + } else { + swiotlb_init(max_pfn > PFN_DOWN(arm64_dma_phys_limit), + SWIOTLB_VERBOSE); + } /* this will put all unused low memory onto the freelists */ memblock_free_all(); From patchwork Fri Jan 27 11:27:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 49246 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp782507wrn; Fri, 27 Jan 2023 03:31:43 -0800 (PST) X-Google-Smtp-Source: AK7set+DfTzc3+965stmt9LZfZf1PPqEhI8Wy8Ri7libv+PGSR8Z8mlJbqWhb1vvZO9NA5twIxSs X-Received: by 2002:a17:90b:3881:b0:22c:1422:e3fb with SMTP id mu1-20020a17090b388100b0022c1422e3fbmr8013778pjb.5.1674819103146; Fri, 27 Jan 2023 03:31:43 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674819103; cv=none; d=google.com; s=arc-20160816; b=v3hEbvbSGB/OssWbIE31kKE7SN0sgAHE5n6eAWslnlv7IyGLR6U3ZyHwdqUGcdsZ1m LY606ELUlUq+O5h/aTOaXS/HvKPlwbdtuitOXup/FaaXnc5sUUBnUr+lxszYVYOZiVLk N7btJnFbTbZxbWAA2emriZrDR3r3lWzHFF/WVkcFzSyYhBMMnxCeJeyYtp0uf+V34ck0 HugGnpolJEKK4aUqHWSPxD7dG5IOTYROD+rlFz/WFHZwvHauNq6xRRIPC1f3+hvwTges TLFsK9Gv2dwx9cStcwmwlPLgf5HLegNhPgb8nTdJcqwceNz3I2swu4fJqpyUna+OjeMB 6L8g== 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=eFtioC6OfQmIcVCvqcRAVZOEMJ+NS0mlMGt3Djir2kk=; b=GcNPY3vWtpnHtU2c/UCacFhVtM8QDAy9eZ8fWIXKCrLRxur45T2fP0t90feXt5Rzg7 3w01cocIldAyrEfNu/1B6gejHNV1stzev+rbxAAq0w3ioCxYnl5Fj0nOlvjj2Da8DoGv Pq825qo1lq4i+PULs39BfME8fHJol4a8+fD46pSpWVi7PbCF/oXy4C19ECIN0M9UhGdl V3YxNY3ZcENI+iYo12dOlM9U+1+1SxglAuTcRdnGbxnJ6KUTxcLCtkZDEv2kLqE+BYeB 6G45ujVoW67kiAU/d0edG9b14AKGGVyCCPfiv7ljXMQ0xuL5EazbnZsDfeEtmyxW0z4Y +frQ== 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 30-20020a17090a199e00b0022c3e9115e3si2899097pji.172.2023.01.27.03.31.30; Fri, 27 Jan 2023 03:31:43 -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 S233245AbjA0Laq (ORCPT + 99 others); Fri, 27 Jan 2023 06:30:46 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42046 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233493AbjA0L36 (ORCPT ); Fri, 27 Jan 2023 06:29:58 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 8136F41092 for ; Fri, 27 Jan 2023 03:29:05 -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 615EC1684; Fri, 27 Jan 2023 03:29:19 -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 608483F64C; Fri, 27 Jan 2023 03:28:35 -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 10/14] arm64: Enable memory encrypt for Realms Date: Fri, 27 Jan 2023 11:27:54 +0000 Message-Id: <20230127112758.37891-11-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?1756175115676342841?= X-GMAIL-MSGID: =?utf-8?q?1756175115676342841?= Use the memory encryption APIs to trigger a RSI call to request a transition between protected memory and shared memory (or vice versa) and updating the kernel's linear map of modified pages to flip the top bit of the IPA. This requires that block mappings are not used in the direct map for realm guests. Co-developed-by: Suzuki K Poulose Signed-off-by: Suzuki K Poulose Signed-off-by: Steven Price --- arch/arm64/Kconfig | 3 ++ arch/arm64/include/asm/mem_encrypt.h | 19 +++++++++++ arch/arm64/kernel/rsi.c | 12 +++++++ arch/arm64/mm/pageattr.c | 48 +++++++++++++++++++++++++--- 4 files changed, 78 insertions(+), 4 deletions(-) create mode 100644 arch/arm64/include/asm/mem_encrypt.h diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index 03934808b2ed..0aac44a993ac 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -20,6 +20,7 @@ config ARM64 select ARCH_ENABLE_SPLIT_PMD_PTLOCK if PGTABLE_LEVELS > 2 select ARCH_ENABLE_THP_MIGRATION if TRANSPARENT_HUGEPAGE select ARCH_HAS_CACHE_LINE_SIZE + select ARCH_HAS_CC_PLATFORM select ARCH_HAS_CURRENT_STACK_POINTER select ARCH_HAS_DEBUG_VIRTUAL select ARCH_HAS_DEBUG_VM_PGTABLE @@ -39,6 +40,8 @@ config ARM64 select ARCH_HAS_SETUP_DMA_OPS select ARCH_HAS_SET_DIRECT_MAP select ARCH_HAS_SET_MEMORY + select ARCH_HAS_MEM_ENCRYPT + select ARCH_HAS_FORCE_DMA_UNENCRYPTED select ARCH_STACKWALK select ARCH_HAS_STRICT_KERNEL_RWX select ARCH_HAS_STRICT_MODULE_RWX diff --git a/arch/arm64/include/asm/mem_encrypt.h b/arch/arm64/include/asm/mem_encrypt.h new file mode 100644 index 000000000000..7381f9585321 --- /dev/null +++ b/arch/arm64/include/asm/mem_encrypt.h @@ -0,0 +1,19 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (C) 2023 ARM Ltd. + */ + +#ifndef __ASM_MEM_ENCRYPT_H +#define __ASM_MEM_ENCRYPT_H + +#include + +/* All DMA must be to non-secure memory for now */ +static inline bool force_dma_unencrypted(struct device *dev) +{ + return is_realm_world(); +} + +int set_memory_encrypted(unsigned long addr, int numpages); +int set_memory_decrypted(unsigned long addr, int numpages); +#endif diff --git a/arch/arm64/kernel/rsi.c b/arch/arm64/kernel/rsi.c index 1a07eefdd2e9..1cc292826f2b 100644 --- a/arch/arm64/kernel/rsi.c +++ b/arch/arm64/kernel/rsi.c @@ -6,6 +6,7 @@ #include #include #include +#include #include @@ -18,6 +19,17 @@ unsigned int phys_mask_shift = CONFIG_ARM64_PA_BITS; DEFINE_STATIC_KEY_FALSE_RO(rsi_present); +bool cc_platform_has(enum cc_attr attr) +{ + switch (attr) { + case CC_ATTR_MEM_ENCRYPT: + return is_realm_world(); + default: + return false; + } +} +EXPORT_SYMBOL_GPL(cc_platform_has); + static bool rsi_version_matches(void) { unsigned long ver = rsi_get_version(); diff --git a/arch/arm64/mm/pageattr.c b/arch/arm64/mm/pageattr.c index 79dd201c59d8..bbd7364dd9a8 100644 --- a/arch/arm64/mm/pageattr.c +++ b/arch/arm64/mm/pageattr.c @@ -5,10 +5,12 @@ #include #include #include +#include #include #include #include +#include #include #include @@ -22,12 +24,12 @@ bool rodata_full __ro_after_init = IS_ENABLED(CONFIG_RODATA_FULL_DEFAULT_ENABLED bool can_set_direct_map(void) { /* - * rodata_full, DEBUG_PAGEALLOC and KFENCE require linear map to be - * mapped at page granularity, so that it is possible to - * protect/unprotect single pages. + * rodata_full, DEBUG_PAGEALLOC, KFENCE and a Realm guest all require + * linear map to be mapped at page granularity, so that it is possible + * to protect/unprotect single pages. */ return (rodata_enabled && rodata_full) || debug_pagealloc_enabled() || - IS_ENABLED(CONFIG_KFENCE); + IS_ENABLED(CONFIG_KFENCE) || is_realm_world(); } static int change_page_range(pte_t *ptep, unsigned long addr, void *data) @@ -38,6 +40,7 @@ static int change_page_range(pte_t *ptep, unsigned long addr, void *data) pte = clear_pte_bit(pte, cdata->clear_mask); pte = set_pte_bit(pte, cdata->set_mask); + /* TODO: Break before make for PROT_NS_SHARED updates */ set_pte(ptep, pte); return 0; } @@ -190,6 +193,43 @@ int set_direct_map_default_noflush(struct page *page) PAGE_SIZE, change_page_range, &data); } +static int __set_memory_encrypted(unsigned long addr, + int numpages, + bool encrypt) +{ + unsigned long set_prot = 0, clear_prot = 0; + phys_addr_t start, end; + + if (!is_realm_world()) + return 0; + + WARN_ON(!__is_lm_address(addr)); + start = __virt_to_phys(addr); + end = start + numpages * PAGE_SIZE; + + if (encrypt) { + clear_prot = PROT_NS_SHARED; + set_memory_range_protected(start, end); + } else { + set_prot = PROT_NS_SHARED; + set_memory_range_shared(start, end); + } + + return __change_memory_common(addr, PAGE_SIZE * numpages, + __pgprot(set_prot), + __pgprot(clear_prot)); +} + +int set_memory_encrypted(unsigned long addr, int numpages) +{ + return __set_memory_encrypted(addr, numpages, true); +} + +int set_memory_decrypted(unsigned long addr, int numpages) +{ + return __set_memory_encrypted(addr, numpages, false); +} + #ifdef CONFIG_DEBUG_PAGEALLOC void __kernel_map_pages(struct page *page, int numpages, int enable) { From patchwork Fri Jan 27 11:27:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 49247 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp782535wrn; Fri, 27 Jan 2023 03:31:46 -0800 (PST) X-Google-Smtp-Source: AMrXdXtxp/j7Tk8xnKwjBggalfkrzI7hH14s8Ca2s7fFu/wTx3YNQph6oZh7IsZwMM+8O8ZrbSMt X-Received: by 2002:a17:902:8b83:b0:194:ab28:3268 with SMTP id ay3-20020a1709028b8300b00194ab283268mr33481924plb.34.1674819106400; Fri, 27 Jan 2023 03:31:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674819106; cv=none; d=google.com; s=arc-20160816; b=pe5csxeLvbRhYfZ4govgdc/jZDQD8ojjf4O8ouh0uW9BakE1K86tTOQPs/4QqglJKQ 5ca33Sc+2mjeXiX8QcXSCNHvoxUWCqgnytUMHTFpJ2aWLOW9m+2rapEomNmJK4SJqe4Y RkJTEeSlpoDQH5sv5OFFsGJTFK3oMqsMBW9hckUmE62liIu7Yu8MJSoHeBZubQH0ZwtJ fAmHatRbDnPdZSs3AsKRT5BPdVrAUsX7D1X25R/0rizFtBjfRQthQ6yqEdFCI84r4diy QEtjQ/ldqrWXJvyX8MulaDz1POjmdv76Cg9gtPj1TzfNNhCz2jg1rqROwFTL/Oo38Zxt pbig== 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=tqehz0Qg5KtYJ9OelUy/TsTvc4sdsv9LZ08K0P4HRLA=; b=fgW2NzhIL9+wVRsQqTfmyUHgN+lgTc2+vHp+RITpc8qTTL+D4bL/KB6d7gsxvdAthX A5oFejEgs7fQw3gH5NjdqTRXPlP/YwCr7dzZM9EOKM2wOnFIiazkHQi/xMAw92bpRr8u dN1np9uzPO1HZ8pWZdQKw4acmzV94qu6NB0XLEFmCwitwDNdqBSf+l78njb5HtXGDTFk E7DKkZlsTllO/3dl/YXAmmlR9k5a6m/ZqIIixPJYGAtls9HaVYVLgwpplUVK0g2Q3SFy Kak2miUQiTNuG6TAjMxIpaA8aewYmsKErC1/ZHhLYVBbFsPJebzPfQ9k2GgbJUCbpNMj kXxw== 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 k13-20020a170902c40d00b0019608f59d65si4778719plk.616.2023.01.27.03.31.33; Fri, 27 Jan 2023 03:31:46 -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 S231512AbjA0Las (ORCPT + 99 others); Fri, 27 Jan 2023 06:30:48 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42068 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233507AbjA0L36 (ORCPT ); Fri, 27 Jan 2023 06:29:58 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id D38F178AF5 for ; Fri, 27 Jan 2023 03:29:05 -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 CD5F11688; Fri, 27 Jan 2023 03:29:21 -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 BBD223F64C; Fri, 27 Jan 2023 03:28:37 -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 11/14] arm64: Force device mappings to be non-secure shared Date: Fri, 27 Jan 2023 11:27:55 +0000 Message-Id: <20230127112758.37891-12-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?1756175119461612843?= X-GMAIL-MSGID: =?utf-8?q?1756175119461612843?= From: Suzuki K Poulose Device mappings (currently) need to be emulated by the VMM so must be mapped shared with the host. Signed-off-by: Suzuki K Poulose Signed-off-by: Steven Price --- arch/arm64/include/asm/pgtable.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h index a1319a743b38..f283ac3fb905 100644 --- a/arch/arm64/include/asm/pgtable.h +++ b/arch/arm64/include/asm/pgtable.h @@ -567,7 +567,7 @@ static inline void set_pud_at(struct mm_struct *mm, unsigned long addr, #define pgprot_writecombine(prot) \ __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_NORMAL_NC) | PTE_PXN | PTE_UXN) #define pgprot_device(prot) \ - __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_DEVICE_nGnRE) | PTE_PXN | PTE_UXN) + __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_DEVICE_nGnRE) | PTE_PXN | PTE_UXN | PROT_NS_SHARED) #define pgprot_tagged(prot) \ __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_NORMAL_TAGGED)) #define pgprot_mhp pgprot_tagged From patchwork Fri Jan 27 11:27:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 49245 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp782506wrn; Fri, 27 Jan 2023 03:31:43 -0800 (PST) X-Google-Smtp-Source: AMrXdXvAAlG8E361CrmlClb0rE3qoDXTri+kgNXGzcr9txQwyxqSZ5dVH6AK68f7ihl73eeI2QHc X-Received: by 2002:a17:902:8e89:b0:192:90e7:41d5 with SMTP id bg9-20020a1709028e8900b0019290e741d5mr37404682plb.52.1674819102963; Fri, 27 Jan 2023 03:31:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674819102; cv=none; d=google.com; s=arc-20160816; b=dDc6P+9LDPcy6OKYWbm6VDF1AOEy6Zl6fRJkStjrweLsxGh858lEYJFZN4aINy16JZ QxqxuEHy1EJZPeXzigiaaPB2HtkXBpKvOuvU08FldzAyjTvouDi92zhvq5U8Mhi+vxgE b0pIUdP6g4FdVml+shMQ/8q7VBLRUfDQT9VlrbOEdZou6hQ9fPzM6++2po4R6oQbq0Me pQvhSRELZQUIfMY05KwjmbOR3jbBgecH0WXzxiP2wrimxkBt0eaj6j3Lm/rN04oJxlKp XgtDy7l459U0O/LJFQEga0xb1wuSsZV1A+V1yiAqcY0r96LTzZUWd3BqiAWT9wTmeRa7 tK4A== 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=8fO8D45htl31T77C12GzGi9bJ8dLQEbwEnLP00G5SMc=; b=Yi3symNIJWW4fCwH+hBgYiOBIUYxVumtt8LtA+u7PcZB/lwULAQHKirX1E9I9yQ4ZQ MLSdE0sieMZW5nUsayB+0PEKW1cNX+K73F5kRAWM8ihMeOiHqvng5Gtmyp6jL1V4UaNn E2P+m75afJj/GBjPssdngorprpqwH5t9WvTykTz4Gs8BJyweDRIh7BYqw9NOezMetkct r1OxLObUSVh4Bmr1KThM/4VyI3NrZLecQD/MaS1UvVFjh/x2vbnGs/uJVbMlKBytpmf6 Tl1km7TxCCYvScjmOvOT6eieDvManZ7UPGFLAOq8I/bQrF9x7YhYv0RrNfAIlysr53gf kbAQ== 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 w2-20020a170902d10200b001964a47aca0si2811367plw.583.2023.01.27.03.31.29; Fri, 27 Jan 2023 03:31:42 -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 S233512AbjA0Lan (ORCPT + 99 others); Fri, 27 Jan 2023 06:30:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42050 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233496AbjA0L36 (ORCPT ); Fri, 27 Jan 2023 06:29:58 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id BB6DA78AF2 for ; Fri, 27 Jan 2023 03:29:05 -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 5DCAB168F; Fri, 27 Jan 2023 03:29:24 -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 27EEF3F8D6; Fri, 27 Jan 2023 03:28:40 -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 12/14] efi: arm64: Map Device with Prot Shared Date: Fri, 27 Jan 2023 11:27:56 +0000 Message-Id: <20230127112758.37891-13-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?1756175115617255947?= X-GMAIL-MSGID: =?utf-8?q?1756175115617255947?= From: Suzuki K Poulose Device mappings need to be emualted by the VMM so must be mapped shared with the host. Signed-off-by: Suzuki K Poulose Signed-off-by: Steven Price --- arch/arm64/kernel/efi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c index fab05de2e12d..03a876707fc5 100644 --- a/arch/arm64/kernel/efi.c +++ b/arch/arm64/kernel/efi.c @@ -31,7 +31,7 @@ static __init pteval_t create_mapping_protection(efi_memory_desc_t *md) u32 type = md->type; if (type == EFI_MEMORY_MAPPED_IO) - return PROT_DEVICE_nGnRE; + return PROT_NS_SHARED | PROT_DEVICE_nGnRE; if (region_is_misaligned(md)) { static bool __initdata code_is_misaligned; From patchwork Fri Jan 27 11:27:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 49249 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp782661wrn; Fri, 27 Jan 2023 03:32:02 -0800 (PST) X-Google-Smtp-Source: AMrXdXtfl2puk5xe5MR0X/JhqIANgTd2LHMLK4Wp1yZrhJkaLRfU7vTUi+28Gs6OIc4nPqib6akv X-Received: by 2002:a05:6a20:b03:b0:ac:a2bb:96e6 with SMTP id x3-20020a056a200b0300b000aca2bb96e6mr35214217pzf.56.1674819121835; Fri, 27 Jan 2023 03:32:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674819121; cv=none; d=google.com; s=arc-20160816; b=txTYMv7B70SG0o/hy8/Gak89EeP/R6mXXyVS8bVRVsUC88HJ3zkwkCbf7aYH/96qfz YEzNkiObvFpxg9GopL2WS/TsW+h6UI226zCrRQ1/C91ZVdUekoWLYmtS9lGnGybTN4kS rsRmq0I4MNgMpbjZGF955NPqbTg4DaJdyLOjbM3GJVeUkL35LIIELEdwSJ4HYi9dEFvB IAqlTNPQTzSB23ykioY0mzIMNE3Kz6LUNVzD/IUOdHJG/iXPdexGhGwVh/IqrUvPum3W 3KGfH0Z1CvINwVIJR+ly7+b40jnK+Zs3VeQa+TMr39nZYjsNWMCOJknpRfYXfrdMhdIj 6C1g== 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=R9N2FMvI44QMFEbw+oYF4GciWk7YeFERTX5xX80moOk=; b=Y9sm4nBveI7s8sfxREoauRmer/8ClUbVktV6hJzenzBDFPEspmLzlzjwvl2PeJSVAA J2LQHHhxxj2QL72fMUPLxek26OSO1n5uuA70Lg9nW61D8E1EnYemDsTI69PiFAH7C0KC 9JDYVkKEllc0Qhtf2Y2iacWMyrXaN6AUxMONuwoftJGf9upl00DCu70L8jRq+WkC31hI exdV2eLAgZsDyrjsWQGvs8vlQKe/BmcdCM5WvYPd6WUak9DUpS6mQhAtOSBZAxyQjqdz c7/2oOxbONsrefJOtZ3uleSMIbWP0Jr//9oLP00T9bYyKb9NvBIYMy2xcM2lFglUbfH4 L2lg== 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 j184-20020a636ec1000000b004d122bf069fsi3925668pgc.267.2023.01.27.03.31.49; Fri, 27 Jan 2023 03:32:01 -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 S233538AbjA0Laz (ORCPT + 99 others); Fri, 27 Jan 2023 06:30:55 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38002 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229700AbjA0LaJ (ORCPT ); Fri, 27 Jan 2023 06:30:09 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 880304108E for ; Fri, 27 Jan 2023 03:29:07 -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 C93751691; Fri, 27 Jan 2023 03:29:26 -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 AD78A3F64C; Fri, 27 Jan 2023 03:28:42 -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 13/14] arm64: realm: Support nonsecure ITS emulation shared Date: Fri, 27 Jan 2023 11:27:57 +0000 Message-Id: <20230127112758.37891-14-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?1756175135345889501?= X-GMAIL-MSGID: =?utf-8?q?1756175135345889501?= Within a realm guest the ITS is emulated by the host. This means the allocations must have been made available to the host by a call to set_memory_decrypted(). Introduce an allocation function which performs this extra call. Co-developed-by: Suzuki K Poulose Signed-off-by: Suzuki K Poulose Signed-off-by: Steven Price --- drivers/irqchip/irq-gic-v3-its.c | 95 ++++++++++++++++++++++++-------- 1 file changed, 71 insertions(+), 24 deletions(-) diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c index 973ede0197e3..5f9829376f6c 100644 --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -27,6 +28,7 @@ #include #include #include +#include #include #include @@ -165,6 +167,7 @@ struct its_device { struct its_node *its; struct event_lpi_map event_map; void *itt; + u32 itt_order; u32 nr_ites; u32 device_id; bool shared; @@ -200,6 +203,33 @@ static DEFINE_IDA(its_vpeid_ida); #define gic_data_rdist_rd_base() (gic_data_rdist()->rd_base) #define gic_data_rdist_vlpi_base() (gic_data_rdist_rd_base() + SZ_128K) +static struct page *its_alloc_shared_pages_node(int node, gfp_t gfp, + unsigned int order) +{ + struct page *page; + + if (node == NUMA_NO_NODE) + page = alloc_pages(gfp, order); + else + page = alloc_pages_node(node, gfp, order); + + if (page) + set_memory_decrypted((unsigned long)page_address(page), + 1 << order); + return page; +} + +static struct page *its_alloc_shared_pages(gfp_t gfp, unsigned int order) +{ + return its_alloc_shared_pages_node(NUMA_NO_NODE, gfp, order); +} + +static void its_free_shared_pages(void *addr, unsigned int order) +{ + set_memory_encrypted((unsigned long)addr, 1 << order); + free_pages((unsigned long)addr, order); +} + /* * Skip ITSs that have no vLPIs mapped, unless we're on GICv4.1, as we * always have vSGIs mapped. @@ -2178,7 +2208,8 @@ static struct page *its_allocate_prop_table(gfp_t gfp_flags) { struct page *prop_page; - prop_page = alloc_pages(gfp_flags, get_order(LPI_PROPBASE_SZ)); + prop_page = its_alloc_shared_pages(gfp_flags, + get_order(LPI_PROPBASE_SZ)); if (!prop_page) return NULL; @@ -2189,8 +2220,8 @@ static struct page *its_allocate_prop_table(gfp_t gfp_flags) static void its_free_prop_table(struct page *prop_page) { - free_pages((unsigned long)page_address(prop_page), - get_order(LPI_PROPBASE_SZ)); + its_free_shared_pages(page_address(prop_page), + get_order(LPI_PROPBASE_SZ)); } static bool gic_check_reserved_range(phys_addr_t addr, unsigned long size) @@ -2312,10 +2343,10 @@ static int its_setup_baser(struct its_node *its, struct its_baser *baser, order = get_order(GITS_BASER_PAGES_MAX * psz); } - page = alloc_pages_node(its->numa_node, GFP_KERNEL | __GFP_ZERO, order); + page = its_alloc_shared_pages_node(its->numa_node, + GFP_KERNEL | __GFP_ZERO, order); if (!page) return -ENOMEM; - base = (void *)page_address(page); baser_phys = virt_to_phys(base); @@ -2325,7 +2356,7 @@ static int its_setup_baser(struct its_node *its, struct its_baser *baser, /* 52bit PA is supported only when PageSize=64K */ if (psz != SZ_64K) { pr_err("ITS: no 52bit PA support when psz=%d\n", psz); - free_pages((unsigned long)base, order); + its_free_shared_pages(base, order); return -ENXIO; } @@ -2379,7 +2410,7 @@ static int its_setup_baser(struct its_node *its, struct its_baser *baser, pr_err("ITS@%pa: %s doesn't stick: %llx %llx\n", &its->phys_base, its_base_type_string[type], val, tmp); - free_pages((unsigned long)base, order); + its_free_shared_pages(base, order); return -ENXIO; } @@ -2518,8 +2549,8 @@ static void its_free_tables(struct its_node *its) for (i = 0; i < GITS_BASER_NR_REGS; i++) { if (its->tables[i].base) { - free_pages((unsigned long)its->tables[i].base, - its->tables[i].order); + its_free_shared_pages(its->tables[i].base, + its->tables[i].order); its->tables[i].base = NULL; } } @@ -2778,7 +2809,8 @@ static bool allocate_vpe_l2_table(int cpu, u32 id) /* Allocate memory for 2nd level table */ if (!table[idx]) { - page = alloc_pages(GFP_KERNEL | __GFP_ZERO, get_order(psz)); + page = its_alloc_shared_pages(GFP_KERNEL | __GFP_ZERO, + get_order(psz)); if (!page) return false; @@ -2897,7 +2929,8 @@ static int allocate_vpe_l1_table(void) pr_debug("np = %d, npg = %lld, psz = %d, epp = %d, esz = %d\n", np, npg, psz, epp, esz); - page = alloc_pages(GFP_ATOMIC | __GFP_ZERO, get_order(np * PAGE_SIZE)); + page = its_alloc_shared_pages(GFP_ATOMIC | __GFP_ZERO, + get_order(np * PAGE_SIZE)); if (!page) return -ENOMEM; @@ -2941,8 +2974,8 @@ static struct page *its_allocate_pending_table(gfp_t gfp_flags) { struct page *pend_page; - pend_page = alloc_pages(gfp_flags | __GFP_ZERO, - get_order(LPI_PENDBASE_SZ)); + pend_page = its_alloc_shared_pages(gfp_flags | __GFP_ZERO, + get_order(LPI_PENDBASE_SZ)); if (!pend_page) return NULL; @@ -2954,7 +2987,8 @@ static struct page *its_allocate_pending_table(gfp_t gfp_flags) static void its_free_pending_table(struct page *pt) { - free_pages((unsigned long)page_address(pt), get_order(LPI_PENDBASE_SZ)); + its_free_shared_pages(page_address(pt), + get_order(LPI_PENDBASE_SZ)); } /* @@ -3283,8 +3317,9 @@ static bool its_alloc_table_entry(struct its_node *its, /* Allocate memory for 2nd level table */ if (!table[idx]) { - page = alloc_pages_node(its->numa_node, GFP_KERNEL | __GFP_ZERO, - get_order(baser->psz)); + page = its_alloc_shared_pages_node(its->numa_node, + GFP_KERNEL | __GFP_ZERO, + get_order(baser->psz)); if (!page) return false; @@ -3367,7 +3402,9 @@ static struct its_device *its_create_device(struct its_node *its, u32 dev_id, unsigned long *lpi_map = NULL; unsigned long flags; u16 *col_map = NULL; + struct page *page; void *itt; + int itt_order; int lpi_base; int nr_lpis; int nr_ites; @@ -3379,7 +3416,6 @@ static struct its_device *its_create_device(struct its_node *its, u32 dev_id, if (WARN_ON(!is_power_of_2(nvecs))) nvecs = roundup_pow_of_two(nvecs); - dev = kzalloc(sizeof(*dev), GFP_KERNEL); /* * Even if the device wants a single LPI, the ITT must be * sized as a power of two (and you need at least one bit...). @@ -3387,7 +3423,16 @@ static struct its_device *its_create_device(struct its_node *its, u32 dev_id, nr_ites = max(2, nvecs); sz = nr_ites * (FIELD_GET(GITS_TYPER_ITT_ENTRY_SIZE, its->typer) + 1); sz = max(sz, ITS_ITT_ALIGN) + ITS_ITT_ALIGN - 1; - itt = kzalloc_node(sz, GFP_KERNEL, its->numa_node); + itt_order = get_order(sz); + page = its_alloc_shared_pages_node(its->numa_node, + GFP_KERNEL | __GFP_ZERO, + itt_order); + if (!page) + return NULL; + itt = (void *)page_address(page); + + dev = kzalloc(sizeof(*dev), GFP_KERNEL); + if (alloc_lpis) { lpi_map = its_lpi_alloc(nvecs, &lpi_base, &nr_lpis); if (lpi_map) @@ -3399,9 +3444,9 @@ static struct its_device *its_create_device(struct its_node *its, u32 dev_id, lpi_base = 0; } - if (!dev || !itt || !col_map || (!lpi_map && alloc_lpis)) { + if (!dev || !col_map || (!lpi_map && alloc_lpis)) { kfree(dev); - kfree(itt); + its_free_shared_pages(itt, itt_order); bitmap_free(lpi_map); kfree(col_map); return NULL; @@ -3411,6 +3456,7 @@ static struct its_device *its_create_device(struct its_node *its, u32 dev_id, dev->its = its; dev->itt = itt; + dev->itt_order = itt_order; dev->nr_ites = nr_ites; dev->event_map.lpi_map = lpi_map; dev->event_map.col_map = col_map; @@ -3438,7 +3484,7 @@ static void its_free_device(struct its_device *its_dev) list_del(&its_dev->entry); raw_spin_unlock_irqrestore(&its_dev->its->lock, flags); kfree(its_dev->event_map.col_map); - kfree(its_dev->itt); + its_free_shared_pages(its_dev->itt, its_dev->itt_order); kfree(its_dev); } @@ -5064,8 +5110,9 @@ static int __init its_probe_one(struct resource *res, its->numa_node = numa_node; - page = alloc_pages_node(its->numa_node, GFP_KERNEL | __GFP_ZERO, - get_order(ITS_CMD_QUEUE_SZ)); + page = its_alloc_shared_pages_node(its->numa_node, + GFP_KERNEL | __GFP_ZERO, + get_order(ITS_CMD_QUEUE_SZ)); if (!page) { err = -ENOMEM; goto out_unmap_sgir; @@ -5131,7 +5178,7 @@ static int __init its_probe_one(struct resource *res, out_free_tables: its_free_tables(its); out_free_cmd: - free_pages((unsigned long)its->cmd_base, get_order(ITS_CMD_QUEUE_SZ)); + its_free_shared_pages(its->cmd_base, get_order(ITS_CMD_QUEUE_SZ)); out_unmap_sgir: if (its->sgir_base) iounmap(its->sgir_base); From patchwork Fri Jan 27 11:27:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 49248 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp782642wrn; Fri, 27 Jan 2023 03:31:59 -0800 (PST) X-Google-Smtp-Source: AK7set8NVS3IGlAGZnrlo0YzknYOzrxQyrhmC84lQi7UmFK3EUcZOQaDUif4ikEA9VriRo0Ut9k/ X-Received: by 2002:a05:6a20:6693:b0:b8:7735:bed0 with SMTP id o19-20020a056a20669300b000b87735bed0mr5378212pzh.56.1674819119583; Fri, 27 Jan 2023 03:31:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674819119; cv=none; d=google.com; s=arc-20160816; b=sMkeeaMIwoE9KluYXgWH8ry9EWPrzrxpPcVQPESroXlER7m0Kc2HXVmA90gRaL+ALV Q9vKOp89fSsZEfpwvwC7EowgzfYn08LKMYADijk6InD8LJlD7LAmpKSc5kP56rIUbMne SSPrCQ6rcXjmh0DhtwohHwjSqskK0lYOc0jXoYAdygWFtYjO5eStBlsdIF/GQX2u3lQ4 DrS6/7ni2nHw8c8OrM13RoIHPOP2K4ZZvsPoS9CzBeBzZdrzhvX5ZTDS1KIMiC10NlhM sVuXW7Ylbj4/xssovXIYW/gP5QMdIfnlw98wPwTmdPnMOUBv5A3PTOtOTUa+00f9WW/y Lz8A== 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=I1neizKZciYipiMeE+rTAd8m4x8aaZxqX80BbCAGv9c=; b=NrU3kycWmzbAPBv6PMaBNoh32lO0UT22mkaN/govc1HJMYfoPg5Eb+D1Knf4sF2TDr 3MNDImzIG7UfdpmmbWt+aI9gVZf6SAJTU1cci7F0BXlWuxPtCg7uF+62VQDXjD8trvs3 qF33ulkC8+IhPzc0KgaWRSjI9/3+/JHzBbaZVxTbU7zet8OJHsqvwmVGVljgNaS5rTwX /Kjywae82JwLAL35DYnTWLWv81vmKSHIOc0R0vBBjDfEO6ELJHhbZBULhyCvyY3YNcDw JLdTxIyV9tt7tbQtBYLtQI2UNpGEeTJpRQ0+t01vtoKew0DhpiFXarS2jcd6ydVGAsEL rppA== 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 p1-20020a63b801000000b004da2c9dcc75si3895725pge.869.2023.01.27.03.31.46; Fri, 27 Jan 2023 03:31:59 -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 S233507AbjA0Lav (ORCPT + 99 others); Fri, 27 Jan 2023 06:30:51 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42102 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233514AbjA0L37 (ORCPT ); Fri, 27 Jan 2023 06:29:59 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 7479E7AE40 for ; Fri, 27 Jan 2023 03:29:07 -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 649FC1692; Fri, 27 Jan 2023 03:29:29 -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 265293F64C; Fri, 27 Jan 2023 03:28:45 -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 14/14] HACK: Accept prototype RSI version Date: Fri, 27 Jan 2023 11:27:58 +0000 Message-Id: <20230127112758.37891-15-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?1756175132773231674?= X-GMAIL-MSGID: =?utf-8?q?1756175132773231674?= The upstream RMM currently advertises the major version of an internal prototype (v12.0) rather than the expected version from the RMM architecture specification (v1.0). Add a config option to enable support for the prototype RSI v12.0. Signed-off-by: Steven Price --- arch/arm64/include/asm/rsi_smc.h | 2 ++ arch/arm64/kernel/rsi.c | 5 +++++ arch/arm64/kvm/Kconfig | 8 ++++++++ 3 files changed, 15 insertions(+) diff --git a/arch/arm64/include/asm/rsi_smc.h b/arch/arm64/include/asm/rsi_smc.h index bc0cdd83f164..baf07f905353 100644 --- a/arch/arm64/include/asm/rsi_smc.h +++ b/arch/arm64/include/asm/rsi_smc.h @@ -29,6 +29,8 @@ #define RSI_ABI_VERSION ((RSI_ABI_VERSION_MAJOR << 16) | \ RSI_ABI_VERSION_MINOR) +#define RSI_LEGACY_ABI_VERSION 0xc0000 + #define RSI_ABI_VERSION_GET_MAJOR(_version) ((_version) >> 16) #define RSI_ABI_VERSION_GET_MINOR(_version) ((_version) & 0xFFFF) diff --git a/arch/arm64/kernel/rsi.c b/arch/arm64/kernel/rsi.c index 1cc292826f2b..45b26f23e706 100644 --- a/arch/arm64/kernel/rsi.c +++ b/arch/arm64/kernel/rsi.c @@ -41,6 +41,11 @@ static bool rsi_version_matches(void) RSI_ABI_VERSION_GET_MAJOR(ver), RSI_ABI_VERSION_GET_MINOR(ver)); +#ifdef CONFIG_RME_USE_PROTOTYPE_HACKS + if (ver == RSI_LEGACY_ABI_VERSION) + return true; +#endif + return (ver >= RSI_ABI_VERSION && RSI_ABI_VERSION_GET_MAJOR(ver) == RSI_ABI_VERSION_MAJOR); } diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig index 05da3c8f7e88..13858a5047fd 100644 --- a/arch/arm64/kvm/Kconfig +++ b/arch/arm64/kvm/Kconfig @@ -58,6 +58,14 @@ config NVHE_EL2_DEBUG If unsure, say N. +config RME_USE_PROTOTYPE_HACKS + bool "Allow RMM prototype version numbers" + default y + help + For compatibility with the the current RMM code allow versions + numbers from a prototype implementation as well as the expected + version number from the RMM specification. + config PROTECTED_NVHE_STACKTRACE bool "Protected KVM hypervisor stacktraces" depends on NVHE_EL2_DEBUG