linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: marc.zyngier@arm.com (Marc Zyngier)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 05/26] kvm: arm64: Clean up VTCR_EL2 initialisation
Date: Fri, 19 Oct 2018 13:58:40 +0100	[thread overview]
Message-ID: <20181019125901.185478-6-marc.zyngier@arm.com> (raw)
In-Reply-To: <20181019125901.185478-1-marc.zyngier@arm.com>

From: Suzuki K Poulose <suzuki.poulose@arm.com>

Use the new helper for converting the parange to the physical shift.
Also, add the missing definitions for the VTCR_EL2 register fields
and use them instead of hard coding numbers.

Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Christoffer Dall <cdall@kernel.org>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
---
 arch/arm64/include/asm/kvm_arm.h |  3 +++
 arch/arm64/kvm/hyp/s2-setup.c    | 34 ++++++++------------------------
 2 files changed, 11 insertions(+), 26 deletions(-)

diff --git a/arch/arm64/include/asm/kvm_arm.h b/arch/arm64/include/asm/kvm_arm.h
index aa45df752a16..5f807b680a5f 100644
--- a/arch/arm64/include/asm/kvm_arm.h
+++ b/arch/arm64/include/asm/kvm_arm.h
@@ -107,6 +107,7 @@
 #define VTCR_EL2_RES1		(1 << 31)
 #define VTCR_EL2_HD		(1 << 22)
 #define VTCR_EL2_HA		(1 << 21)
+#define VTCR_EL2_PS_SHIFT	TCR_EL2_PS_SHIFT
 #define VTCR_EL2_PS_MASK	TCR_EL2_PS_MASK
 #define VTCR_EL2_TG0_MASK	TCR_TG0_MASK
 #define VTCR_EL2_TG0_4K		TCR_TG0_4K
@@ -127,6 +128,8 @@
 #define VTCR_EL2_VS_8BIT	(0 << VTCR_EL2_VS_SHIFT)
 #define VTCR_EL2_VS_16BIT	(1 << VTCR_EL2_VS_SHIFT)
 
+#define VTCR_EL2_T0SZ(x)	TCR_T0SZ(x)
+
 /*
  * We configure the Stage-2 page tables to always restrict the IPA space to be
  * 40 bits wide (T0SZ = 24).  Systems with a PARange smaller than 40 bits are
diff --git a/arch/arm64/kvm/hyp/s2-setup.c b/arch/arm64/kvm/hyp/s2-setup.c
index 603e1ee83e89..e1ca672e937a 100644
--- a/arch/arm64/kvm/hyp/s2-setup.c
+++ b/arch/arm64/kvm/hyp/s2-setup.c
@@ -19,45 +19,27 @@
 #include <asm/kvm_arm.h>
 #include <asm/kvm_asm.h>
 #include <asm/kvm_hyp.h>
+#include <asm/cpufeature.h>
 
 u32 __hyp_text __init_stage2_translation(void)
 {
 	u64 val = VTCR_EL2_FLAGS;
 	u64 parange;
+	u32 phys_shift;
 	u64 tmp;
 
 	/*
 	 * Read the PARange bits from ID_AA64MMFR0_EL1 and set the PS
-	 * bits in VTCR_EL2. Amusingly, the PARange is 4 bits, while
-	 * PS is only 3. Fortunately, bit 19 is RES0 in VTCR_EL2...
+	 * bits in VTCR_EL2. Amusingly, the PARange is 4 bits, but the
+	 * allocated values are limited to 3bits.
 	 */
 	parange = read_sysreg(id_aa64mmfr0_el1) & 7;
 	if (parange > ID_AA64MMFR0_PARANGE_MAX)
 		parange = ID_AA64MMFR0_PARANGE_MAX;
-	val |= parange << 16;
+	val |= parange << VTCR_EL2_PS_SHIFT;
 
 	/* Compute the actual PARange... */
-	switch (parange) {
-	case 0:
-		parange = 32;
-		break;
-	case 1:
-		parange = 36;
-		break;
-	case 2:
-		parange = 40;
-		break;
-	case 3:
-		parange = 42;
-		break;
-	case 4:
-		parange = 44;
-		break;
-	case 5:
-	default:
-		parange = 48;
-		break;
-	}
+	phys_shift = id_aa64mmfr0_parange_to_phys_shift(parange);
 
 	/*
 	 * ... and clamp it to 40 bits, unless we have some braindead
@@ -65,7 +47,7 @@ u32 __hyp_text __init_stage2_translation(void)
 	 * return that value for the rest of the kernel to decide what
 	 * to do.
 	 */
