From patchwork Fri Oct 27 18:08:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joey Gouly X-Patchwork-Id: 13438777 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 15D3BC25B72 for ; Fri, 27 Oct 2023 18:09:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A32646B03DD; Fri, 27 Oct 2023 14:09:21 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9BB9C6B03DE; Fri, 27 Oct 2023 14:09:21 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 834B96B03DF; Fri, 27 Oct 2023 14:09:21 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 6F6256B03DD for ; Fri, 27 Oct 2023 14:09:21 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 3FA191209AF for ; Fri, 27 Oct 2023 18:09:21 +0000 (UTC) X-FDA: 81392028522.09.1C4562D Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf27.hostedemail.com (Postfix) with ESMTP id 8F77A40002 for ; Fri, 27 Oct 2023 18:09:19 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=none; spf=pass (imf27.hostedemail.com: domain of joey.gouly@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=joey.gouly@arm.com; dmarc=pass (policy=none) header.from=arm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1698430159; 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=IuEUESOgs9e3CBMsOCYYVHYWvWQwhYn1sOmUNETV6y8=; b=pqhwqc3ny0lgyOK87AvldtNXcAq5SATuUnmvT6pG5ZjlroHG+BTD1cebfPrXvnkfFUWNAl k/zAKxw20+BLxgSWkRlGI2HFqv0RPRdZiChQHY5g9AyFhVp7FBwN5V5SWtbzwPxQjRJuk6 hn9iaDXMaGCqQWhGtTh38X8P1MM8tSc= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=none; spf=pass (imf27.hostedemail.com: domain of joey.gouly@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=joey.gouly@arm.com; dmarc=pass (policy=none) header.from=arm.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1698430159; a=rsa-sha256; cv=none; b=zEMXq9Ybs/PjZUgadlG76q2NSLDiTaFHHFx+iD+R5JLWCgANdH7DbsNGXy5kdLocQsdbUB 0TsaPqU+JUaVRHY5ol7MuHyvO/UV+MExirC6PfAS9DFYKYH1sA7oQJca9gGjNg4skLWiVZ mRjNDmQ3w+mKUwWzdX7YDXxrYDJKMz0= 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 7DCB5143D; Fri, 27 Oct 2023 11:10:00 -0700 (PDT) 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 B073B3F64C; Fri, 27 Oct 2023 11:09:16 -0700 (PDT) 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 v2 06/24] KVM: arm64: Save/restore POE registers Date: Fri, 27 Oct 2023 19:08:32 +0100 Message-Id: <20231027180850.1068089-7-joey.gouly@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231027180850.1068089-1-joey.gouly@arm.com> References: <20231027180850.1068089-1-joey.gouly@arm.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 8F77A40002 X-Rspam-User: X-Stat-Signature: 1hgugb5c5mporfkgdz4uiynk15jekmiu X-Rspamd-Server: rspam01 X-HE-Tag: 1698430159-239122 X-HE-Meta: U2FsdGVkX19hlLKS5R7aFuFHrOB6eQMdLXj9HKoGbujqNXrCbQ7GTGGZDAoDrp2feA6riZgUS+aObVLV3D9XX7L0VzSXND+QKnzPzQsMfqe/1cztsUHCyEtEpTDgpAT77bDxfAZx/EATVz/D3M44JNxEgMT7N17MXL+V5CjGSyeChDUUzX3/Ney1Ssq1jcXaLHRh6bz0y5BQQJVmXxhJv0eQGDp1FYqG8dNkjUbfha4QsxJ7Gi0xKoCcR9l8/cFXe27nH0ko/YjhUWfPZlFqs61eF1FBB8D2MMvprekxMp5YvVWJPctry/AawwkN5QNy/EuD7+f2KsAhUqODWiwSy7yBSU1v5y63DWGcyTcYlxu+/P5jjte+Jg8Cuz4lmkZ6JjAwMz+jRBdGBHl1m+OK7o8duVsF56m2EzSyu82a49BDAXEpwqvKN70KbCakk5kiYE8aANx8Vg4DWQLQAtL3yz2MizbqU1bcDfpAw5jiMFamyMzO8PTlhmGFXJhiLOwHt4CGByzxojQiC/L0MCCwttq1Co4Gc/cQFkMhkmcD+WAgv2V/If4LWMP7S6rn3nQHwMWJT5hGIeVCpQmoDiQKXP6BfX8ew8WuemiHNTYUvpR/pQIMRD/3nBV+8CsDFu7p6Ve9EZ+xzpzQfSbPa+MzAE2AidWy0pZsikKBC2v9HcFcrAnknbEc90rIYjr+45KkHtMXVbFqWB9FwxFCLuZZbY3rLIv1rh0dFwMNrU16E1uE2ob9UYNHnzk/3RbyJKPfKZTobWbfbB1knWvyZ2Boz1hvw0OoNEsnv/0JyHaRzrEoPFLV2eV/ggdcyXkQVYrVnhDeoE9FE1K972O6fAwgaslH/qsYjFQkaH5wAVrf0UXT7yb3TSvVFejLNxLpBRbc+gi4N+6fJCM1QuctF9je7DP6p4f3Q1TiPdtCodQc/l5IFVQU1Yo4SFyMYY8fiAczhYf9Gt3U/YVNwZApdEB lhoS/VDo 5+U9QP0fg+tY+ISktZTyHYdf0QvhKRfX85wa3PPIGp2nRKfN9NTnWJT9PcazzFXcPRNnqRaQqduVli/q/5fKVwb12vwze67cmqZvRYHjhfL9QblRVh/62WQIYpIVZewdorkA8yqn99lyLR5Y+wv6oU/oyKIiGqC1PITkyVUeg8qlTOWYsNi+GJua4joVM+dorFoUVFdK/fo78pM2Bg/WfweadxGSx8P0YtSYU 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 5882b2415596..4022e69e17fd 100644 --- a/arch/arm64/include/asm/kvm_arm.h +++ b/arch/arm64/include/asm/kvm_arm.h @@ -344,14 +344,14 @@ */ #define __HFGRTR_EL2_RES0 (GENMASK(63, 56) | GENMASK(53, 51)) #define __HFGRTR_EL2_MASK GENMASK(49, 0) -#define __HFGRTR_EL2_nMASK (GENMASK(55, 54) | BIT(50)) +#define __HFGRTR_EL2_nMASK (GENMASK(60, 59) | 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(55, 54) | BIT(50)) +#define __HFGWTR_EL2_nMASK (GENMASK(60, 59) | 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 af06ccb7ee34..205653bc5c2c 100644 --- a/arch/arm64/include/asm/kvm_host.h +++ b/arch/arm64/include/asm/kvm_host.h @@ -365,6 +365,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 e92ec810d449..7d66cc7e104c 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -2124,6 +2124,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), access_vm_reg, reset_unknown, PIRE0_EL1 }, { SYS_DESC(SYS_PIR_EL1), access_vm_reg, 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 }, @@ -2203,6 +2204,7 @@ static const struct sys_reg_desc sys_reg_descs[] = { { PMU_SYS_REG(PMOVSSET_EL0), .access = access_pmovs, .reg = PMOVSSET_EL0 }, + { 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 },