From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4AC35C61DF4 for ; Fri, 24 Nov 2023 16:35:47 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 39FCD6B02AB; Fri, 24 Nov 2023 11:35:45 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 329D06B02AD; Fri, 24 Nov 2023 11:35:45 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1CA3C6B02AF; Fri, 24 Nov 2023 11:35:45 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 09DE86B02AB for ; Fri, 24 Nov 2023 11:35:45 -0500 (EST) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id D8F3C402C7 for ; Fri, 24 Nov 2023 16:35:44 +0000 (UTC) X-FDA: 81493399008.06.7B0ECD4 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf09.hostedemail.com (Postfix) with ESMTP id 186C1140013 for ; Fri, 24 Nov 2023 16:35:42 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf09.hostedemail.com: domain of joey.gouly@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=joey.gouly@arm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1700843743; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=1R7dCGHFA67zE0G/2gI15b7BUv6IZhmtMYlq1npaQtw=; b=qdSTvYPAICSS6+iBGfhlBjDI7pjAFLqPdwAo7XBXfDHpsR7sIXDyej6w9Y2KxePodiBN/H f8dimR7zWXaLaC9uzm5LZfaxXGnjEpmgGjx6WqL//wVbkEXoc2+0GSOaGnpSpJ8zKknTEu pbaAa2NYJfsrmkrE/e/XIqqskiHPjF0= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf09.hostedemail.com: domain of joey.gouly@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=joey.gouly@arm.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1700843743; a=rsa-sha256; cv=none; b=cr7sEuicnsqCXLFcvxWA+U8Detx0j1+cqFBBoHjwG0n4VCOg6dKIRK/nJiYCXgt6mrB7Cg Hz1TPKTyhMoen6iCs29foB/jk81GhppGCluJ3KIGDmAkw50TeEP4dXWeHZako+7AIN87Ns g6Enn1ILpOx66JBPKKNTsO6jpSyMa0A= 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 C80DD1BA8; Fri, 24 Nov 2023 08:36:28 -0800 (PST) Received: from e124191.cambridge.arm.com (e124191.cambridge.arm.com [10.1.197.45]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 236AC3F73F; Fri, 24 Nov 2023 08:35:35 -0800 (PST) From: Joey Gouly To: linux-arm-kernel@lists.infradead.org Cc: akpm@linux-foundation.org, aneesh.kumar@linux.ibm.com, broonie@kernel.org, catalin.marinas@arm.com, dave.hansen@linux.intel.com, joey.gouly@arm.com, maz@kernel.org, oliver.upton@linux.dev, shuah@kernel.org, will@kernel.org, kvmarm@lists.linux.dev, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, James Morse , Suzuki K Poulose , Zenghui Yu Subject: [PATCH v3 06/25] KVM: arm64: Save/restore POE registers Date: Fri, 24 Nov 2023 16:34:51 +0000 Message-Id: <20231124163510.1835740-7-joey.gouly@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231124163510.1835740-1-joey.gouly@arm.com> References: <20231124163510.1835740-1-joey.gouly@arm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 186C1140013 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: ckzgz5zerrky47y6tgcphe7tumagew1h X-HE-Tag: 1700843742-140302 X-HE-Meta: U2FsdGVkX19Vb6wxft92GFNL6FCcg9mK5E9luVNXdhxsYkv//2JPv6Fg5vZb2LHB7tMFAnpAqQeFYfgES4Ee6uQInGE7vL+87sfPoNwKTirn3GomlaA6gwbaY02bvMpUYW5zqZ2xkkX3UXx2X2umqgSD9p4RqcmxgQpg2Ng2SSS81QDTsRBQbUEo/nXHHZYn1DTO5E/GqGBIjT2Gn1LDiD4T4dwsyH/VumvRL92BEN2CAVZ+z2TqWp6fAOqm2QT8hA0R5rEYW8G2PQ6i5T+J4WWVAsIb+peU5ZNNELbCr263c4laC2cEqJR1IZG8W6nnf7H9x8rLjf+0Uxsue3bs44HEa0z2gQZszvkx+Z5eTdbdsRet2LD/ZMvkcu23/Bq8z0Z0CdQppX4gVKqDqd3DQBQvwBo6ONoPXOO/VBO5FkyESDnLhy3kjxBvtxxE4fgJD4SHSeNRUM8orT9hg/tmOpNjlQmYBpCivJjv2RfYvg923y9qDjfgwhc4i33b6lAS43BvCITnUAYX7FIAwtxpcNTSc1sV2jZXb0SuJOIcFAZmHUqGK+MSHClC1/cd4CX/8x0dQMqw0OMLLMn9SXtTDmu/Ki2PaVfH+xzucXsN8+VAZslcOFSAJDWk2HSPl6hdMYWe6smBDN3PqAv8ioABRJs2Zw0b8FhYhYbbZG/hbQTwlHJOaiqXT/BLX7w6oP89I10x2DlA6gL6DvvWKJshyWJpVeXKQrXJjwMzLjEF5P4g2osLswR+4U88Zvjp5vSh7iXZLgbVcum6MTrltVJKpmDMtB8hvsxkAZiWuONB/FA2iIIK0cmEQjK07jd5w4oO758K0MxjEasyzxe8O3cGKAkG8tIgDP20tC3VZsmA/r0l2EPamF17asbewKTjU8q3Ymy7iqK9GAPnXWFtbeKl8l5eY5DsgI/heQnzKWDTlE14rO6i8WwR1EzDL3S5OokBzjT+8XcFdhEGA/8DS/D odDdccMp XuxWblhls2kX29tPIQWERi5Jdkmn8atdif43CVnMzzPLKkcp70I4WbKfnUM/0PZPZrO6+spjtWmaKRtJK8PpnSi9O4k8k5wrNV6bAzer+p1V/XyUOSVKSf8Va+4YzrPGubIHNi8GrESjPFc1v2uRMYO5A5N0E6+c9PwLG8b1zL+lYwXI+U80s5IUdIeNBIWFqWsc5bo2tMoq6KaEMvhWCBVWBy+idmSB5HTmk X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Define the new system registers that POE introduces and context switch them. Signed-off-by: Joey Gouly Cc: Marc Zyngier Cc: Oliver Upton Cc: Catalin Marinas Cc: Will Deacon --- arch/arm64/include/asm/kvm_arm.h | 4 ++-- arch/arm64/include/asm/kvm_host.h | 4 ++++ arch/arm64/kvm/hyp/include/hyp/sysreg-sr.h | 10 ++++++++++ arch/arm64/kvm/sys_regs.c | 2 ++ 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/arch/arm64/include/asm/kvm_arm.h b/arch/arm64/include/asm/kvm_arm.h index b85f46a73e21..597470e0b87b 100644 --- a/arch/arm64/include/asm/kvm_arm.h +++ b/arch/arm64/include/asm/kvm_arm.h @@ -346,14 +346,14 @@ */ #define __HFGRTR_EL2_RES0 (GENMASK(63, 56) | GENMASK(53, 51)) #define __HFGRTR_EL2_MASK GENMASK(49, 0) -#define __HFGRTR_EL2_nMASK (GENMASK(58, 57) | GENMASK(55, 54) | BIT(50)) +#define __HFGRTR_EL2_nMASK (GENMASK(60, 57) | GENMASK(55, 54) | BIT(50)) #define __HFGWTR_EL2_RES0 (GENMASK(63, 56) | GENMASK(53, 51) | \ BIT(46) | BIT(42) | BIT(40) | BIT(28) | \ GENMASK(26, 25) | BIT(21) | BIT(18) | \ GENMASK(15, 14) | GENMASK(10, 9) | BIT(2)) #define __HFGWTR_EL2_MASK GENMASK(49, 0) -#define __HFGWTR_EL2_nMASK (GENMASK(58, 57) | GENMASK(55, 54) | BIT(50)) +#define __HFGWTR_EL2_nMASK (GENMASK(60, 57) | GENMASK(55, 54) | BIT(50)) #define __HFGITR_EL2_RES0 GENMASK(63, 57) #define __HFGITR_EL2_MASK GENMASK(54, 0) diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h index 824f29f04916..fa9ebd8fce40 100644 --- a/arch/arm64/include/asm/kvm_host.h +++ b/arch/arm64/include/asm/kvm_host.h @@ -401,6 +401,10 @@ enum vcpu_sysreg { PIR_EL1, /* Permission Indirection Register 1 (EL1) */ PIRE0_EL1, /* Permission Indirection Register 0 (EL1) */ + /* Permission Overlay Extension registers */ + POR_EL1, /* Permission Overlay Register 1 (EL1) */ + POR_EL0, /* Permission Overlay Register 0 (EL0) */ + /* 32bit specific registers. */ DACR32_EL2, /* Domain Access Control Register */ IFSR32_EL2, /* Instruction Fault Status Register */ diff --git a/arch/arm64/kvm/hyp/include/hyp/sysreg-sr.h b/arch/arm64/kvm/hyp/include/hyp/sysreg-sr.h index bb6b571ec627..22f07ee43e7e 100644 --- a/arch/arm64/kvm/hyp/include/hyp/sysreg-sr.h +++ b/arch/arm64/kvm/hyp/include/hyp/sysreg-sr.h @@ -19,6 +19,9 @@ static inline void __sysreg_save_common_state(struct kvm_cpu_context *ctxt) { ctxt_sys_reg(ctxt, MDSCR_EL1) = read_sysreg(mdscr_el1); + + if (system_supports_poe()) + ctxt_sys_reg(ctxt, POR_EL0) = read_sysreg_s(SYS_POR_EL0); } static inline void __sysreg_save_user_state(struct kvm_cpu_context *ctxt) @@ -59,6 +62,8 @@ static inline void __sysreg_save_el1_state(struct kvm_cpu_context *ctxt) ctxt_sys_reg(ctxt, PIR_EL1) = read_sysreg_el1(SYS_PIR); ctxt_sys_reg(ctxt, PIRE0_EL1) = read_sysreg_el1(SYS_PIRE0); } + if (system_supports_poe()) + ctxt_sys_reg(ctxt, POR_EL1) = read_sysreg_el1(SYS_POR); ctxt_sys_reg(ctxt, PAR_EL1) = read_sysreg_par(); ctxt_sys_reg(ctxt, TPIDR_EL1) = read_sysreg(tpidr_el1); @@ -89,6 +94,9 @@ static inline void __sysreg_save_el2_return_state(struct kvm_cpu_context *ctxt) static inline void __sysreg_restore_common_state(struct kvm_cpu_context *ctxt) { write_sysreg(ctxt_sys_reg(ctxt, MDSCR_EL1), mdscr_el1); + + if (system_supports_poe()) + write_sysreg_s(ctxt_sys_reg(ctxt, POR_EL0), SYS_POR_EL0); } static inline void __sysreg_restore_user_state(struct kvm_cpu_context *ctxt) @@ -135,6 +143,8 @@ static inline void __sysreg_restore_el1_state(struct kvm_cpu_context *ctxt) write_sysreg_el1(ctxt_sys_reg(ctxt, PIR_EL1), SYS_PIR); write_sysreg_el1(ctxt_sys_reg(ctxt, PIRE0_EL1), SYS_PIRE0); } + if (system_supports_poe()) + write_sysreg_el1(ctxt_sys_reg(ctxt, POR_EL1), SYS_POR); write_sysreg(ctxt_sys_reg(ctxt, PAR_EL1), par_el1); write_sysreg(ctxt_sys_reg(ctxt, TPIDR_EL1), tpidr_el1); diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index 4735e1b37fb3..a54e5eadbf29 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -2269,6 +2269,7 @@ static const struct sys_reg_desc sys_reg_descs[] = { { SYS_DESC(SYS_MAIR_EL1), access_vm_reg, reset_unknown, MAIR_EL1 }, { SYS_DESC(SYS_PIRE0_EL1), NULL, reset_unknown, PIRE0_EL1 }, { SYS_DESC(SYS_PIR_EL1), NULL, reset_unknown, PIR_EL1 }, + { SYS_DESC(SYS_POR_EL1), NULL, reset_unknown, POR_EL1 }, { SYS_DESC(SYS_AMAIR_EL1), access_vm_reg, reset_amair_el1, AMAIR_EL1 }, { SYS_DESC(SYS_LORSA_EL1), trap_loregion }, @@ -2352,6 +2353,7 @@ static const struct sys_reg_desc sys_reg_descs[] = { .access = access_pmovs, .reg = PMOVSSET_EL0, .get_user = get_pmreg, .set_user = set_pmreg }, + { SYS_DESC(SYS_POR_EL0), NULL, reset_unknown, POR_EL0 }, { SYS_DESC(SYS_TPIDR_EL0), NULL, reset_unknown, TPIDR_EL0 }, { SYS_DESC(SYS_TPIDRRO_EL0), NULL, reset_unknown, TPIDRRO_EL0 }, { SYS_DESC(SYS_TPIDR2_EL0), undef_access }, -- 2.25.1