-	val |= 64 - (parange > 40 ? 40 : parange);
+	val |= VTCR_EL2_T0SZ(phys_shift > 40 ? 40 : phys_shift);
 
 	/*
 	 * Check the availability of Hardware Access Flag / Dirty Bit
@@ -86,5 +68,5 @@ u32 __hyp_text __init_stage2_translation(void)
 
 	write_sysreg(val, vtcr_el2);
 
-	return parange;
+	return phys_shift;
 }
-- 
2.19.1

  parent reply	other threads:[~2018-10-19 12:58 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-19 12:58 [GIT PULL 00/26] KVM/arm updates for 4.20 Marc Zyngier
2018-10-19 12:58 ` [PATCH 01/26] kvm: arm/arm64: Fix stage2_flush_memslot for 4 level page table Marc Zyngier
2018-10-19 12:58 ` [PATCH 02/26] kvm: arm/arm64: Remove spurious WARN_ON Marc Zyngier
2018-10-19 12:58 ` [PATCH 03/26] kvm: arm64: Add helper for loading the stage2 setting for a VM Marc Zyngier
2018-10-19 12:58 ` [PATCH 04/26] arm64: Add a helper for PARange to physical shift conversion Marc Zyngier
2018-10-19 12:58 ` Marc Zyngier [this message]
2018-10-19 12:58 ` [PATCH 06/26] kvm: arm/arm64: Allow arch specific configurations for VM Marc Zyngier
2018-10-19 12:58 ` [PATCH 07/26] kvm: arm64: Configure VTCR_EL2 per VM Marc Zyngier
2018-10-19 12:58 ` [PATCH 08/26] kvm: arm/arm64: Prepare for VM specific stage2 translations Marc Zyngier
2018-10-19 12:58 ` [PATCH 09/26] kvm: arm64: Prepare for dynamic stage2 page table layout Marc Zyngier
2018-10-19 12:58 ` [PATCH 10/26] kvm: arm64: Make stage2 page table layout dynamic Marc Zyngier
2018-10-19 12:58 ` [PATCH 11/26] kvm: arm64: Dynamic configuration of VTTBR mask Marc Zyngier
2018-10-19 12:58 ` [PATCH 12/26] kvm: arm64: Configure VTCR_EL2.SL0 per VM Marc Zyngier
2018-10-19 12:58 ` [PATCH 13/26] kvm: arm64: Switch to per VM IPA limit Marc Zyngier
2018-10-19 12:58 ` [PATCH 14/26] vgic: Add support for 52bit guest physical address Marc Zyngier
2018-10-19 12:58 ` [PATCH 15/26] kvm: arm64: Add 52bit support for PAR to HPFAR conversoin Marc Zyngier
2018-10-19 12:58 ` [PATCH 16/26] kvm: arm64: Set a limit on the IPA size Marc Zyngier
2018-10-19 12:58 ` [PATCH 17/26] kvm: arm64: Limit the minimum number of page table levels Marc Zyngier
2018-10-19 12:58 ` [PATCH 18/26] kvm: arm64: Allow tuning the physical address size for VM Marc Zyngier
2018-10-19 12:58 ` [PATCH 19/26] KVM: arm/arm64: Rename kvm_arm_config_vm to kvm_arm_setup_stage2 Marc Zyngier
2018-10-19 12:58 ` [PATCH 20/26] KVM: arm64: Drop __cpu_init_stage2 on the VHE path Marc Zyngier
2018-10-19 12:58 ` [PATCH 21/26] arm64: KVM: Remove some extra semicolon in kvm_target_cpu Marc Zyngier
2018-10-19 12:58 ` [PATCH 22/26] KVM: arm/arm64: Ensure only THP is candidate for adjustment Marc Zyngier
2018-10-19 12:58 ` [PATCH 23/26] KVM: arm64: Fix caching of host MDCR_EL2 value Marc Zyngier
2018-10-19 12:58 ` [PATCH 24/26] arm/arm64: KVM: Rename function kvm_arch_dev_ioctl_check_extension() Marc Zyngier
2018-10-19 12:59 ` [PATCH 25/26] arm/arm64: KVM: Enable 32 bits kvm vcpu events support Marc Zyngier
2018-10-19 12:59 ` [PATCH 26/26] KVM: arm64: Safety check PSTATE when entering guest and handle IL Marc Zyngier
2018-10-19 13:23 ` [GIT PULL 00/26] KVM/arm updates for 4.20 Paolo Bonzini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181019125901.185478-6-marc.zyngier@arm.com \
    --to=marc.zyngier@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).