From nobody Sun May 19 20:29:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1572050240; cv=none; d=zoho.com; s=zohoarc; b=mWACxGPWS80tIvhXwAwlJQf9pvd3cyXFG9DWdHvOPSBbVeXY6Zq5+/mqcjsPNtEEqka611/A/FCWxbpBQca/1LMsWrrhd/F7V8s7aQOhpnUn5pyX0iC3F2zoZdlcoabB1OVuNmP2NMyCXl5mI3c2s0fYnvRfy37E34aojOyq7vM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572050240; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=5M3CbCVeP6EVa8oPHMNs9/UbYLg/5QpmamrpCUmvezA=; b=RTgphQr9/Jhgn2PtsyHF3QX0yl05p1VkOo4wpbMcwVecFjgTGGGmVoNHyNvGGfCT9BOyGUaMmB0nH/l2p3pwaSAFIXcuN2ef+Nmd4Z3iL+zeTPCa2AAPem5lfoJjBy4tqc/IvcmxX3ft4mPnfRxtr0u6rRa+PaiigI46ASazeNI= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572050240262743.5359486955548; Fri, 25 Oct 2019 17:37:20 -0700 (PDT) Received: from localhost ([::1]:37492 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iOA51-00052y-82 for importer@patchew.org; Fri, 25 Oct 2019 20:37:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49422) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO903-00046d-7E for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:28:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iO902-0003s7-4P for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:28:07 -0400 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:10389) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iO901-0003r5-T1; Fri, 25 Oct 2019 19:28:06 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Oct 2019 07:28:05 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 16:23:31 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 25 Oct 2019 16:28:06 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1572046085; x=1603582085; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Qq3BN6rY7UmBDtE9mG6vAdLDQL46C93+/Qlv2qhxHJg=; b=QAFmJwA9QODJRxgEycv/u0CsMvbonvFR07igO47CTAOa6aIBQoZLDzKj n7+YmkZmYUIq96/HqyjClVPj68964torxlMNP4K+GTl736ej9JnXjqDtM 1Nqbf1LpWC7zv0GuLeS3j61fFGyqW3q/1yc7R4Eq6IAjOl6A94b23+cSo mIB1SKZ97zf+hOsx7UKP1ABWTkqpTsplSJ+yPOi3WpjV55NGp9Q4pWqUL iwUlwC19sw+5+KMrPqldSvxlWFggMwKkLxktZuTun2MsUhbbCowFQxkKk gFymXE+EMZvdDYOcAiTkh4KOxhGl2nFZynEptSxW/IzBT8ragfUaBCrJA A==; IronPort-SDR: sGEVy0jQC/WDyuTxm7D3T9uQiZmWeB7Erb6Rot7BedHq/9lUKK7Kpj0iBiONil4pvgeKhZgeC7 IuPKOKGc79kMRlg618/3QJsyJ79Coue25EM37FEF+aOFJDWjQlQydtCEgeVt5TpL8Znhs6AX2D qRul50Zb7ojHAl6J0q85+P8xHtPac1Ohvw9B2jRZt7K4oG/GUE4GwVsG5vFdEXgM/H4ZTuYBpg //DpiZTlw2wLdZ4PXaD+BwruwRYS3qhP417x8mYmaRepUbxf10IZgGsnPHl2FDGsGbTQDuEFcG J5A= X-IronPort-AV: E=Sophos;i="5.68,230,1569254400"; d="scan'208";a="228520354" IronPort-SDR: kwetnRu9aD3e+ay57fbishlyAfyh3WzQPcIKso8w5KBp4DsK7KE4KqJI8EU1x95C0zkBIneSDt 5d2j9157uuNL59g/NK46T4fJPsa3OVPMIfItIOpdvY4UO0pBIJ48nvnSPfhGadunKTBPJrrs0+ VtFgEZHy/+rYXiCF1GPvaJaOoqEWqOAYUW8tMCcCvbM1ylbBDLWdciJgTlZP0CoYl/cFLzwx37 4+9hWJeIgm74MrKNlz4G3J0ZLEM0mAf6a1CDMky9l8mRve5yKlvMnBYn3AQfYlXJgCyLMLkU2z 82XJJVDFYwhRizwbQVBWJFnq IronPort-SDR: RyL78MHZk9qyGuMPRju9DLHoPADQJis7Spd8vMTWdsIHFez2A8UVQfsPI9PfufFG7bsyJ8ZWto H1JfNAIQnxtzIc8XgapqCSeKb82GIYfKYflEFinQFeA2K2JziD8FPoWvCls1C6xJZ2FUn3hxw1 1K14Bba8K8DZvi5GpFjByJ2AaRbLH4J4P/cpRtr7dO6+4IefZlcf46VfVLyNDSeYSURpWsjC9D 5bTLGIQ4j2VFmeDUNkfniP/G6RmwKhYfVlUo0BngWF9WmGa6wzpnmpRs27UaPV4PWKtDceGCk1 4QQ= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 01/27] target/riscv: Don't set write permissions on dirty PTEs Date: Fri, 25 Oct 2019 16:23:10 -0700 Message-Id: <092c283c3e57b668490e150e8799de28171d6972.1572045716.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 68.232.141.245 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Setting write permission on dirty PTEs results in userspace inside a Hypervisor guest (VU) becoming corrupted. This appears to be because it ends up with write permission in the second stage translation in cases where we aren't doing a store. Signed-off-by: Alistair Francis Reviewed-by: Bin Meng --- target/riscv/cpu_helper.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 0e1a4d91fc..31f553efb9 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -344,10 +344,8 @@ restart: if ((pte & PTE_X)) { *prot |=3D PAGE_EXEC; } - /* add write permission on stores or if the page is already di= rty, - so that we TLB miss on later writes to update the dirty bit= */ - if ((pte & PTE_W) && - (access_type =3D=3D MMU_DATA_STORE || (pte & PTE_D))) { + /* add write permission on stores */ + if ((pte & PTE_W) && (access_type =3D=3D MMU_DATA_STORE)) { *prot |=3D PAGE_WRITE; } return TRANSLATE_SUCCESS; --=20 2.23.0 From nobody Sun May 19 20:29:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1572046344; cv=none; d=zoho.com; s=zohoarc; b=Ww+ZpQZjwY9yMF6DwXX3oDoDDuHTEIjh4oVnfH6Yd4nei69AujjhcpXIdIbzgpOBTGTupaqbhr/KwhTG8xO+UUm3+5QeNtCB3qoOc671BJLJd4SfAyut/FQPjItiGAxS6EHPKrxYkm/Xgzg+kxmGEbqa4ewpoGChYqIwQVcX+RY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572046344; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=p6sywTPMxm9isC9mpPrLVGqXIE6TvTLj5Jb/JKTT4NI=; b=Ut4OIdbD1YCYszzkZNLID0DETVzlGtYLB+eqSIcqqL8/fTBhT2tSeMVmnLn6Hpa87fttmx2mCQTAkvhlKdjQKTfaRPBtARG52fP14bTx6LcG4Fn1YHXg8783eU8tVKJzfr3p9qaBj5d9+Qfuov8bYUB1UMYgTYTtkkOReZ4V4dE= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572046343951822.2907144234072; Fri, 25 Oct 2019 16:32:23 -0700 (PDT) Received: from localhost ([::1]:36950 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO94A-0007rd-4B for importer@patchew.org; Fri, 25 Oct 2019 19:32:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49546) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO90n-000519-8S for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:28:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iO90m-0004CM-AQ for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:28:53 -0400 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:10429) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iO90m-0004C1-35; Fri, 25 Oct 2019 19:28:52 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Oct 2019 07:28:09 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 16:23:35 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 25 Oct 2019 16:28:09 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1572046132; x=1603582132; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=FI6cG3zfTPQCvMUxHiSic1vMFtD9mJgMAFMEx1PCwOo=; b=E7EDGRZGj2IP5BmXeAu+KK7j3nWNNtJPLzZVRbSccSNx0YQf0vqlfe5U 6nraZ/7Bq7WjSkGeUm/fqJdroBmhUvkaOwDhljSHbS5GuIuYdt3G4Hmt4 U5ymljeAa9sNJYVHSh+S+4zL4RKTiIVHipE3gbjkBmfEx6UV0TteIyOs0 brJnpUpcj9CJL6O+mvivkV4MsmL+ek5y8s1G3GnWzq9dQaGCbfWx2j3Nh 8yZlfpGd7CZRXEClTd1l25QzTp3GpktbOMIOItLpOIEG1l8J3kizAq4RR fsIH66xPB9llvjXBEoOZgiLTrIUoSXMoXdGnLYnATv1AVqghUxKaB1vhj Q==; IronPort-SDR: 4l0ACIQGLGmOWZ5nOTdIOYKxmg3lzMAmmoIPdvGqVWJ7CsgC3q4Z2Wvj5C/rPdeflac/FVpU0l tsrp9lK82fBaSIbG3wetZKLEM4qjIdJe0Dvbq315P/K9roZJrxEPLVuF9k5qDa2VALJl3WeHWB SwlZafVdqJ/Z4TrS2cWC3+1WCXI9rWx7A6wgQEt2voZkUv18omtPJoVpGo2eprYQqaUrBMEUq2 +5V4V/c0uzuJkRB7pa5pJNkzdf96lqypUY7NykA6a9GCMpYLW+e5ylm73YnAufm7g55SueME7s ECA= X-IronPort-AV: E=Sophos;i="5.68,230,1569254400"; d="scan'208";a="228520383" IronPort-SDR: ht03ARS33S6GCmcx/70kIIkC54+2jD0C0jj6tDESxmgeJuESssjDf8aUz14zjTzDVNVupc24um fEemQflvL/GpnOS3vM6JALBG/YwYnIaQNj6B2VuQVQceaKctAZwuCBAfhxEEoPQMGimyAfG/s2 /9FTu4+eehnzz1rPH245WrCzmfqQe9V3v5xIt6bvKwGE+t3R52cu03kBLhDh9rb05RapA+z8do 0W+7nUNcZCiaYr+2A4FxZbzez1KTvvB0t871Bp83b5dokHpMKoxjbnYt1SO/aVLEPZmn7pKXlO nb8ZFqIU+UPTKZsVRYwv4kn4 IronPort-SDR: /GD4YmzPrJmuht30+ba6LFrckbBdvrB6kI5DEfAygemnC/p4vxjZfZIojKfJrfyg5LU38WGdXH cs0XHRIBF22SX778MjQLt/FfL4GFciZPhteSW2yqTPbeDGKpQO+DYGGcmFZ71Y3UM2DiuMWnHd 66A8lmsL2SnONhijvmLZzQ0FK1McNRwqQvXXnQ6lz1vbe3mP7ScIda1WcTXVVUG/Aut0F2ZFDM fxdtDPGixg/thMCmCJehbS/KyygWYkzjx1WOzsI12eTSs2KVszQszmEACcwAB6LbYRAczr14h9 /XY= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 02/27] target/riscv: Add the Hypervisor extension Date: Fri, 25 Oct 2019 16:23:13 -0700 Message-Id: <3df46da156e3786de08b5b47f08277efcf6f366b.1572045716.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 68.232.141.245 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Signed-off-by: Alistair Francis Reviewed-by: Chih-Min Chao Reviewed-by: Palmer Dabbelt --- target/riscv/cpu.h | 1 + 1 file changed, 1 insertion(+) diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index f889427869..91e1c56fc4 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -67,6 +67,7 @@ #define RVC RV('C') #define RVS RV('S') #define RVU RV('U') +#define RVH RV('H') =20 /* S extension denotes that Supervisor mode exists, however it is possible to have a core that support S mode but does not have an MMU and there --=20 2.23.0 From nobody Sun May 19 20:29:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1572046619; cv=none; d=zoho.com; s=zohoarc; b=TWmK1z0i3q9AwGefXN96C8I4T3ni0Yn3DKevkzOI2tNnFRIauJrWB9ihJPDzXqM7IvCw5GF7YynpftKNizGOfQh9fcQ1aS6ghceJzUkVv/QbGjsDHWEboeG2aXfCQxYQqcaM3hs/hlrhfzWyynfp9cFo+T+Zt4SeDv75klh9n1A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572046619; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=VSwn0gvjNhGNCB5fKSv2w2qKTZOnJ3MF9mbX1baik9I=; b=bGHxnJormDeBbQ04uwqA2FWJUAivyjPfh3BOoucAFyPpAwltVGgI6Z8hX3y04XADEcxaBAR7CgVU2opYnDuAUPWS09IuGJR2rn6wHWTECKfTpGNdbVIEwlvivBN3sl1qARzK8Eg1T58z+SN9AnN2/oLiTJtIOAVLQRLA9tqp88w= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572046619645595.0951568642239; Fri, 25 Oct 2019 16:36:59 -0700 (PDT) Received: from localhost ([::1]:37014 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO98a-0005J2-Se for importer@patchew.org; Fri, 25 Oct 2019 19:36:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49581) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO90q-00051t-1i for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:28:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iO90n-0004Ch-5f for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:28:54 -0400 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:10429) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iO90m-0004C1-UF; Fri, 25 Oct 2019 19:28:53 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Oct 2019 07:28:13 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 16:23:39 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 25 Oct 2019 16:28:14 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1572046132; x=1603582132; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=yMWZbTyS09Qj9dioNQRewgxpX8PPPn2TTEBKlAiR5HI=; b=fF/B/hj7SnPxNb61bJzASYuGEi2mhy0wJTJvE483YJo1fhUT16rUkA5A o7DNV8DTsLkMVZADZEDLtv+UMVMROq8HSim9rgOu+WT8mtwsmHIjKqD2J hnje6cxd1V/pCOHsuONsX6f4AZyM1EPeakYgzrtoLE5s5g2tQmENxDk9d Bug6K5kM13DIIhvHFt+xaHFKUlB8YwR0LPUhnSOjBZjMHkrn9Zp1bJ4YU /G2/xMSGFE9E7exRWp5uEVUz1qAsnDV6x7g1iXV6Fd3ek9lZEdn7rmLz6 A8tEHK5T36ZB77PZsFxB95BVL+kQc34UMpk1W5isDG5o5CpV8E6U9DG7F A==; IronPort-SDR: 8FWcOQDcoCPbNRTL4bbp9C9RHBZZEZc5npsBQ8ADftSRJuOjnCirJ8eC6R9fyqEAQi8vk2Ewog KnK/4x4T8AFpDmTk0rjQxIoSTMhbnM6AgciwU+RoKH+LSRda9G4dkqyAluSE6QNtQMJiDbLBuF +JQfyzknOMzlmONG7P1jUxR5ppB09rDeqoQv0cBAKsYXuAvz+uWpVrD4wLU4NFeXMsx6Yy8h7Q gvsGsTat0wRHn7mHCuiwPlEb+N016lCOE5uU5zsLi59JCF0pVZ69QENyq3vmNF3fHoOpdU9O3Q dJg= X-IronPort-AV: E=Sophos;i="5.68,230,1569254400"; d="scan'208";a="228520387" IronPort-SDR: XzBPCxNWHEQsu+jCuPNsHIh6+ZDNeCYBxaoesD+jOEw77Op8vC5nogp2yx68rIWMaen4t6ZJrE c/19H+ud7VKDckZE9jODn+4on/3ZskczznRxULC5TsHnWrHkKgVc0d97ZPo5NSoaA5DxneTEl5 JQz2HTUIXpQNItJjt4ZBeurkIq9A5P9Ub/X6Tp1YGxFnbaoX+IcZkgPArPiZes10Ib2JdmzETN K07BZhddUSQwW65b6b7v3Z9j05uxLi+PejgX46ftC9hBTa4ebRDf73Y7+vR84E2+6VCebruqRp 3Gbw7VrxH0CYTUdDQM8ofwXL IronPort-SDR: tlC+dNYdKDHL+jfN0iplGcHaTSZq50UZtIokMMO5W5NxvV77ITayQSdsREaUEM9YdpvwZPZX6l 1HikYpTPGJnodHk3gw0gX51IK/VOCTXnaPZ4Xu03/xmFu4MhmE+mb+wmxPA8zV/o715QUfUNBW /hKpkXLI5F5qGDYYLzuRTHmq8/f+6IUmAwp08Obyh2vw/1CuFs0T+3ih7UBIimgIMv5y5KR7L0 4tEj+SZX5frsm+vOobwfQEU4C1Dy5qBNAFmxGWziLuNFMQdQvMo2Fk7IfkfTO0vATCwCIRLaaP 6Vs= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 03/27] target/riscv: Add the virtulisation mode Date: Fri, 25 Oct 2019 16:23:18 -0700 Message-Id: X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 68.232.141.245 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Signed-off-by: Alistair Francis --- target/riscv/cpu.h | 4 ++++ target/riscv/cpu_bits.h | 3 +++ target/riscv/cpu_helper.c | 18 ++++++++++++++++++ 3 files changed, 25 insertions(+) diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 91e1c56fc4..469dcbd1c0 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -117,6 +117,8 @@ struct CPURISCVState { =20 #ifndef CONFIG_USER_ONLY target_ulong priv; + /* This contains QEMU specific information about the virt state. */ + target_ulong virt; target_ulong resetvec; =20 target_ulong mhartid; @@ -248,6 +250,8 @@ int riscv_cpu_gdb_read_register(CPUState *cpu, uint8_t = *buf, int reg); int riscv_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg); bool riscv_cpu_exec_interrupt(CPUState *cs, int interrupt_request); bool riscv_cpu_fp_enabled(CPURISCVState *env); +bool riscv_cpu_virt_enabled(CPURISCVState *env); +void riscv_cpu_set_virt_enabled(CPURISCVState *env, bool enable); int riscv_cpu_mmu_index(CPURISCVState *env, bool ifetch); hwaddr riscv_cpu_get_phys_page_debug(CPUState *cpu, vaddr addr); void riscv_cpu_do_unaligned_access(CPUState *cs, vaddr addr, diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h index e99834856c..b4119cc002 100644 --- a/target/riscv/cpu_bits.h +++ b/target/riscv/cpu_bits.h @@ -422,6 +422,9 @@ #define PRV_H 2 /* Reserved */ #define PRV_M 3 =20 +/* Virtulisation Register Fields */ +#define VIRT_ONOFF 1 + /* RV32 satp CSR field masks */ #define SATP32_MODE 0x80000000 #define SATP32_ASID 0x7fc00000 diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 31f553efb9..0306f3181d 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -82,6 +82,24 @@ bool riscv_cpu_fp_enabled(CPURISCVState *env) return false; } =20 +bool riscv_cpu_virt_enabled(CPURISCVState *env) +{ + if (!riscv_has_ext(env, RVH)) { + return false; + } + + return get_field(env->virt, VIRT_ONOFF); +} + +void riscv_cpu_set_virt_enabled(CPURISCVState *env, bool enable) +{ + if (!riscv_has_ext(env, RVH)) { + return; + } + + env->virt =3D set_field(env->virt, VIRT_ONOFF, enable); +} + int riscv_cpu_claim_interrupts(RISCVCPU *cpu, uint32_t interrupts) { CPURISCVState *env =3D &cpu->env; --=20 2.23.0 From nobody Sun May 19 20:29:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1572050375; cv=none; d=zoho.com; s=zohoarc; b=G2Dy+KdxQ0qIT8jdb3fAepf6x+kHBUpXlsYBS2NKuLy4Uxp7WhKqkDhXKCO3wx/UNBv7oUwBObTksazHSYwuJSC3GrkJR/a3VMfcSuA5KN4FuXCNOTmTmPkQ7ouUFktc+xC4lgWyRYDHA3bTFHj3YbTCe9qQG3Fe4Ka3/CMz7to= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572050375; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ADqXuC+IiG+6Qny19TijnhpzMF8DgZyg6PUz0O+PcZA=; b=kRFel1UOpj1nC4qQIwrC11es6p0CQoerB6CSL9zI5PAgX1B/7ALr36a0IbpVhymkfj0EdQWk9xlJVVU/kHvIicyB71Kc1J1VPjCag8C/2Mral/KeMawjU5Q7Xh8lP5+XsfNpXS94Ap5ECe6PhZAQV5m1UKEuCyJdGX8vissVvqg= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572050375526176.01357559684732; Fri, 25 Oct 2019 17:39:35 -0700 (PDT) Received: from localhost ([::1]:37520 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iOA78-00055F-Do for importer@patchew.org; Fri, 25 Oct 2019 20:39:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49587) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO90q-00051z-2U for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:28:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iO90n-0004Cy-SH for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:28:55 -0400 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:10429) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iO90n-0004C1-F8; Fri, 25 Oct 2019 19:28:53 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Oct 2019 07:28:17 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 16:23:42 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 25 Oct 2019 16:28:17 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1572046133; x=1603582133; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=DQhnDwCbo6vEY1b2mnRNEHztbBzy3si6NxsIoxUeN4c=; b=n++I7cVVcQl6vJOjAm2y/dlisgNHu8gdv0UATGljIfRhAMD9OaGt+WVr gyrcPL058aGHSG6nKbCVR2MaRlX9cnj1+ZFk7ENYgopmFtyM1qURU4QcL 1hTeeK+0T9Cz/bflLgqS2ejIlEoYiF96zqoxBVN6ofkJw2YH87Rj/9lZF 0afFd3CvcoUFoqa72vXdCW7AeKklDolDAHAdTOmlv4dUs7LnIfrPJMUEE X3qmjZkVa/1Q926j65+qa+GLRF45Cdj1xaPA1wpnu+6ebhfeVCuWZ6436 VOlcB/RJyXvJOwX2jdLUO48+xGTSp7i1usLDfJe36CIf2v8WaN38MhLOt w==; IronPort-SDR: DK0vAbxQinLkjjZAVPLfJcp3jv/UCrYt32nm864d0j4QFMfTT9eOkUUgPdPe3ykbxFHVVQDmlE CObysZGQp8NVYFoi8V32qtRbgf9iPoAhYcj4b3JQqwNbWUs0gCZOr4qAKetP6Io+vHvuSKTH5M xZvFmGHt/xuKpwK4khCMPc+XejsS77W2askKxGQYcWDfl+A0GUT9FYhVCzXWon45cFapCCoA/N Lti1r7D7ZiB4X63zxcsOxsqh2LMeuBZeZQNNKgew9IYaBz8orfHOomwDKeaYPX3DJxmnzkeL7N gQc= X-IronPort-AV: E=Sophos;i="5.68,230,1569254400"; d="scan'208";a="228520390" IronPort-SDR: xraDWs50hkmG/574bz49ro4Vz8gDCvkzB0cgOqoPdPptinTzZLU784SiHiMt1xxTjw4ZuGmLDW VWdCPkKfL+1RQx0YDnX3MaM1+WaHvZv5eqB5rsLUMQedqj8PlI2Eso0fGVS7Rjz73Ld6XstXyr Rq57yqvFjffsehETjy+OnL+C++HNAhgr8rXTJC6cCUDo02ZdO/VycyHCCoOf53LYfz5MGW85hE pSC3T2iAzVFvJo/svEj3x+t7kSFg6TMSRHHuyY8HR+qGQZDs+M+6FKJQiQE/q3vkjYKE4vGK+M uIcXk0SkidnEG0mDSlthHMD3 IronPort-SDR: +ESVu87LeHna/YsCn3EQVqngXV3zB37lQxa4MMJRcKNSoOrAuNpLnYsjl9CjqMLo8UvtDz/4F0 UPwBu9XJBfO3zle4QfAh2+MfHv7I2cv0ysf3Cm9WNXzHRDDi2K1SooJBb3ifImv+9nIUL21ydp WJZlgX+8vJnD2BmBXaXPuR5yLKPKSUgdDF5cpwcBenL674WL1a81wC7JcJr3LdeO9rArxkKXQR Tfe0ebkyeXjZwza2qottm+qv04I4ZNCpxIREFFglVxNmucACf32F+a0rA1aUVxEjVAAsrJY7YZ tzQ= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 04/27] target/riscv: Add the force HS exception mode Date: Fri, 25 Oct 2019 16:23:21 -0700 Message-Id: <44f1fe6d0b3ee43c2cd60d574ab8ea5a48ca757b.1572045716.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 68.232.141.245 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Add a FORCE_HS_EXCEP mode to the RISC-V virtulisation status. This bit specifies if an exeption should be taken to HS mode no matter the current delegation status. This is used when an exeption must be taken to HS mode, such as when a second level page fault occurs. Signed-off-by: Alistair Francis --- target/riscv/cpu.h | 2 ++ target/riscv/cpu_bits.h | 6 ++++++ target/riscv/cpu_helper.c | 18 ++++++++++++++++++ 3 files changed, 26 insertions(+) diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 469dcbd1c0..bb7a0e27a7 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -252,6 +252,8 @@ bool riscv_cpu_exec_interrupt(CPUState *cs, int interru= pt_request); bool riscv_cpu_fp_enabled(CPURISCVState *env); bool riscv_cpu_virt_enabled(CPURISCVState *env); void riscv_cpu_set_virt_enabled(CPURISCVState *env, bool enable); +bool riscv_cpu_force_hs_excep_enabled(CPURISCVState *env); +void riscv_cpu_set_force_hs_excep(CPURISCVState *env, bool enable); int riscv_cpu_mmu_index(CPURISCVState *env, bool ifetch); hwaddr riscv_cpu_get_phys_page_debug(CPUState *cpu, vaddr addr); void riscv_cpu_do_unaligned_access(CPUState *cs, vaddr addr, diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h index b4119cc002..162d42f211 100644 --- a/target/riscv/cpu_bits.h +++ b/target/riscv/cpu_bits.h @@ -424,6 +424,12 @@ =20 /* Virtulisation Register Fields */ #define VIRT_ONOFF 1 +/* This is used to save state for when we take an exception. If this is set + * that means that we want to force a HS level exception (no matter what t= he + * delegation is set to). This will occur for things such as a second level + * page table fault. + */ +#define FORCE_HS_EXCEP 2 =20 /* RV32 satp CSR field masks */ #define SATP32_MODE 0x80000000 diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 0306f3181d..1464f73bee 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -100,6 +100,24 @@ void riscv_cpu_set_virt_enabled(CPURISCVState *env, bo= ol enable) env->virt =3D set_field(env->virt, VIRT_ONOFF, enable); } =20 +bool riscv_cpu_force_hs_excep_enabled(CPURISCVState *env) +{ + if (!riscv_has_ext(env, RVH)) { + return false; + } + + return get_field(env->virt, FORCE_HS_EXCEP); +} + +void riscv_cpu_set_force_hs_excep(CPURISCVState *env, bool enable) +{ + if (!riscv_has_ext(env, RVH)) { + return; + } + + env->virt =3D set_field(env->virt, FORCE_HS_EXCEP, enable); +} + int riscv_cpu_claim_interrupts(RISCVCPU *cpu, uint32_t interrupts) { CPURISCVState *env =3D &cpu->env; --=20 2.23.0 From nobody Sun May 19 20:29:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1572050437; cv=none; d=zoho.com; s=zohoarc; b=aU2PkTqO1BnejYDblqV7zBk8VIvxU4LDkj5zVPAYxxiqacEW3hjHdQOXsTqT1BcrEVuS5tHBxI0RJnFYcR1y+GcGm8RNcD1fIPLrUPFDeBlTwB6VAzi8nsYP3h4ZqgRCTR6zqtrCJtyq64bADr/CRepwdz+LpWdoNfI2LgG+K/g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572050437; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=HcWAIRnESh6jJ8na3jaONj4bMoPmDh2QqTPXCHGJbNA=; b=cFkrArc8i9lOVrjyU/WXyO1O4jKWO/wBr1hNydqy48ToikLFB2P6kkS+BrpN1g679pRrBhrzVU975E2n+bxAV/Fk1m5/i7ctFR8oBb8pvWjRFBGV9BlP2/uDESVP1F00uYE9f5O0eY9Z0O8FsWUbiDel8scM2ccchtZ3V6Pnbfk= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572050437167167.15385958696197; Fri, 25 Oct 2019 17:40:37 -0700 (PDT) Received: from localhost ([::1]:37536 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iOA8C-0008BD-7N for importer@patchew.org; Fri, 25 Oct 2019 20:40:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49585) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO90q-00051x-33 for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:28:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iO90n-0004D4-UZ for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:28:55 -0400 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:10430) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iO90n-0004CY-Hb; Fri, 25 Oct 2019 19:28:53 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Oct 2019 07:28:21 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 16:23:46 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 25 Oct 2019 16:28:21 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1572046133; x=1603582133; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=FdeZ4NhLfUCPSsQnsVMq9BAn/ZA/owDOlR0AZEjNA30=; b=MsBFZSVLvGsdLnJ/eYyEfQZ6SLMVjqrlHlBsRuWK5wA4KmXsD6sVeA4B s8hHAVWenLNBdLiLZK/jczpr9I0Tf6mIY2nCFCQ5iPhzd+jujAByO45mL G1pyVFwQ9y3XN5hbVsQAMbbz6df2VxJPpeJG/JRncPjkFYmlE+uQCr2DY R72IcsBRCLzgh+YHNjrd/TtfSQkEYZd+qXCL2qWzl+od3pjfLuB+nOQGX vkJUPrsNI4hH81A0FFBrFM87GefpWBOvVIUWN56OeaVl1n+d/6pyQ0ZTL iLySQs/BOqrrf2WUkuROqdwp2pL0PXNq8g89kLt/BJmTN7MOLe0B7BZIE w==; IronPort-SDR: QIgdlC26c/9NlcD9JFOfk4I9sz+NM75la7FSlmqdBOxgUQwt1VfPgpM85BPoY8j16S5Xvk6Wxf JTfjB/nOjuw0tHHjjX5Z/fav0XKuB5lW7LZP8IiEeWrBbHnTsNnUkaSQLQRcUXLvF9bDFV5CSJ QtRjS4RmcA7yYMBE0Yniz6GmV3EfdE3/hhA7+7petqhSysDywtgrmUOuQwRCR/o8OUh6OtF9sk +szv5Azvxy6YJ9S/EbYscSyJe3Wwal4H2dPfc/SQ8yynZOEtx3G4Aqd9b36/HXNyhg5zzwlzK6 x8Y= X-IronPort-AV: E=Sophos;i="5.68,230,1569254400"; d="scan'208";a="228520394" IronPort-SDR: 8sEjert+rRdGwD95cgxpBTl/O0ah1ECxS5lz954x1vnz6U9KYajYYjHxRT5kFbB0IT8zHSu23q 8/GcNu53B5lGCsW6uHkJrx9ojOJMEHyaSu/GXXAyhE1NfDOI91xuNYtaQrd0SairBu077ohi/U 6qceM5v6RBdBDug/zArhmmytS3y/5szIgUA63X/N2CPclgm4esn4FVuhRXuEnX43Ew0q2Oi8xD l6s/6q1XJn9yEyrXDX8v+rjCtY6lVKZAQq/23sKN9ZhU73MUREpUCK3rQuntptq7U4tpGQs/Nb UGM2QursmSlqgIIRDke+wQJp IronPort-SDR: EaFI86jyQ2mwZkh2WIGp3Nwx7yinwDy8MSy2wV2tMZd+kOK+gZf7hS/gxpMn0F+6YBlyqcmYtt 9d8pHbjPDwcq/7sehmd+H8v7v2A9LGKmc8mm0+/mawGaK9P9/shFzMx8mBH2gMJDd5FlDD3j8q cRr5h10pc1acftoKcHxLHenyeXQbP2KBmsH57VXr0Kq3WDZFcVe88JL6D/5xoCDguH4R2HyfKW Slgkg2kGKB4Lb0enQsIrubpaWrSsdgCvPIk27i/suVJHOkp1k04rWOx+e/oyfRXJI0B5u0x6mG ZYk= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 05/27] target/riscv: Fix CSR perm checking for HS mode Date: Fri, 25 Oct 2019 16:23:25 -0700 Message-Id: <1cb5cdbe67d8d9c489f6c0bedfc6c007e1f7243a.1572045716.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 68.232.141.245 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Update the CSR permission checking to work correctly when we are in HS-mode. Signed-off-by: Alistair Francis --- target/riscv/csr.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/target/riscv/csr.c b/target/riscv/csr.c index da02f9f0b1..08956aa557 100644 --- a/target/riscv/csr.c +++ b/target/riscv/csr.c @@ -799,12 +799,22 @@ int riscv_csrrw(CPURISCVState *env, int csrno, target= _ulong *ret_value, =20 /* check privileges and return -1 if check fails */ #if !defined(CONFIG_USER_ONLY) - int csr_priv =3D get_field(csrno, 0x300); + int effective_priv =3D env->priv; int read_only =3D get_field(csrno, 0xC00) =3D=3D 3; - if ((!env->debugger) && (env->priv < csr_priv)) { - return -1; + + if (riscv_has_ext(env, RVH) && + env->priv =3D=3D PRV_S && + !riscv_cpu_virt_enabled(env)) { + /* + * We are in S mode without virtualisation, therefore we are in HS= Mode. + * Add 1 to the effective privledge level to allow us to access the + * Hypervisor CSRs. + */ + effective_priv++; } - if (write_mask && read_only) { + + if ((write_mask && read_only) || + (!env->debugger && (effective_priv < get_field(csrno, 0x300)))) { return -1; } #endif --=20 2.23.0 From nobody Sun May 19 20:29:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1572046344; cv=none; d=zoho.com; s=zohoarc; b=ARitaJROaPFlvyzE6US1eN+HodPQTdIz5qgWOzd2HdQGQBJfvEUHDmNaC4Yf+4orv/OjDu8mXEwAfBoFtkz1bP8pJJ26YoSBaw/byAozofcT8j4GlFIpRoKUjnmoOE9WkoBGHe1lAKD019F0kwHTh1ZpaqPL4oS1IXTcPQAotjY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572046344; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=hSCdYspoX6TQu7IY9c8oNN+W6n0jeYx4/EYsi+XPhtQ=; b=Vm44W+Jc4uXR2XWjFAGYcjzz34/DbH1o0YdRRqP+Pfm2I7EWGVW3GjWIrGDOpbkPRenYEmLIwpNbdcnJgtubOLfGec2A+JH0jcDL3x6lF22KlmlOcctUqeqs8q2alVdw7bRsq17zZ56Cc5JjjK8ixdE54Jw5VgBk82Y/NG/VLf4= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572046344108114.28905774865189; Fri, 25 Oct 2019 16:32:24 -0700 (PDT) Received: from localhost ([::1]:36954 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO94A-0007sS-Dz for importer@patchew.org; Fri, 25 Oct 2019 19:32:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49629) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO90s-00052o-2h for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:28:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iO90q-0004FX-1Y for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:28:57 -0400 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:10429) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iO90o-0004C1-5q; Fri, 25 Oct 2019 19:28:54 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Oct 2019 07:28:24 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 16:23:49 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 25 Oct 2019 16:28:24 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1572046134; x=1603582134; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=vgPO13ViDPpWds3HfXGuDWeCANwl/5UkQ1OHMUmW53I=; b=BsZRBymx0djYiAaBWCos9mpZ36AMPxaxiSgxDR5cz35eOez9WtvQZsAQ JNxrCrKfwSVjd2dQX/0TzXIY3JcYR1OPkmPR1LBjroZE3n7W9ykZ2DE4w mTj2Rokv00LYlshR24JkIIE4p7ly1/9seObOA2Hh4GbWZKHn/LAsakLcp siPuUNoKtACwgz0I4JQyOu1re8TuTWozl1aUw4neNxDe6trLoeVw5Ph3u n8YoUoSQLaU++bAQV8pl0f1BZ///Y7nXM+pAmqLVIlWspk8YOAA9Q+z40 RTfOrYE588bJj3aZqAIT9t7w7+KiM0iPwUzHGrbRP9H2ipHgqkaysbMbX A==; IronPort-SDR: BX+EEyk0tC7T8cWmdGE2QcM7dkB7W0x9C2lSsQwoaERfHuXNLW7bVO8YHH8RJmVEoruVKpmhXp 7ZbNvjBTykmTcoQd3cNZxIjD/fbZ/CNxYD4VKh5s3cLfPvUMcNDud5+i9Rl8I+1PYEhr1Rb7Yr HTdz0HRD62eYWOeybpY6NhkcOyrh1gWKRTzKwCRgF4lins3wJev0Mb7UOFe7haF8YKdl3sTVCm DIT9TyAQYKNKcEBCzvmXzG67hQBuruDpezVYNiXM1zLxaxl3zvIg3mNE6c11QyhOECOvehsYLa yQE= X-IronPort-AV: E=Sophos;i="5.68,230,1569254400"; d="scan'208";a="228520396" IronPort-SDR: v+5uTPt0owFb8DM+zBvkGPlbHpwIKZlQGVosxRIqWUHK9/dF31quxd3/RsGDXR0UCuJN1kygTs Yv/0dXE3Lf2A3oY55hjMxpq/zzwLodEW2UdyqXVePRU1jliqDN9Zy/Z3dOLpuvHVQXKT7OL56R 0eJZqWIpntRuSu5PSqL+D/PD7YRk6cp/7DInFFSfgyDDn0tiVsDT9krkdk/WoTP3Hyfuy5Sx7X LOPHxWlVCeWRSjmCtMvxsF1O9d80/svGSxLxf3+3RKfHYhvrHcvMPR3Yz8ot6qFYyMoSzPgc06 kVPGgQyQmSV/vEvCy+KyL88C IronPort-SDR: rtNAgrphkr7jqjU8Zfq7G7pMSiHifU+AFX7ztGqT3JYTqgaCamgS5GRC4YaHbZUlsvivFdp3u4 YFI2CYTW0Q/s4Y29Lze/DhFSUYw822Bhw9wfDvmkRmE/3zERVRrNAGxsAx3ZgBxshUWUW+K8Ua 8Zjuz96mtHUVEN4QsSjEvZNNMv+Wa1WgrRA2d3ChoMdXQGaHZGad8dyqT+HITrWUFr3wtypSnR BF8XOuh1s3vfGOJ86NEG1vgHdR1arQRAAiuA6cnJUz4SXYaBF4T3QQtVzaXApvQPM9eT4GlhUb vrk= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 06/27] target/riscv: Add the Hypervisor CSRs to CPUState Date: Fri, 25 Oct 2019 16:23:28 -0700 Message-Id: <1b9ba32053453869847f39afb38b5c5cc53ccb8b.1572045716.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 68.232.141.245 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" As the MIP CSR is 32-bits to allow atomic_read on 32-bit hosts the vsip is 32-bit as well. Signed-off-by: Alistair Francis Reviewed-by: Chih-Min Chao Reviewed-by: Palmer Dabbelt --- target/riscv/cpu.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index bb7a0e27a7..a1625e8af0 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -145,6 +145,23 @@ struct CPURISCVState { target_ulong mcause; target_ulong mtval; /* since: priv-1.10.0 */ =20 + /* Hypervisor CSRs */ + target_ulong hstatus; + target_ulong hedeleg; + target_ulong hideleg; + target_ulong hgatp; + + /* Virtual CSRs */ + target_ulong vsstatus; + uint32_t vsip; + target_ulong vsie; + target_ulong vstvec; + target_ulong vsscratch; + target_ulong vsepc; + target_ulong vscause; + target_ulong vstval; + target_ulong vsatp; + target_ulong scounteren; target_ulong mcounteren; =20 --=20 2.23.0 From nobody Sun May 19 20:29:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1572046857; cv=none; d=zoho.com; s=zohoarc; b=gkpAO1YuVBGR/QSt24gTEt1BAtImOHYJRN1l/sR6rSVJAT7D7UfqyaJ3efzZx8JWJy5A1MenCspHcgWQ3sKAD20jUjMf/HyMC6HVlrCQpufF5mVj5Okg/n/h+nAqLbCdtxVwm9eX/FBJ9dhdrIGcRWkc2ThewM4OWmTZ6nFh3zo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572046857; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=eTmaFqNgfGKQXcdMO505SY2nhXUR25nu9cFb8NeDsAE=; b=UcgihQAZXDw6mdx+bgX66c8wOIU4BH0NWzSjGaava7rSvsF+D6VMC1s0hqUzAiVJbfq4PA5dVolkDZUggUvsUJhW9sZcgPSbaAzSYKy77oionXADVVxO/hJ7VCEKXIoj/ci0HkJ3KdSVbjjU7zrN/zpoKOrLy9t0+e+FAm62/LY= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572046857008258.93304075439994; Fri, 25 Oct 2019 16:40:57 -0700 (PDT) Received: from localhost ([::1]:37058 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO9CR-0003YL-E3 for importer@patchew.org; Fri, 25 Oct 2019 19:40:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49628) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO90s-00052n-2v for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:28:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iO90q-0004FS-1I for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:28:57 -0400 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:10430) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iO90o-0004CY-81; Fri, 25 Oct 2019 19:28:54 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Oct 2019 07:28:27 +0800 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 16:23:53 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip01.wdc.com with ESMTP; 25 Oct 2019 16:28:28 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1572046134; x=1603582134; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=RkqRFiZ2NZ94NDWMXf9YRLVxbO3l93rbLZrfnFMYQQ4=; b=IzYh7nTSW4uwgAgjcJb6j79kxfL0Z3D1tsUE6arOEAfY654Iihy12pIJ EPvRaUFRwe2RiAnNFqhSFpRn2VD0//4NJfabRZwJQslir88/23Svzk1DF X0Sl5WhsTSH50YuljgtcbeWg70VIw0/BCLYu9yDFYrVCVvfCOsvr7Hi5v C+QMeUH9yq5kvllIa/RKO0noA6jDRtcTUUfQA/lxjH3epmdiTgU4IAmEE jtyZj8nx3BdWqDtjDdamZ2ZrOaC/9iKEA9+0qHVXWmpRuoMCbXMRCK8ld f1cTrYGH1hZ0rrrcj8nATNh+MvYrPnR53Nrn5Wy3J+QbrifM7EqxfIx1n A==; IronPort-SDR: 7OITCTKhPB+eeox5FRRIAT3iSSETKcJ/MbO6LrA2qUBhM8nyn7igmQa06IaznKzC4QmKBZTqEs kIy3gvt6/yLA/WQTgDvcdOVbWE2vBewy2UQKonybddoccL3dJ/IQD+pX//hP4yybZ7RH7G/K7Y 2irjkPEU2/liktvMJY74fbHiYhCLEy86Zk5iWx2XcikR6wQRm6EtYT4sCPYd1jSf5jgN6SXRG6 mNq3XvLWmMS8/S8zMTUuNb4078D1Z/FM2GgGkBhNgB8xzsOXCpbq5IeGgsmWFqZLGZzGDbaN9f ugs= X-IronPort-AV: E=Sophos;i="5.68,230,1569254400"; d="scan'208";a="228520397" IronPort-SDR: BE4aCwb0A02r8vLrXfGa2mv6HGM0AxMPoP7BFcaEGeHD7tqEmDFQ5Lo3pp2573p4BF+gByPDgk eZ9WSYz2I274qkf3yfbRWdUQk9PGnNpiMl8gfC7ioooznZn2j78UaMZ9IkF3xD/LG7erXMsxam TQFM14NrEJwO7MbamX9MKU4noQWvjIAKwAhU+2LtE4s6o+ZRxa1twAWRyIAAsMOt1+3wj3MgNJ oJVo+kdmZsz32kqUTzT0WonxjQGUU83EOk3DCAOXCmmEBphKK/j/Sx6DX8q5KyFiytXD09Gc4n Sish1G6Pf0KciT8+Krhy0slP IronPort-SDR: sz4g0rjbkX9cJUSbBEqhtQnYHpFFc7+5SJAqxoNRqk/Tt3QBIK7lGt8moreL0GukvY9qVMWi/e YRoLbdPSlX12tmtkB7FelPgM8U1unWXk4OstvpE/skcpCiYNQlWu3xuaDjp0QtD6bO7G3CNVnf NMk+KVx6F9MiKzrcLwKXzwJ09efllTPs/ImD8D/zx/8GtcI9pxpFbif7sEvZcfjgFeDHMAGXQA IBfclXDXNRYR9N2feQZoALDWB4R07i5DMRlcv9r/yRt1SOzQfSheMV52ltKJb6PYamJohTWq7l TPI= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 07/27] target/riscv: Print priv and virt in disas log Date: Fri, 25 Oct 2019 16:23:32 -0700 Message-Id: <5de7c9ef581760a5e77bb0e66109837d215ffff9.1572045716.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 68.232.141.245 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/translate.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/target/riscv/translate.c b/target/riscv/translate.c index adeddb85f6..8ac72c6470 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -810,7 +810,15 @@ static void riscv_tr_tb_stop(DisasContextBase *dcbase,= CPUState *cpu) =20 static void riscv_tr_disas_log(const DisasContextBase *dcbase, CPUState *c= pu) { +#ifndef CONFIG_USER_ONLY + RISCVCPU *rvcpu =3D RISCV_CPU(cpu); + CPURISCVState *env =3D &rvcpu->env; +#endif + qemu_log("IN: %s\n", lookup_symbol(dcbase->pc_first)); +#ifndef CONFIG_USER_ONLY + qemu_log("Priv: "TARGET_FMT_ld"; Virt: "TARGET_FMT_ld"\n", env->priv, = env->virt); +#endif log_target_disas(cpu, dcbase->pc_first, dcbase->tb->size); } =20 --=20 2.23.0 From nobody Sun May 19 20:29:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1572050517; cv=none; d=zoho.com; s=zohoarc; b=bxA5aH2fQ1h5UhuJYTitXey6p8DlTQ9dWIDQuGujkrXyEU/elX6qEtWoY8LvkgecVCnqAqxrgpAiHzc+JxiRL+rva6kFbsKgwlkr6mG81u2/nxT3ZFivlAl5zmbDPpFBhBzKW8cOCWPNayp23kNg+28M0MX65UeLbs70kkuOCKY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572050517; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=BYButXwPgxduFvzq3oZhWr7Jf6GcB7Z0WVxNe45tRYk=; b=KdaxZFRyHHSmGAqIbEy2r24NZMVzY03+/SciE5K72zLmpvRg5JPMAXYEcfGaZxdyEAVOrgYhv2cO5PqOuEwfg8U4tTMIMVoPJVnY2WYZIT8jb7IaBY1Vuiu3WiNUjpHd7uVzRHUFN6cVdIjhLvIJHeEqgmc3zZ0TK654h1p4XqU= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572050517335561.8921542404496; Fri, 25 Oct 2019 17:41:57 -0700 (PDT) Received: from localhost ([::1]:37548 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iOA9U-0002JC-BM for importer@patchew.org; Fri, 25 Oct 2019 20:41:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49632) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO90s-00052p-3s for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:28:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iO90q-0004Fu-G4 for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:28:57 -0400 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:10433) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iO90q-0004DA-5g; Fri, 25 Oct 2019 19:28:56 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Oct 2019 07:28:30 +0800 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 16:23:56 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip01.wdc.com with ESMTP; 25 Oct 2019 16:28:31 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1572046136; x=1603582136; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=tfjEdhd/vyLlGTnc8lObBWvW/ASfYoq9Ezu7PsP0s6o=; b=lrTZEk7pTkQoiFyDnxk6IjeGYNnG/DLrGfz4Xf9AIsi4i9g5BFsKJuiH 5XOjs+vWEOkMwyFFspZ8z0ONgJy6zaP6yvOho4I7PYGbH5vt9m1p33qXa oB4B/43VphxEEVY4DX/Vi56G7+anHbv+r0sQCajCeBGnO5H4618EgkEXV Og5HzteWNth9M+UV1/3NYXGW1TgmDqDarUrDDNFwJz+hpm3xlK0UpOEVc bw4cKNl6UzUzSdeyYPJ9quG7eXEPfFZh/VpAa2TLfefY2JwnF0EfA0/Ey G4u7Fgsag2PbjkzXpXWFxJkQHl1ZEA6kPXIkY2osPBGAtGsF5tTIdmycZ g==; IronPort-SDR: XiP25r5Do/WGMAmWNxU+6ONMzGmyYanfDGNFuQCB9VDTnR86MjkcId44d5gtNZkQ8O0KFkn9nv qHVoZiX8UriixLbsFTmYRy4TnqWhGi6hWYVVsLV8LpbxyECeo0C0uioAg2j+j2IRopqyQVKiZe 2XsbangeWnpfNnhcl+x/h3119Tje4uPd2yqHNprniOzzQO94BXgsgaQFXrnu6Xn82sUlL5WL9b AuYNBb9tgbRWlkUiCG3dSyGpYz2qd+9BnRtyK2xqRhP84yVVK9VWmYNjiqnuPnSHi2aZxlOFNY 6AM= X-IronPort-AV: E=Sophos;i="5.68,230,1569254400"; d="scan'208";a="228520398" IronPort-SDR: Lf46Pp6kPPx84iYieyzMY9KSDnpXu0nhDaJn4wj9lp7b0kyM9uzjb9F/rUTqQrwGcavP6PsWTm hGeEzw8EblOGtir7/PI1hkbzIHWw0c6ew/jVZiIw8YjSBBwie4vObcsqphnymaizlKNm7JSYtg vSVrUBkfvvP7Qk94liJs/3cu5Q+sV8BhagYp4qzPYinbKma7y0TDFCqpvLwaPR1dvh6ivs3u6x mxNZ2HD1V7bSYlVX26DopXx/lKrlxw+HunegiYWJjZAwXl64HT+mC6GWwgrmf4KgauLzEbFHhP yVCpVm9uLzLzF7Cjk2Uvxh5N IronPort-SDR: pipr8bY0KpY5Ar6WCN+I+uchLW+CmiAKACbsOMEHzdbFlb9r6A5N5VeNd/oV4ZvZtFokKC92fU G0LJJRz3w+FFuvV16GVeasLUr8nwCC+n1DoRA/+a+ESDP8hHQe70tyMzzgx2d6KHvCsvekZN4Q w2fFWryv0yXtAmIw2KHq9nHOjwr8kK4jpsafz3YLjS+nR4pUPnNW7s0VZI/bXy9g7gYDOu9+Wa 0bHLtVPXa2QJTyZfKLw8loxkFhqzUlxRvCZ2XE3GOvaLXySYzFV9ovOg2kohq/4hR71othu2pH 4Ao= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 08/27] target/riscv: Dump Hypervisor registers if enabled Date: Fri, 25 Oct 2019 16:23:35 -0700 Message-Id: X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 68.232.141.245 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Dump the Hypervisor registers and the current Hypervisor state. While we are editing this code let's also dump stvec and scause. Signed-off-by: Alistair Francis Signed-off-by: Atish Patra Reviewed-by: Palmer Dabbelt --- target/riscv/cpu.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index e521ebe2e1..e66fd300fd 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -220,17 +220,51 @@ static void riscv_cpu_dump_state(CPUState *cs, FILE *= f, int flags) CPURISCVState *env =3D &cpu->env; int i; =20 +#if !defined(CONFIG_USER_ONLY) + if (riscv_has_ext(env, RVH)) { + qemu_fprintf(f, " %s %d\n", "V =3D ", riscv_cpu_virt_enabled= (env)); + } +#endif qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "pc ", env->pc); #ifndef CONFIG_USER_ONLY qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mhartid ", env->mhartid); qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mstatus ", env->mstatus); + if (riscv_has_ext(env, RVH)) { + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "hstatus ", env->hstatu= s); + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "bstatus ", env->vsstat= us); + } qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mip ", env->mip); + if (riscv_has_ext(env, RVH)) { + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "vsip ", + (target_ulong)atomic_read(&env->vsip)); + } qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mie ", env->mie); + if (riscv_has_ext(env, RVH)) { + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "vsie ", env->vsie); + } qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mideleg ", env->mideleg); + if (riscv_has_ext(env, RVH)) { + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "hideleg ", env->hidele= g); + } qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "medeleg ", env->medeleg); + if (riscv_has_ext(env, RVH)) { + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "hedeleg ", env->hedele= g); + } qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mtvec ", env->mtvec); + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "stvec ", env->stvec); + if (riscv_has_ext(env, RVH)) { + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "vstvec ", env->vstvec= ); + } qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mepc ", env->mepc); + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "sepc ", env->sepc); + if (riscv_has_ext(env, RVH)) { + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "vsepc ", env->vsepc); + } qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mcause ", env->mcause); + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "scause ", env->scause); + if (riscv_has_ext(env, RVH)) { + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "vscause ", env->vscaus= e); + } #endif =20 for (i =3D 0; i < 32; i++) { --=20 2.23.0 From nobody Sun May 19 20:29:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1572046620; cv=none; d=zoho.com; s=zohoarc; b=DernODO3X7+3zcI0DpEQdYForJqRFlwb5rS4osJGa9/CDBvBkuMrfI4LwRLsJkfZKC0xsgcF+8OacdOOsw9/Ut/oYpKI75pxbNmBMvl3Z9nb/dPOMFzrtpexD6PMtSZ61glpjaHpdCkSDLIgCCd3u9FtA29sbqHeXvmllN3/A40= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572046620; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=/D8NxcYRUHggT0iaND18emEn/qXXh5FVXtY7/tmNKME=; b=YTeoLHEGAn1CJclaPSIWwFtp11miqvmLxS8cdePu4YM3bTabkioM/VUrtpQL6iolVL1Wj3/9mOlZ7+Z/SggOE4APsRXEJN5EXrFYQDtQJmzxyHPabOJVuFzBM+yXxy7p/jEoPE3VbPm0rf8bT7g7bCJVMju416V/ywfgyHx9OjE= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572046620907574.9427900604093; Fri, 25 Oct 2019 16:37:00 -0700 (PDT) Received: from localhost ([::1]:37010 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO98a-0005IN-8f for importer@patchew.org; Fri, 25 Oct 2019 19:36:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49723) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO90w-000556-SP for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iO90s-0004HP-32 for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:01 -0400 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:10429) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iO90q-0004C1-CA; Fri, 25 Oct 2019 19:28:58 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Oct 2019 07:28:34 +0800 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 16:24:00 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip01.wdc.com with ESMTP; 25 Oct 2019 16:28:35 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1572046136; x=1603582136; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=iPlPSnahIpXAaEeGYEZV/xK54GQvDy5AWPshxEhG2/Q=; b=aVgDDXUSpg2+4RZ7UQO/aXRFTS3KEPEKQGtoyaT0/IlMHh3iRSO7LLA0 Et8UGrQOQWvDtutypvy51pyLeGc1ENoA5UkmBmV/Ao2Px7ovZz2KlPl4D 2QaOJ3ke3CEfohYsSHMBSIFlPxip2MnfVaFrSQo7RBH7OVAJ0zpc8pbX3 cmNI5ZmP+qL7e/BSOzgOUAa6AbaV0CPRBJ4l33YWryN08cCJA6Bt/fnHM E3ZHlrg8/vDUz/aKoxvIlSFtlQvFGRDev9afLxieDG6jewI5EANdZ7CEh WT53NSElQlkkf5Pi/mnLj6Ljvcd/qzzlju2v+d48y5e8qwBQ6EJMjx0Cn w==; IronPort-SDR: 8/eZbgyH3ldInkeSO9cF/+atPFddqZdfFprxD44MA+E8MQMLJmTx/xaZzFAiHU7lUQDKexOgKC 16UOwo6IelqIV847hPQja/0A+wd3OegLfVNz7Pi+cgNKljIHuzzTQd60jJQ/u5nTH39F8ZlfmT Fy4hHfPH1wfJ2NtIiJpdd6g1htXARYSVI/DUml9vfXfDzNO0OrEMS0Oz5CHxt738SIMHyJdE9I GKSTvYVbUtf9PmEUx1eOpFZy0yKZwYJllzmdEMEEgDYgOH53/jh+3Uh3BKOhPBv11uplh/pIrk SoE= X-IronPort-AV: E=Sophos;i="5.68,230,1569254400"; d="scan'208";a="228520400" IronPort-SDR: s7rzT46ZW+2RzgO5OOJ5iHF3mXZdTvRY/YJSHC9cNNvtsdrlrKi4mXv+i0F6i5g5fmDiRGYKU0 jiZ2aG8Fy9cm+ZYuIqWJJtx0+okBamR/bjwtYf7OJEOa96Ve7a4KMr1nvCKO4KNob5KO1JCBcw 6eWLG841btMPRv+1Jk5WVi4Dv1azvcAt9Md7WNr5RUQ6GToZ7CYgBepbqInKkzWzGC+Atka82D CFNRaZxtcijVWlBBK/EC3QQbVFJ6Lr/XaAUm8oHMf1iJJLjNdehoRSpF2lMtk0B48+K376ckc/ mxxIry7BBNCYgb5VfRV2YCx/ IronPort-SDR: uu6TRexTESW29auG6OUlU7eotQ6A0tmbRxqoz8lSZqNeYpEkCSi9n8parlxHr6PRLFeJpGGL7z g43GDtUGcpZdhJSOQBBsEB6nm5z+VFlEM7f1x7CcUkwWSbqXE9PVsyi+UtmmvXzmr4M1233OGv 04xqh8681uKykhRohbYi+AOt9sAR2wR9/g9eXisvWLRpTDGB5hKsve+Mi2swzds6krcF6aoawU v3Oq4iGZa5mrvLaCzgo2NBRVnCyjH/sdOPCovUOZWJP1QPB9WKPLUAGNVFks7kpSXdZxv2uwET 0jk= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 09/27] target/riscv: Add Hypervisor CSR access functions Date: Fri, 25 Oct 2019 16:23:39 -0700 Message-Id: <240cc632259f17a1f752ddcceb7e6b5902e61733.1572045716.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 68.232.141.245 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/csr.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/target/riscv/csr.c b/target/riscv/csr.c index 08956aa557..edfafca06f 100644 --- a/target/riscv/csr.c +++ b/target/riscv/csr.c @@ -98,6 +98,20 @@ static int smode(CPURISCVState *env, int csrno) return -!riscv_has_ext(env, RVS); } =20 +static int hmode(CPURISCVState *env, int csrno) +{ + if (riscv_has_ext(env, RVS) && + riscv_has_ext(env, RVH)) { + /* Hypervisor extension is supported */ + if ((env->priv =3D=3D PRV_S && !riscv_cpu_virt_enabled(env)) || + env->priv =3D=3D PRV_M) { + return 0; + } + } + + return -1; +} + static int pmp(CPURISCVState *env, int csrno) { return -!riscv_feature(env, RISCV_FEATURE_PMP); @@ -754,6 +768,55 @@ static int write_satp(CPURISCVState *env, int csrno, t= arget_ulong val) return 0; } =20 +/* Hypervisor Extensions */ +static int read_hstatus(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val =3D env->hstatus; + return 0; +} + +static int write_hstatus(CPURISCVState *env, int csrno, target_ulong val) +{ + env->hstatus =3D val; + return 0; +} + +static int read_hedeleg(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val =3D env->hedeleg; + return 0; +} + +static int write_hedeleg(CPURISCVState *env, int csrno, target_ulong val) +{ + env->hedeleg =3D val; + return 0; +} + +static int read_hideleg(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val =3D env->hideleg; + return 0; +} + +static int write_hideleg(CPURISCVState *env, int csrno, target_ulong val) +{ + env->hideleg =3D val; + return 0; +} + +static int read_hgatp(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val =3D env->hgatp; + return 0; +} + +static int write_hgatp(CPURISCVState *env, int csrno, target_ulong val) +{ + env->hgatp =3D val; + return 0; +} + /* Physical Memory Protection */ static int read_pmpcfg(CPURISCVState *env, int csrno, target_ulong *val) { @@ -957,6 +1020,11 @@ static riscv_csr_operations csr_ops[CSR_TABLE_SIZE] = =3D { /* Supervisor Protection and Translation */ [CSR_SATP] =3D { smode, read_satp, write_satp = }, =20 + [CSR_HSTATUS] =3D { hmode, read_hstatus, write_hstat= us }, + [CSR_HEDELEG] =3D { hmode, read_hedeleg, write_hedel= eg }, + [CSR_HIDELEG] =3D { hmode, read_hideleg, write_hidel= eg }, + [CSR_HGATP] =3D { hmode, read_hgatp, write_hgatp= }, + /* Physical Memory Protection */ [CSR_PMPCFG0 ... CSR_PMPADDR9] =3D { pmp, read_pmpcfg, write_pmpc= fg }, [CSR_PMPADDR0 ... CSR_PMPADDR15] =3D { pmp, read_pmpaddr, write_pmpa= ddr }, --=20 2.23.0 From nobody Sun May 19 20:29:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1572046347; cv=none; d=zoho.com; s=zohoarc; b=DlEy4t/MAk2SSmAwV+0isWNeGMElRORX1WKlPil22SXVTttldiZVX5hPgyXkCaoXMKrmK11VWu7xIRQFbXS6YWTPIduBctk6YNpdgJt7hmz81QuXi4quCttROByoT9Y49ctYvFjMP6HUZ58PuD9JJ9sD3khKL8nHWTtVDX67Yj8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572046347; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=p0jiTaS5YkFCLI5niMVD+1NJT/KEJr7EJ0OmUyeSbZY=; b=msF1KSqzATSS3CZ+LH1bBgOsGO6v6fP8auGpRSmh+eQXXCiqtLRfVm+I8Q1IsrH4SPL2PBt7p/GXJBUOA8896tIoy8wFe+8WOdqC44Wny8Ru51k3nyqiZJS0wmhBg8r4cYWub7vQ9bLrxqWfmGcI98JF7CMf3FThE83rDUUCHv4= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572046347101102.31254798031603; Fri, 25 Oct 2019 16:32:27 -0700 (PDT) Received: from localhost ([::1]:36958 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO94D-0007xM-BO for importer@patchew.org; Fri, 25 Oct 2019 19:32:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49673) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO90u-00054L-GP for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iO90s-0004HT-38 for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:28:59 -0400 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:10430) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iO90q-0004CY-C9; Fri, 25 Oct 2019 19:28:58 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Oct 2019 07:28:38 +0800 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 16:24:04 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip01.wdc.com with ESMTP; 25 Oct 2019 16:28:38 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1572046136; x=1603582136; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=88AOf5/ricp3Olf5cMT5yk+9tNyrWu3Wq5dzzImifuI=; b=quaRH4MrVUItjH+J0Vmj8Q+sEMtXN+Z5VfVNggTSHH4o6spwd3JcIwSG 5ENWlepOna4lUKLGsjwXtAqcnwa2xJOkQsJ2KzvvZkZm7Bqwrx2vzbZBC EpfZH/1L9Nw6QszgRBWGfK8qxZeIBgEXOOn1jb2isdmnF8gtkgUOZoLxt nUBpunEjVjR1K0JTDRuFyuekKnPb7hNbH0OohHUc+t5gx8A3eYCkXt2Bm ZNbu6TaEyCc5eY23pDGZQ6nQaTzZOw4TYCA6e14Y3oiBoSxxWyHWGkUj0 6qyNGti4DYV1CSmKr9d26mad87hZvLEBgkZIQFemw+qodFmNvwNYKFrst g==; IronPort-SDR: avVTqrbhW6Qy8YkUBg9qTp+G4BT0WMtPhLMnSEYEZ4zpMh/KevzfwkwT0fzGgLSiHLZwa3vfKm Sq7REheKw6aKWc7fDn7KoYesUqWcfX4NBsVNAGAQjuNiveIN/dkbd75alndZo3FPIjHW1cDOCf /j8T7VBy7aWisWuTqMNuHUDOBkdnL+XOFDYn076i6geOpMXQXmDTT+DgW2aQ5yuNermxN3FNTt zYkssyGgXq4XRjv9IAZKvXKe/NzNaPLAh1NKfP7hjIgf/Ikd681S3wiK4icUPW0qVB9juVvbQz xvI= X-IronPort-AV: E=Sophos;i="5.68,230,1569254400"; d="scan'208";a="228520404" IronPort-SDR: H9xo/IoxqE/yKFFwYlm9bmrc34A/mlG3Gyqm3CfAMaPZgJAwicwRdZiCqL/kQ2ksaa6RD0ADPk jy09Yx3yK6CHdTb/sn+ZedR26Kstf2Hibs5scmWKUjawZPrCmm/ZwQEuGRK3AR65GkemmYAuLl T94zaCdXomtSoVYWBxnOl2RNNHWFQV2Iys6dOOtRq9lMU8s7ctDEJotmx+N3Sjbf6S9dkWKX6P q7N3zHFYLIcBp87d4P91Iq6r79IUSBpc10WpQpBmGVH30Lx1Z9fqpezzb2MVYWsBPQ4qsYNBFP I0BfO5WTD0qMVfX1e0AKXLGs IronPort-SDR: psxqcSipS3CbgbkRJHHv+Vbaes24J5/t+0pkJ6lnNAwLp9sQlcMEd508RN53nzVbvr4f07pDXw 0T6oMyrEwFRxd9eFduJUiig+sRVcJW2stDyFFXbH5nWlSfm00dX9/bcDIswvbzWnOpKha0x58B 5f2e8aHQ91Vst8MMYzIk0HUyM0H/FPAk1pM0v6JCWxYBhHrFtwQHVRaNme4aLs0kpWcZCKJwp+ W2jKC3kVO+yPqpnY9hmEoGLIhNuSFZSlk7Pejs1oA/dQ+9f8PKKdU+xUYGttDXTNcrcOxOMrcz nZ4= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 10/27] target/riscv: Add Hypervisor virtual CSRs accesses Date: Fri, 25 Oct 2019 16:23:42 -0700 Message-Id: <99971b33159ada296222261e922b11a119a7bceb.1572045716.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 68.232.141.245 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/cpu_bits.h | 11 ++++ target/riscv/csr.c | 119 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 130 insertions(+) diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h index 162d42f211..95909f159a 100644 --- a/target/riscv/cpu_bits.h +++ b/target/riscv/cpu_bits.h @@ -191,6 +191,17 @@ #define HGATP_PPN SATP64_PPN #endif =20 +/* Virtual CSRs */ +#define CSR_VSSTATUS 0x200 +#define CSR_VSIE 0x204 +#define CSR_VSTVEC 0x205 +#define CSR_VSSCRATCH 0x240 +#define CSR_VSEPC 0x241 +#define CSR_VSCAUSE 0x242 +#define CSR_VSTVAL 0x243 +#define CSR_VSIP 0x244 +#define CSR_VSATP 0x280 + /* Physical Memory Protection */ #define CSR_PMPCFG0 0x3a0 #define CSR_PMPCFG1 0x3a1 diff --git a/target/riscv/csr.c b/target/riscv/csr.c index edfafca06f..a1eb15f507 100644 --- a/target/riscv/csr.c +++ b/target/riscv/csr.c @@ -817,6 +817,115 @@ static int write_hgatp(CPURISCVState *env, int csrno,= target_ulong val) return 0; } =20 +/* Virtual CSR Registers */ +static int read_vsstatus(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val =3D env->vsstatus; + return 0; +} + +static int write_vsstatus(CPURISCVState *env, int csrno, target_ulong val) +{ + env->vsstatus =3D val; + return 0; +} + +static int read_vsie(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val =3D env->vsie; + return 0; +} + +static int write_vsie(CPURISCVState *env, int csrno, target_ulong val) +{ + env->vsie =3D val; + return 0; +} + +static int read_vstvec(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val =3D env->vstvec; + return 0; +} + +static int write_vstvec(CPURISCVState *env, int csrno, target_ulong val) +{ + env->vstvec =3D val; + return 0; +} + +static int read_vsscratch(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val =3D env->vsscratch; + return 0; +} + +static int write_vsscratch(CPURISCVState *env, int csrno, target_ulong val) +{ + env->vsscratch =3D val; + return 0; +} + +static int read_vsepc(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val =3D env->vsepc; + return 0; +} + +static int write_vsepc(CPURISCVState *env, int csrno, target_ulong val) +{ + env->vsepc =3D val; + return 0; +} + +static int read_vscause(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val =3D env->vscause; + return 0; +} + +static int write_vscause(CPURISCVState *env, int csrno, target_ulong val) +{ + env->vscause =3D val; + return 0; +} + +static int read_vstval(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val =3D env->vstval; + return 0; +} + +static int write_vstval(CPURISCVState *env, int csrno, target_ulong val) +{ + env->vstval =3D val; + return 0; +} + +static int read_vsip(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val =3D (target_ulong)atomic_read(&env->vsip); + return 0; +} + +static int write_vsip(CPURISCVState *env, int csrno, target_ulong val) +{ + atomic_set(&env->vsip, val); + return 0; +} + +static int read_vsatp(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val =3D env->vsatp; + return 0; +} + +static int write_vsatp(CPURISCVState *env, int csrno, target_ulong val) +{ + env->vsatp =3D val; + return 0; +} + /* Physical Memory Protection */ static int read_pmpcfg(CPURISCVState *env, int csrno, target_ulong *val) { @@ -1025,6 +1134,16 @@ static riscv_csr_operations csr_ops[CSR_TABLE_SIZE] = =3D { [CSR_HIDELEG] =3D { hmode, read_hideleg, write_hidel= eg }, [CSR_HGATP] =3D { hmode, read_hgatp, write_hgatp= }, =20 + [CSR_VSSTATUS] =3D { hmode, read_vsstatus, write_vssta= tus }, + [CSR_VSIE] =3D { hmode, read_vsie, write_vsie = }, + [CSR_VSTVEC] =3D { hmode, read_vstvec, write_vstve= c }, + [CSR_VSSCRATCH] =3D { hmode, read_vsscratch, write_vsscr= atch }, + [CSR_VSEPC] =3D { hmode, read_vsepc, write_vsepc= }, + [CSR_VSCAUSE] =3D { hmode, read_vscause, write_vscau= se }, + [CSR_VSTVAL] =3D { hmode, read_vstval, write_vstva= l }, + [CSR_VSIP] =3D { hmode, read_vsip, write_vsip = }, + [CSR_VSATP] =3D { hmode, read_vsatp, write_vsatp= }, + /* Physical Memory Protection */ [CSR_PMPCFG0 ... CSR_PMPADDR9] =3D { pmp, read_pmpcfg, write_pmpc= fg }, [CSR_PMPADDR0 ... CSR_PMPADDR15] =3D { pmp, read_pmpaddr, write_pmpa= ddr }, --=20 2.23.0 From nobody Sun May 19 20:29:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1572047153; cv=none; d=zoho.com; s=zohoarc; b=GNsZIkWDJst7WPxklOyko70TXmqwdFDW5QRmZWadUwEADJkLXzvJoLoXXv2Ffc8l7ia0Lh+7YkA1Ba3lj5O1VUWOBrV5IuOkanYUSALFjEjzD0AuXlDXwjuBOODNWB9VaRD+GAapKAZ3dqSf1FEnn2VwInZWYg4iju68gXWY0Uc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572047153; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ox+mCnkexgz3q/0LOHjnJsTKipb6qoyedG+0CoMHdtI=; b=gsSe4CZe0rWItApuEmmByXRo4SMu70Iq3uCWrKt6NO2MT2wBF4Z9HQhcr/8Iw7rQv8cKgUdAAPzyD+y9HZ9ewVanh1WsbsNa30eezBIqRQ/N6zp6lf2zxgBoMKjuRt28Kgb4/ANQpVL6Od4wxaqQbZfFDy+HdpD37kr5pF/IVsw= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572047153273440.5074039406519; Fri, 25 Oct 2019 16:45:53 -0700 (PDT) Received: from localhost ([::1]:37102 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO9HD-00029w-2W for importer@patchew.org; Fri, 25 Oct 2019 19:45:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49774) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO90z-00056D-UZ for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iO90v-0004KY-U7 for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:05 -0400 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:10433) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iO90s-0004DA-6f; Fri, 25 Oct 2019 19:28:59 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Oct 2019 07:28:41 +0800 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 16:24:07 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip01.wdc.com with ESMTP; 25 Oct 2019 16:28:42 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1572046138; x=1603582138; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=CTrr4qdivPfJC5uFIs0kK2KS6KzaJSQCgGtWYHEHsP8=; b=L878mvZl9Ru1ttD7s9xWi3eRTS0GC4SgsYiCT3PcopSVxhjYAgz+vQtN Ux+WZF0uPzx5c7/1/jNjFrt0ebck0MCj4cqLuG//WtjzDnkgNtO5SelRf zOFTEFU1cws1/NXD5hzdU0fIdzNEGlQ56ZMckN8WIqKYMIUlgFX4exAXu 62v4EmvNiEaLJBit4JVUeKmTEeTkFc3q0La4kK8GNDKo/FCXyDSSPqidH vrEfVrQ1PrVPbFYJx6Sj45MXMCi3FN4fFT59lwTYUuYN0xe2ecWUDNqgS P8dzwbn6fyI5dLS8ep68mannlvnzzN2zPvhQO3JogaTFcLp8z4H6WWl4C A==; IronPort-SDR: HemOfHT8dBG6LysUmGdTO/mQ5ph8rI7nsvMM6Tdojul7BAaTLDD2LMlYVqPbWzoFiE9nu5rh1k E4EuibP5K4omrv75v6gnKRcYdhGukaBHsv+lyRttUFpO8MwDnHYyRMy4xQzbvLYui5tSamVoPZ xXoNcKGct8/0mZ9EmhE19OHIIya+EHrIn+mdng/K4Y/ZZP9uxV+V/MRMQ5dZtl/Zc4qzbsXyh9 ibkold4qhY+bokRlsUF/U3loNlO2h/rMaRg3aX8NrTKBXB19ji3LtvHMEFGnnN4I66CV5CJuBg V3o= X-IronPort-AV: E=Sophos;i="5.68,230,1569254400"; d="scan'208";a="228520405" IronPort-SDR: bfnx9PCikoj75w8jTdDPON1FRg3hAUVJ6luQTBupmS/+SGmFgDFMvSOCwd8V8ZX1HGwzgLtMer J+Zma46Ht39ZESN4Y6QqGl6TkFEofv3IvvQpSVBpCxHYzORQ0PjFbpronpyBxv/Zg2blMum3ZW xjaXV6HK+itpz9mwk4RANbKDA1eBkeJhAy6WLaW1XpNeBdVqJ2qRZDtcVO6Ou+ax8cPpa6yf4/ TLJ2lbxU49uO/H5yoQqvbh/SSwsnfbLqigIDsYojcr7s+01b0bnpfUsOeie+4N+ONawbcAwapV banqU3iUEYJGwhJwq6h0bSYS IronPort-SDR: MVT5WQEUQwrB2J/NGEqhyo1i9GNVAd5R/c+2+8ua9esbsidsKkabsCjl+Otn3FRVEDWU4q/+xk m5EMv+SB1ENOHALc6ltwb+QCsKzkz5KWSx3VM6FNhCAxN1ECQ3MFqzc9uq0fjnYNR5QO21hN3x dKjHRBAK3ibjsiK26XOB2Wo2vEXzauu9EVhODkmRG7pkMBzZVJ8684q1fA4itxt+wv763bZjIl bnKWPpV2Xvixa+5RIPhuIFOeaqf69nHiG5yr8gii9/2dnDcMfhswa+jgzHOJyVwF1DLRow++6I /A8= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 11/27] target/riscv: Convert mie and mstatus to pointers Date: Fri, 25 Oct 2019 16:23:46 -0700 Message-Id: <3da1c9355946d5571787f9c87ff98a74061bed76.1572045716.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 68.232.141.245 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" To handle the new Hypervisor CSR register aliasing let's use pointers. We only need to convert the MIE and MSTATUS CSRs. With the exception of MIP all of the other CSRs that swap with virtulsation changes are S-Mode only, so we can just do a lazy switch. This because more challenging for the M-Mode registers so it ends up being easier to use pointers. As the MIP CSR is always accessed atomicly the pointer swap doesn't work so we leave that as is. Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/cpu.c | 16 ++++++++++++---- target/riscv/cpu.h | 12 ++++++++++-- target/riscv/cpu_helper.c | 32 ++++++++++++++++---------------- target/riscv/csr.c | 28 ++++++++++++++-------------- target/riscv/op_helper.c | 14 +++++++------- 5 files changed, 59 insertions(+), 43 deletions(-) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index e66fd300fd..f75c709e35 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -228,7 +228,7 @@ static void riscv_cpu_dump_state(CPUState *cs, FILE *f,= int flags) qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "pc ", env->pc); #ifndef CONFIG_USER_ONLY qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mhartid ", env->mhartid); - qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mstatus ", env->mstatus); + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mstatus ", *env->mstatus); if (riscv_has_ext(env, RVH)) { qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "hstatus ", env->hstatu= s); qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "bstatus ", env->vsstat= us); @@ -238,7 +238,7 @@ static void riscv_cpu_dump_state(CPUState *cs, FILE *f,= int flags) qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "vsip ", (target_ulong)atomic_read(&env->vsip)); } - qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mie ", env->mie); + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mie ", *env->mie); if (riscv_has_ext(env, RVH)) { qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "vsie ", env->vsie); } @@ -308,7 +308,7 @@ static bool riscv_cpu_has_work(CPUState *cs) * Definition of the WFI instruction requires it to ignore the privile= ge * mode and delegation registers, but respect individual enables */ - return (env->mip & env->mie) !=3D 0; + return (env->mip & *env->mie) !=3D 0; #else return true; #endif @@ -329,7 +329,7 @@ static void riscv_cpu_reset(CPUState *cs) mcc->parent_reset(cs); #ifndef CONFIG_USER_ONLY env->priv =3D PRV_M; - env->mstatus &=3D ~(MSTATUS_MIE | MSTATUS_MPRV); + *env->mstatus &=3D ~(MSTATUS_MIE | MSTATUS_MPRV); env->mcause =3D 0; env->pc =3D env->resetvec; #endif @@ -458,8 +458,16 @@ static void riscv_cpu_realize(DeviceState *dev, Error = **errp) static void riscv_cpu_init(Object *obj) { RISCVCPU *cpu =3D RISCV_CPU(obj); +#ifndef CONFIG_USER_ONLY + CPURISCVState *env =3D &cpu->env; +#endif =20 cpu_set_cpustate_pointers(cpu); + +#ifndef CONFIG_USER_ONLY + env->mie =3D &env->mie_novirt; + env->mstatus =3D &env->mstatus_novirt; +#endif } =20 static const VMStateDescription vmstate_riscv_cpu =3D { diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index a1625e8af0..5b71ee416f 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -122,12 +122,12 @@ struct CPURISCVState { target_ulong resetvec; =20 target_ulong mhartid; - target_ulong mstatus; + target_ulong *mstatus; =20 target_ulong mip; uint32_t miclaim; =20 - target_ulong mie; + target_ulong *mie; target_ulong mideleg; =20 target_ulong sptbr; /* until: priv-1.9.1 */ @@ -145,6 +145,14 @@ struct CPURISCVState { target_ulong mcause; target_ulong mtval; /* since: priv-1.10.0 */ =20 + /* The following registers are the "real" versions that the pointer + * versions point to. These should never be used unless you know what = you + * are doing. To access these use the pointer versions instead. This is + * required to handle the Hypervisor register swapping. + */ + target_ulong mie_novirt; + target_ulong mstatus_novirt; + /* Hypervisor CSRs */ target_ulong hstatus; target_ulong hedeleg; diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 1464f73bee..21d049cdce 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -37,9 +37,9 @@ int riscv_cpu_mmu_index(CPURISCVState *env, bool ifetch) #ifndef CONFIG_USER_ONLY static int riscv_cpu_local_irq_pending(CPURISCVState *env) { - target_ulong mstatus_mie =3D get_field(env->mstatus, MSTATUS_MIE); - target_ulong mstatus_sie =3D get_field(env->mstatus, MSTATUS_SIE); - target_ulong pending =3D env->mip & env->mie; + target_ulong mstatus_mie =3D get_field(*env->mstatus, MSTATUS_MIE); + target_ulong mstatus_sie =3D get_field(*env->mstatus, MSTATUS_SIE); + target_ulong pending =3D env->mip & *env->mie; target_ulong mie =3D env->priv < PRV_M || (env->priv =3D=3D PRV_M && m= status_mie); target_ulong sie =3D env->priv < PRV_S || (env->priv =3D=3D PRV_S && m= status_sie); target_ulong irqs =3D (pending & ~env->mideleg & -mie) | @@ -75,7 +75,7 @@ bool riscv_cpu_exec_interrupt(CPUState *cs, int interrupt= _request) /* Return true is floating point support is currently enabled */ bool riscv_cpu_fp_enabled(CPURISCVState *env) { - if (env->mstatus & MSTATUS_FS) { + if (*env->mstatus & MSTATUS_FS) { return true; } =20 @@ -198,8 +198,8 @@ static int get_physical_address(CPURISCVState *env, hwa= ddr *physical, int mode =3D mmu_idx; =20 if (mode =3D=3D PRV_M && access_type !=3D MMU_INST_FETCH) { - if (get_field(env->mstatus, MSTATUS_MPRV)) { - mode =3D get_field(env->mstatus, MSTATUS_MPP); + if (get_field(*env->mstatus, MSTATUS_MPRV)) { + mode =3D get_field(*env->mstatus, MSTATUS_MPP); } } =20 @@ -213,11 +213,11 @@ static int get_physical_address(CPURISCVState *env, h= waddr *physical, =20 hwaddr base; int levels, ptidxbits, ptesize, vm, sum; - int mxr =3D get_field(env->mstatus, MSTATUS_MXR); + int mxr =3D get_field(*env->mstatus, MSTATUS_MXR); =20 if (env->priv_ver >=3D PRIV_VERSION_1_10_0) { base =3D (hwaddr)get_field(env->satp, SATP_PPN) << PGSHIFT; - sum =3D get_field(env->mstatus, MSTATUS_SUM); + sum =3D get_field(*env->mstatus, MSTATUS_SUM); vm =3D get_field(env->satp, SATP_MODE); switch (vm) { case VM_1_10_SV32: @@ -237,8 +237,8 @@ static int get_physical_address(CPURISCVState *env, hwa= ddr *physical, } } else { base =3D (hwaddr)(env->sptbr) << PGSHIFT; - sum =3D !get_field(env->mstatus, MSTATUS_PUM); - vm =3D get_field(env->mstatus, MSTATUS_VM); + sum =3D !get_field(*env->mstatus, MSTATUS_PUM); + vm =3D get_field(*env->mstatus, MSTATUS_VM); switch (vm) { case VM_1_09_SV32: levels =3D 2; ptidxbits =3D 10; ptesize =3D 4; break; @@ -493,8 +493,8 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, in= t size, ret =3D get_physical_address(env, &pa, &prot, address, access_type, mm= u_idx); =20 if (mode =3D=3D PRV_M && access_type !=3D MMU_INST_FETCH) { - if (get_field(env->mstatus, MSTATUS_MPRV)) { - mode =3D get_field(env->mstatus, MSTATUS_MPP); + if (get_field(*env->mstatus, MSTATUS_MPRV)) { + mode =3D get_field(*env->mstatus, MSTATUS_MPP); } } =20 @@ -607,12 +607,12 @@ void riscv_cpu_do_interrupt(CPUState *cs) if (env->priv <=3D PRV_S && cause < TARGET_LONG_BITS && ((deleg >> cause) & 1)) { /* handle the trap in S-mode */ - target_ulong s =3D env->mstatus; + target_ulong s =3D *env->mstatus; s =3D set_field(s, MSTATUS_SPIE, env->priv_ver >=3D PRIV_VERSION_1= _10_0 ? get_field(s, MSTATUS_SIE) : get_field(s, MSTATUS_UIE << env->p= riv)); s =3D set_field(s, MSTATUS_SPP, env->priv); s =3D set_field(s, MSTATUS_SIE, 0); - env->mstatus =3D s; + *env->mstatus =3D s; env->scause =3D cause | ((target_ulong)async << (TARGET_LONG_BITS = - 1)); env->sepc =3D env->pc; env->sbadaddr =3D tval; @@ -621,12 +621,12 @@ void riscv_cpu_do_interrupt(CPUState *cs) riscv_cpu_set_mode(env, PRV_S); } else { /* handle the trap in M-mode */ - target_ulong s =3D env->mstatus; + target_ulong s =3D *env->mstatus; s =3D set_field(s, MSTATUS_MPIE, env->priv_ver >=3D PRIV_VERSION_1= _10_0 ? get_field(s, MSTATUS_MIE) : get_field(s, MSTATUS_UIE << env->p= riv)); s =3D set_field(s, MSTATUS_MPP, env->priv); s =3D set_field(s, MSTATUS_MIE, 0); - env->mstatus =3D s; + *env->mstatus =3D s; env->mcause =3D cause | ~(((target_ulong)-1) >> async); env->mepc =3D env->pc; env->mbadaddr =3D tval; diff --git a/target/riscv/csr.c b/target/riscv/csr.c index a1eb15f507..ef9c95f94d 100644 --- a/target/riscv/csr.c +++ b/target/riscv/csr.c @@ -136,7 +136,7 @@ static int write_fflags(CPURISCVState *env, int csrno, = target_ulong val) if (!env->debugger && !riscv_cpu_fp_enabled(env)) { return -1; } - env->mstatus |=3D MSTATUS_FS; + *env->mstatus |=3D MSTATUS_FS; #endif riscv_cpu_set_fflags(env, val & (FSR_AEXC >> FSR_AEXC_SHIFT)); return 0; @@ -159,7 +159,7 @@ static int write_frm(CPURISCVState *env, int csrno, tar= get_ulong val) if (!env->debugger && !riscv_cpu_fp_enabled(env)) { return -1; } - env->mstatus |=3D MSTATUS_FS; + *env->mstatus |=3D MSTATUS_FS; #endif env->frm =3D val & (FSR_RD >> FSR_RD_SHIFT); return 0; @@ -183,7 +183,7 @@ static int write_fcsr(CPURISCVState *env, int csrno, ta= rget_ulong val) if (!env->debugger && !riscv_cpu_fp_enabled(env)) { return -1; } - env->mstatus |=3D MSTATUS_FS; + *env->mstatus |=3D MSTATUS_FS; #endif env->frm =3D (val & FSR_RD) >> FSR_RD_SHIFT; riscv_cpu_set_fflags(env, (val & FSR_AEXC) >> FSR_AEXC_SHIFT); @@ -307,7 +307,7 @@ static int read_mhartid(CPURISCVState *env, int csrno, = target_ulong *val) /* Machine Trap Setup */ static int read_mstatus(CPURISCVState *env, int csrno, target_ulong *val) { - *val =3D env->mstatus; + *val =3D *env->mstatus; return 0; } =20 @@ -319,7 +319,7 @@ static int validate_vm(CPURISCVState *env, target_ulong= vm) =20 static int write_mstatus(CPURISCVState *env, int csrno, target_ulong val) { - target_ulong mstatus =3D env->mstatus; + target_ulong mstatus =3D *env->mstatus; target_ulong mask =3D 0; int dirty; =20 @@ -359,7 +359,7 @@ static int write_mstatus(CPURISCVState *env, int csrno,= target_ulong val) ((mstatus & MSTATUS_FS) =3D=3D MSTATUS_FS)) | ((mstatus & MSTATUS_XS) =3D=3D MSTATUS_XS); mstatus =3D set_field(mstatus, MSTATUS_SD, dirty); - env->mstatus =3D mstatus; + *env->mstatus =3D mstatus; =20 return 0; } @@ -448,13 +448,13 @@ static int write_mideleg(CPURISCVState *env, int csrn= o, target_ulong val) =20 static int read_mie(CPURISCVState *env, int csrno, target_ulong *val) { - *val =3D env->mie; + *val =3D *env->mie; return 0; } =20 static int write_mie(CPURISCVState *env, int csrno, target_ulong val) { - env->mie =3D (env->mie & ~all_ints) | (val & all_ints); + *env->mie =3D (*env->mie & ~all_ints) | (val & all_ints); return 0; } =20 @@ -608,7 +608,7 @@ static int read_sstatus(CPURISCVState *env, int csrno, = target_ulong *val) { target_ulong mask =3D ((env->priv_ver >=3D PRIV_VERSION_1_10_0) ? sstatus_v1_10_mask : sstatus_v1_9_mask); - *val =3D env->mstatus & mask; + *val =3D *env->mstatus & mask; return 0; } =20 @@ -616,19 +616,19 @@ static int write_sstatus(CPURISCVState *env, int csrn= o, target_ulong val) { target_ulong mask =3D ((env->priv_ver >=3D PRIV_VERSION_1_10_0) ? sstatus_v1_10_mask : sstatus_v1_9_mask); - target_ulong newval =3D (env->mstatus & ~mask) | (val & mask); + target_ulong newval =3D (*env->mstatus & ~mask) | (val & mask); return write_mstatus(env, CSR_MSTATUS, newval); } =20 static int read_sie(CPURISCVState *env, int csrno, target_ulong *val) { - *val =3D env->mie & env->mideleg; + *val =3D *env->mie & env->mideleg; return 0; } =20 static int write_sie(CPURISCVState *env, int csrno, target_ulong val) { - target_ulong newval =3D (env->mie & ~env->mideleg) | (val & env->midel= eg); + target_ulong newval =3D (*env->mie & ~env->mideleg) | (val & env->mide= leg); return write_mie(env, CSR_MIE, newval); } =20 @@ -731,7 +731,7 @@ static int read_satp(CPURISCVState *env, int csrno, tar= get_ulong *val) if (!riscv_feature(env, RISCV_FEATURE_MMU)) { *val =3D 0; } else if (env->priv_ver >=3D PRIV_VERSION_1_10_0) { - if (env->priv =3D=3D PRV_S && get_field(env->mstatus, MSTATUS_TVM)= ) { + if (env->priv =3D=3D PRV_S && get_field(*env->mstatus, MSTATUS_TVM= )) { return -1; } else { *val =3D env->satp; @@ -756,7 +756,7 @@ static int write_satp(CPURISCVState *env, int csrno, ta= rget_ulong val) validate_vm(env, get_field(val, SATP_MODE)) && ((val ^ env->satp) & (SATP_MODE | SATP_ASID | SATP_PPN))) { - if (env->priv =3D=3D PRV_S && get_field(env->mstatus, MSTATUS_TVM)= ) { + if (env->priv =3D=3D PRV_S && get_field(*env->mstatus, MSTATUS_TVM= )) { return -1; } else { if((val ^ env->satp) & SATP_ASID) { diff --git a/target/riscv/op_helper.c b/target/riscv/op_helper.c index 331cc36232..d150551bc9 100644 --- a/target/riscv/op_helper.c +++ b/target/riscv/op_helper.c @@ -83,11 +83,11 @@ target_ulong helper_sret(CPURISCVState *env, target_ulo= ng cpu_pc_deb) } =20 if (env->priv_ver >=3D PRIV_VERSION_1_10_0 && - get_field(env->mstatus, MSTATUS_TSR)) { + get_field(*env->mstatus, MSTATUS_TSR)) { riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); } =20 - target_ulong mstatus =3D env->mstatus; + target_ulong mstatus =3D *env->mstatus; target_ulong prev_priv =3D get_field(mstatus, MSTATUS_SPP); mstatus =3D set_field(mstatus, env->priv_ver >=3D PRIV_VERSION_1_10_0 ? @@ -96,7 +96,7 @@ target_ulong helper_sret(CPURISCVState *env, target_ulong= cpu_pc_deb) mstatus =3D set_field(mstatus, MSTATUS_SPIE, 0); mstatus =3D set_field(mstatus, MSTATUS_SPP, PRV_U); riscv_cpu_set_mode(env, prev_priv); - env->mstatus =3D mstatus; + *env->mstatus =3D mstatus; =20 return retpc; } @@ -112,7 +112,7 @@ target_ulong helper_mret(CPURISCVState *env, target_ulo= ng cpu_pc_deb) riscv_raise_exception(env, RISCV_EXCP_INST_ADDR_MIS, GETPC()); } =20 - target_ulong mstatus =3D env->mstatus; + target_ulong mstatus =3D *env->mstatus; target_ulong prev_priv =3D get_field(mstatus, MSTATUS_MPP); mstatus =3D set_field(mstatus, env->priv_ver >=3D PRIV_VERSION_1_10_0 ? @@ -121,7 +121,7 @@ target_ulong helper_mret(CPURISCVState *env, target_ulo= ng cpu_pc_deb) mstatus =3D set_field(mstatus, MSTATUS_MPIE, 0); mstatus =3D set_field(mstatus, MSTATUS_MPP, PRV_U); riscv_cpu_set_mode(env, prev_priv); - env->mstatus =3D mstatus; + *env->mstatus =3D mstatus; =20 return retpc; } @@ -132,7 +132,7 @@ void helper_wfi(CPURISCVState *env) =20 if (env->priv =3D=3D PRV_S && env->priv_ver >=3D PRIV_VERSION_1_10_0 && - get_field(env->mstatus, MSTATUS_TW)) { + get_field(*env->mstatus, MSTATUS_TW)) { riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); } else { cs->halted =3D 1; @@ -147,7 +147,7 @@ void helper_tlb_flush(CPURISCVState *env) if (!(env->priv >=3D PRV_S) || (env->priv =3D=3D PRV_S && env->priv_ver >=3D PRIV_VERSION_1_10_0 && - get_field(env->mstatus, MSTATUS_TVM))) { + get_field(*env->mstatus, MSTATUS_TVM))) { riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); } else { tlb_flush(cs); --=20 2.23.0 From nobody Sun May 19 20:29:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1572047170; cv=none; d=zoho.com; s=zohoarc; b=TapjU2pTkY0JvlgdgG4KBjCdrIxXPw2BilfxcN0Qr68iJD7XAlCRYxfiFw4yLGqpYgOpw7rn6ZoObsKrWcuz6qASVpY80Hs0Uowv7jJncKjH/OgwCxiW1e9T1g66zgx2FCnxTH5lrCUhBDN9JivpnoVIe0L46AYhyyDfTvZfII8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572047170; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=LN5ExnRK5f8Ne8Loew6il4vCJqNLONvEroCc0Z/MVaw=; b=WXL51QTKgUi1PH8FAQeNUF3ybT3hna2YIBexgzG1HcHqUruffHNPD5bVOApm33PCCSK/8ok1LJHiKLG3JQtDA3tJdDAvAcJQvewy0JEFJCvN5EZ6mOck24wg+ufFaZ8XM6/c22UPcLKv2twadGUPW9usIWcRus8n9Z4YiSoA2ww= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572047170214835.0506752885635; Fri, 25 Oct 2019 16:46:10 -0700 (PDT) Received: from localhost ([::1]:37118 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO9HU-0002tJ-5x for importer@patchew.org; Fri, 25 Oct 2019 19:46:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49940) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO91F-0005HP-3c for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iO91D-0004b5-FB for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:20 -0400 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:10429) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iO91D-0004C1-70; Fri, 25 Oct 2019 19:29:19 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Oct 2019 07:28:45 +0800 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 16:24:11 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip01.wdc.com with ESMTP; 25 Oct 2019 16:28:46 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1572046159; x=1603582159; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=DDHawWi9vnsJIypv9nZN4SVpj32wIDHWs0Ek67NOLVo=; b=qY2uhY/N7xUnQgdNWz/FBFpHakDFxJniCKfL1rSvGUAqtrTP364AYR2G +1tJX5QWJT2pZAUGrCC7o5vRwAJztl2k6oxQfSLzQn92PwG6d0d2yYaY0 26sefcRRpEjzCKwoGpPWCGpLF7aJQ1fgs0zGvJXTKer+qbZL8Stl0q/li 3r3UBwb55j78w2pMDjxNzs4GA+7XweyXePMz1QnNMb1G5sTXvlZEf4c7Q 8aujmgXU2hJ82wpaanhbrEpZTLTgmSes9qpLleWF88UPhPf8LAhmI3Qlt j2214jFGvt93SkZ/kGHsJVf4BOhX51c6L4V9GBxfMGJInxwZGJOS1mVyp Q==; IronPort-SDR: ORv8EHiq1l37EpE8cSJyIk9clfRpgst0G2rabU4YWPA8ySwOVoZLvFCX4zXzlKTb87AI3PeRqU olxEQaH+Amvvd8YqwLWE2QPwkbXUufgl5IRJnyVXLD5xEXUiK0XI8ivUgEl40vRj14/h1FxEKd JXqh8avNLRDQR6xJm3siKqLYVliqrSoDN8ThDrSKdC5bsaNjYakE19i7iBIYVOsFg3Wc9z5RCF +3Ac6LYwWZO2eKxvxnuxr2LJ9BvLxcqmpptgNP7UixMA3V+Ewq1Ie3v6bl9IdOFTsGW1o76Rvi p/U= X-IronPort-AV: E=Sophos;i="5.68,230,1569254400"; d="scan'208";a="228520406" IronPort-SDR: fB1jOfcEspkE2XFuQ0R1zgPBjVyQ/AJVlwex+rJ+rqCcs98e2LWQL2gIE17iVAiw46kYlqxY1s gybJSpusduClEOAl2kW9BFlr4KaTi5CK4IBI9K2QwmhkxdgMLokhA6mSAqI1/sPZP5tN99n0/l odCRZk+UxSmOKvJRJeLg/WEisqMJ4UNn9ZS4/qshPNOIlDJMXKM2zpeqlFkmQQoLKUS6YvZy/d 4ADDXR+8jV1/8bjiWqn9z3xVkYJ4yB7TuMZNocaVE1ROohbaUb6KpEQGxTK+iPe/+tPKViO/mG OCF1pyA6mTRhk7R2/3rc64n4 IronPort-SDR: RVnuOUPkJgD9O5xljwX15sRYig/1M6JgCiOxXL6sdj0Gz/os8lcs+gSQHkI/app0X4naInmULh qd3NAcLyVyJWSgSgzjbSK2Vl6QiDP6WZ6nuzzGvJ4hA4klWUXLHk2iqX1MCqQV0kpNohwT63uu 2tP/8uUmVnruPwPdpyZrQR5BYU/QmueTJ0dePI9oLasFm3vbO51Z2Bef46r/Rd67y2UWIpKRSL v8jgUJSONrG5dSdwwl9rZOjZ5An4yC7imzdad+NOMvRKpNA/5+pRMPMiZCIGLg2emlV9QPP7pb u+0= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 12/27] target/riscv: Add virtual register swapping function Date: Fri, 25 Oct 2019 16:23:50 -0700 Message-Id: <9698a0fa88b4716ebc477f9253bd062c889c2a43.1572045716.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 68.232.141.245 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Signed-off-by: Alistair Francis --- target/riscv/cpu.h | 13 +++++- target/riscv/cpu_bits.h | 7 ++++ target/riscv/cpu_helper.c | 88 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 107 insertions(+), 1 deletion(-) diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 5b71ee416f..0ea56f9059 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -125,6 +125,8 @@ struct CPURISCVState { target_ulong *mstatus; =20 target_ulong mip; + target_ulong mip_novirt; + uint32_t miclaim; =20 target_ulong *mie; @@ -161,7 +163,7 @@ struct CPURISCVState { =20 /* Virtual CSRs */ target_ulong vsstatus; - uint32_t vsip; + target_ulong vsip; target_ulong vsie; target_ulong vstvec; target_ulong vsscratch; @@ -170,6 +172,14 @@ struct CPURISCVState { target_ulong vstval; target_ulong vsatp; =20 + /* HS Backup CSRs */ + target_ulong stvec_hs; + target_ulong sscratch_hs; + target_ulong sepc_hs; + target_ulong scause_hs; + target_ulong stval_hs; + target_ulong satp_hs; + target_ulong scounteren; target_ulong mcounteren; =20 @@ -300,6 +310,7 @@ void riscv_cpu_list(void); #define cpu_mmu_index riscv_cpu_mmu_index =20 #ifndef CONFIG_USER_ONLY +void riscv_cpu_swap_hypervisor_regs(CPURISCVState *env); int riscv_cpu_claim_interrupts(RISCVCPU *cpu, uint32_t interrupts); uint32_t riscv_cpu_update_mip(RISCVCPU *cpu, uint32_t mask, uint32_t value= ); #define BOOL_TO_MASK(x) (-!!(x)) /* helper for riscv_cpu_update_mip value = */ diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h index 95909f159a..d66a29bdb1 100644 --- a/target/riscv/cpu_bits.h +++ b/target/riscv/cpu_bits.h @@ -553,4 +553,11 @@ #define SIP_STIP MIP_STIP #define SIP_SEIP MIP_SEIP =20 +/* MIE masks */ +#define MIE_SEIE (1 << IRQ_S_EXT) +#define MIE_UEIE (1 << IRQ_U_EXT) +#define MIE_STIE (1 << IRQ_S_TIMER) +#define MIE_UTIE (1 << IRQ_U_TIMER) +#define MIE_SSIE (1 << IRQ_S_SOFT) +#define MIE_USIE (1 << IRQ_U_SOFT) #endif diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 21d049cdce..12a10e8679 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -82,6 +82,94 @@ bool riscv_cpu_fp_enabled(CPURISCVState *env) return false; } =20 +void riscv_cpu_swap_hypervisor_regs(CPURISCVState *env) +{ + RISCVCPU *cpu =3D RISCV_CPU(env_cpu(env)); + uint32_t tmp; + target_ulong mstatus_mask =3D MSTATUS_MXR | MSTATUS_SUM | MSTATUS_FS | + MSTATUS_SPP | MSTATUS_SPIE | MSTATUS_SIE; + target_ulong sie_mask =3D MIE_SEIE | MIE_STIE | MIE_SSIE | + MIE_UEIE | MIE_UTIE | MIE_USIE; + target_ulong mip_mask =3D MIP_SSIP | MIP_STIP | MIP_SEIP; + bool current_virt =3D riscv_cpu_virt_enabled(env); + + g_assert(riscv_has_ext(env, RVH)); + +#if defined(TARGET_RISCV64) + mstatus_mask |=3D MSTATUS64_UXL; +#endif + + if (current_virt) { + /* Current V=3D1 and we are about to change to V=3D0 */ + env->mstatus =3D &env->mstatus_novirt; + *env->mstatus &=3D mstatus_mask; + *env->mstatus |=3D env->vsstatus & ~mstatus_mask; + /* Ensure that vsstatus only holds the correct bits */ + env->vsstatus &=3D mstatus_mask; + + env->mie =3D &env->mie_novirt; + *env->mie &=3D sie_mask; + *env->mie |=3D env->vsie & ~sie_mask; + /* Ensure that vsie only holds the correct bits */ + env->vsie &=3D sie_mask; + + env->vstvec =3D env->stvec; + env->stvec =3D env->stvec_hs; + + env->vsscratch =3D env->sscratch; + env->sscratch =3D env->sscratch_hs; + + env->vsepc =3D env->sepc; + env->sepc =3D env->sepc_hs; + + env->vscause =3D env->scause; + env->scause =3D env->scause_hs; + + env->vstval =3D env->sbadaddr; + env->sbadaddr =3D env->stval_hs; + + env->vsatp =3D env->satp; + env->satp =3D env->satp_hs; + + tmp =3D env->mip_novirt; + tmp =3D riscv_cpu_update_mip(cpu, mip_mask, tmp); + tmp &=3D mip_mask; + env->vsip =3D tmp; + } else { + /* Current V=3D0 and we are about to change to V=3D1 */ + env->mstatus =3D &env->vsstatus; + *env->mstatus &=3D mstatus_mask; + *env->mstatus |=3D env->mstatus_novirt & ~mstatus_mask; + + env->mie =3D &env->vsie; + *env->mie &=3D sie_mask; + *env->mie |=3D env->mie_novirt & ~sie_mask; + + env->stvec_hs =3D env->stvec; + env->stvec =3D env->vstvec; + + env->sscratch_hs =3D env->sscratch; + env->sscratch =3D env->vsscratch; + + env->sepc_hs =3D env->sepc; + env->sepc =3D env->vsepc; + + env->scause_hs =3D env->scause; + env->scause =3D env->vscause; + + env->stval_hs =3D env->sbadaddr; + env->sbadaddr =3D env->vstval; + + env->satp_hs =3D env->satp; + env->satp =3D env->vsatp; + + tmp =3D env->vsip; + tmp =3D riscv_cpu_update_mip(cpu, mip_mask, tmp); + tmp &=3D mip_mask; + env->mip_novirt =3D tmp; + } +} + bool riscv_cpu_virt_enabled(CPURISCVState *env) { if (!riscv_has_ext(env, RVH)) { --=20 2.23.0 From nobody Sun May 19 20:29:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1572046885; cv=none; d=zoho.com; s=zohoarc; b=DAePJxySd1t2Q+L90oP0pKB5QoZj5O7WRLbhahGsEAYHd1nMm6M4aodahJ+ueYf5Dfhjaa+EiqGlaCZ3bZZDuPwTQUaUv6KngXcz8na8vWdfeMZERl6Mb/QyBM5sMUtqtU0SDyymlumDZJOOJ4bL/hJBXjVxlp6fvnbfX78YG/A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572046885; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=gpLO6bkwN/j/P3CsOGtvvrR++CKhcs1yv5ikEoMQjBs=; b=Nrg0EekJRKn+GDYtBim+MgHHIOk9jloJvH6KMPQw4jLQ3ZZkRjJ/XfkSjMrvp0F3LQ5ACvT/TU+2W4mSbxXIaQRflnaqjDPTVXWQFCk3kUG58dAAq0GYRZsBztGGAtcCxn/MfTXlM1IpeyuJn6DfoVYbhslFg+g0bWIa5YRoy/w= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572046885270845.2572010512238; Fri, 25 Oct 2019 16:41:25 -0700 (PDT) Received: from localhost ([::1]:37066 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO9Cu-00042A-2V for importer@patchew.org; Fri, 25 Oct 2019 19:41:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49931) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO91E-0005Gh-Kc for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iO91D-0004bD-Fy for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:20 -0400 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:10430) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iO91D-0004CY-6v; Fri, 25 Oct 2019 19:29:19 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Oct 2019 07:28:49 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 16:24:15 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 25 Oct 2019 16:28:50 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1572046159; x=1603582159; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=bGS+WLrBxBJ4IcdBPApTmWaBLjpm/TSDxEQpVVZJbFo=; b=XM9c9t5EZ4FH83oEpP175mOZhFQnzm6W4rowKZ9GO0uQujImvpaH/ZmI g/NiWf1Bwpfjumy2SIp8cbK1iaXZJlV+evkLlLNM9q4VCla5aU0fRyQDL 4SJAPrI3U4poWOLcl7igK7O1frVrA4nO2IreeUEghpmcL84mYvO4Z9NJc MKl9FpwOio1USAiWaY5aJm0LqTRQJBOJEimoF913vHYjv694XgQtbClIs IpZhMZuEnF7Volrisx2YYl74g5oPVXLRsj/QqcjSWqrmZnxtuF9iRJD4v kGAXF2dSjD2XwvvhOtmRZH+xHgRaGTltuFXxGUEJhCAFjbT38SwoaZiSY Q==; IronPort-SDR: sl2WcILtyUzJhUO2eYGhDv31rV31pol1yHtQCQFYhlAKqweqV0Hfld+fmayyu9W5KrKucz2nYP /6wNogRXqItT23QUvDQDMWEFV+CQJkkykUpQ60vxdwJwRYPXeKHNWv+Jl7Twtcs+gKED2YaHG3 pR0zc2m65Z2eyJpnsOfStL5OERP4pV68o5nYkNVKmgH5/0t908KHmgR0irXbGlexFAJGM+W56l Lqx7tgX/IhEQhH++TXQKL4PWzo8fuxl4a1I5LdFcxfnSSGK7P2xFe5ddJBg8eIfln/H5zqiXIF W4E= X-IronPort-AV: E=Sophos;i="5.68,230,1569254400"; d="scan'208";a="228520408" IronPort-SDR: +CwP8r8quQ6Ww6lpi6LnMsQcngbdmK5TYuCGvG9zReYn7gFIE98AuzQk8nihsyNYcRSHV/0btt eZu2QJ4IiLCeI+8Z2zgvSOx4mG/pF/zrkX5hwC3CixGtKvQBnKFV0u/1QpdR+FNZBEEmzA5reE DXi0AUgVw00LJ71g3IQqxpGs2e5lDrP+J82kUcw389R1fTdQbYMqZYZB+Qtah2ewxoXIWF01us ufrvJoF2PTkWYUB3Ir5oPcdrIH/CESNXnBqrKofMCyNCUMRaZqJYCkW4b66LjobYeNXNQRVF3e q02H1lRnHn+bUGD/Uk21t13u IronPort-SDR: SUzIfgQCbCQ71fTnCm5fmlJWP7EjZAYr/yNB6iwOxs2KNWJmBXV5cKKuEYuWkXN5boSmUaFw4P If8t84r8Pe19IhTdeRUNbIoEctnUsA0di/efmicSljwFaLfiYFgeBEZmzPT/WHdGxT4B/uQUSh rtJPpSUJdBVBSQMcMksJ7Sq1V7KSX2iWGrN68PdXJJdsuaB9I9+Bf+XNqOaXSaIJExjJ2/krlU lMER8HVdEBmQrfyxj9ZZSax+eqTHMoWCtMvy252zvWbelInwcDccVmsfFPwEsgzSXT5hmZ3TV1 Af4= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 13/27] target/riscv: Add support for virtual interrupt setting Date: Fri, 25 Oct 2019 16:23:54 -0700 Message-Id: <6b2128ecb939eb059cc69f358de3de4e760c3e03.1572045716.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 68.232.141.245 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/cpu_helper.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 12a10e8679..bb4557df16 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -39,12 +39,27 @@ static int riscv_cpu_local_irq_pending(CPURISCVState *e= nv) { target_ulong mstatus_mie =3D get_field(*env->mstatus, MSTATUS_MIE); target_ulong mstatus_sie =3D get_field(*env->mstatus, MSTATUS_SIE); + target_ulong vsstatus_sie =3D get_field(env->mstatus_novirt, MSTATUS_S= IE); + target_ulong pending =3D env->mip & *env->mie; - target_ulong mie =3D env->priv < PRV_M || (env->priv =3D=3D PRV_M && m= status_mie); - target_ulong sie =3D env->priv < PRV_S || (env->priv =3D=3D PRV_S && m= status_sie); + target_ulong hspending =3D env->mip_novirt & env->mie_novirt; + + target_ulong mie =3D env->priv < PRV_M || (env->priv =3D=3D PRV_M && = mstatus_mie); + target_ulong sie =3D env->priv < PRV_S || (env->priv =3D=3D PRV_S && = mstatus_sie); + target_ulong vsie =3D env->priv < PRV_S || (env->priv =3D=3D PRV_S && = vsstatus_sie); + target_ulong irqs =3D (pending & ~env->mideleg & -mie) | (pending & env->mideleg & -sie); =20 + if (riscv_cpu_virt_enabled(env)) { + target_ulong pending_hs_irq =3D hspending & -vsie; + + if (pending_hs_irq) { + riscv_cpu_set_force_hs_excep(env, FORCE_HS_EXCEP); + return ctz64(pending_hs_irq); + } + } + if (irqs) { return ctz64(irqs); /* since non-zero */ } else { --=20 2.23.0 From nobody Sun May 19 20:29:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1572050746; cv=none; d=zoho.com; s=zohoarc; b=SWwwT1B6g0Ha898D/3o9Vw0qpoTKplp7UhSiOvsfAqjOkYE/+K6EhmzWLx1l9sGu3Z9Fl6X2fQ0IYePIxaSR64wsEHLagoHBGE3nqnl7KJSW7PKiegegynfgNd0BhNn06ca7Bv0Cyt9Xrx32AjtgBD5CyPEWuNl1Jd4VpKgLcbA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572050746; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=EwGeI8XjhBnzJ98Vo3TQUg5N+JkaKE/C+JQyl4ZB2GA=; b=gGBtMGhGGv9QNPENon1Skr8g7WhE2LtzSlqzJ4urrYohs1EO2NCuNrPqvhYWj8y6knt64wUp+vYFTImXXzpvAQMifViQcLWKFt0Eya0WO3JKbKYIaZ8MsJnAno/CHsJT960G1uUjBIEtUB2gZNJdaOCwCt655XzHS1z7tUCFr6c= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 157205074690727.315067569392113; Fri, 25 Oct 2019 17:45:46 -0700 (PDT) Received: from localhost ([::1]:37610 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iOADA-0001eM-Lg for importer@patchew.org; Fri, 25 Oct 2019 20:45:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50025) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO91J-0005Pc-1E for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iO91H-0004ew-Sk for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:24 -0400 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:10433) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iO91H-0004DA-KW; Fri, 25 Oct 2019 19:29:23 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Oct 2019 07:28:52 +0800 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 16:24:18 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip01.wdc.com with ESMTP; 25 Oct 2019 16:28:53 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1572046163; x=1603582163; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=e9FTCNGQSn8ALTPBkAOnbHvxJhruS8S5utjWhbO6qDU=; b=blkT/juYA/X8TcY1lKBHAJ4irv6lKecHd3k0AG7r1jsWnL6039VL94Mo FMKpzHOlzUlbco1vIpot86c1BlllEtQp7aa0UGZu32ZPVHUA+w7a5sM8F LLiD36xeTf+12JdxpZCqB67GnOAAxmsE9G94Wf9ktnW5ZyCNNThhAESSb eSDIhLhpigRgyoIMqzUNd5eLTYvZCliKFzq5Q/MNfv3zKj11bD522e9an x+6srmaehISCBL8SBFLJtuembdLThfo5h7UJrmTKRjRwTDAkO/65l4fhH nJlXqwcOisKT6kIft4fial4zZLPpa3RQICKrvOxyhTNoab843Gx/iUJJo Q==; IronPort-SDR: 0Q4jLSwwYfEMXBLi8aECAmEp5eTtwoFE+YKWgN+8pGMUbeCOO1WDJhZf7YgrGdrJklBAkXuDLU H2AelZN/89QpaSyYEO1BXsNBQeRicjKYAwVoMwiq5vkT1M/f2oH7gnNh5odGC0wL/wTYG997pq iAUVAlxTW2rl76xWjWoO3h/iYKT3fgiP5E2Y1hcLzIyFT5j+KyVJyGZqwTpyiRYRZWWu+9K4dw Df0y4q1zqZfBgPKV5TOd4RDJzNyKUOFH8JiOB9jUQ946Z1rrsS10PcU+YgKo0XA/Bqj0e9QvjD jaA= X-IronPort-AV: E=Sophos;i="5.68,230,1569254400"; d="scan'208";a="228520411" IronPort-SDR: Pcs272boPlS0gSwFJGCPnxgLfCFnjb7RyZ0rZwbZvzAxUTgyG7d45u2KvRSEQJFF8j+2urUZCt eETcESD7chnDGcoKGrOkVI7lAG0jVE4nZcMeyXa+d5oGWWoXMEKhwaIL4eOv1q4ivgVFzJM/9T hA8iwCt7CfIIPhjVYXLLYaZutXVrTbxCz27jLJOGmYTIS53gum8tRB2u+4yTuIW2WsNsWnn5DL mqSRZ6nAGpZtDTqGjBfBIgdU7wpXKpnpvEq+KEwCXtFBVVE4ah6l0b5XC0Ea6eXJDrHesoaq6p p+E8IyuDfxaEx804JpJn5Pp3 IronPort-SDR: RQsPsSTzEvp3GKqnNarXX8/O6qsYOqM3++Qe/3A5AO3jq5SFNsJ5zOQ883h3LAj/lFm5LjyE0u F+24shIJdPmhkC57E6BmqkByiaOlCX/6jcvGh3HfmGWNg+omLgckXZaHaoFoGBR9pger5xC/V+ jVTI9utenYgUzApwMaA2pAicXi3EziU6rzbHf6eqbilhhcaJHBk6w6Dd7KPDiYM3FMDIFj0iHt ZJWZY6Vp4akv+pfVduo8lzTrZbTJc/6vifkeHMSw7wWYmlTkCMjHh1jrUkeMksHDE3R5dKM0t1 wtk= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 14/27] target/ricsv: Flush the TLB on virtulisation mode changes Date: Fri, 25 Oct 2019 16:23:57 -0700 Message-Id: X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 68.232.141.245 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" To ensure our TLB isn't out-of-date we flush it on all virt mode changes. Unlike priv mode this isn't saved in the mmu_idx as all guests share V=3D1. The easiest option is just to flush on all changes. Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/cpu_helper.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index bb4557df16..637e05996a 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -200,6 +200,11 @@ void riscv_cpu_set_virt_enabled(CPURISCVState *env, bo= ol enable) return; } =20 + /* Flush the TLB on all virt mode changes. */ + if (get_field(env->virt, VIRT_ONOFF) !=3D enable) { + tlb_flush(env_cpu(env)); + } + env->virt =3D set_field(env->virt, VIRT_ONOFF, enable); } =20 --=20 2.23.0 From nobody Sun May 19 20:29:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1572048183; cv=none; d=zoho.com; s=zohoarc; b=j5aHS0Ri9fwPuSeXcK0BS68FpHMunyWukPMvix9V2mJq51L21YhxtjDfR5CwSA68fg0a/MG3tSu8r9nEtZPk9A8ohgTtEmbucqodCWBPIRlml3LAJQHZCYdlmWU5skhpNAOmKXY6KDH0zFZmRUW0jfCs//jMwy+7ktKxhJ4w/ag= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572048183; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=f3FcdcF9oNERpqitO82UwybxTmEmybW4bRKEPS/MgeM=; b=Y2MzrdyIWil7EufkDn3d6k5IO7nwuInWt4ZDgVRa7mvURPqppCWBiPZLaWBQZZkGTddxLz0NILrU36eT8SnCOju4Bf+yRAnbhesx3WXfvoEfnpZApIvWBUO7z7kC1d9YGj9/VRtKHWnRSgXKOqyaux2VXylP4tDlzSt97Tp8+Es= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 157204818302929.168981393126842; Fri, 25 Oct 2019 17:03:03 -0700 (PDT) Received: from localhost ([::1]:37278 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO9Xp-0003QV-DA for importer@patchew.org; Fri, 25 Oct 2019 20:03:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49945) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO91F-0005Hh-4X for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iO91E-0004bX-1F for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:20 -0400 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:10429) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iO91D-0004C1-Of; Fri, 25 Oct 2019 19:29:19 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Oct 2019 07:28:55 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 16:24:21 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 25 Oct 2019 16:28:56 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1572046159; x=1603582159; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ClMqzRFqbUEgbXBotJ4MhGZoKJdThGnwNy8LrVmIgFM=; b=djC2MYsBeh8hwbN2Md7KLWMhtAw6pULKyxbyb+92CW564ZQLzLnodJLc 411tHpd/6oQChvf3fMgL04FEOe9Ue2S4VGGCD6m9wXq2plF31p8v18XSI 2e4ABQ1YQaeTLaGywd0LuHdTrPkD0mdzbu8XQcWzmWzfbqIrYiAOQyDFH OACuQD9MOKcP3IcK8kQr9lHAykF/DuWp/s0Z6nRA2UJAE2VsOSpSwv8Vb Yj4D3AaeQo0Jw3Jv28qcgpNpD52XyREOPrLfrRGNYn5UDY6u7s8qQTGGO choONsoBg9ZLTmKJAaDsCRfTEye3f/T7iQwE+rQsIQQtoZ8PueFs6zjB3 w==; IronPort-SDR: A3OFmhIDHlK8WXlM0MQGqRNWsRSacfwioOmUqSCrG5/M0WM+63flK2KrcDbDdMkYvwjGob2Q16 +hMyalUD3L5PAV8kh7YOHTM1O2Y5PztAxjwHB6qPZ/+YIwQ53LPSjJJhiFKwwBGjFa0GynR+FX KG7OZjQza6BhQa5IzGk+g5aE83TXwDVG8Gef3di3Q5dGhnABYRM2fQMPFv5rzpFgvmlzlp/YW9 Z6w97kiXWgURVWFfSl3LnXixwNtvDzxz4nwS/4NSBOriUby6kDiPykt5k/mvfIhWwHR7wsZ/ui U6M= X-IronPort-AV: E=Sophos;i="5.68,230,1569254400"; d="scan'208";a="228520413" IronPort-SDR: QPH0GB2CXi+MJgMlE80/wF2c1zEu4jVoJ0CXtLjA4Ar0uZhxWkCbK4Wx8efKjkCLmFFxDoVcMG jofsVt+C1Yz2BC6W2swkX1JmXHPqUebUKAAPIF8jWDXcbSCCg499FysUyOnOp/3QKLRAwyBaV1 OTbSgNQHuBxWqzFvof9qeyIgz6cru18NPSo4P4fZBJoUSSNgbFfKHmAoRWTn79FsOxS4eoJbT/ SyFFbjdc3jbrV3eLjz8fRodDXImA+2ht/4BtbOFO2FGcHyHMhI1fulc2yQRsOxEHZe4pCVGCNj 7GbD/xEMprxVblnNdxcfApNp IronPort-SDR: /Fnk7ztwJRNOBEyfpiExJNMBiwy9K2Z4lL7Lx7FHyWTLV3LMP7l7X0eOu+SlwdHqrzOaLS0xLC KjkIZ8kf5blopR4QHaetNUm5ImZBZtH8JgVIZokhd4mFkodGdQc9MR70CdL9H+oDn1biVbrhkP vqa/Xq8kyFQ7RGcKgW2O8Dipk8OURiSAoCNY1l172cqpVoXAGBbw75T4aKS5F8Lwisnml0K2rb 2VPdD8vuQFKO7ZxB3+IrV0IPQ/n+DD16yhmFL7Gsk8JSBt4+mUicqNb+/lj1HwxiRDlEWyv8Ih kEE= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 15/27] target/riscv: Generate illegal instruction on WFI when V=1 Date: Fri, 25 Oct 2019 16:24:00 -0700 Message-Id: X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 68.232.141.245 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/op_helper.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/target/riscv/op_helper.c b/target/riscv/op_helper.c index d150551bc9..beb34e705b 100644 --- a/target/riscv/op_helper.c +++ b/target/riscv/op_helper.c @@ -130,9 +130,10 @@ void helper_wfi(CPURISCVState *env) { CPUState *cs =3D env_cpu(env); =20 - if (env->priv =3D=3D PRV_S && + if ((env->priv =3D=3D PRV_S && env->priv_ver >=3D PRIV_VERSION_1_10_0 && - get_field(*env->mstatus, MSTATUS_TW)) { + get_field(*env->mstatus, MSTATUS_TW)) || + riscv_cpu_virt_enabled(env)) { riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); } else { cs->halted =3D 1; --=20 2.23.0 From nobody Sun May 19 20:29:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1572050934; cv=none; d=zoho.com; s=zohoarc; b=DhqYhZWQPyNaTrOcggl+5gY1InLUkEDp4ScaZ00LUg6p79gvUbc06L5YZ5KNvf7buoA47CO1C2zhVDT27ivdtK1R3MPHJdzq/6FqN+VUaSxCCTI9Rs4z5wMVUApirH0Sb+uCoPtmQJe3nNvNhZ/8x13mTgqLHwRclioiI81cqZo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572050934; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=GOJFgxpwXHIljjVCxunnBS7FQaWWJnKjxTINXPQtT1k=; b=EZbh80B6HrmiUCeRjB/Q6CG5S2vzfTHszFFdYchyEoBQNPhGqL9YNAyPclTcd2Evl5Z0MxMzefNjXtaPRbnUmOKMEHKIW8bGpKtsOTLDBVdccilDckJ6i70kOsQACEX037gA2R+skQkwhb4OBEiDp3zWEjoZxcfyGEH1osvbrAM= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572050934373514.2559038908676; Fri, 25 Oct 2019 17:48:54 -0700 (PDT) Received: from localhost ([::1]:37630 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iOAGC-0006sF-NX for importer@patchew.org; Fri, 25 Oct 2019 20:48:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50205) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO91Z-0005vT-6k for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iO91Y-0004lz-30 for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:41 -0400 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:10430) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iO91X-0004CY-PS; Fri, 25 Oct 2019 19:29:40 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Oct 2019 07:28:58 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 16:24:24 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 25 Oct 2019 16:28:59 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1572046179; x=1603582179; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=5xy/BQ5Ff17/zZ+q9QgWqRSx+0OeU4f0Sj1sSKNFPcQ=; b=MpwxmYWz0QgxTJC6NMwOVmWn2Ajsvt7OqJ4uwl0rqEFW3yx1zlQ7dRGT 2L9QgGHOm894xSliHYPRgBsnIz9GTEbeS7m3sTwXLACBqaxJ7N4mGrEoD 4ZkeaT0iCSirN7x+htgDDUh4be8IOkMsTUrPve+jP2JofpJBbp47THYde 35bFGuBlnmChfGUmpHwale7fkCPIdw0qe7/WL/sq/RI5NY9HB9Mf4Snh5 hgdxK+AV/VtOHHgc5J7ZZ1XwYszpn7HXTPDlcjeR+SgpxgnxLo3sm9Fym MHMiijYhkcIMOVPhQp42NI8aSTD2RhpS2OBdqTDEz3T+ujnzreAtbgEvT g==; IronPort-SDR: zXixdOhZo36mF5ZtcXEykzhagF8ytU1ZmbRHmR5Tf9YeK8kKK1iLJQaY2g1krspIkGxZk9tInU 1wIuAHfKrVYztGvAsn8zugql3le+tSHEoK1FF7P/kpqrsZdhKTc+SDwLu850claGwQM8h2IhvR JJxv8pfx1lZMIjPxOxEik1jR3djg8kRXsytdvuHqhr5NkEFdMfkUFyxDuX0sBlSMUuhIHB3Sw5 l0+z7FzG8ow5tkTTnrQ/dDXxHQwbOH+grFP/tFLH672O5NCbGm9NvmMsyT+z/NrOim6j2MLbjM oaI= X-IronPort-AV: E=Sophos;i="5.68,230,1569254400"; d="scan'208";a="228520418" IronPort-SDR: Z3zY7b09YvyvAmtvtOCVnoEib+vFoXr1EWCR2REVigTV2CTNV5GIRvQ5qrJz6SySlAStVyU58e REOQ25SQk3owxNMRnmZ1NP5iQA88YiNONru8BPG3T/2EnslPlD4fRg5MbXum/r1L9axLQuDNZy PbyGn3lmBI6mTrDPbN1l18dbTqZQpcKTXwgbm0Y/8zUcmv86pJ+om3ZtE6Lycr0BJH3jxKDz68 1xhSmAVKyKSre1BNxr0TWzKv+PZGCplTGixXbybh8Edj3vHbl9INGfQnE6uA+qA+KZ470wWqNY mCDREEQC95s+NmiJrn7Doh9d IronPort-SDR: 8IkYaeWsa1WKFPlrikMUhWMIukbvr5buFfiArifeb7W8OK9r4PXJRq04IBg0viPveRbWQ3xW98 2iCxdDyNN2b/OAphz6kO15giWF1D6qPDx6pVfMr18SgI0qxt09IAGZuEBpdYV9wu0qvUoRrRHG A2F+2fyJKSZ54KN04EjuTUUBQSSBfUk22fxSrqPofi8nrqCWPztnYE4dyRcXMEugHBJ/AFLwY9 D9iUpDfObSyh/7mtoYJM7NiNjcx0kjJpFFWhzFTW2adguOhLWE/Kz/khQg8Wr8UPh1RnL55i6v HaA= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 16/27] riscv: plic: Always set sip.SEIP bit for HS Date: Fri, 25 Oct 2019 16:24:03 -0700 Message-Id: X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 68.232.141.245 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" When the PLIC generates an interrupt ensure we always set it for the SIP CSR that corresponds to the HS (V=3D0) register. Signed-off-by: Alistair Francis --- hw/riscv/sifive_plic.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/hw/riscv/sifive_plic.c b/hw/riscv/sifive_plic.c index 98e4304b66..8309e96f64 100644 --- a/hw/riscv/sifive_plic.c +++ b/hw/riscv/sifive_plic.c @@ -150,7 +150,17 @@ static void sifive_plic_update(SiFivePLICState *plic) riscv_cpu_update_mip(RISCV_CPU(cpu), MIP_MEIP, BOOL_TO_MASK(le= vel)); break; case PLICMode_S: - riscv_cpu_update_mip(RISCV_CPU(cpu), MIP_SEIP, BOOL_TO_MASK(le= vel)); + if (riscv_cpu_virt_enabled(env)) { + if (level) { + atomic_or(&env->mip_novirt, MIP_SEIP); + g_assert(riscv_cpu_virt_enabled(env)); + } else { + atomic_and(&env->mip_novirt, ~MIP_SEIP); + g_assert(riscv_cpu_virt_enabled(env)); + } + } else { + riscv_cpu_update_mip(RISCV_CPU(cpu), MIP_SEIP, BOOL_TO_MAS= K(level)); + } break; default: break; --=20 2.23.0 From nobody Sun May 19 20:29:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1572047424; cv=none; d=zoho.com; s=zohoarc; b=KVqpexpayvXTLEpBHqsbrqdUyBbLxqNOoQ+87cmlIrikuIC4Xc6QkHN0BkaW87yVtvkIS/o5SWD8aPFPj0fEDdPzJOnWn+FgJJ6q+IHsx0Lt9IKtItEfU1z1TyrDpgnlPwyFTE46B+Yao3z6xfemr3ayFHj0WN2Tggpir+Z4diM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572047424; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=PyGjnZKtctMRuiWRRxXrUCbyIzf/TDVo3+uHibbGDAI=; b=RAEz095v+g201vFHa5DTW5FEmjWdQRORuxhB6V+EG/6It7doU9fE6nII+OzgkmHp1UXRPHH7/CDzE5x992ZcVwRJMzyZPdjKUcQSoE7lhR+6ekkNVisBHFVzcGm9jyWSSVvrD3PiS4qYDGhZLVKQup4z9oNu/MekkAYcAeHS2RU= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572047424835159.54274371566578; Fri, 25 Oct 2019 16:50:24 -0700 (PDT) Received: from localhost ([::1]:37152 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO9La-0002Hx-Vv for importer@patchew.org; Fri, 25 Oct 2019 19:50:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49803) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO913-00056y-7i for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iO911-0004Qp-SC for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:09 -0400 Received: from esa2.hgst.iphmx.com ([68.232.143.124]:49516) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iO90y-0004Kl-38; Fri, 25 Oct 2019 19:29:05 -0400 Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 26 Oct 2019 07:29:04 +0800 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 16:24:33 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip01.wdc.com with ESMTP; 25 Oct 2019 16:29:01 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1572046147; x=1603582147; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=QVhzzf6G/cwWMvjltlcI2Xks00Gn23/VEt5ZK7oRJzc=; b=OD/dP5+PHw52xBmLBAHpvWxtvfGE3vkApeRZzF8r3+SOQ5sBOA8GyRIo Uvu1oNHdmT3SxRVbBghCMWpiEHoovizaiS5rMRmftYf7zsU1dGGly8uGk JKUuz+tcHEF+WmQF99M2CigXkyH08KHB3x19TyKljapFpOlVYqrrgt8eC /qPMNteaSYyxfEdQB9rLgMi1vWcFDIzSSQixeq2HrCJgvRxgXpG6/82WK 4Vw7ZGLSrw03E1Vli2CesrktvO69SyWfeHM7TNAhoklMBb/VdTMpX/g7N 7CldduMRjRKeZ+oTvx6Yzdj4dOxIIpfPJ32kkmnBCSQ8WjKnDjUSgYto0 w==; IronPort-SDR: Gmw2Oc9SBlBFiq8Bywv9yBAZ1Eh931Qn5tO5TVWhgbhzd5pPNUh6ogRLA6q1iJTl1llUQRFtd0 PfHGIwlPT/u1Vnz43H1wgzl6GDJ6Hw6mF8eLORf15yQPO64+32aFAahyRGo4P0cYbCu8JtDEfJ jzCy34grzUfalhMJZqV+VRx6O9dTvbPPpYBQMN0e2jpu11Vyw/3MCkmhs9Rp9pTd45rwOTUo9N GApIWGyhToqpzYYU0zWziaqByIohp30MLqhh0RnOtWerMuKoBNrdDUcTKAvep6mAKLfaeRJHll HyU= X-IronPort-AV: E=Sophos;i="5.68,230,1569254400"; d="scan'208";a="222508980" IronPort-SDR: 5zxl717LS6WcfYHsgOB7XkIjl7uKOdY3PoHhLjRicwSptwuFvloTKZBEh+tvQAF4/lmsp8iHXo 6u7COKxTfGdQdvn6ckC1MiclLyj2klcRHTOO1ZSgMLYytft/M9vPigB0JCLq2FGJG12DMotiXb /m1wvM1p7YgUDMd9u0IBb9cL1xl53J4zJ9wcyT+3yv750PJOIc6LWnNbTZRriz6Up91muWhdmw 0x7zBkyiRd3a9DngASqEb+YriS/I1Z2wQqbe4MiKCdliWbBm3QcOTvZbfGiTrG9CI1BoX+uf5E CUzTSdfD/KJ9OKyJEC5v0T0A IronPort-SDR: 6Mr8tlU56ov/ZxgJZDdWmjeyZUxXYdQIYUgNhE2aLhRmySJZtq7HoKO2dsX0u3m3DcvTILAbtD ZlqzBinRECu1JLUW/3k54ufZdKYRsxY3n8k2a0US02v7lHAPrmlGhCogbljdQ6j/RC+/qZ6Jti oU33J2LHno7Soqhsf8+TL77ru8RNOgeSRNrnqIqEpP/AJM/mxz1DzlLZ18vvS0kNPkL2J1AX2p lVBysluW+2178SjUxbTMYso1Sr+pj5AMtX9RFrzvXjlhsnnFRbbVkkc6QZ08Cw1Hf3ZZxkOWMi AoU= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 17/27] target/riscv: Add hypvervisor trap support Date: Fri, 25 Oct 2019 16:24:06 -0700 Message-Id: <26b40460641cf77d31d2f20fb3b00bdd0a9d3970.1572045716.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 68.232.143.124 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/cpu_bits.h | 4 +-- target/riscv/cpu_helper.c | 71 +++++++++++++++++++++++++++++++++------ target/riscv/csr.c | 4 +-- 3 files changed, 65 insertions(+), 14 deletions(-) diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h index d66a29bdb1..17d168852c 100644 --- a/target/riscv/cpu_bits.h +++ b/target/riscv/cpu_bits.h @@ -510,8 +510,8 @@ #define RISCV_EXCP_STORE_AMO_ADDR_MIS 0x6 #define RISCV_EXCP_STORE_AMO_ACCESS_FAULT 0x7 #define RISCV_EXCP_U_ECALL 0x8 -#define RISCV_EXCP_S_ECALL 0x9 -#define RISCV_EXCP_H_ECALL 0xa +#define RISCV_EXCP_HS_ECALL 0x9 +#define RISCV_EXCP_VS_ECALL 0xa #define RISCV_EXCP_M_ECALL 0xb #define RISCV_EXCP_INST_PAGE_FAULT 0xc /* since: priv-1.10.0 */ #define RISCV_EXCP_LOAD_PAGE_FAULT 0xd /* since: priv-1.10.0 */ diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 637e05996a..41cd314f64 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -669,6 +669,7 @@ void riscv_cpu_do_interrupt(CPUState *cs) =20 RISCVCPU *cpu =3D RISCV_CPU(cs); CPURISCVState *env =3D &cpu->env; + target_ulong s; =20 /* cs->exception is 32-bits wide unlike mcause which is XLEN-bits wide * so we mask off the MSB and separate into trap type and cause. @@ -678,13 +679,6 @@ void riscv_cpu_do_interrupt(CPUState *cs) target_ulong deleg =3D async ? env->mideleg : env->medeleg; target_ulong tval =3D 0; =20 - static const int ecall_cause_map[] =3D { - [PRV_U] =3D RISCV_EXCP_U_ECALL, - [PRV_S] =3D RISCV_EXCP_S_ECALL, - [PRV_H] =3D RISCV_EXCP_H_ECALL, - [PRV_M] =3D RISCV_EXCP_M_ECALL - }; - if (!async) { /* set tval to badaddr for traps with address information */ switch (cause) { @@ -705,7 +699,16 @@ void riscv_cpu_do_interrupt(CPUState *cs) /* ecall is dispatched as one cause so translate based on mode */ if (cause =3D=3D RISCV_EXCP_U_ECALL) { assert(env->priv <=3D 3); - cause =3D ecall_cause_map[env->priv]; + + if (env->priv =3D=3D PRV_M) { + cause =3D RISCV_EXCP_M_ECALL; + } else if (env->priv =3D=3D PRV_S && riscv_cpu_virt_enabled(en= v)) { + cause =3D RISCV_EXCP_VS_ECALL; + } else if (env->priv =3D=3D PRV_S && !riscv_cpu_virt_enabled(e= nv)) { + cause =3D RISCV_EXCP_HS_ECALL; + } else if (env->priv =3D=3D PRV_U) { + cause =3D RISCV_EXCP_U_ECALL; + } } } =20 @@ -715,7 +718,42 @@ void riscv_cpu_do_interrupt(CPUState *cs) if (env->priv <=3D PRV_S && cause < TARGET_LONG_BITS && ((deleg >> cause) & 1)) { /* handle the trap in S-mode */ - target_ulong s =3D *env->mstatus; + if (riscv_has_ext(env, RVH)) { + target_ulong hdeleg =3D async ? env->hideleg : env->hedeleg; + + if (riscv_cpu_virt_enabled(env) && ((hdeleg >> cause) & 1) && + !riscv_cpu_force_hs_excep_enabled(env)) { + /* Trap to VS mode */ + } else if (riscv_cpu_virt_enabled(env)) { + /* Trap into HS mode, from virt */ + riscv_cpu_swap_hypervisor_regs(env); + env->hstatus =3D set_field(env->hstatus, HSTATUS_SP2V, + get_field(env->hstatus, HSTATUS_S= PV)); + env->hstatus =3D set_field(env->hstatus, HSTATUS_SP2P, + get_field(*env->mstatus, SSTATUS_= SPP)); + env->hstatus =3D set_field(env->hstatus, HSTATUS_SPV, + riscv_cpu_virt_enabled(env)); + + if (riscv_cpu_force_hs_excep_enabled(env)) { + env->hstatus =3D set_field(env->hstatus, HSTATUS_STL, = 1); + } else { + env->hstatus =3D set_field(env->hstatus, HSTATUS_STL, = 0); + } + + riscv_cpu_set_virt_enabled(env, 0); + riscv_cpu_set_force_hs_excep(env, 0); + } else { + /* Trap into HS mode */ + env->hstatus =3D set_field(env->hstatus, HSTATUS_SP2V, + get_field(env->hstatus, HSTATUS_S= PV)); + env->hstatus =3D set_field(env->hstatus, HSTATUS_SP2P, + get_field(*env->mstatus, SSTATUS_= SPP)); + env->hstatus =3D set_field(env->hstatus, HSTATUS_SPV, + riscv_cpu_virt_enabled(env)); + } + } + + s =3D *env->mstatus; s =3D set_field(s, MSTATUS_SPIE, env->priv_ver >=3D PRIV_VERSION_1= _10_0 ? get_field(s, MSTATUS_SIE) : get_field(s, MSTATUS_UIE << env->p= riv)); s =3D set_field(s, MSTATUS_SPP, env->priv); @@ -729,7 +767,20 @@ void riscv_cpu_do_interrupt(CPUState *cs) riscv_cpu_set_mode(env, PRV_S); } else { /* handle the trap in M-mode */ - target_ulong s =3D *env->mstatus; + if (riscv_has_ext(env, RVH)) { + if (riscv_cpu_virt_enabled(env)) { + riscv_cpu_swap_hypervisor_regs(env); + } + *env->mstatus =3D set_field(*env->mstatus, MSTATUS_MPV, + riscv_cpu_virt_enabled(env)); + *env->mstatus =3D set_field(*env->mstatus, MSTATUS_MTL, + riscv_cpu_force_hs_excep_enabled(env= )); + + /* Trapping to M mode, virt is disabled */ + riscv_cpu_set_virt_enabled(env, 0); + } + + s =3D *env->mstatus; s =3D set_field(s, MSTATUS_MPIE, env->priv_ver >=3D PRIV_VERSION_1= _10_0 ? get_field(s, MSTATUS_MIE) : get_field(s, MSTATUS_UIE << env->p= riv)); s =3D set_field(s, MSTATUS_MPP, env->priv); diff --git a/target/riscv/csr.c b/target/riscv/csr.c index ef9c95f94d..a795a02968 100644 --- a/target/riscv/csr.c +++ b/target/riscv/csr.c @@ -255,8 +255,8 @@ static const target_ulong delegable_excps =3D (1ULL << (RISCV_EXCP_STORE_AMO_ADDR_MIS)) | (1ULL << (RISCV_EXCP_STORE_AMO_ACCESS_FAULT)) | (1ULL << (RISCV_EXCP_U_ECALL)) | - (1ULL << (RISCV_EXCP_S_ECALL)) | - (1ULL << (RISCV_EXCP_H_ECALL)) | + (1ULL << (RISCV_EXCP_VS_ECALL)) | + (1ULL << (RISCV_EXCP_HS_ECALL)) | (1ULL << (RISCV_EXCP_M_ECALL)) | (1ULL << (RISCV_EXCP_INST_PAGE_FAULT)) | (1ULL << (RISCV_EXCP_LOAD_PAGE_FAULT)) | --=20 2.23.0 From nobody Sun May 19 20:29:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1572047650; cv=none; d=zoho.com; s=zohoarc; b=IGMI8eL6jI4F5IOVE+AowQaiszqmBOxyDk5Ta+Y4mc+xHBfGPWtPFOkZSd1K3gyXqI4LxIjPtmHMIfIdlmDs+J8QoY/3kEPukv4/mQSAlK5RnsSbnqBKMvj/dXD3+8ff3G8GXHKS1+lbFSIf7cxhlFyPi+RmOBIxyNfldFjKlHM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572047650; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=V1/VvSKw9Bmq1A0R+h72GitfTa8QuHoW1rxmwFr3gU8=; b=jzgJY8H3a1OajwogOntOQHnolMVbv9z5Uz2NoQ9P1KdQ8tahLYMFVfmNn9KbEneTybtG3Q/p06kp56x7xMOe31IjuqESi60mgZmoZE/UmuGUIrI5IS0F4Q3oT7cnp3p6XQtuC4r3kILTM2YS3JAdU7E1ipqfKsJeFmoXObuqjSY= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 157204765062640.47088936188993; Fri, 25 Oct 2019 16:54:10 -0700 (PDT) Received: from localhost ([::1]:37210 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO9PB-00040x-DF for importer@patchew.org; Fri, 25 Oct 2019 19:54:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49821) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO917-00057t-G8 for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iO913-0004Rt-2b for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:11 -0400 Received: from esa2.hgst.iphmx.com ([68.232.143.124]:49531) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iO912-0004OP-04; Fri, 25 Oct 2019 19:29:08 -0400 Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 26 Oct 2019 07:29:09 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 16:24:37 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 25 Oct 2019 16:29:05 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1572046153; x=1603582153; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=bMeqtbfW+9JJ0VJKdr9KVccHLjaihEfmrV++mdO5OKc=; b=MCoHMJIFwmYaZvwahltfNFIqBTEjwjT3zTad7TjX73UakzjFyFIjRgtR rUsrf9Qc4pIlNZ9V0UYKS9JHfFV17N5fslSuiCtbFwIxBT2y2iCPQ3Svj byoraSw2yM9iNYDoRA6WsHZ4V4xBrml8w6cCbBWaDPfPD8WUfIiCs6h/g X3xEkTvmAdXdtJq/wkq3XfFyaolbtgIY/SzhmvXWAgt9iA9KUiehf0d3p TtjJL8suUEmaxt1ktnxCvf3ufzOzwmmlBSjqFdYEkQEn1QwkDosI5P2zb Nj0X571PxmiA6CpMjFqi+zy2cUQ2pZorEWTk7MYqKMLZQoskDlRqEve8t A==; IronPort-SDR: 6CvtZbNcC+HJdzFu5AhKbuydRY8i6FJ+6afNzap2yIeqQeABum9h5Y1LvVHOktpJ8p4qIlS33m EB+g1z/akHlcolEdiNE66gxvRFgmS0RNTqRf5zVWAy+TYDRtDpFReYUgfelju6WjSvPxo4cFvy q4HjLtdyB5W35a6Y7+k4GwQxYh44HzoCuEMKGk6ZsLZcSwehahfnnkmKDeK68VmR9buitlw21+ 8JC3CedxYWrOsYbKk9binI1/3uB0NbiSTeHcSEQnsfFT6AzEkZ7X/smR0d5RruQaqMM4W+zRhF PLU= X-IronPort-AV: E=Sophos;i="5.68,230,1569254400"; d="scan'208";a="222508982" IronPort-SDR: ig+AI3gfw1w8psFMoHyN9kVq88TtNesyvHo/nZI7+BYaaCBnfcjCKN0N9TOhg28ZbL68UZq1RV jXJEfPTJapFY0ulL8f+wY0RiwzUO3bUBK6BVhLcbBTktqYyPzq3cSYZNCSFLZwOAT64WvO7V0a n1OuGLi2E9Avjp49jlo8mtR2IsVTaTAmLUuCnWGpe41bwRIDJfmQtWh2LU5KHGrll+kvY+Jog7 PJ8Y3xokzvQJp7pBZVHd0Z4/iUHGGMujbAs4wIVwtzwXF7lgkQvpIve0wbXMM795AkFi0X/kHH Ql1G1ckjI1ZpnJzV2dt4odsX IronPort-SDR: aVDC+lYXPtcx6LG5TNg9FyAu+vsmWuJPolmy4fRORhMWFYL+4+RBSe1GpdpmCwrphhyDlwdUZK SVZTHEpERZMIQ4KCvRBVRYAT5V/luK9r8mU9rRV8R0r9hOmSB8QcU+MlgH/eCdjzdhNr6N4D08 SdFAeW66CC+4g1BaHYU4YX27xQlvy+N9k9gdcVkCA8GbtQDiIpLo9K6JjKdL1GOfl0m0GqPClE dwsIcwSCgJkgfSIAaklbB5LVN99BcYIW7HAp5Shcwsqo/GRiT8fdGxfEvBmHPZI5esXiltAjbO PZk= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 18/27] target/riscv: Add Hypervisor trap return support Date: Fri, 25 Oct 2019 16:24:09 -0700 Message-Id: X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 68.232.143.124 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/op_helper.c | 66 ++++++++++++++++++++++++++++++++-------- 1 file changed, 54 insertions(+), 12 deletions(-) diff --git a/target/riscv/op_helper.c b/target/riscv/op_helper.c index beb34e705b..e5128570e6 100644 --- a/target/riscv/op_helper.c +++ b/target/riscv/op_helper.c @@ -73,6 +73,8 @@ target_ulong helper_csrrc(CPURISCVState *env, target_ulon= g src, =20 target_ulong helper_sret(CPURISCVState *env, target_ulong cpu_pc_deb) { + target_ulong prev_priv, prev_virt, mstatus; + if (!(env->priv >=3D PRV_S)) { riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); } @@ -87,16 +89,46 @@ target_ulong helper_sret(CPURISCVState *env, target_ulo= ng cpu_pc_deb) riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); } =20 - target_ulong mstatus =3D *env->mstatus; - target_ulong prev_priv =3D get_field(mstatus, MSTATUS_SPP); - mstatus =3D set_field(mstatus, - env->priv_ver >=3D PRIV_VERSION_1_10_0 ? - MSTATUS_SIE : MSTATUS_UIE << prev_priv, - get_field(mstatus, MSTATUS_SPIE)); - mstatus =3D set_field(mstatus, MSTATUS_SPIE, 0); - mstatus =3D set_field(mstatus, MSTATUS_SPP, PRV_U); + mstatus =3D *env->mstatus; + + if (riscv_has_ext(env, RVH) && !riscv_cpu_virt_enabled(env)) { + /* We support Hypervisor extensions and virtulisation is disabled = */ + target_ulong hstatus =3D env->hstatus; + + prev_priv =3D get_field(mstatus, MSTATUS_SPP); + prev_virt =3D get_field(hstatus, HSTATUS_SPV); + + hstatus =3D set_field(hstatus, HSTATUS_SPV, + get_field(hstatus, HSTATUS_SP2V)); + mstatus =3D set_field(mstatus, MSTATUS_SPP, + get_field(hstatus, HSTATUS_SP2P)); + hstatus =3D set_field(hstatus, HSTATUS_SP2V, 0); + hstatus =3D set_field(hstatus, HSTATUS_SP2P, 0); + mstatus =3D set_field(mstatus, SSTATUS_SIE, + get_field(mstatus, SSTATUS_SPIE)); + mstatus =3D set_field(mstatus, SSTATUS_SPIE, 1); + + *env->mstatus =3D mstatus; + env->hstatus =3D hstatus; + + if (prev_virt) { + riscv_cpu_swap_hypervisor_regs(env); + } + + riscv_cpu_set_virt_enabled(env, prev_virt); + } else { + prev_priv =3D get_field(mstatus, MSTATUS_SPP); + + mstatus =3D set_field(mstatus, + env->priv_ver >=3D PRIV_VERSION_1_10_0 ? + MSTATUS_SIE : MSTATUS_UIE << prev_priv, + get_field(mstatus, MSTATUS_SPIE)); + mstatus =3D set_field(mstatus, MSTATUS_SPIE, 0); + mstatus =3D set_field(mstatus, MSTATUS_SPP, PRV_U); + *env->mstatus =3D mstatus; + } + riscv_cpu_set_mode(env, prev_priv); - *env->mstatus =3D mstatus; =20 return retpc; } @@ -114,14 +146,24 @@ target_ulong helper_mret(CPURISCVState *env, target_u= long cpu_pc_deb) =20 target_ulong mstatus =3D *env->mstatus; target_ulong prev_priv =3D get_field(mstatus, MSTATUS_MPP); + target_ulong prev_virt =3D get_field(mstatus, MSTATUS_MPV); mstatus =3D set_field(mstatus, env->priv_ver >=3D PRIV_VERSION_1_10_0 ? MSTATUS_MIE : MSTATUS_UIE << prev_priv, get_field(mstatus, MSTATUS_MPIE)); - mstatus =3D set_field(mstatus, MSTATUS_MPIE, 0); - mstatus =3D set_field(mstatus, MSTATUS_MPP, PRV_U); - riscv_cpu_set_mode(env, prev_priv); + mstatus =3D set_field(mstatus, MSTATUS_MPIE, 1); + mstatus =3D set_field(mstatus, MSTATUS_MPP, 0); + mstatus =3D set_field(mstatus, MSTATUS_MPV, 0); *env->mstatus =3D mstatus; + riscv_cpu_set_mode(env, prev_priv); + + if (riscv_has_ext(env, RVH)) { + if (prev_virt) { + riscv_cpu_swap_hypervisor_regs(env); + } + + riscv_cpu_set_virt_enabled(env, prev_virt); + } =20 return retpc; } --=20 2.23.0 From nobody Sun May 19 20:29:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1572050618; cv=none; d=zoho.com; s=zohoarc; b=AyMd3gui92u5G9fVRvxYeYTvfBjVDVyIpl2rq57uuy9AXMMowiT8BGAEFCAtlz5Bn8YrtpkY/POqQ6uVb3DY/rN86aRmnTDw2WvzlNUHfdP/f76YDVFNj2cRSYdb7MIeBo4POjeXAImnHgNAQJ/UDM9VHcvIbD4bU0qrJZ/ED9o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572050618; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=0H4rk3HviAvilBjMIYfPtXFw4sQqTcKH0feUsvF30ds=; b=hFkBGQoin/NNZWfxgZTzVIrRRUck6htP8fTJ4fQCxW5tlC1/zLJ32WdRuXEA0w0BQqahPiN3gO/+TPx5EG/fDaEnUXRgnq9x1ULXC91nB0NXVjnGkbvpMowkanhCDS9iMtWLpM9JIeLoV+vNPq2UVkhZKWqd4zSMCvuRApOAje4= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572050618122683.2809763358157; Fri, 25 Oct 2019 17:43:38 -0700 (PDT) Received: from localhost ([::1]:37568 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iOAB6-0005XJ-QC for importer@patchew.org; Fri, 25 Oct 2019 20:43:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49841) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO91B-00059A-1E for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iO917-0004U7-GD for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:15 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:36801) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iO914-0004Sy-1d; Fri, 25 Oct 2019 19:29:12 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Oct 2019 07:29:09 +0800 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 16:24:35 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip01.wdc.com with ESMTP; 25 Oct 2019 16:29:09 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1572046150; x=1603582150; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=dMKqeONfKcctIWBRru6Nk23YmXDldC/KGUfehKsR0KY=; b=PDXOLoG5QfCvC7wUCyGyMQdjBgyqbsHta7LY4SeACaJ8IO7rKxN+xntc 5Bcx2Zd3KdVwohja9siaPVD6KDonQsIRtGBEZkSl9dtrxUw4JVU+iugxr mlfjlPlE7JWF/kyIax30wJor+i09t10NCS4kcX7XY0xPR9enCa6OZGu7e NmohxI/Tud5fOPwzbj+Pc1cC7NGhDK9ux18Xj9HCRU/nQqfJuoICPCe9e IWL5mLfH92+9U0e9+LITNgUNguub7cQW+eQM7QVPzMVtb7IYfUiq/WMo7 /OUyEuyp+PDYrIyrb2ow+B70FEYPH+DwsaM6RRnLFF0Y6+VmE4gSgVlPE g==; IronPort-SDR: 0rbuNeuXF6rdV+bQM853tcoqfOKyYByGC3tBCENodf8lN6dly495qN7WbuIeYBS6bgtQjytdAh IZhRxxSJx1ENMw041MXrJpnosbvufugUboMa10R3vD1ikOQl5hJLT9UP6kqlKh2T5etKBrO5Pp 089VT6oMlzKo/wNWTRasu+l10raDoop9dQRUu9HUXq7j30vutd7QD/cO7XeBLB8y8At9GdfUEu pQtBg4Quu07+nx2YSGl3x8G2F2XDzWNNt8al74jdKZoIJ3f1guckr7Aty3m3+WXQpIU9UK6LtE HFk= X-IronPort-AV: E=Sophos;i="5.68,230,1569254400"; d="scan'208";a="122956680" IronPort-SDR: w4RoC75gdiYQXCzXk/7nwb67McwtBOSlPp+2Tfg2p6+2O8XROP1E2AjYQK2y0iO4ThgCB1VsDK K/UYBss53qJWCnvVyI1jl2EIfAO8XkFaCbh1GiCeX5TWkD7+qbWIv40m017uO4sWb+JrIR6bfb YmUuW8J1bg+srOljHsQJ4NnON3moEcPpku3VO9bRfZPCZRPJehvPYXNfe7MisJ9uJpWbFkzUsH Ya+p5qeP3UEnPs/n0uuIAWzD7bJYDt41FoTdv3DzRCMJVicRC+qmr8zjOSnKGY+wqgZeAlwBnN 4UKpSAwvkytKtezZGpK4QhMw IronPort-SDR: UQISS66IE+rA+uCpRMrcdMKu7CEvkJkSJiM/5ebQfNi0RHnB8sXiMUyFNAASbq74YzuYqKi89o 6kdUiTsYLyKDYokRUK/uZLoARiY0e5Z6ekOlFl1uCtDA6dhJ62mDnwMjzYNVw5YM1w3yG+EoWf mwZCNY1F5JlFjQmSow5sF0ci7A9RO2vMm1EJLIC7rGPpBFACKUrRH/YWAAbmFSHRGvlI192TJQ q3tfsoamngr2CQVp5o7+LmTAoN0TRMbSXA/X7AKldHgC6/YhGjPz5HERqXa2gxDoYAZwUtDQ/b g9Y= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 19/27] target/riscv: Add hfence instructions Date: Fri, 25 Oct 2019 16:24:13 -0700 Message-Id: <13c3cf8969b1c4c2a8c593501d4148041881a5f5.1572045716.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 216.71.154.45 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/insn32.decode | 23 ++++++----- .../riscv/insn_trans/trans_privileged.inc.c | 40 +++++++++++++++++++ 2 files changed, 54 insertions(+), 9 deletions(-) diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index 77f794ed70..cfd9ca6d2b 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -63,20 +63,25 @@ @r2_rm ....... ..... ..... ... ..... ....... %rs1 %rm %rd @r2 ....... ..... ..... ... ..... ....... %rs1 %rd =20 +@hfence_gvma ....... ..... ..... ... ..... ....... %rs2 %rs1 +@hfence_bvma ....... ..... ..... ... ..... ....... %rs2 %rs1 + @sfence_vma ....... ..... ..... ... ..... ....... %rs2 %rs1 @sfence_vm ....... ..... ..... ... ..... ....... %rs1 =20 =20 # *** Privileged Instructions *** -ecall 000000000000 00000 000 00000 1110011 -ebreak 000000000001 00000 000 00000 1110011 -uret 0000000 00010 00000 000 00000 1110011 -sret 0001000 00010 00000 000 00000 1110011 -hret 0010000 00010 00000 000 00000 1110011 -mret 0011000 00010 00000 000 00000 1110011 -wfi 0001000 00101 00000 000 00000 1110011 -sfence_vma 0001001 ..... ..... 000 00000 1110011 @sfence_vma -sfence_vm 0001000 00100 ..... 000 00000 1110011 @sfence_vm +ecall 000000000000 00000 000 00000 1110011 +ebreak 000000000001 00000 000 00000 1110011 +uret 0000000 00010 00000 000 00000 1110011 +sret 0001000 00010 00000 000 00000 1110011 +hret 0010000 00010 00000 000 00000 1110011 +mret 0011000 00010 00000 000 00000 1110011 +wfi 0001000 00101 00000 000 00000 1110011 +hfence_gvma 0110001 ..... ..... 000 00000 1110011 @hfence_gvma +hfence_bvma 0010001 ..... ..... 000 00000 1110011 @hfence_bvma +sfence_vma 0001001 ..... ..... 000 00000 1110011 @sfence_vma +sfence_vm 0001000 00100 ..... 000 00000 1110011 @sfence_vm =20 # *** RV32I Base Instruction Set *** lui .................... ..... 0110111 @u diff --git a/target/riscv/insn_trans/trans_privileged.inc.c b/target/riscv/= insn_trans/trans_privileged.inc.c index c5e4b3e49a..b9b5a89b52 100644 --- a/target/riscv/insn_trans/trans_privileged.inc.c +++ b/target/riscv/insn_trans/trans_privileged.inc.c @@ -108,3 +108,43 @@ static bool trans_sfence_vm(DisasContext *ctx, arg_sfe= nce_vm *a) #endif return false; } + +static bool trans_hfence_gvma(DisasContext *ctx, arg_sfence_vma *a) +{ +#ifndef CONFIG_USER_ONLY + if (ctx->priv_ver >=3D PRIV_VERSION_1_10_0 && + has_ext(ctx, RVH)) { + /* Hpervisor extensions exist */ + /* + * if (env->priv =3D=3D PRV_M || + * (env->priv =3D=3D PRV_S && + * !riscv_cpu_virt_enabled(env) && + * get_field(ctx->mstatus_fs, MSTATUS_TVM))) { + */ + gen_helper_tlb_flush(cpu_env); + return true; + /* } */ + } +#endif + return false; +} + +static bool trans_hfence_bvma(DisasContext *ctx, arg_sfence_vma *a) +{ +#ifndef CONFIG_USER_ONLY + if (ctx->priv_ver >=3D PRIV_VERSION_1_10_0 && + has_ext(ctx, RVH)) { + /* Hpervisor extensions exist */ + /* + * if (env->priv =3D=3D PRV_M || + * (env->priv =3D=3D PRV_S && + * !riscv_cpu_virt_enabled(env) && + * get_field(ctx->mstatus_fs, MSTATUS_TVM))) { + */ + gen_helper_tlb_flush(cpu_env); + return true; + /* } */ + } +#endif + return false; +} --=20 2.23.0 From nobody Sun May 19 20:29:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1572047912; cv=none; d=zoho.com; s=zohoarc; b=EEUAcNVdhFZpn6cxpFxuMyutqZEeAfYUYBgq/YehlSUIETTuD01Xn6+ghilIlBVJz58ZqqwlvYqOUAX86LKLcrBW/aOHu8ARvXwF1KDa22nQyfRIbeTv/G1a9hzl/W0dAbC9eJebxBXl3Y4qvqvtYRCutgPgYi+h2CmBlC7BoiY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572047912; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=8s5grRxZRCnBkyDORRsGKhw8JzNWkpN+ED7OjbDPmb8=; b=dudTp/4YQ/rCws1PpJI2YL+p9U+rOr5zwVHj2dWCWu3QJqCTgTW95EUlmlVZamhTxcyM3R6h4LHjBzIp++kxF+BQaR+yAZpR/zpjSMIpZNQKC0D1fX/dT4Wu7UIHu8weZF4T8CS2wA/xwIdndDYX2gvVQV0Amm8+v9HbGRsNmnI= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572047912305139.97889617395845; Fri, 25 Oct 2019 16:58:32 -0700 (PDT) Received: from localhost ([::1]:37244 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO9TQ-0007rf-Gc for importer@patchew.org; Fri, 25 Oct 2019 19:58:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49863) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO91C-0005BN-5X for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iO91A-0004Xz-Vh for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:17 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:36801) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iO917-0004Sy-Pg; Fri, 25 Oct 2019 19:29:14 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Oct 2019 07:29:13 +0800 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 16:24:39 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip01.wdc.com with ESMTP; 25 Oct 2019 16:29:13 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1572046154; x=1603582154; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=X5dyDZAU+qyzeBfQWrLfqPPCa3H8yb2Aup7zkIbTqeU=; b=iOBbjpOiFDgRRSWeLJRkBP//7UxYV7XlQ+ZUeJtYEsLSXjViY1Tnxtzh 6Zuf1BkQsn+DlQnZPZWn0KJ4W7W3v+dJ17JeaED0hFWrHWQW/FEDKI79Q jZPQGq7Y2BkIC2JDsOVtnd5Dw+jLpm4Dx+fcnVkG/yHIE+8bcaUZLSqzl oIU2i8Tj+YXGjsETmZM93Wk9Gx3fQwbunqp9E20eVY2K34M8WWCyPfWxb 5ynhuIAosNI9Ik9tD5CwzZ63Cl3Xo8Oedd80F0R7MNoquWLB5ufxG3pqF 9KBnaSl7oVN8cuFUdtYTLduvUcLhcYG3DSb0l8C6GutoMrREYkwWsHxly A==; IronPort-SDR: EmUJalDVyOJGEViwOXAN7v6RgpGGoEU+5CaFxU8M6qBg7o3nNEDXZT8jkh2BJHIA1G80PjKfPY H0kDKI29ZMmxO+WzZSrrM3oUUVWWaBnLfreyJfAbtF4OimW8nl1WrCvPp9Vh1gs056j42l++tw X2fjLU7dcJwJuCL/B+3ZFl6muXe4dyBTR1DutoCPSavb/Hrt2vIjlWe+D7HPlAykIW4wX5U3vx 7KFacJG5BZXcY6QREY2TaTF3tYvZvG1XmEuViMkPYhllTfNpUF0CNhn5OdKaNGSmxXDB8aqOVZ RxI= X-IronPort-AV: E=Sophos;i="5.68,230,1569254400"; d="scan'208";a="122956690" IronPort-SDR: 07/BLcAjcDiKWZ1ZgwA9rN0JaMN7uqa6aIVGorzgHeTpJjQDtTh+nzvdRWHDLTrfX2MbdJdsea Q4uoNCBoS3xLbsRPArmqfb26kDIpYvmgqTDYnLbgyw6x15OqQAcoHppSfiApYpC09nT9xlJAOY uqjlz5lwQVGYOruMY75mAo6On9GYJD292iV5aFc0bozcnW7IUhhXdvyVdP10Hs2Sq9xUs7U8M7 CkU9C2+/Mz3jRN9kgaqT72RfrVoWmqipxJVXH0IjjMz7MS3QmQzG05nVB4u6g+mFjsExchXhQf fPG5IH/M5LEYssEuJqnBY1Bz IronPort-SDR: P3AxYXNCx3emXoGrsUU6Z3FMnLFGM6bzUqEmwh0Ltu3W8aL9VxPYnymF3x+hruIbkXxyAVeNzu qU5ELiEbFcBfdoIsQN+jQ8RX33NHwi+rZpbWZhg9IndU0HgZ6CqF/RNc8o/qbXEj9FOMUlqb05 7sOSxhZ2GWONZiiKtkvsLRSTyewEBqLGJqR9jZzcIX3EvvzlJ6Z2sEyjzi0xycfWQr7Nrn5FX0 mymP3uS87QcbMDtoupZL0FbjmOYulJHPJT5DE9U0ub6Nyo8gYTs9dFVwRv7CGc9eDICDyk1Vy+ U9k= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 20/27] target/riscv: Disable guest FP support based on virtual status Date: Fri, 25 Oct 2019 16:24:17 -0700 Message-Id: <8014e06e5b0c5fad5b0a33e977bf9bb50a8cab30.1572045716.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 216.71.154.45 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" When the Hypervisor extension is in use we only enable floating point support when both status and vsstatus have enabled floating point support. Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/cpu_helper.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 41cd314f64..79966ac6e6 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -91,6 +91,9 @@ bool riscv_cpu_exec_interrupt(CPUState *cs, int interrupt= _request) bool riscv_cpu_fp_enabled(CPURISCVState *env) { if (*env->mstatus & MSTATUS_FS) { + if (riscv_cpu_virt_enabled(env) && !(env->vsstatus & MSTATUS_FS)) { + return false; + } return true; } =20 --=20 2.23.0 From nobody Sun May 19 20:29:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1572046635; cv=none; d=zoho.com; s=zohoarc; b=AVS8HC2fsBysBxBqHbTSp2EKka4JDPMYWmDFnkyhU5BlivOfab1vy7qyfrx9UEFbyMt4aAxnXDqzh2xY5QodPgoSDxVXGV2nE4pdqKGnVz5Q340rnQDSMlAAkgWF2xIbKi9eCcBswmVnpwmA/PANFQjpjP1gXJXhsvMXsVK2K0Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572046635; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ZcwvOfEpPMeCKTECT7W3VmrKtr4hV4xXutCX/qL5Waw=; b=cLF1ot1vZIOUxmNZK7T15E8jBf9FNhcB/P0bkSp/Tu/1zTmg0MHV6pVvRt1bd6zTmRQr2jQdYIopSRKj9YVfvkKYqsctHsuxuWbHNUmP+wZIZvNzZglOwcPXS7NDhhWzBUYMmaEuDhl1GhwDml06sK0A6XPb7QtFTnZ6XNKYfm8= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572046635464605.0031128815914; Fri, 25 Oct 2019 16:37:15 -0700 (PDT) Received: from localhost ([::1]:37018 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO98o-000635-Sb for importer@patchew.org; Fri, 25 Oct 2019 19:37:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49890) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO91D-0005Dw-E8 for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iO91C-0004a9-6z for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:19 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:36814) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iO91B-0004Yx-U4; Fri, 25 Oct 2019 19:29:18 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Oct 2019 07:29:17 +0800 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 16:24:42 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip01.wdc.com with ESMTP; 25 Oct 2019 16:29:17 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1572046158; x=1603582158; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Lvx9EFzt7D2eyEPDFxq/tAplhRU6Edal/BZ9pVFsLkw=; b=aTL6mmAvlKPon4M47CK7BjVrPWtreKSFxQoTrdmkds9FjZDWkhD0UlmB DgdKgDDgSx8JJW2bPah9SpSMGrqyKkZIjXP7ScfpzkjfDmgOB8v+1ED2Q rHiAPfjqkFs0GIkgcoG3EBdp4eW/gfNh1ADuo6DC08xepkn6nniRRNY4V eAn1btf/XxzOANkXuddjUj6sASChtszkVzVMZSuHuWFd+jb8BTzMghH4q OJpvsQaSo8OTpakxR5ljoXe0At/t4bNfWEfKTZhHAHrhfUm01cvKerLVf qtoP/2615SxHOKODFoHb2jSElKuoR1cDuJrGN+TAcKPKnVV5qtV+kgtp6 w==; IronPort-SDR: ug/ibafVvzl2MLzy+JFqgCrZg2ds+MEpnthNvKNNUvFUgzNqQj1IUs14fVlEyNic5EdggeTTia 2UZnDZmfVf92MtkLxyZ+SFw3u9Qv6oZaaGqC1887Ci2JWi4E/ktbHauaEDFhapsK9jlw3LHtno XYl/4T8+9ngWMDNpBS6AprUFBLAbL7JnjBGV71GShAMTtH9CSsiFDPnrGcGtuo61mdi37SGU1d DTaddsn9M4FHEFyC+upDXJpF2S/izDr3vk6/AMX8ssHdkA9TF9GyDnHvldsnSLDAopDIYOaMH4 O10= X-IronPort-AV: E=Sophos;i="5.68,230,1569254400"; d="scan'208";a="122956693" IronPort-SDR: 2tLYbkB03UX1I5ADEoc5UmZO5TWbGWWxWp4DrDxPxpXAHs56h6h/YJAssoQvRrl4lZ/NKfIbtK LKBWdYaFV/QqnjGPu187fNh6kAfMUNDJA3JXavSGZzJzGHwfgiTO2TG1SW9MzPQb9/9wKl3KhR ZlAzX2ECvTtxqUqQZTYP67OORvIVLDXZVbnnMp/o1lYoe6PYthd0+Gzssr+ksZl04BT0OCMuUx PqyHbGvX3aGQpxMk/6yI7ceVugAot5ZlQnjIXNKZ6YcRKutJZcBsyM2PFsFQtxwEJnIzngT4oR EXigKPcNm2Ay18F5HSNpIS9h IronPort-SDR: diXSoMDvpi/YP4ck1u0CTzQmqkFlayyWMGCkHonQVGBNqviWF6oUD95RnA5OStiNmcy4YgSxjA /tr0gxYSg739iMyKtTnUNNFlJMmzVS5Qymlm8TflhhweaYkIXQx44BgGnS3nw7+sc8qi4BnUtm Pq/GZkNJqZeymsoq0YRR5bi4zvc6+SBrgIOmT458d6OVrh85VsAMuqCzv57Xa42+QZoB8Iy6up 67DpDm358V/pxGH+C2/KarDfS5rSjWl3GMbIA5CozltR2cBtQe/V/w4KsgGlzh+1qBdAegNKdb sG8= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 21/27] target/riscv: Mark both sstatus and vsstatus as dirty Date: Fri, 25 Oct 2019 16:24:21 -0700 Message-Id: <052da23621682c72a81bc0c4203fd817cd493987.1572045716.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 216.71.154.45 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Mark both sstatus and vsstatus as dirty (3). Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/translate.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 8ac72c6470..19771904f4 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -44,6 +44,7 @@ typedef struct DisasContext { /* pc_succ_insn points to the instruction following base.pc_next */ target_ulong pc_succ_insn; target_ulong priv_ver; + bool virt_enabled; uint32_t opcode; uint32_t mstatus_fs; uint32_t misa; @@ -398,6 +399,12 @@ static void mark_fs_dirty(DisasContext *ctx) tcg_gen_ld_tl(tmp, cpu_env, offsetof(CPURISCVState, mstatus)); tcg_gen_ori_tl(tmp, tmp, MSTATUS_FS); tcg_gen_st_tl(tmp, cpu_env, offsetof(CPURISCVState, mstatus)); + + if (ctx->virt_enabled) { + tcg_gen_ld_tl(tmp, cpu_env, offsetof(CPURISCVState, vsstatus)); + tcg_gen_ori_tl(tmp, tmp, MSTATUS_FS); + tcg_gen_st_tl(tmp, cpu_env, offsetof(CPURISCVState, vsstatus)); + } tcg_temp_free(tmp); } #else @@ -742,6 +749,11 @@ static void riscv_tr_init_disas_context(DisasContextBa= se *dcbase, CPUState *cs) ctx->mem_idx =3D ctx->base.tb->flags & TB_FLAGS_MMU_MASK; ctx->mstatus_fs =3D ctx->base.tb->flags & TB_FLAGS_MSTATUS_FS; ctx->priv_ver =3D env->priv_ver; +#if !defined(CONFIG_USER_ONLY) + ctx->virt_enabled =3D riscv_cpu_virt_enabled(env); +#else + ctx->virt_enabled =3D false; +#endif ctx->misa =3D env->misa; ctx->frm =3D -1; /* unknown rounding mode */ ctx->ext_ifencei =3D cpu->cfg.ext_ifencei; --=20 2.23.0 From nobody Sun May 19 20:29:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1572047447; cv=none; d=zoho.com; s=zohoarc; b=Emdto0hcK7W3YuXPO8Bk/rLbCaXRrIzs0qD0cCkXaXiPkldcatsXCxRHf7GVn/Y8zzrvCQPSrzBQ9D7RybcGF01D5ozNWwpmIVlfbVOTCZHRyfWVP6zZVtzYTvoXb3KJaGjdbfebQOitNUUqq5uDg7u5VQWiozTaBo6exuGewkY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572047447; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Hjt7ORw4yWKF3cvxUj4BYvgOhYs/RC/HRjJJXASr0fE=; b=cll+WKo09sWjz/sTIyyp/bbgt0U1rgtMVOeKpVFK9Ue7XJkQK1vDNu1CZVHE8NvDF9i5L7vJLZjF/+g1pMiHKfWp8RmMXNgCaGkjTyCOLnnhTT6An377xheSt8QhIhDXJKDGW9MbpfgRuU3DbyHDqNHtXhrpj3tcNZzh1licv6U= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572047447993597.7888082543675; Fri, 25 Oct 2019 16:50:47 -0700 (PDT) Received: from localhost ([::1]:37160 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO9Ly-00037r-6Q for importer@patchew.org; Fri, 25 Oct 2019 19:50:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49967) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO91G-0005JZ-4y for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iO91E-0004c9-UU for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:21 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:36814) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iO91E-0004Yx-Mj; Fri, 25 Oct 2019 19:29:20 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Oct 2019 07:29:20 +0800 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 16:24:46 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip01.wdc.com with ESMTP; 25 Oct 2019 16:29:20 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1572046160; x=1603582160; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=KQTJlLwPnIbWndGHCjHYlEHieDoaNSr+5kuGlRAEudA=; b=BFLu6xzm5r2IlB/4saZJCytuBn93sj+/oWIQTd1YQ3GTEyHutytVsTPn LKkI7ISfFRUl+Qp2mxymxJ6eDlJRLtce5zj54lE3W2JEUBw2Uu9i11uaF ZWvwz1EaZpSSd8OJPKbrHSR+5cgBuvoLqGCih3HR/2fZ/o7sy/079Y57r y/Zxdh9VXPQDhofj5P0858dzYkL9uksAUv+vJ9d3xOrgRsvzplHz6K+Ig 1ccnFCaMS2XdcrK5GRYdDZFrC3XnnPu+6Y2+6G+m/97/i32djqAPexha2 EnaQYPdom7e8Uma/avuIlM3hGdZ4BWk3DwtHY9VgvEtofQL/neZUDZIWj w==; IronPort-SDR: iJAyVlYGIEV3X6lQ8woaTgSSjjqSHoflvrumC2+kEjF6x+0KY1oDaoGMdMrMUG7hS+LiW64kGr hwbmWzqWf/gB9Pa0YFDTEVvMM/pyjqIGNW3LXl+r0WX/7+J8biFpm6nkknjAnjOwNvtu0gutLY c25hFVD6VhsQWmipi4I6Nj907dWtiYnKMkEGbn6i6AR0j36/SVZK7lzrvUx5rUQ3/AxtTPzGGW c1Y88vHO81NjwAJQJrWR424NllAtTF9W5OU7pxyAUnTlWpZ3u/o02nowgH/PFZHFcBgPWkuD+i 4ME= X-IronPort-AV: E=Sophos;i="5.68,230,1569254400"; d="scan'208";a="122956695" IronPort-SDR: C4LiGyJ7geaswhy86vHBGFz9KJKuq7WVVLGdy1KNtUyi65SGKzJgaPwA0P0ZFvKkToDLCN0ugK Mu4aRRa95YzOImHiFJi8GV8N4DXgDDZ3PeTVUg9bi3HIKkE4Lt47rBSV7y6mBdtHdzb7mD58PN ERjDjURSiQm503JlzLwNmVKw6cmVaw+l1qrBcbUQV0qbpv54PSCuOW8T6OkfkOzWBVZll1oWkR s0eAB7vDUsdC9p6Sm2Eq2hq8cU/P3NSfSy4c4sO32NX0aqB0G/wUJt+cWnW6jFFAZhxlIXhsfF 3AB9SyT2h6jVWtngu8k613kO IronPort-SDR: uDhf2LHIXUQk6Fzq+ZvygT4BaBLCIWTPfNP960Cy70gQSrbtCD+yjy9SmzphEwwUD6L8bLoR03 mXIOcZ6Q/di7VrOy6qvDjtFJe85ks9HVZP1JQN6D0L5qeXQddBO7aQFAvCuBTVQHkrJYC7+gOr 0zkwpNMjAyvO+Xq/iafearY/7iOW5+C7agQdsGO/nUdf/RetWN84ye6ugfEYcS43vS9c1WQbJZ RzX4HSYmoD6CP2m+woLgtVYM0HFo7YRsAaVTvA8nkZwXVUyexczNcPdJ69R3qzlyv4ZfSk2a9F dw8= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 22/27] target/riscv: Respect MPRV and SPRV for floating point ops Date: Fri, 25 Oct 2019 16:24:25 -0700 Message-Id: <6e97814eb37a0f5c56ef86a6c4ae5ac07d25b88b.1572045716.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 216.71.154.45 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" mark_fs_dirty() is the only place in translate.c that uses the virt_enabled bool. Let's respect the contents of MSTATUS.MPRV and HSTATUS.SPRV when setting the bool as this is used for performing floating point operations when V=3D0. Signed-off-by: Alistair Francis --- target/riscv/translate.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 19771904f4..ea19ba9c5d 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -750,7 +750,21 @@ static void riscv_tr_init_disas_context(DisasContextBa= se *dcbase, CPUState *cs) ctx->mstatus_fs =3D ctx->base.tb->flags & TB_FLAGS_MSTATUS_FS; ctx->priv_ver =3D env->priv_ver; #if !defined(CONFIG_USER_ONLY) - ctx->virt_enabled =3D riscv_cpu_virt_enabled(env); + if (riscv_has_ext(env, RVH)) { + ctx->virt_enabled =3D riscv_cpu_virt_enabled(env); + if (env->priv_ver =3D=3D PRV_M && + get_field(*env->mstatus, MSTATUS_MPRV) && + get_field(*env->mstatus, MSTATUS_MPV)) { + ctx->virt_enabled =3D true; + } else if (env->priv =3D=3D PRV_S && + !riscv_cpu_virt_enabled(env) && + get_field(env->hstatus, HSTATUS_SPRV) && + get_field(env->hstatus, HSTATUS_SPV)) { + ctx->virt_enabled =3D true; + } + } else { + ctx->virt_enabled =3D false; + } #else ctx->virt_enabled =3D false; #endif --=20 2.23.0 From nobody Sun May 19 20:29:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1572046872; cv=none; d=zoho.com; s=zohoarc; b=DkJxA6QWIcgqseYyxfkqtsvjRN7ZmGlN3XHHKf8WNUctuQHRQ+iwK0V34uo2XkfmxyoyjRKI9h72Fh35zfTX/NH0tR5TEdb6P5Nb+jInBKzs4SejuhsTatGVuClBjqoSIsm4TMVW656+Q3jRvovVwp2qzmUSznrby7pirC3685w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572046872; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=wYHJUrEqiB0DnF2UdPzPtYZmmnBcLBEBFKcYzgJDkQY=; b=Zu2HIp5JCt6VOLR213dWsRJ/xxf4QRWVfbW2CSa0ani4RuI55xg8amLKTqNcgYtQVhXIqn5uyIbLwJRqbPed0RqLDLrSu0MMWCeo+8vyP5phi3MPlkmXTPbuHmu6PqMX6didqQOKmbqF96I6k4vc5ONVaoeziB4YpqupEE6+QzU= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572046872468483.048826253838; Fri, 25 Oct 2019 16:41:12 -0700 (PDT) Received: from localhost ([::1]:37062 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO9Ch-0003fi-5F for importer@patchew.org; Fri, 25 Oct 2019 19:41:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50041) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO91J-0005R9-RP for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iO91I-0004fM-CH for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:25 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:36814) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iO91I-0004Yx-2H; Fri, 25 Oct 2019 19:29:24 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Oct 2019 07:29:23 +0800 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 16:24:49 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip01.wdc.com with ESMTP; 25 Oct 2019 16:29:24 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1572046164; x=1603582164; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=i8VVKNCleTNXc1sJm+bTXzJRq92Hz7ibezM65PfGzFQ=; b=IHnP1hBlLbJ1pKoEc+P+iY34CwA93x5pc07S1qwIFtZwOoTsRDGrKGdK VUhNEjAZGMynSzahU5gJve/S3kaRdtI3gmLJcz2t+pAIzQaw9NOBzKwhw BHAINcyLJ9FNR1UYhytAOkm+x4WVq2LrBKyMUFlTpkNIVG78kypGalz9J zXOZL7ELcmLWZ8oJTkHRlBQWMIoLFZIMzMN0UX7xOM7j5IaJvtemkj9QL J5QMT9XsZLvT5zSGLut/tuBr+ziskbiJ1BbTn4BDf/jxHWaeVZFxhNrpQ KBrG3uaXCM8QpKovz17r6FwK/BJ3/e0s6hzTFK28HeTUWhtVhahXm+Ood A==; IronPort-SDR: 5qXar3GzXyBZ3QBMTecNz1enKM4XiQDNA2GhDZlr109yNot1bTgnNiG14hu41u0liuYkYauZfl r0xm1TCPRLKBa2qdgEAGhPU15SYSWsQFTeuJa+LVzowDAgqKKZWnIzNca17RASiwzkGDMclBb9 8tL9JUOVqw7nR5IYi6HuUBa0c4u9EtGzebhad/bVo1/FuueP5Vvz6PGdoPvOP7l56taP4SV+TG DzZM9FXztHjMAR4uqvwtYgAN4X1Gbai83VVD7JBT0unl+o9cXf6IsK/++NbEEMxydbsOnyL1N8 SPU= X-IronPort-AV: E=Sophos;i="5.68,230,1569254400"; d="scan'208";a="122956699" IronPort-SDR: W1nXGwwOpjWflXq5s4w06nxfSRRu36dYwthe0OKOUzc+XkzkdTTqOiRTT93aLJFYn452cYqpJX /4cQ7I8I5Srra5IFZZQWy1FLa/3lykqzVeEQw+OThJqmiQjxOqExXUS7NnGw6rbimaQ+B8SGnJ cBVt9ok4VmYgwKIgNsDW9nFRTUbFcrmSHVOI6giS89oMnzeApdsGqg62Zv1P7O+FnvW5lFgdhP X1S67lUaGHQknQWHSmdWdCX/NKRWwNLJqHFI04SrtYYDLt033MT69vpQDRk3BzqFJikWZthPHw WopEXM4heIC133/B//MwOhYx IronPort-SDR: FlTUyhGSx3cZUpthD0F/iI1FQMa4Zf/4Qlie90JrKlTQnmH62BpsiGoRU3Bky/MyJkwK6wp5C8 +v0S6Ol/eGJ+PEKtT7NoS0sdNQjUpIXqckQhBjrV0h4iqdcCFNJGjX3Inmnjp9xuNUAiWOG2EV 8SDzY/TnsMh0RPUqFq7dpeMAa6beTvF2UEGNoSoj1FoAPYTTFcT2dYBawpVtnveGxxR7wcGZBW Xe/87xPraQ5pklyHyd3rEr1DTmlsWYqzDfz2RZXD7Gga+YqJxUVheHsrgze+lYik1oJdbmV2qt 1m8= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 23/27] target/riscv: Allow specifying MMU stage Date: Fri, 25 Oct 2019 16:24:28 -0700 Message-Id: <472e51aff01eddec5ebc7e5550738caf2800b631.1572045716.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 216.71.154.45 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Signed-off-by: Alistair Francis --- target/riscv/cpu_helper.c | 39 ++++++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 79966ac6e6..275b6c2a67 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -296,10 +296,19 @@ void riscv_cpu_set_mode(CPURISCVState *env, target_ul= ong newpriv) * * Adapted from Spike's mmu_t::translate and mmu_t::walk * + * @env: CPURISCVState + * @physical: This will be set to the calculated physical address + * @prot: The returned protection attributes + * @addr: The virtual address to be translated + * @access_type: The type of MMU access + * @mmu_idx: Indicates current privilege level + * @first_stage: Are we in first stage translation? + * Second stage is used for hypervisor guest translation */ static int get_physical_address(CPURISCVState *env, hwaddr *physical, int *prot, target_ulong addr, - int access_type, int mmu_idx) + int access_type, int mmu_idx, + bool first_stage) { /* NOTE: the env->pc value visible here will not be * correct, but the value visible to the exception handler @@ -502,13 +511,23 @@ restart: } =20 static void raise_mmu_exception(CPURISCVState *env, target_ulong address, - MMUAccessType access_type, bool pmp_violat= ion) + MMUAccessType access_type, bool pmp_violat= ion, + bool first_stage) { CPUState *cs =3D env_cpu(env); - int page_fault_exceptions =3D - (env->priv_ver >=3D PRIV_VERSION_1_10_0) && - get_field(env->satp, SATP_MODE) !=3D VM_1_10_MBARE && - !pmp_violation; + int page_fault_exceptions; + if (first_stage) { + page_fault_exceptions =3D + (env->priv_ver >=3D PRIV_VERSION_1_10_0) && + get_field(env->satp, SATP_MODE) !=3D VM_1_10_MBARE && + !pmp_violation; + riscv_cpu_set_force_hs_excep(env, 0); + } else { + page_fault_exceptions =3D + get_field(env->hgatp, HGATP_MODE) !=3D VM_1_10_MBARE && + !pmp_violation; + riscv_cpu_set_force_hs_excep(env, 1); + } switch (access_type) { case MMU_INST_FETCH: cs->exception_index =3D page_fault_exceptions ? @@ -535,7 +554,8 @@ hwaddr riscv_cpu_get_phys_page_debug(CPUState *cs, vadd= r addr) int prot; int mmu_idx =3D cpu_mmu_index(&cpu->env, false); =20 - if (get_physical_address(&cpu->env, &phys_addr, &prot, addr, 0, mmu_id= x)) { + if (get_physical_address(&cpu->env, &phys_addr, &prot, addr, 0, mmu_id= x, + true)) { return -1; } return phys_addr; @@ -601,7 +621,8 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, in= t size, qemu_log_mask(CPU_LOG_MMU, "%s ad %" VADDR_PRIx " rw %d mmu_idx %d\n", __func__, address, access_type, mmu_idx); =20 - ret =3D get_physical_address(env, &pa, &prot, address, access_type, mm= u_idx); + ret =3D get_physical_address(env, &pa, &prot, address, access_type, mm= u_idx, + true); =20 if (mode =3D=3D PRV_M && access_type !=3D MMU_INST_FETCH) { if (get_field(*env->mstatus, MSTATUS_MPRV)) { @@ -638,7 +659,7 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, in= t size, } else if (probe) { return false; } else { - raise_mmu_exception(env, address, access_type, pmp_violation); + raise_mmu_exception(env, address, access_type, pmp_violation, true= ); riscv_raise_exception(env, cs->exception_index, retaddr); } #else --=20 2.23.0 From nobody Sun May 19 20:29:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1572047161; cv=none; d=zoho.com; s=zohoarc; b=RdYBVwmY8deE4Mxvp40HxlRHTdjDQSlmENEFV9C24fHyruboN1z+1qQByKLJBNiK34xLObs5ZCHMbFjh195ushJ1unVJUVU2j0SyHsVzLGDK+zBdNgySRXAQeuYBZzWIPEoSA6Xm+iXogwFMAWcsqGzaqvWPSvCF0BrSMKs8TcQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572047161; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=DUxdnDaXjOxV5tHN/htSCOqUDyUcri6ltmwJl0MLgSo=; b=HKed8/SOOcuDvw08WCIjKtEQn0jNkefrWq2ee6Gd/CHSNs3P6F0cpd4jlAMjo06X0/LnkV3JXJ5S5rWmbDCwjpzV2Pxd8tybxdtp1L+L6WpBXhe93RvMnV2tuSCPduFnKZyXgNa585vqJ6ZgzyEDE1uGUPK7XA4mEnWGKO4dUOY= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572047161902132.78278549288086; Fri, 25 Oct 2019 16:46:01 -0700 (PDT) Received: from localhost ([::1]:37106 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO9HI-0002eR-W7 for importer@patchew.org; Fri, 25 Oct 2019 19:45:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50083) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO91N-0005YY-Er for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iO91L-0004gi-It for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:29 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:36814) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iO91L-0004Yx-5X; Fri, 25 Oct 2019 19:29:27 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Oct 2019 07:29:27 +0800 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 16:24:52 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip01.wdc.com with ESMTP; 25 Oct 2019 16:29:27 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1572046167; x=1603582167; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=9KX4fmzs48B9AnTsmnSKVgxCb5UksLo0R1oD8BBOlRk=; b=Yul4k41LTLY5Xugzw8Qfmp4smWF2Km9edOE3P2vm0LloCWeasY8SkKxT eeLstD1E5AoXWzwUCQxPQB2mh5wof3LrV6JArG/n86avdCqkkoanM+s5Z Av2vy2yknRLMKywMHyGS8Xxu6GdAL4mW62EZGex11I1Ny/V4OMlBu6SEO iIv6FiNoWB7VuD8fT1SfrSQkB5Fwv8jXNzZYx4CeElPBUO4J6MbqjC/Fb +U+V00rfcJ1f/oJtrs+3nV44QJO3jbrZtV71eif73YKEaR18QEJk7W6M/ vAxXj76miAyXgA2lkRd/tFVrpvdBYKaS/6jw+w/Zy/djskAAsRZAv4nR8 A==; IronPort-SDR: w+qKtb/UCC3vtfRetBHUJb3jweTUcGoC089Q7KNASCP96TqYmAkFgpd6+UVbSNC7Zvs7u+BVCS f+biLqbscYkFuIZvfeopdqT8dip6UmOpn/HoH4pWo2mQUoclOMdnuLlivKHt6VoJnqgoBwO6nQ vJE6SCHXLI6St8V9LgTzzwjEwguhQJt0+yOArpg9QzKGg42qB/ONwVR82twTO10x4CbEzaXJe7 1uZO3APIsgRTAxpXgvmVtDD9nQciLQWxV9RnHja1RDhWb1kC4AlbXXnrJ9yV/GZumqwZ2AE3mi 1UE= X-IronPort-AV: E=Sophos;i="5.68,230,1569254400"; d="scan'208";a="122956701" IronPort-SDR: t2pCTgNCBFefpbw9eqAauyLsSktOAxUk429XIMI6dqveF7G3BQS2Znfpovd/yfoFktxA4aclYy 7ia3d4RJQg+WGSg2jV+HgwLQ7m20mkbKFIXufYshxn9mMhCrnbmLjwTicUpJ7lHDiDd+QFKrK7 3mH1Pks9dHQT3W0Iw7cT5Tfy0M3y5aA4DZAyQPSUeg6XxPsD0eBZJvzddCNV/0Cmcx+jN9B04T 69YXFQ7YMcAFq1tBrNd/+DBie1b2F6ymn2lcVhsSSSWWxIo5vBRMtNzgDSRRH6opEWBktq4ZgO EXvb1N7q+Ekw/LeQhqeCc27m IronPort-SDR: GwzkvduGhMLVOQRVkoOSJJ9U1FAGYelBfiEAX+dqtL4KfCmTtI1i7tEDTe+lHNIe6BdJNBkTfA hmPgRpio7HyScIzjJ9FhZ/0byfnMmptwKgmC4SO5fbJbWvZsWLGKRks7sMgejOi6s07QPPC54R 3bVD0U/plCIiT8mfFtqrRfAggDTFbI/LPtj8vVGjXnUJu7g9R7GJMYfU+08BUKACaVnbAbcJLY yst42tuH3meWtKYS0osGMFeihMlI8GN5ruK/pkgfffl3lrbs3M+1/SpqAZVQ8JeM6v2p1Lx3Ab NrI= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 24/27] target/riscv: Implement second stage MMU Date: Fri, 25 Oct 2019 16:24:31 -0700 Message-Id: <6e999bd94410ca9f6aba6dee33d5335c87444606.1572045716.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 216.71.154.45 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Signed-off-by: Alistair Francis --- target/riscv/cpu_helper.c | 193 ++++++++++++++++++++++++++++++++++---- 1 file changed, 174 insertions(+), 19 deletions(-) diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 275b6c2a67..b3ce345f81 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -304,11 +304,12 @@ void riscv_cpu_set_mode(CPURISCVState *env, target_ul= ong newpriv) * @mmu_idx: Indicates current privilege level * @first_stage: Are we in first stage translation? * Second stage is used for hypervisor guest translation + * @two_stage: Are we going to perform two stage translation */ static int get_physical_address(CPURISCVState *env, hwaddr *physical, int *prot, target_ulong addr, int access_type, int mmu_idx, - bool first_stage) + bool first_stage, bool two_stage) { /* NOTE: the env->pc value visible here will not be * correct, but the value visible to the exception handler @@ -316,13 +317,40 @@ static int get_physical_address(CPURISCVState *env, h= waddr *physical, MemTxResult res; MemTxAttrs attrs =3D MEMTXATTRS_UNSPECIFIED; int mode =3D mmu_idx; + bool use_background =3D false; =20 + /* + * Check if we should use the background registers for the two + * stage translation. We don't need to check if we actually need + * two stage translation as that happened before this function + * was called. Background registers will be used if the guest has + * forced a two stage translation to be on (in HS or M mode). + */ if (mode =3D=3D PRV_M && access_type !=3D MMU_INST_FETCH) { if (get_field(*env->mstatus, MSTATUS_MPRV)) { mode =3D get_field(*env->mstatus, MSTATUS_MPP); + + if (riscv_has_ext(env, RVH) && + get_field(*env->mstatus, MSTATUS_MPV)) { + use_background =3D true; + } + } + } + + if (mode =3D=3D PRV_S && access_type !=3D MMU_INST_FETCH && + riscv_has_ext(env, RVH) && !riscv_cpu_virt_enabled(env)) { + if (get_field(env->hstatus, HSTATUS_SPRV)) { + mode =3D get_field(*env->mstatus, SSTATUS_SPP); + use_background =3D true; } } =20 + if (first_stage =3D=3D false) { + /* We are in stage 2 translation, this is similar to stage 1. */ + /* Stage 2 is always taken as U-mode */ + mode =3D PRV_U; + } + if (mode =3D=3D PRV_M || !riscv_feature(env, RISCV_FEATURE_MMU)) { *physical =3D addr; *prot =3D PAGE_READ | PAGE_WRITE | PAGE_EXEC; @@ -332,13 +360,30 @@ static int get_physical_address(CPURISCVState *env, h= waddr *physical, *prot =3D 0; =20 hwaddr base; - int levels, ptidxbits, ptesize, vm, sum; - int mxr =3D get_field(*env->mstatus, MSTATUS_MXR); + int levels, ptidxbits, ptesize, vm, sum, mxr, widened; + + if (first_stage =3D=3D true) { + mxr =3D get_field(*env->mstatus, MSTATUS_MXR); + } else { + mxr =3D get_field(env->vsstatus, MSTATUS_MXR); + } =20 if (env->priv_ver >=3D PRIV_VERSION_1_10_0) { - base =3D (hwaddr)get_field(env->satp, SATP_PPN) << PGSHIFT; + if (first_stage =3D=3D true) { + if (use_background) { + base =3D (hwaddr)get_field(env->vsatp, SATP_PPN) << PGSHIF= T; + vm =3D get_field(env->vsatp, SATP_MODE); + } else { + base =3D (hwaddr)get_field(env->satp, SATP_PPN) << PGSHIFT; + vm =3D get_field(env->satp, SATP_MODE); + } + widened =3D 0; + } else { + base =3D (hwaddr)get_field(env->hgatp, HGATP_PPN) << PGSHIFT; + vm =3D get_field(env->hgatp, HGATP_MODE); + widened =3D 2; + } sum =3D get_field(*env->mstatus, MSTATUS_SUM); - vm =3D get_field(env->satp, SATP_MODE); switch (vm) { case VM_1_10_SV32: levels =3D 2; ptidxbits =3D 10; ptesize =3D 4; break; @@ -356,6 +401,7 @@ static int get_physical_address(CPURISCVState *env, hwa= ddr *physical, g_assert_not_reached(); } } else { + widened =3D 0; base =3D (hwaddr)(env->sptbr) << PGSHIFT; sum =3D !get_field(*env->mstatus, MSTATUS_PUM); vm =3D get_field(*env->mstatus, MSTATUS_VM); @@ -376,9 +422,16 @@ static int get_physical_address(CPURISCVState *env, hw= addr *physical, } =20 CPUState *cs =3D env_cpu(env); - int va_bits =3D PGSHIFT + levels * ptidxbits; - target_ulong mask =3D (1L << (TARGET_LONG_BITS - (va_bits - 1))) - 1; - target_ulong masked_msbs =3D (addr >> (va_bits - 1)) & mask; + int va_bits =3D PGSHIFT + levels * ptidxbits + widened; + target_ulong mask, masked_msbs; + + if (TARGET_LONG_BITS > (va_bits - 1)) { + mask =3D (1L << (TARGET_LONG_BITS - (va_bits - 1))) - 1; + } else { + mask =3D 0; + } + masked_msbs =3D (addr >> (va_bits - 1)) & mask; + if (masked_msbs !=3D 0 && masked_msbs !=3D mask) { return TRANSLATE_FAIL; } @@ -390,11 +443,29 @@ static int get_physical_address(CPURISCVState *env, h= waddr *physical, restart: #endif for (i =3D 0; i < levels; i++, ptshift -=3D ptidxbits) { - target_ulong idx =3D (addr >> (PGSHIFT + ptshift)) & + target_ulong idx; + if (i =3D=3D 0) { + idx =3D (addr >> (PGSHIFT + ptshift)) & + ((1 << (ptidxbits + widened)) - 1); + } else { + idx =3D (addr >> (PGSHIFT + ptshift)) & ((1 << ptidxbits) - 1); + } =20 /* check that physical address of PTE is legal */ - hwaddr pte_addr =3D base + idx * ptesize; + hwaddr pte_addr; + + if (two_stage && first_stage) { + hwaddr vbase; + + /* Do the second stage translation on the base PTE address. */ + get_physical_address(env, &vbase, prot, base, access_type, + mmu_idx, false, true); + + pte_addr =3D vbase + idx * ptesize; + } else { + pte_addr =3D base + idx * ptesize; + } =20 if (riscv_feature(env, RISCV_FEATURE_PMP) && !pmp_hart_has_privs(env, pte_addr, sizeof(target_ulong), @@ -491,7 +562,12 @@ restart: /* for superpage mappings, make a fake leaf PTE for the TLB's benefit. */ target_ulong vpn =3D addr >> PGSHIFT; - *physical =3D (ppn | (vpn & ((1L << ptshift) - 1))) << PGSHIFT; + if (i =3D=3D 0) { + *physical =3D (ppn | (vpn & ((1L << (ptshift + widened)) -= 1))) << + PGSHIFT; + } else { + *physical =3D (ppn | (vpn & ((1L << ptshift) - 1))) << PGS= HIFT; + } =20 /* set permissions on the TLB entry */ if ((pte & PTE_R) || ((pte & PTE_X) && mxr)) { @@ -550,14 +626,23 @@ static void raise_mmu_exception(CPURISCVState *env, t= arget_ulong address, hwaddr riscv_cpu_get_phys_page_debug(CPUState *cs, vaddr addr) { RISCVCPU *cpu =3D RISCV_CPU(cs); + CPURISCVState *env =3D &cpu->env; hwaddr phys_addr; int prot; int mmu_idx =3D cpu_mmu_index(&cpu->env, false); =20 - if (get_physical_address(&cpu->env, &phys_addr, &prot, addr, 0, mmu_id= x, - true)) { + if (get_physical_address(env, &phys_addr, &prot, addr, 0, mmu_idx, + true, riscv_cpu_virt_enabled(env))) { return -1; } + + if (riscv_cpu_virt_enabled(env)) { + if (get_physical_address(env, &phys_addr, &prot, phys_addr, + 0, mmu_idx, false, true)) { + return -1; + } + } + return phys_addr; } =20 @@ -611,18 +696,36 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, = int size, RISCVCPU *cpu =3D RISCV_CPU(cs); CPURISCVState *env =3D &cpu->env; #ifndef CONFIG_USER_ONLY + vaddr im_address; hwaddr pa =3D 0; int prot; int pmp_size =3D 0; bool pmp_violation =3D false; + bool m_mode_two_stage =3D false; + bool hs_mode_two_stage =3D false; + bool first_stage_error =3D true; int ret =3D TRANSLATE_FAIL; int mode =3D mmu_idx; =20 qemu_log_mask(CPU_LOG_MMU, "%s ad %" VADDR_PRIx " rw %d mmu_idx %d\n", __func__, address, access_type, mmu_idx); =20 - ret =3D get_physical_address(env, &pa, &prot, address, access_type, mm= u_idx, - true); + /* + * Determine if we are in M mode and MPRV is set or in HS mode and SPR= V is + * set and we want to access a virtulisation address. + */ + if (riscv_has_ext(env, RVH)) { + m_mode_two_stage =3D env->priv =3D=3D PRV_M && + access_type !=3D MMU_INST_FETCH && + get_field(*env->mstatus, MSTATUS_MPRV) && + get_field(*env->mstatus, MSTATUS_MPV); + + hs_mode_two_stage =3D env->priv =3D=3D PRV_S && + !riscv_cpu_virt_enabled(env) && + access_type !=3D MMU_INST_FETCH && + get_field(env->hstatus, HSTATUS_SPRV) && + get_field(env->hstatus, HSTATUS_SPV); + } =20 if (mode =3D=3D PRV_M && access_type !=3D MMU_INST_FETCH) { if (get_field(*env->mstatus, MSTATUS_MPRV)) { @@ -630,9 +733,56 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, i= nt size, } } =20 - qemu_log_mask(CPU_LOG_MMU, - "%s address=3D%" VADDR_PRIx " ret %d physical " TARGET_F= MT_plx - " prot %d\n", __func__, address, ret, pa, prot); + if (riscv_cpu_virt_enabled(env) || m_mode_two_stage || hs_mode_two_sta= ge) { + /* Two stage lookup */ + ret =3D get_physical_address(env, &pa, &prot, address, access_type, + mmu_idx, true, true); + + qemu_log_mask(CPU_LOG_MMU, + "%s 1st-stage address=3D%" VADDR_PRIx " ret %d physi= cal " + TARGET_FMT_plx " prot %d\n", + __func__, address, ret, pa, prot); + + if (ret =3D=3D TRANSLATE_FAIL) { + goto tlb_lookup_done; + } + + /* Second stage lookup */ + im_address =3D pa; + + ret =3D get_physical_address(env, &pa, &prot, im_address, access_t= ype, mmu_idx, + false, true); + + qemu_log_mask(CPU_LOG_MMU, + "%s 2nd-stage address=3D%" VADDR_PRIx " ret %d physical " + TARGET_FMT_plx " prot %d\n", + __func__, im_address, ret, pa, prot); + + if (riscv_feature(env, RISCV_FEATURE_PMP) && + (ret =3D=3D TRANSLATE_SUCCESS) && + !pmp_hart_has_privs(env, pa, size, 1 << access_type, mode)) { + ret =3D TRANSLATE_PMP_FAIL; + } + + if (ret !=3D TRANSLATE_SUCCESS) { + /* + * Guest physical address translation failed, this is a HS + * level exception + */ + first_stage_error =3D false; + address =3D im_address | (address & (TARGET_PAGE_SIZE - 1)); + goto tlb_lookup_done; + } + } else { + /* Single stage lookup */ + ret =3D get_physical_address(env, &pa, &prot, address, access_type, + mmu_idx, true, false); + + qemu_log_mask(CPU_LOG_MMU, + "%s address=3D%" VADDR_PRIx " ret %d physical " + TARGET_FMT_plx " prot %d\n", + __func__, address, ret, pa, prot); + } =20 /* * if size is unknown (0), assume that all bytes @@ -644,6 +794,7 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, in= t size, pmp_size =3D size; } =20 +tlb_lookup_done: if (riscv_feature(env, RISCV_FEATURE_PMP) && (ret =3D=3D TRANSLATE_SUCCESS) && !pmp_hart_has_privs(env, pa, pmp_size, 1 << access_type, mode)) { @@ -652,6 +803,7 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, in= t size, if (ret =3D=3D TRANSLATE_PMP_FAIL) { pmp_violation =3D true; } + if (ret =3D=3D TRANSLATE_SUCCESS) { tlb_set_page(cs, address & TARGET_PAGE_MASK, pa & TARGET_PAGE_MASK, prot, mmu_idx, TARGET_PAGE_SIZE); @@ -659,9 +811,12 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, i= nt size, } else if (probe) { return false; } else { - raise_mmu_exception(env, address, access_type, pmp_violation, true= ); + raise_mmu_exception(env, address, access_type, pmp_violation, firs= t_stage_error); riscv_raise_exception(env, cs->exception_index, retaddr); } + + return true; + #else switch (access_type) { case MMU_INST_FETCH: --=20 2.23.0 From nobody Sun May 19 20:29:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1572047443; cv=none; d=zoho.com; s=zohoarc; b=LCu9Mncb3gaccPWutgPqIW706XjxqRyVKo+wAzNldZWmI8Z61H5eI7Vg8cCxzk98c9NP2J/MZxRiKygIoXlu10wBv2+DU1ynhG7MjwlhlMfCG/AYi2IwB1stdvzQ0Oum4sI/SeC78f2OC6gIGQ8K1ovVbC6v/5HklPnTz7gJga8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572047443; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=XMoiRqZmvZN/Zo5jA32AiwOKclKX3EoMN6EpuuDOJys=; b=gZ8N0yCGBaqVRo76NF4U+CM7a1G9HaLnrFZT1t4PVQ1gYZBjEoVsTJK/vOJdfipasPXQetX8DHU4EVDIY8m3xxyT11x7GZgtm49kCiNFxe9s0X/dq6c1q7yXZzxXf1wiLVQGEq3IAzq+mwwV7ftBbxj9Sw3ol9kdXJKrO116QvY= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572047443284496.12903369387664; Fri, 25 Oct 2019 16:50:43 -0700 (PDT) Received: from localhost ([::1]:37156 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO9Lt-0002dk-DE for importer@patchew.org; Fri, 25 Oct 2019 19:50:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50111) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO91Q-0005ds-Bt for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iO91O-0004i8-SI for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:32 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:36814) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iO91O-0004Yx-Kc; Fri, 25 Oct 2019 19:29:30 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Oct 2019 07:29:30 +0800 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 16:24:56 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip01.wdc.com with ESMTP; 25 Oct 2019 16:29:30 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1572046170; x=1603582170; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=BA5fvA5aoIgFzhf1d94fNJ4m/Qu88LfaZFsp34tszgw=; b=i0Y9h7iUmZd1AbU+u4+0ehVGho3rKSjXvIC7H2n/4O3K9YofmkM9fB+k hDectbS7LUrqdCZ4Mo4Qivg8HIJP4wn9ojW/PyhidZQFthwwc7s+qZpdq aPRHfbmi04aXI+J2sjpaXqsR/SDE+zDgfaR6OL/vApGbxw+z3usZu2ykD uSEPYdNBju7++/MK7bxtM3PWVZwWTV26tIUw0Cv1F7VIPgOPbhpD9htzw /J9nNdfjDsyM9sw0yz2E/WMlaEAcH6SsV/b58vE1sWp6sE/L7C3egDHNJ /uaQzXUp+6OuLzWM2cCC4fae9Pf/x1GQiSFV/CkDCCH40pMzLTUDh4IOG A==; IronPort-SDR: K+SA30MWdlpo/1NDmVcW8ngzT++xdYWxuuXTJaNkFz7B/0Phr5kdzvYoCDDrXhay3t5IRDZIaO W67GlJ/9PQcC/+EGfbnrQAVuYkc8Nh+kNgdd2m5wRoDIooHbWbYTKIhn11YhX9ux7vT1amWAEO q4/2weoTS4pEyaXtSD/jfPb1omcFpHGZm7TB0Ku0jlTQczMXOnBn5zcl+bY+SWo+ZjQdesm/lM ufSzxSTurV4U60H2deYwCvz9OjyAWMXVTkc03d9uR1OCcGXg/k1XQeu2ZGM0kp0U/bDR9sjjqJ iBU= X-IronPort-AV: E=Sophos;i="5.68,230,1569254400"; d="scan'208";a="122956705" IronPort-SDR: tK7oDX1Yx69JDVkAPMg52rodn7dzTmijxOj0oHdJ3RC0P047VJWXnzrVrgUMz/+4nBbb4PAIl3 G0eZIM+dEUmeDN+N0iLEUJ6W+GD+B8KvzRjz9Mn61aNYuNE+ZgpkPraczbSoriFaz2s+2/DHn3 iCXmqT2Gw+dMNkJk91r8vVCGE8nDpsHoACvcSjD8zk3XfHQosSHpug8R0jbvRr22xROshCuGzt ec0esog8rDqa9uDODjeOBsX892jbaKI/W7iJ9CuTCjv3M3WzYAgq1hUgxDV64vW/jpYXlIuWxT PqMfa3F9DlrcDxdTA3l6OVCi IronPort-SDR: PMbTmgifm+7U+CbeM25KVoXXU2sowWTbw7XHTuXhj3H+0sbAdcRsz6Z/3X+iRsRleTJjI19MD1 P8+EiXwXMco94iC4HqEF5Hz/Iww+zqvbCvRrVmPdqxOMPbeO2xDMBvP1o+r98c9tCEo+czv0cq kn+zShnD5Br1l+VVUZy/3ZLrAmME1fRfMtan6fgk1yIoD4u6gBdqJFGPOVmhp7hl/B9JW4nJ8s KEgAyDRsHwvDK4Agn/I4YI7JiItzH/NicwtftFEYgQwiofbk0H37skcpCQjACXVeF+OlKmMpGY hks= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 25/27] target/riscv: Add support for the 32-bit MSTATUSH CSR Date: Fri, 25 Oct 2019 16:24:34 -0700 Message-Id: X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 216.71.154.45 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Signed-off-by: Alistair Francis --- target/riscv/cpu.c | 6 ++++++ target/riscv/cpu.h | 7 +++++++ target/riscv/cpu_bits.h | 3 +++ target/riscv/cpu_helper.c | 7 +++++++ target/riscv/csr.c | 25 +++++++++++++++++++++++++ target/riscv/op_helper.c | 4 ++++ 6 files changed, 52 insertions(+) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index f75c709e35..03622825f3 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -229,6 +229,9 @@ static void riscv_cpu_dump_state(CPUState *cs, FILE *f,= int flags) #ifndef CONFIG_USER_ONLY qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mhartid ", env->mhartid); qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mstatus ", *env->mstatus); +#ifdef TARGET_RISCV32 + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mstatush ", *env->mstatush= ); +#endif if (riscv_has_ext(env, RVH)) { qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "hstatus ", env->hstatu= s); qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "bstatus ", env->vsstat= us); @@ -467,6 +470,9 @@ static void riscv_cpu_init(Object *obj) #ifndef CONFIG_USER_ONLY env->mie =3D &env->mie_novirt; env->mstatus =3D &env->mstatus_novirt; +# ifdef TARGET_RISCV32 + env->mstatush =3D &env->mstatush_novirt; +# endif #endif } =20 diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 0ea56f9059..b8b731df43 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -127,6 +127,10 @@ struct CPURISCVState { target_ulong mip; target_ulong mip_novirt; =20 +#ifdef TARGET_RISCV32 + target_ulong *mstatush; +#endif + uint32_t miclaim; =20 target_ulong *mie; @@ -154,6 +158,9 @@ struct CPURISCVState { */ target_ulong mie_novirt; target_ulong mstatus_novirt; +#ifdef TARGET_RISCV32 + target_ulong mstatush_novirt; +#endif =20 /* Hypervisor CSRs */ target_ulong hstatus; diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h index 17d168852c..a2358c4956 100644 --- a/target/riscv/cpu_bits.h +++ b/target/riscv/cpu_bits.h @@ -135,6 +135,9 @@ #define CSR_MTVEC 0x305 #define CSR_MCOUNTEREN 0x306 =20 +/* 32-bit only */ +#define CSR_MSTATUSH 0x310 + /* Legacy Counter Setup (priv v1.9.1) */ /* Update to #define CSR_MCOUNTINHIBIT 0x320 for 1.11.0 */ #define CSR_MUCOUNTEREN 0x320 diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index b3ce345f81..79b2f30876 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -950,10 +950,17 @@ void riscv_cpu_do_interrupt(CPUState *cs) if (riscv_cpu_virt_enabled(env)) { riscv_cpu_swap_hypervisor_regs(env); } +#ifdef TARGET_RISCV32 + *env->mstatush =3D set_field(*env->mstatush, MSTATUS_MPV, + riscv_cpu_virt_enabled(env)); + *env->mstatush =3D set_field(*env->mstatush, MSTATUS_MTL, + riscv_cpu_force_hs_excep_enabled(en= v)); +#else *env->mstatus =3D set_field(*env->mstatus, MSTATUS_MPV, riscv_cpu_virt_enabled(env)); *env->mstatus =3D set_field(*env->mstatus, MSTATUS_MTL, riscv_cpu_force_hs_excep_enabled(env= )); +#endif =20 /* Trapping to M mode, virt is disabled */ riscv_cpu_set_virt_enabled(env, 0); diff --git a/target/riscv/csr.c b/target/riscv/csr.c index a795a02968..8a093abdb2 100644 --- a/target/riscv/csr.c +++ b/target/riscv/csr.c @@ -364,6 +364,27 @@ static int write_mstatus(CPURISCVState *env, int csrno= , target_ulong val) return 0; } =20 +#ifdef TARGET_RISCV32 +static int read_mstatush(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val =3D *env->mstatush; + return 0; +} + +static int write_mstatush(CPURISCVState *env, int csrno, target_ulong val) +{ + if ((val ^ *env->mstatush) & (MSTATUS_MPV)) { + tlb_flush(env_cpu(env)); + } + + val &=3D MSTATUS_MPV | MSTATUS_MTL; + + *env->mstatush =3D val; + + return 0; +} +#endif + static int read_misa(CPURISCVState *env, int csrno, target_ulong *val) { *val =3D env->misa; @@ -1102,6 +1123,10 @@ static riscv_csr_operations csr_ops[CSR_TABLE_SIZE] = =3D { [CSR_MTVEC] =3D { any, read_mtvec, write_mtvec = }, [CSR_MCOUNTEREN] =3D { any, read_mcounteren, write_mcounter= en }, =20 +#if defined(TARGET_RISCV32) + [CSR_MSTATUSH] =3D { any, read_mstatush, write_mstatush= }, +#endif + /* Legacy Counter Setup (priv v1.9.1) */ [CSR_MUCOUNTEREN] =3D { any, read_mucounteren, write_mucounte= ren }, [CSR_MSCOUNTEREN] =3D { any, read_mscounteren, write_mscounte= ren }, diff --git a/target/riscv/op_helper.c b/target/riscv/op_helper.c index e5128570e6..a0a631d722 100644 --- a/target/riscv/op_helper.c +++ b/target/riscv/op_helper.c @@ -153,7 +153,11 @@ target_ulong helper_mret(CPURISCVState *env, target_ul= ong cpu_pc_deb) get_field(mstatus, MSTATUS_MPIE)); mstatus =3D set_field(mstatus, MSTATUS_MPIE, 1); mstatus =3D set_field(mstatus, MSTATUS_MPP, 0); +#ifdef TARGET_RISCV32 + *env->mstatush =3D set_field(*env->mstatush, MSTATUS_MPV, 0); +#else mstatus =3D set_field(mstatus, MSTATUS_MPV, 0); +#endif *env->mstatus =3D mstatus; riscv_cpu_set_mode(env, prev_priv); =20 --=20 2.23.0 From nobody Sun May 19 20:29:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1572047668; cv=none; d=zoho.com; s=zohoarc; b=HOw0rhC89szwBRPoRIB31lMn5XRyPZH5SviQ7QpDpUdU3OR1N98RWKe1XAPAxn41Kfj+qsv/qk1f53aUkG3DYXAFxrQD/pdIcKxhU0YFG5xE/tu7WzbZtzi7EixARQZ/Dbi13jzOfsqSvHmNY5hXQH3qdeyPT6SVfkCSPq0IUsg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572047668; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Vtg5uL3NWMvk+judB949v3wF7Dr4vA6K78KvIJYBL7w=; b=M4uuKJEvrlWgGsmiZ/hmy2wYsAWiow2A/kTZ04xsD9KjABpV1iM/2fqyLJomIiLzME/PBSB/TY2g57++eva3BbKyOXgtTAC7ilgpNf9scQf9nCalNs0DrT8WnqjPHoN2mUb2VnBw7HWl9/fe39KIszxxHWXC3vaclZU2lO6If24= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572047668178873.31690248171; Fri, 25 Oct 2019 16:54:28 -0700 (PDT) Received: from localhost ([::1]:37214 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO9PW-00050L-JB for importer@patchew.org; Fri, 25 Oct 2019 19:54:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50145) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO91T-0005ji-4Y for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iO91R-0004jO-TX for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:35 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:36814) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iO91R-0004Yx-LU; Fri, 25 Oct 2019 19:29:33 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Oct 2019 07:29:33 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 16:24:59 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 25 Oct 2019 16:29:33 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1572046173; x=1603582173; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=g37n1ZVkdhVO3F8wxnglbViPKYTuNjM3/io1BWGTgEQ=; b=BbyemCzW2wjELf47Dn6vNobMpGd0Y/8mmBZcFfBjryRL6SoHsjPDhzlp czeZZipSFTwwtV4c6dSUbQC7vPgJcIufnHTzSjj52TEj4stUejFkbUT6v BfhSzDEJLtHhSFc/fUeNia1ZVFbsOTDmqWnXbMlQTR2BpkVpm26k10Hyl cTPsuz9xq1c7q/uS3zna1K8AZUPbp9AMFzLImOWng1HRMFQPR+GHP0Ei6 F5Yh4xG18PoZGuRpgUqC2CqX0UiPUP4lJqbdH070Q7/OFUmodYoJ8pDgi mZyMK+sotnlgw3B4RH+Rk+K5jzyHbZJhPMi4Jyoy5eHEnH+dLLN0CbG5s g==; IronPort-SDR: wqo6lQw/fJqiF6gPo5HVdBqKlK0orCd49QQsSnXbqaLq35eoNnhnTlqnGYfJy9GE1xSnzkja9c 3ssn2a5T8E5LkRg+m56IoE4KbS8EBqdDc3xHYFe7o5Dk/BmyKTkDahTo1XfFWHmZpRuA2/jFE2 46jt95Oz0oO5FHvlI8rKAEuteQxoOebko8ei08VYMIE7BbMP6bfPqgRbrn0aH4YabIsT0n7yPV yLfg5VN6crKXktbOzLrDsOJbZH/Zku9RVxul8szsrlJ9FeTuqH+sTVN0RpuW5rRUfSzrzZwM0I dNY= X-IronPort-AV: E=Sophos;i="5.68,230,1569254400"; d="scan'208";a="122956706" IronPort-SDR: h8IeMF5ZNBhgrkkXD27TJjN86D+0XJsXTTqtvOWwb9HTkY+OgWEE3v2k/aEU/Ops6mxYOMLmS8 qTrgzMx0dboBBe5si1UqtJEF62WGVwSFxb2uWZb+Ls9fu3U8wynupYbtxCv50/srCRLP0uVDWk Fn8r1VoubG+Ok7FpADKhnvR96xFW+HW7NhLZf2F3Wv04iTRBk/X3qAGkIAfynK2r46IH1Mc9IO fng7Sg3PQ5oIh7UPfQcbIyrxGV96394nlq9i3/yCQIEvP6sW0vfPkdtJycixvmfYsHenHp0prW oATz0F69Pi1pgVhSsjUJPAU+ IronPort-SDR: isbioOg7ONCyJlMVGb99z3E9plILh6RClF3WZXFbHVj3yWtVzr0oXeHibQNbNVLCHvia0kFYyP R9cYTRTQ2mgYPEAURcNjYBPvKRC4etBGCufEV468KA22RdFtCF4SFpwwBaPbg5dWrtb97QEqdA XoUeF49hMZHqAl9sMRTU+HrWeoDKz9vzOHqYzBsa/teNRlPnfHFII+Pg4lKr58dsmMHD05X2Pk 9+XfIX52S9jSffMSrzQ+e+PheJfrrBYfeKXbSGeOXb4pDQKi8rPQlZPVXEhCpYVHoHcE21B+vb 2rw= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 26/27] target/riscv: Add the MSTATUS_MPV_ISSET helper macro Date: Fri, 25 Oct 2019 16:24:37 -0700 Message-Id: <70a2a77da9586b6127e7b5405bf1667a31da5fb6.1572045716.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 216.71.154.45 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Add a helper macro MSTATUS_MPV_ISSET() which will determine if the MSTATUS_MPV bit is set for both 32-bit and 64-bit RISC-V. Signed-off-by: Alistair Francis --- target/riscv/cpu_bits.h | 11 +++++++++++ target/riscv/cpu_helper.c | 4 ++-- target/riscv/op_helper.c | 2 +- target/riscv/translate.c | 2 +- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h index a2358c4956..f9389b071d 100644 --- a/target/riscv/cpu_bits.h +++ b/target/riscv/cpu_bits.h @@ -365,8 +365,19 @@ #define MSTATUS_TVM 0x00100000 /* since: priv-1.10 */ #define MSTATUS_TW 0x20000000 /* since: priv-1.10 */ #define MSTATUS_TSR 0x40000000 /* since: priv-1.10 */ +#if defined(TARGET_RISCV64) #define MSTATUS_MTL 0x4000000000ULL #define MSTATUS_MPV 0x8000000000ULL +#elif defined(TARGET_RISCV32) +#define MSTATUS_MTL 0x00000040 +#define MSTATUS_MPV 0x00000080 +#endif + +#ifdef TARGET_RISCV32 +# define MSTATUS_MPV_ISSET(env) get_field(*env->mstatush, MSTATUS_MPV) +#else +# define MSTATUS_MPV_ISSET(env) get_field(*env->mstatus, MSTATUS_MPV) +#endif =20 #define MSTATUS64_UXL 0x0000000300000000ULL #define MSTATUS64_SXL 0x0000000C00000000ULL diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 79b2f30876..dedca3eea8 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -331,7 +331,7 @@ static int get_physical_address(CPURISCVState *env, hwa= ddr *physical, mode =3D get_field(*env->mstatus, MSTATUS_MPP); =20 if (riscv_has_ext(env, RVH) && - get_field(*env->mstatus, MSTATUS_MPV)) { + MSTATUS_MPV_ISSET(env)) { use_background =3D true; } } @@ -718,7 +718,7 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, in= t size, m_mode_two_stage =3D env->priv =3D=3D PRV_M && access_type !=3D MMU_INST_FETCH && get_field(*env->mstatus, MSTATUS_MPRV) && - get_field(*env->mstatus, MSTATUS_MPV); + MSTATUS_MPV_ISSET(env); =20 hs_mode_two_stage =3D env->priv =3D=3D PRV_S && !riscv_cpu_virt_enabled(env) && diff --git a/target/riscv/op_helper.c b/target/riscv/op_helper.c index a0a631d722..b0b9890a15 100644 --- a/target/riscv/op_helper.c +++ b/target/riscv/op_helper.c @@ -146,7 +146,7 @@ target_ulong helper_mret(CPURISCVState *env, target_ulo= ng cpu_pc_deb) =20 target_ulong mstatus =3D *env->mstatus; target_ulong prev_priv =3D get_field(mstatus, MSTATUS_MPP); - target_ulong prev_virt =3D get_field(mstatus, MSTATUS_MPV); + target_ulong prev_virt =3D MSTATUS_MPV_ISSET(env); mstatus =3D set_field(mstatus, env->priv_ver >=3D PRIV_VERSION_1_10_0 ? MSTATUS_MIE : MSTATUS_UIE << prev_priv, diff --git a/target/riscv/translate.c b/target/riscv/translate.c index ea19ba9c5d..f0d9860429 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -754,7 +754,7 @@ static void riscv_tr_init_disas_context(DisasContextBas= e *dcbase, CPUState *cs) ctx->virt_enabled =3D riscv_cpu_virt_enabled(env); if (env->priv_ver =3D=3D PRV_M && get_field(*env->mstatus, MSTATUS_MPRV) && - get_field(*env->mstatus, MSTATUS_MPV)) { + MSTATUS_MPV_ISSET(env)) { ctx->virt_enabled =3D true; } else if (env->priv =3D=3D PRV_S && !riscv_cpu_virt_enabled(env) && --=20 2.23.0 From nobody Sun May 19 20:29:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1572047933; cv=none; d=zoho.com; s=zohoarc; b=baqljKI47pGnTsufWbd1b/WnIJmM9/KDVX4yXOEK3JlXaMVYsbDilGsg8a7vcvXO++yF6J1vAFnXWt7+L2IdY0eay7laEx5p1bDpbKicPk6fcAEGouPTrStdqFyJnkJgAEpQsdISt3H2yDxq80YkkuuqlSFsp1PJqvISztflpUw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572047933; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Si0BZnll96qquummylYLAocMYNkS6oXOduUPCFIuLTg=; b=QucDghTnnRNjeOlqveiNq2MfKAaBnBmiVPrpt+soz+DeAbAGZEiCirlv4M9lxJNnCzSpBgSZoCWT7bsb7xYUIZjIOC1ktfbMiHnUp2elaF5l+V4V4On5Zfi0lAGtD7of7DhQ5i4ixMUsSGXWX0Xg75k89MZR9nASlTLUA426JV8= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572047933663690.275430118851; Fri, 25 Oct 2019 16:58:53 -0700 (PDT) Received: from localhost ([::1]:37248 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO9Tj-0000Ou-QS for importer@patchew.org; Fri, 25 Oct 2019 19:58:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50182) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iO91W-0005q9-O9 for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iO91V-0004ko-JS for qemu-devel@nongnu.org; Fri, 25 Oct 2019 19:29:38 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:36814) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iO91V-0004Yx-9K; Fri, 25 Oct 2019 19:29:37 -0400 Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 26 Oct 2019 07:29:37 +0800 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 16:25:08 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip01.wdc.com with ESMTP; 25 Oct 2019 16:29:37 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1572046177; x=1603582177; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=AhPwn0DIe1Bw+jGVJsxFYh4GSQcU4tWNGO2Y1sD5mM4=; b=GWRv4d7Wpftu7DlNYE/SychHYjsGBNjabxGQ09pXSRPFYGkJd5k4+57y QdqFEo4SOrF8vOs0YjmiYV3Skthcym55wJ3QMhA0ihcBBoPL25FrnYd25 alhVn/aYf79/9mTp13nnkc7dAGz1V49eebGZRpHGBWrZE6KJ6D5l49qzx yiMURC5RhIY2Lqjy7hax3xCWyhdnE6RS1JqUPedoMB9tAUQW/0M/WpntL beYNtQ4kncN62EKcOeAFLiBVjqpYIW3rr8zGACjKBcngy1PPm2Y7V3DvP /jWb5wsefbK842pQnWllfAbq/TqVH/mP1R8caaWs1hzoTBJw9OWuYEIZr A==; IronPort-SDR: FZ5Vt+O+El/FBb42gIuQwT0k4NIu5VizCLEDOXoh7vGZ4X+QpVilcaRP7ETtsD2niitSXtnJtl SSMRaE9BGYe02NHynaoSW70ytuCmjxd+aU8cyxuvTCdSJ+aj/aKuC4XUtNTLQ018OK/Sv8p2Ow FXBqmnJlhyDU+4ZxS72oB7zOQFaQJPQ8wSlrLT9+NPaxpWIa+W6n1O+sx3uiCrRYLoIHb6C7Im Hxp2uItKoBST2hs6GnulE/PLZNjPbsBAEOJeZxYQsmBVq6Es1h2sl4qwTy74ZaCKTi/YVU199z D+g= X-IronPort-AV: E=Sophos;i="5.68,230,1569254400"; d="scan'208";a="122956710" IronPort-SDR: AO39iiKaxFascB3sdk6AXpsJarKCLSjDNy/zRLT4AJDHJWHVpOfevmMfEW1qfi21io9bebM7Ru FF65KDI2zSGKmIPXX/iKzvWj6OAvKUCky+D7tITgzz0EV49OlWPSzRkXDo7As/OMLOq1aN9kWz 1AuuhW7BeZg+xWpVjbF1Y9tFnfWbF/nKUSBpYEAXqvO4H1X08ml3Fq3Jc2GwGwSB3tc1p1tFLn HUvk4YHPP/NfIs4P5oNvzZmoQ2WywOfWpQQOuvwvmDZxSEEQIW9S9vIeKG586O5Zsuk7RzsHgX oyrQ9Z6bKsLi2geL+SQqiYQV IronPort-SDR: sym3R79PoIsMVp4UEqPTgyHajBLWD1uKcUYJZkdRBj31AFoY19XdacPCny4WCz/QXYqGt1F444 KuYbKZ1bJ+Xbu2WvGroIDtZ+SDDhSAFhyXbJOpzXzGNsafrfCCcsOdQniB4fykN+50o8yYWeHY /XWipvN6GkrQMFjrN7/Odw6mwvZSuHzGx0rZbG0UT2lNxBmBcHNPtOGgwEb8N9z+8oxFr7oPJg VYti8uh3kdfe/Y/JY7xIAsiX/BmjOJGRKFbaWQSl0MJLrPN+HXe55mkVvjkTAtDGPE0ZaBpWDv Hz0= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 27/27] target/riscv: Allow enabling the Hypervisor extension Date: Fri, 25 Oct 2019 16:24:41 -0700 Message-Id: <49eef14a789367ec9eccc0660574516a20f2dbd8.1572045716.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 216.71.154.45 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/cpu.c | 5 +++++ target/riscv/cpu.h | 1 + 2 files changed, 6 insertions(+) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 03622825f3..6d02e61e8a 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -446,6 +446,9 @@ static void riscv_cpu_realize(DeviceState *dev, Error *= *errp) if (cpu->cfg.ext_u) { target_misa |=3D RVU; } + if (cpu->cfg.ext_h) { + target_misa |=3D RVH; + } =20 set_misa(env, RVXLEN | target_misa); } @@ -492,6 +495,8 @@ static Property riscv_cpu_properties[] =3D { DEFINE_PROP_BOOL("c", RISCVCPU, cfg.ext_c, true), DEFINE_PROP_BOOL("s", RISCVCPU, cfg.ext_s, true), DEFINE_PROP_BOOL("u", RISCVCPU, cfg.ext_u, true), + /* This is experimental so mark with 'x-' */ + DEFINE_PROP_BOOL("x-h", RISCVCPU, cfg.ext_h, false), DEFINE_PROP_BOOL("Counters", RISCVCPU, cfg.ext_counters, true), DEFINE_PROP_BOOL("Zifencei", RISCVCPU, cfg.ext_ifencei, true), DEFINE_PROP_BOOL("Zicsr", RISCVCPU, cfg.ext_icsr, true), diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index b8b731df43..ed1f139369 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -258,6 +258,7 @@ typedef struct RISCVCPU { bool ext_c; bool ext_s; bool ext_u; + bool ext_h; bool ext_counters; bool ext_ifencei; bool ext_icsr; --=20 2.23.0