Received: by 10.213.65.68 with SMTP id h4csp653600imn; Tue, 27 Mar 2018 06:25:03 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+ztRzNQ32B23MmrLpC9bVHRskqImUyf8XskMbFpIaChOZcmoDt5QHe4zNDeBJKNyOpJei/ X-Received: by 10.98.180.16 with SMTP id h16mr7325152pfn.153.1522157103304; Tue, 27 Mar 2018 06:25:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522157103; cv=none; d=google.com; s=arc-20160816; b=fc6LB0GjV4n0+cZfAUhJvHLWxj3LgMPz4xgZZtzP/Wi5aqNVy5g7lJ6alOQNMqKOk5 E341l9qWn+sETthd/DT1sLOJ8EWBnbEu3GJqNCirWaIqR1Gw1B/Ex/7TRPqiEqCVH6yx QVF6X7SOzJKo5nLDl0SZx0vozneS//B7UCJjk0XQO7j755lTcIMzDOn8u+y6aUazeA8w 4OAiMhwW28/LcaGzBaQq6vFOE92/P0ohEQ4++k9oIwIg/NTwEdrXbc5FblbOnMuhS80p czn8FH+8jseTfSDxGGN5unqygbIin1PmSEG4/YTd9JhT66aR9TewoiSNwvWM90OgmQ65 B6aQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=/HTQb0m6g0qzMZAPf3RZtupgGohBAxaSPolqr77/4HA=; b=oBCmtE5J00H8XVvGjc5N/MNxbkiAbTVN6RQD/LshZ9r/4NKRdZR8/7Pr/yqh4qHMw6 Ptv6R7ezr7sXPWFJD2rktbMP8kuCYpwbgQzvcgIlodwUroN/FkbiPKRnZb978X5ZJ7qm goRsmxF5BayyUScMtcXIUe3b5CRTm1Ws16nCNrd1iJU97wq9O2mfB1OdxcNsgbgOnJ9/ m4TFcTbmWAnhdI4JZhsV8LU3fNjcgyFk2+lrNXUBdzS9vQ61e+zZ6MKHNPusxWp1Rc2e +X/MpZW19Qf3TMEyzsMwUYh07ntbLreTwJUZ1+20XFvrKgogfAtHQmNS7rCVLjrlpUEP RjFA== 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 o12-v6si1256038plg.715.2018.03.27.06.24.48; Tue, 27 Mar 2018 06:25:03 -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 S1752744AbeC0NQV (ORCPT + 99 others); Tue, 27 Mar 2018 09:16:21 -0400 Received: from usa-sjc-mx-foss1.foss.arm.com ([217.140.101.70]:55038 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752447AbeC0NQQ (ORCPT ); Tue, 27 Mar 2018 09:16:16 -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 C27EE1684; Tue, 27 Mar 2018 06:16:15 -0700 (PDT) Received: from en101.cambridge.arm.com (en101.cambridge.arm.com [10.1.206.73]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 2553C3F24A; Tue, 27 Mar 2018 06:16:13 -0700 (PDT) From: Suzuki K Poulose To: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org, cdall@kernel.org, marc.zyngier@arm.com, punit.agrawal@arm.com, will.deacon@arm.com, catalin.marinas@arm.com, pbonzini@redhat.com, rkrcmar@redhat.com, ard.biesheuvel@linaro.org, peter.maydell@linaro.org, kristina.martsenko@arm.com, mark.rutland@arm.com, Suzuki K Poulose Subject: [PATCH v2 05/17] arm64: Helper for parange to PASize Date: Tue, 27 Mar 2018 14:15:15 +0100 Message-Id: <1522156531-28348-6-git-send-email-suzuki.poulose@arm.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1522156531-28348-1-git-send-email-suzuki.poulose@arm.com> References: <1522156531-28348-1-git-send-email-suzuki.poulose@arm.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add a helper to convert ID_AA64MMFR0_EL1:PARange to they physical size shift. Limit the size to the maximum supported by the kernel. We are about to move the user of this code and this helps to keep the changes cleaner. Cc: Mark Rutland Cc: Catalin Marinas Cc: Will Deacon Cc: Marc Zyngier Cc: Christoffer Dall Signed-off-by: Suzuki K Poulose --- arch/arm64/include/asm/cpufeature.h | 16 ++++++++++++++++ arch/arm64/kvm/hyp/s2-setup.c | 28 +++++----------------------- 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/arch/arm64/include/asm/cpufeature.h b/arch/arm64/include/asm/cpufeature.h index fbf0aab..1f2a5dd 100644 --- a/arch/arm64/include/asm/cpufeature.h +++ b/arch/arm64/include/asm/cpufeature.h @@ -311,6 +311,22 @@ static inline u64 read_zcr_features(void) return zcr; } +static inline u32 id_aa64mmfr0_parange_to_phys_shift(int parange) +{ + switch (parange) { + case 0: return 32; + case 1: return 36; + case 2: return 40; + case 3: return 42; + case 4: return 44; + /* Report 48 bit if the kernel doesn't support 52bit */ + default: + case 5: return 48; +#ifdef CONFIG_ARM64_PA_BITS_52 + case 6: return 52; +#endif + } +} #endif /* __ASSEMBLY__ */ #endif diff --git a/arch/arm64/kvm/hyp/s2-setup.c b/arch/arm64/kvm/hyp/s2-setup.c index 603e1ee..b1129c8 100644 --- a/arch/arm64/kvm/hyp/s2-setup.c +++ b/arch/arm64/kvm/hyp/s2-setup.c @@ -19,11 +19,13 @@ #include #include #include +#include u32 __hyp_text __init_stage2_translation(void) { u64 val = VTCR_EL2_FLAGS; u64 parange; + u32 phys_shift; u64 tmp; /* @@ -37,27 +39,7 @@ u32 __hyp_text __init_stage2_translation(void) val |= parange << 16; /* 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 |= 64 - (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.7.4