From patchwork Fri Sep 25 15:02:23 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tudor Laurentiu X-Patchwork-Id: 522897 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 5DAD11409A0 for ; Sat, 26 Sep 2015 01:18:41 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756505AbbIYPSk (ORCPT ); Fri, 25 Sep 2015 11:18:40 -0400 Received: from mail-bl2on0134.outbound.protection.outlook.com ([65.55.169.134]:63488 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932169AbbIYPSi (ORCPT ); Fri, 25 Sep 2015 11:18:38 -0400 X-Greylist: delayed 958 seconds by postgrey-1.27 at vger.kernel.org; Fri, 25 Sep 2015 11:18:38 EDT Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Laurentiu.Tudor@freescale.com; Received: from [10.171.72.55] (192.88.166.1) by BLUPR03MB312.namprd03.prod.outlook.com (10.141.48.28) with Microsoft SMTP Server (TLS) id 15.1.274.16; Fri, 25 Sep 2015 15:02:37 +0000 Message-ID: <560561FF.7040803@freescale.com> Date: Fri, 25 Sep 2015 18:02:23 +0300 From: Laurentiu Tudor User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.7.0 MIME-Version: 1.0 To: , CC: Mihai Caraman , Laurentiu Tudor , Scott Wood , Alexander Graf Subject: [PATCH][v2] KVM: PPC: e500: Emulate TMCFG0 TMRN register X-Originating-IP: [192.88.166.1] X-ClientProxiedBy: AM3PR02CA0058.eurprd02.prod.outlook.com (25.163.180.26) To BLUPR03MB312.namprd03.prod.outlook.com (10.141.48.28) X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB312; 2:yGqkcM2Pepx+AmTUkVGpwVKwupcKDV6eru/bxF3HFou8XEz1w+DxEEPlGigSmUewE4HYXvIIH5tfPXJxYq4vjmHgnT6CHxZkMJzaMCsYbPwH+bI+py2nQHGyTaM/fFTpT9LcVKpsNgbRkxjdloNhxNGalB9U/hVh5KLpX4Td/qs=; 3:DcMK26EeUL/0dp3bbtXrD6adIe/M5jaL2PxGuqwxzrk9IgIKfWIhprKTF8dOTPk34zUPt4b25BzgWNqjfDmF0uMTIdRHbC6dkTfelxcwbGysFv9ezWqxPZbP08lZbydD+kqCBAbnOzCfSSY0rw9foA==; 25:31Wfw1Y/j71Qhi6fR1eKFH8vjCgis8XHAIPYqbfGazzu3dnkAs597XskXVm8xzkhbogLOUMG7VCteMIFw0hFqusDAOcJF4MvE7JoQ2oTb36cwHn0rd/473uk8G5wHJFchZAEy9AoNecQMomf4KZNva5RJsrO6dpkW9POUiZo5jY3kQs1deZCalYcmtlg9tV43pH9LoCsNZinvirNGmj3JH/1c/HkxogNgk9AcWrxS5xitiCOtOY/94I3oIzVZogaPGhLY2pfCg/SppYaukyngA== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR03MB312; X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB312; 20:8+Jvrwk+yoOqSeSSosVJgUNpv7HaFRRC/DAJmFqSnGTuNScAk3Qfy1BDqQ76iNryVRixye6kcF2zXZeH/edGq+F+damd6DuJCiGDW0+ZuhIUvche4JGGfP5jVZuWN48psDrQFN472jI2sENX6syyoA1v7/pfU+VI3PegO4mDAbRwm0wlq0l3pEg1aMtSrK50GuIHbx9tXcxreAl0JovP3aN9YVW77ysyneMBvfiJzGlrkl29B98fqxzETOMzPM50+cuhn1VmqDalXutsnP6n3X3RB/+GtNSa4juA4N1/5wlSpdooMzLaP6N4hTU+uHGT1IRoWXhrsdDHt4nCPevMKh9wllIj4G38iGqdeF63B3JZFxpK+3IzO3O+4lgPO1NGDc0TkcxllKxv8GzQWhGXdoGHqULow4lkfDmyIBbiGqqsToXC4G/qwt7k8V1MGF5P9kFpSB8cLU+Jt7w/5N+wb90pxGxuTAQlOkutT+q/cSMqcUEoBuEdy2DorapchC5JCrSiCa22CpQ72a5IbFWtBxkqUanTvovFzU4McniVOqDTs1DyaoyFhfUb3uS9jG5JzqcIl5HHWO9K6MYKVMgiWFYmn0jybwCpSzS5fSiNRq0= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(8121501046)(5005006)(520078)(3002001); SRVR:BLUPR03MB312; BCL:0; PCL:0; RULEID:; SRVR:BLUPR03MB312; X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB312; 4:01mtFOxqxOYmh2ggd5KswKfGUWTGKgAQ36c32wi1L6xxmwvnBDvsQTiLl9Sb05tjvloRCsqg8EEeFaphPAcJQbufiP8BDzEpPjO+ZRJ3Ap5Mx+1F/lh9RNRdHxjiAInGGmDWW29vpyT6i+eXSa6tF+LT+Y8lEvVnsTLYYn4GaVkYXVDgYmOhbZdDYxWeDZZIiBGbTql7Tsjqp2vPgznfeDOjh67K5PepfckXlvVOzOXSpx9eAW0Pfa+/cKKUxKC8UIhKLznOk7OO0AZUmU0ccbDf19r2WKoXcHcLldrNFd83MpXi3Sh281EWRS4/ww6fsWdC2lGxzejj3PzIPKwOTXebkEOPjX8qlXKCRFYH7SA= X-Forefront-PRVS: 07106EF9B9 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(6049001)(6009001)(199003)(189002)(83506001)(92566002)(33656002)(19580405001)(5001830100001)(64126003)(5001860100001)(50466002)(50986999)(68736005)(54356999)(105586002)(80316001)(5001960100002)(87266999)(40100003)(122386002)(65816999)(229853001)(99136001)(36756003)(46102003)(42186005)(106356001)(5004730100002)(101416001)(87976001)(59896002)(97736004)(189998001)(4001540100001)(19580395003)(23756003)(5007970100001)(64706001)(4001350100001)(77096005)(62966003)(15975445007)(47776003)(81156007)(5001770100001)(65956001)(66066001)(65806001)(77156002)(42262002); DIR:OUT; SFP:1102; SCL:1; SRVR:BLUPR03MB312; H:[10.171.72.55]; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: freescale.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?iso-8859-1?Q?1; BLUPR03MB312; 23:2VX/bmCU2kDwPFmW0yJYj58dqhtyCDpBGRcKDXeT?= =?iso-8859-1?Q?tOECBZr+AItU6YY2BcVrM+DbVC3XUKICBJEpRhHWT1ICd8ah8AjPmUYZI+?= =?iso-8859-1?Q?uiEK2bX+AzQAznPEoFDsr94DzXo4qyZJE5TTr90qOMBbKPQUWcpeKDOlAv?= =?iso-8859-1?Q?6b9OxEWCSRKQ9GKLkIuP6Be6dxJO27pIAMvgAfH5Nwm5Yy46liMdMliftp?= =?iso-8859-1?Q?Pa+XDJVzKxeuaGeJKOEBgAaqPRxMmaICLksO2StdDSFa52MDGk0GPu4MLi?= =?iso-8859-1?Q?MDqk4OL6lF7BbvOxUJEoudiLch42p2vN54IXlH+nGHFkMdqMjo07V/O0/C?= =?iso-8859-1?Q?CKOA2ynxxL8RDc0CePxHBadczlOWNyl8jq5VsyjP9AiqkvMpHIIQ9AnTsP?= =?iso-8859-1?Q?pcQrISoYIeBB0fBcJeGf5GSqq/eP9e6eEzIzpshrpN2lWRpqMrP4hqbDQr?= =?iso-8859-1?Q?nAqvX5vphRMAKCQAPshSUVJ4/mrUzLc27k4pwPHdveCGoeUk3j4O4VDWjt?= =?iso-8859-1?Q?STlxqO21y6g6/SfTMd2sh4s8Mzl93ae0NKKIv39ZWUgqc2VN6royfUoHju?= =?iso-8859-1?Q?SQcH4u5T5Oet29a1JlVcpGjZgC6uNAo7QIgFYgfTmur8ZNeB+/g0Yvz20u?= =?iso-8859-1?Q?4Mp9YIrwzpSrsfwS6QcABj6RHvKytWQCGoZ+fHlpgzVppndf7SIrGxe8Jn?= =?iso-8859-1?Q?EKR/w3sTrc6W0bPvbXKd1UbfTMzSPtEsCciVTqwbx5SuewAMy67L8uUPoj?= =?iso-8859-1?Q?wqF68g6Dib/SVYq8Z6WPHciT69n69kMaiYg8EVlrZ2r8qd5L6EmRiCf+d/?= =?iso-8859-1?Q?cJkKV0G+FdVFGZXj8cHMuDAUNHz8seqRSiWXly2J9Sppgq9EC77S9dhpyo?= =?iso-8859-1?Q?w20u8l1r4dnwUrmIpSIm0l/uVd9SgP0qwaYblJ5TG8EPLoBNNPbnpGF4IT?= =?iso-8859-1?Q?V+J22SUuMPi9LT/f+n/Bob3DDelha9c//E/Rg/rmpyb4iNtw+EzneI4/tJ?= =?iso-8859-1?Q?LP8MNwqMiFiedjTKtnvGQfYbvVunb0VmLqKAM/U0mW6I7xvzRm8RlWBmRB?= =?iso-8859-1?Q?oQlkPPAQrVCuNqOKGQcLZBwws7brfWcehOn5C1NJjEh0j4hIRzCzUwoJi1?= =?iso-8859-1?Q?oJr7sWwBoKn4ZJB6xrSNkMfGa8AxtdcUJkwOA5sXE1E0jV6vw/hgx0nCdA?= =?iso-8859-1?Q?abQwSWOknr7dxZhGRmius+dGDAfot7dt8boSxQMNMLI7HviwEq68gK1bzv?= =?iso-8859-1?Q?047/2SAa9HdtKBWtm+djHgTC+I2XQooJ5zVbozOLah5u24QfbjZIgIH+FW?= =?iso-8859-1?Q?gO1V/hFdwP3sw7Lv7IeeC2QOgMyjTvw9Jk6DKqY6EP6hl4lVF5R/EOiCB+?= =?iso-8859-1?Q?QKvIKzRINFZDxpDC7hAiE1PeuhgV4UItgxtyrzJWoIOE8+ZyeQ=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB312; 5:wcjVwjAfrmWqObmSmWbkkapfd94bawnl+uPAfmW4OIT6NbEe6NZPw6sXPX0kfHLUiCt3hyrjKN/Bl1oeSGn9S/qAdCkbdF9Q+fgBDdzMs8FfsjHaopNtMpSoBZRhnKwDk/YtbXa49EHXJiNlpyS+iQ==; 24:nOFHhqXBWhO07hWFncCuZpYIIm33nouGdYJA5nnfpMEsdR0jZ7xBn5Sh9wKVlOEBKux7TKqW4TUD+gxOvaujmSpNpN/xky0tE86MCtNS7ls=; 20:WGagovswD2ZA/QrNpqUfLj11oqZJl15vgtpQDezz8epzuwWjcTXudcQDztGSv/b14A+vXwhrHf96/msgf1fbHw== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Sep 2015 15:02:37.7009 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR03MB312 Sender: kvm-ppc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm-ppc@vger.kernel.org Emulate TMCFG0 TMRN register exposing one HW thread per vcpu. Signed-off-by: Mihai Caraman [Laurentiu.Tudor@freescale.com: rebased on latest kernel, use define instead of hardcoded value, moved code in own function] Signed-off-by: Laurentiu Tudor Acked-by: Scott Wood --- v2: - moved code in its own function Needs this patch: https://patchwork.ozlabs.org/patch/521752/ arch/powerpc/include/asm/disassemble.h | 5 +++++ arch/powerpc/kvm/e500_emulate.c | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/arch/powerpc/include/asm/disassemble.h b/arch/powerpc/include/asm/disassemble.h index 6330a61..4852e84 100644 --- a/arch/powerpc/include/asm/disassemble.h +++ b/arch/powerpc/include/asm/disassemble.h @@ -42,6 +42,11 @@ static inline unsigned int get_dcrn(u32 inst) return ((inst >> 16) & 0x1f) | ((inst >> 6) & 0x3e0); } +static inline unsigned int get_tmrn(u32 inst) +{ + return ((inst >> 16) & 0x1f) | ((inst >> 6) & 0x3e0); +} + static inline unsigned int get_rt(u32 inst) { return (inst >> 21) & 0x1f; diff --git a/arch/powerpc/kvm/e500_emulate.c b/arch/powerpc/kvm/e500_emulate.c index ce7291c..990db69 100644 --- a/arch/powerpc/kvm/e500_emulate.c +++ b/arch/powerpc/kvm/e500_emulate.c @@ -15,6 +15,7 @@ #include #include #include +#include #include "booke.h" #include "e500.h" @@ -22,6 +23,7 @@ #define XOP_DCBTLS 166 #define XOP_MSGSND 206 #define XOP_MSGCLR 238 +#define XOP_MFTMR 366 #define XOP_TLBIVAX 786 #define XOP_TLBSX 914 #define XOP_TLBRE 946 @@ -113,6 +115,19 @@ static int kvmppc_e500_emul_dcbtls(struct kvm_vcpu *vcpu) return EMULATE_DONE; } +static int kvmppc_e500_emul_mftmr(struct kvm_vcpu *vcpu, unsigned int inst, + int rt) +{ + /* Expose one thread per vcpu */ + if (get_tmrn(inst) == TMRN_TMCFG0) { + kvmppc_set_gpr(vcpu, rt, + 1 | (1 << TMRN_TMCFG0_NATHRD_SHIFT)); + return EMULATE_DONE; + } + + return EMULATE_FAIL; +} + int kvmppc_core_emulate_op_e500(struct kvm_run *run, struct kvm_vcpu *vcpu, unsigned int inst, int *advance) { @@ -165,6 +180,10 @@ int kvmppc_core_emulate_op_e500(struct kvm_run *run, struct kvm_vcpu *vcpu, emulated = kvmppc_e500_emul_tlbivax(vcpu, ea); break; + case XOP_MFTMR: + emulated = kvmppc_e500_emul_mftmr(vcpu, inst, rt); + break; + case XOP_EHPRIV: emulated = kvmppc_e500_emul_ehpriv(run, vcpu, inst, advance);