Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp3811635imm; Mon, 17 Sep 2018 03:43:25 -0700 (PDT) X-Google-Smtp-Source: ANB0VdaZF6CUFpPsTwr3FwtqNMRCuxvvLgGyXFOJvoeRjSKS9EFEjO35Q3Z4Be6nGIsQZiJWhXUu X-Received: by 2002:a63:d857:: with SMTP id k23-v6mr23037584pgj.106.1537181005141; Mon, 17 Sep 2018 03:43:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1537181005; cv=none; d=google.com; s=arc-20160816; b=PNsRNfrFRypT1ZiR3CiTKouOqqIDr1t498nozNO4PFPNqwrwh3B2UwTxoUbUyB27vN PMS/eb7PeCbTHFIop2nClGDxpz3zgzTw+Ne30Z9Jer7otCrEc1/VGG7OB0kF0ZB+4pwV HoE2ZMLxA+2QI/LaOv/VNNXfs6iEw0z+4ZFm4KUZE1Ul1i4+SPEtMBYiSBUj7sAt+5ja lK7gSC+vSDogyK36F7S281NYB+s0mf2XHwm7A8hf6ve712ftvMhXBgfu0v7NvtCzW4NO aQaxIFbsf+un2lkOVF3j1wVXxJom3U4NAXjJOmXRcYSGvqmfsBvyoO43KYnJa9yJT/bm 9SWg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=dK32fUQx73U7z+HD/KInsbxppMaxTPgpBPxxFm92tcQ=; b=IUtTRIF5BfoJ5uvsfheAxXKUG57NQbaI2yQ9HNBkqiS26G9Puv/JkpKUd6wQUaw9E5 JcToGHqPZSaV57Vd5gnQESs37g9sln8+d5Yb/bMmhHJ3F6bmEDljxdWlD0CsWTaqmNmS EAipwX5yAuUgWqk3aPMPO46fTdF/WrWt8GWtPx1isVsXOH1cmjkOqyYTXujC8letzRCZ 77emdpBPKFe6eLJiXq5VUWvYYUICLY7DQkhdT8Pke1wSZMZ8cMJGPwnW2zKB4ofhmJwq TKopoxEKAje3b90RzyfYuO1OiKeMn/gKSbg01gw5YUuZ3pHtYeOPhmRzC/RmVou6fCti Pyog== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e17-v6si15624993pgb.497.2018.09.17.03.43.09; Mon, 17 Sep 2018 03:43:25 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728253AbeIQQJY (ORCPT + 99 others); Mon, 17 Sep 2018 12:09:24 -0400 Received: from foss.arm.com ([217.140.101.70]:56472 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728023AbeIQQJY (ORCPT ); Mon, 17 Sep 2018 12:09:24 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 93F051682; Mon, 17 Sep 2018 03:42:36 -0700 (PDT) Received: from en101.Emea.Arm.com (en101.emea.arm.com [10.4.13.23]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 175283F5BD; Mon, 17 Sep 2018 03:42:33 -0700 (PDT) From: Suzuki K Poulose To: linux-arm-kernel@lists.infradead.org Cc: kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org, marc.zyngier@arm.com, cdall@kernel.org, eric.auger@redhat.com, pbonzini@redhat.com, rkrcmar@redhat.com, will.deacon@arm.com, catalin.marinas@arm.com, james.morse@arm.com, dave.martin@arm.com, julien.grall@arm.com, linux-kernel@vger.kernel.org, suzuki.poulose@arm.com Subject: [PATCH v5 05/18] kvm: arm64: Clean up VTCR_EL2 initialisation Date: Mon, 17 Sep 2018 11:41:27 +0100 Message-Id: <20180917104144.19188-6-suzuki.poulose@arm.com> X-Mailer: git-send-email 2.19.0 In-Reply-To: <20180917104144.19188-1-suzuki.poulose@arm.com> References: <20180917104144.19188-1-suzuki.poulose@arm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 Cc: Christoffer Dall Reviewed-by: Eric Auger Signed-off-by: Suzuki K Poulose --- Changs sinec v3 - Update comment about reserved bits - Added Reviewed-by from Eric --- 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 #include #include +#include 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.0