From nobody Mon May 6 08:59:59 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zohomail.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=1597260269; cv=none; d=zohomail.com; s=zohoarc; b=D8GtIfRoGx6T3s4nhhRR/Z2D2H6yy/m4VgvwolHtp97gl40ELdsQtBShhdco+LirpUswdjFRx/pl5iFgMkL1JeliZdRppMUZ6KYv7Ctv6oGigJNB72G82xCepdJaH+TRn3DEV5EK1N2jWspJKTtRtPTAM2PQfbZ4B2/ytl/qBUw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597260269; 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=FpQmPCICGAY+SfpDrQlNadvoJztLZzawbkhzeLwhooY=; b=U+h8WLFC5ZIV1o1xyujxwxvCFpfwx+x2KCJyURaJhZztgkC+WYsLzHbcGWJlhSZkYypE9or5Dw0+cSBvwn+nun43TfU6QOW4mO0ESzHtKGbWRUZEJvVFUK9EEXGVGsfs67B4xZjRyDhkBYx/5+/hr5f0zwMoA2FAHgAAyut3oFs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zohomail.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 1597260269284680.7285430407228; Wed, 12 Aug 2020 12:24:29 -0700 (PDT) Received: from localhost ([::1]:37576 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k5wMM-00065B-ON for importer@patchew.org; Wed, 12 Aug 2020 15:24:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59412) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5wLJ-0004br-W6; Wed, 12 Aug 2020 15:23:22 -0400 Received: from esa4.hgst.iphmx.com ([216.71.154.42]:50446) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5wLH-0000Qi-LQ; Wed, 12 Aug 2020 15:23:21 -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; 13 Aug 2020 03:23:16 +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; 12 Aug 2020 12:11:08 -0700 Received: from jbfyk72.ad.shared (HELO risc6-mainframe.hgst.com) ([10.86.59.14]) by uls-op-cesaip01.wdc.com with ESMTP; 12 Aug 2020 12:23: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=1597260199; x=1628796199; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=vcurfjazEvMMtOCVG9Klun77gGKJkNPeMTrWvizvDhc=; b=qkG00kZUg91PhPJ/Tl6cM4GttrJtxb46oPshMXXCM90oBWPFHsPmKpB3 Bv4y1SPJnpgHecgOhoiStvogho5BOxqlI+QxBdROa9/K/QnW7bWr2xi6T Wh4yJ73WmMPl63JNmdcK6Ph4I8PCoE7cgDNXQI6oRSe51BzerpVWSjvKp aHHA9L+P8okO6hF9IF9i/awNtzGjaVsob+RiffpZSNfeLcBmODuQRPnej mMEyw4f77BxEP/Cr2UwjvKEmGpz6EasTcwG+26Kt+zEYOsiH88pSqehv9 ysknO8jEpAePMAiybdBbFxfXwHNNKwxGZs2T+KiGklm347ff6+92q3HKn w==; IronPort-SDR: GfUyoyGLarePZMYXIp8ThAE9CqG/O5PogzdXg+/Su6NqtQrjmW+xe0zTt1hXtMULuR/vLQZ0AF el+t1tjOP3PRBW8TAyLgo9YOQMvUj0nReKLSsmkg9m0TAbbc9yxsKiVXNNFJhRs5teNfyse0J7 TiZ+kfW2/zKBte+0fVA8SnfKou5uICU1VZN+/fi4Dn8EmNoNvlmOh21PSula5QY5PQsduarYhz O5hc18yQfeJER1d2aa2x4RvX6uKdwmpS8NimUNUyBXTtNvXuhgNQcIvjxKvKWUim80fbmfKijC e6E= X-IronPort-AV: E=Sophos;i="5.76,305,1592841600"; d="scan'208";a="144786678" IronPort-SDR: ii49DnrbmH24uTUXU/gZoBrH+yj8k7xbxna2S2BYgQQ72hckUvMHk242+AtP6rLqvae6/T8SDA empCkgI/c01g== IronPort-SDR: LqX//zM9FQjRt/lD18USpcQ4leE553RuuQP09AdwXpa9sB23KaZEE3csiKOtsMlQj+9pSnY7uF RLKUohES8x6w== WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v3 01/13] target/riscv: Allow setting a two-stage lookup in the virt status Date: Wed, 12 Aug 2020 12:13:16 -0700 Message-Id: <08cdefb171b1bdb0c9e3151c509aaadefc3dcd3e.1597259519.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=216.71.154.42; envelope-from=prvs=486123ee4=alistair.francis@wdc.com; helo=esa4.hgst.iphmx.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/12 15:23:14 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: alistair.francis@wdc.com, anup.patel@wdc.com, palmer@dabbelt.com, alistair23@gmail.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 | 2 ++ target/riscv/cpu_bits.h | 1 + target/riscv/cpu_helper.c | 18 ++++++++++++++++++ 3 files changed, 21 insertions(+) diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index a804a5d0ba..383808bf88 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -321,6 +321,8 @@ 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); +bool riscv_cpu_two_stage_lookup(CPURISCVState *env); +void riscv_cpu_set_two_stage_lookup(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 8117e8b5a7..ba0a5b50ff 100644 --- a/target/riscv/cpu_bits.h +++ b/target/riscv/cpu_bits.h @@ -467,6 +467,7 @@ * page table fault. */ #define FORCE_HS_EXCEP 2 +#define HS_TWO_STAGE 4 =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 75d2ae3434..68abccc993 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -220,6 +220,24 @@ void riscv_cpu_set_force_hs_excep(CPURISCVState *env, = bool enable) env->virt =3D set_field(env->virt, FORCE_HS_EXCEP, enable); } =20 +bool riscv_cpu_two_stage_lookup(CPURISCVState *env) +{ + if (!riscv_has_ext(env, RVH)) { + return false; + } + + return get_field(env->virt, HS_TWO_STAGE); +} + +void riscv_cpu_set_two_stage_lookup(CPURISCVState *env, bool enable) +{ + if (!riscv_has_ext(env, RVH)) { + return; + } + + env->virt =3D set_field(env->virt, HS_TWO_STAGE, enable); +} + int riscv_cpu_claim_interrupts(RISCVCPU *cpu, uint32_t interrupts) { CPURISCVState *env =3D &cpu->env; --=20 2.27.0 From nobody Mon May 6 08:59:59 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zohomail.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=1597260430; cv=none; d=zohomail.com; s=zohoarc; b=NDxBHLEIkuEIgsMPpf7t2JVYC59voXCTCmZQoddYe2qjPanIxkl/94k/EzucCDV+jw1qxg48m3S77h5hRYE2rfxcEqGrLQxETbhdM6mtWg/jSQL958Tj8WiPtmJJ+ZL+4luDHv7m0CqCgThHiv3k0h0GIgtZCJizMjoCApABQ6U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597260430; 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=ERzgp35ASWBvxOZPrKyExkKMd++a8ueZOEDWqu2YHKs=; b=RoHRIPVyFjOK+GYxV51KgFFsgQlLW+6vik0CqzXCrgmCESMOMRBYJ4dmdUYY1fouUV8LZW6dq8ImTyfVxEw5UTcy/Ynxu0ZTaRDqWJbXZYSeND2FcF8eXsZfXQluaExf/7iW2rCZK8wcVGMHp+LYBaOS4BWj0VJQAzJh/qHzfMY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zohomail.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 1597260430955165.23388879061815; Wed, 12 Aug 2020 12:27:10 -0700 (PDT) Received: from localhost ([::1]:50944 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k5wOz-00031i-8t for importer@patchew.org; Wed, 12 Aug 2020 15:27:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59446) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5wLO-0004g8-1Q; Wed, 12 Aug 2020 15:23:26 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:4810) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5wLK-0000Qu-E8; Wed, 12 Aug 2020 15:23:25 -0400 Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 13 Aug 2020 03:23:20 +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; 12 Aug 2020 12:10:28 -0700 Received: from jbfyk72.ad.shared (HELO risc6-mainframe.hgst.com) ([10.86.59.14]) by uls-op-cesaip02.wdc.com with ESMTP; 12 Aug 2020 12:23: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=1597260202; x=1628796202; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=eFGkFBopFNAMYrgaSdpoPuhfWVEb6Q6HCNEajtmCHbw=; b=XhKZIz9vNMC4Nu4Ax3pMEmt2pnQlao4pP0aKTiZYQOCdwD5xWbX+Xcyw AAalL4lajQUk686xfskArqIehBoCy58dQeVZLrK4P6knOk7o/lzjBAC+e 0CrXG6HxgVRz2vexTXzkctYnyWcU7WUYDKw1WOAqwPCPTEGVGahTGIb1p SGe3uj0yzJSxTGBwwJpAtadDYZhqDQlub8LLdN/sN0lbvTfEdId9lpd69 WF2pwiczuvXRnF5/dCjeiqpEKEh6RmrZ/bT1+dCS11zawlGs3eedBoGC7 v7Yz181DSZX9IwhXr39I3ypK593YOpIIjD1A2FBZH10qCpcWf7eL7HU2j A==; IronPort-SDR: cPPXZbnUQCV6qQX3kMgzQBEHJLOrecQzeAC1L8aax7dGx8X1HFWNs5fTdZkc1UtzMfM5GmzH1O iWJKNfMqehJTUWgBP2KY2NAsEfjSrXChimOUMuyb+nRM2ObF+dopqPQeH4+h/e+LvJRvY5FoXo s//ePGXuvse7/0NiFZHv7DTLifii6JcifE0H3vK9nnRy4ALf/OKay1vJwUBW/foVdBhzMn89P8 jgH0QiKIHlqBkcD3CFgC1RPsRQgjWs5gFFOfB21GO74/fNnnOizLb5I+y6GSKa0b+77Z72HJzj XKo= X-IronPort-AV: E=Sophos;i="5.76,305,1592841600"; d="scan'208";a="146029191" IronPort-SDR: +MDfb9EEXhyhMpTxaUMMvHjmyHg6ciMnHEPQvwGk+ru2oAHEdrMIILQIdzMDziz5OZsKnAP1TW LzWbsfe7LXsw== IronPort-SDR: BkVFMQklJKKWNcy90JoMdoruCYbn4g4zc6TbDXq+8+fa0pqDmgAvo5PGPHIkWCvrLzwZU0iDDg /txsLiCpN4QA== WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v3 02/13] target/riscv: Allow generating hlv/hlvx/hsv instructions Date: Wed, 12 Aug 2020 12:13:19 -0700 Message-Id: <477c864312280ea55a98dc84cb01d826751b6c14.1597259519.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=216.71.154.45; envelope-from=prvs=486123ee4=alistair.francis@wdc.com; helo=esa6.hgst.iphmx.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/12 15:23:20 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: alistair.francis@wdc.com, anup.patel@wdc.com, palmer@dabbelt.com, alistair23@gmail.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_bits.h | 1 + target/riscv/helper.h | 3 + target/riscv/insn32-64.decode | 5 + target/riscv/insn32.decode | 11 + target/riscv/insn_trans/trans_rvh.inc.c | 340 ++++++++++++++++++++++++ target/riscv/op_helper.c | 114 ++++++++ 6 files changed, 474 insertions(+) diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h index ba0a5b50ff..7abae4267f 100644 --- a/target/riscv/cpu_bits.h +++ b/target/riscv/cpu_bits.h @@ -443,6 +443,7 @@ #define HSTATUS_SP2V 0x00000200 #define HSTATUS_VTVM 0x00100000 #define HSTATUS_VTSR 0x00400000 +#define HSTATUS_HU 0x00000200 =20 #define HSTATUS32_WPRI 0xFF8FF87E #define HSTATUS64_WPRI 0xFFFFFFFFFF8FF87EULL diff --git a/target/riscv/helper.h b/target/riscv/helper.h index acc298219d..c8029d83f9 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -80,6 +80,9 @@ DEF_HELPER_1(tlb_flush, void, env) /* Hypervisor functions */ #ifndef CONFIG_USER_ONLY DEF_HELPER_1(hyp_tlb_flush, void, env) +DEF_HELPER_4(hyp_load, tl, env, tl, tl, tl) +DEF_HELPER_5(hyp_store, void, env, tl, tl, tl, tl) +DEF_HELPER_4(hyp_x_load, tl, env, tl, tl, tl) #endif =20 /* Vector functions */ diff --git a/target/riscv/insn32-64.decode b/target/riscv/insn32-64.decode index 86153d93fa..8157dee8b7 100644 --- a/target/riscv/insn32-64.decode +++ b/target/riscv/insn32-64.decode @@ -81,3 +81,8 @@ fmv_x_d 1110001 00000 ..... 000 ..... 1010011 @r2 fcvt_d_l 1101001 00010 ..... ... ..... 1010011 @r2_rm fcvt_d_lu 1101001 00011 ..... ... ..... 1010011 @r2_rm fmv_d_x 1111001 00000 ..... 000 ..... 1010011 @r2 + +# *** RV32H Base Instruction Set *** +hlv_wu 0110100 00001 ..... 100 ..... 1110011 @r2 +hlv_d 0110110 00000 ..... 100 ..... 1110011 @r2 +hsv_d 0110111 ..... ..... 100 00000 1110011 @r2_s diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index bdd8563067..84080dd18c 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -78,6 +78,7 @@ @r_vm_0 ...... . ..... ..... ... ..... ....... &rmrr vm=3D0 %rs2 %rs1 = %rd @r_wdvm ..... wd:1 vm:1 ..... ..... ... ..... ....... &rwdvm %rs2 %rs1 %rd @r2_zimm . zimm:11 ..... ... ..... ....... %rs1 %rd +@r2_s ....... ..... ..... ... ..... ....... %rs2 %rs1 =20 @hfence_gvma ....... ..... ..... ... ..... ....... %rs2 %rs1 @hfence_vvma ....... ..... ..... ... ..... ....... %rs2 %rs1 @@ -223,6 +224,16 @@ fcvt_d_w 1101001 00000 ..... ... ..... 1010011 @r2_= rm fcvt_d_wu 1101001 00001 ..... ... ..... 1010011 @r2_rm =20 # *** RV32H Base Instruction Set *** +hlv_b 0110000 00000 ..... 100 ..... 1110011 @r2 +hlv_bu 0110000 00001 ..... 100 ..... 1110011 @r2 +hlv_h 0110010 00000 ..... 100 ..... 1110011 @r2 +hlv_hu 0110010 00001 ..... 100 ..... 1110011 @r2 +hlvx_hu 0110010 00011 ..... 100 ..... 1110011 @r2 +hlv_w 0110100 00000 ..... 100 ..... 1110011 @r2 +hlvx_wu 0110100 00011 ..... 100 ..... 1110011 @r2 +hsv_b 0110001 ..... ..... 100 00000 1110011 @r2_s +hsv_h 0110011 ..... ..... 100 00000 1110011 @r2_s +hsv_w 0110101 ..... ..... 100 00000 1110011 @r2_s hfence_gvma 0110001 ..... ..... 000 00000 1110011 @hfence_gvma hfence_vvma 0010001 ..... ..... 000 00000 1110011 @hfence_vvma =20 diff --git a/target/riscv/insn_trans/trans_rvh.inc.c b/target/riscv/insn_tr= ans/trans_rvh.inc.c index 263b652d90..db650ae62a 100644 --- a/target/riscv/insn_trans/trans_rvh.inc.c +++ b/target/riscv/insn_trans/trans_rvh.inc.c @@ -16,6 +16,346 @@ * this program. If not, see . */ =20 +static bool trans_hlv_b(DisasContext *ctx, arg_hlv_b *a) +{ + REQUIRE_EXT(ctx, RVH); +#ifndef CONFIG_USER_ONLY + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv mem_idx =3D tcg_temp_new(); + TCGv memop =3D tcg_temp_new(); + + gen_get_gpr(t0, a->rs1); + tcg_gen_movi_tl(mem_idx, ctx->mem_idx); + tcg_gen_movi_tl(memop, MO_SB); + + gen_helper_hyp_load(t1, cpu_env, t0, mem_idx, memop); + gen_set_gpr(a->rd, t1); + + tcg_temp_free(t0); + tcg_temp_free(t1); + tcg_temp_free(mem_idx); + tcg_temp_free(memop); + return true; +#else + return false; +#endif +} + +static bool trans_hlv_h(DisasContext *ctx, arg_hlv_h *a) +{ + REQUIRE_EXT(ctx, RVH); +#ifndef CONFIG_USER_ONLY + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv mem_idx =3D tcg_temp_new(); + TCGv memop =3D tcg_temp_new(); + + gen_get_gpr(t0, a->rs1); + tcg_gen_movi_tl(mem_idx, ctx->mem_idx); + tcg_gen_movi_tl(memop, MO_TESW); + + gen_helper_hyp_load(t1, cpu_env, t0, mem_idx, memop); + gen_set_gpr(a->rd, t1); + + tcg_temp_free(t0); + tcg_temp_free(t1); + tcg_temp_free(mem_idx); + tcg_temp_free(memop); + return true; +#else + return false; +#endif +} + +static bool trans_hlv_w(DisasContext *ctx, arg_hlv_w *a) +{ + REQUIRE_EXT(ctx, RVH); +#ifndef CONFIG_USER_ONLY + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv mem_idx =3D tcg_temp_new(); + TCGv memop =3D tcg_temp_new(); + + gen_get_gpr(t0, a->rs1); + tcg_gen_movi_tl(mem_idx, ctx->mem_idx); + tcg_gen_movi_tl(memop, MO_TESL); + + gen_helper_hyp_load(t1, cpu_env, t0, mem_idx, memop); + gen_set_gpr(a->rd, t1); + + tcg_temp_free(t0); + tcg_temp_free(t1); + tcg_temp_free(mem_idx); + tcg_temp_free(memop); + return true; +#else + return false; +#endif +} + +static bool trans_hlv_bu(DisasContext *ctx, arg_hlv_bu *a) +{ + REQUIRE_EXT(ctx, RVH); +#ifndef CONFIG_USER_ONLY + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv mem_idx =3D tcg_temp_new(); + TCGv memop =3D tcg_temp_new(); + + gen_get_gpr(t0, a->rs1); + tcg_gen_movi_tl(mem_idx, ctx->mem_idx); + tcg_gen_movi_tl(memop, MO_UB); + + gen_helper_hyp_load(t1, cpu_env, t0, mem_idx, memop); + gen_set_gpr(a->rd, t1); + + tcg_temp_free(t0); + tcg_temp_free(t1); + tcg_temp_free(mem_idx); + tcg_temp_free(memop); + return true; +#else + return false; +#endif +} + +static bool trans_hlv_hu(DisasContext *ctx, arg_hlv_hu *a) +{ + REQUIRE_EXT(ctx, RVH); +#ifndef CONFIG_USER_ONLY + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv mem_idx =3D tcg_temp_new(); + TCGv memop =3D tcg_temp_new(); + + gen_get_gpr(t0, a->rs1); + tcg_gen_movi_tl(mem_idx, ctx->mem_idx); + tcg_gen_movi_tl(memop, MO_TEUW); + + gen_helper_hyp_load(t1, cpu_env, t0, mem_idx, memop); + gen_set_gpr(a->rd, t1); + + tcg_temp_free(t0); + tcg_temp_free(t1); + tcg_temp_free(mem_idx); + tcg_temp_free(memop); + return true; +#else + return false; +#endif +} + +static bool trans_hsv_b(DisasContext *ctx, arg_hsv_b *a) +{ + REQUIRE_EXT(ctx, RVH); +#ifndef CONFIG_USER_ONLY + TCGv t0 =3D tcg_temp_new(); + TCGv dat =3D tcg_temp_new(); + TCGv mem_idx =3D tcg_temp_new(); + TCGv memop =3D tcg_temp_new(); + + gen_get_gpr(t0, a->rs1); + gen_get_gpr(dat, a->rs2); + tcg_gen_movi_tl(mem_idx, ctx->mem_idx); + tcg_gen_movi_tl(memop, MO_SB); + + gen_helper_hyp_store(cpu_env, t0, dat, mem_idx, memop); + + tcg_temp_free(t0); + tcg_temp_free(dat); + tcg_temp_free(mem_idx); + tcg_temp_free(memop); + return true; +#else + return false; +#endif +} + +static bool trans_hsv_h(DisasContext *ctx, arg_hsv_h *a) +{ + REQUIRE_EXT(ctx, RVH); +#ifndef CONFIG_USER_ONLY + TCGv t0 =3D tcg_temp_new(); + TCGv dat =3D tcg_temp_new(); + TCGv mem_idx =3D tcg_temp_new(); + TCGv memop =3D tcg_temp_new(); + + gen_get_gpr(t0, a->rs1); + gen_get_gpr(dat, a->rs2); + tcg_gen_movi_tl(mem_idx, ctx->mem_idx); + tcg_gen_movi_tl(memop, MO_TESW); + + gen_helper_hyp_store(cpu_env, t0, dat, mem_idx, memop); + + tcg_temp_free(t0); + tcg_temp_free(dat); + tcg_temp_free(mem_idx); + tcg_temp_free(memop); + return true; +#else + return false; +#endif +} + +static bool trans_hsv_w(DisasContext *ctx, arg_hsv_w *a) +{ + REQUIRE_EXT(ctx, RVH); +#ifndef CONFIG_USER_ONLY + TCGv t0 =3D tcg_temp_new(); + TCGv dat =3D tcg_temp_new(); + TCGv mem_idx =3D tcg_temp_new(); + TCGv memop =3D tcg_temp_new(); + + gen_get_gpr(t0, a->rs1); + gen_get_gpr(dat, a->rs2); + tcg_gen_movi_tl(mem_idx, ctx->mem_idx); + tcg_gen_movi_tl(memop, MO_TESL); + + gen_helper_hyp_store(cpu_env, t0, dat, mem_idx, memop); + + tcg_temp_free(t0); + tcg_temp_free(dat); + tcg_temp_free(mem_idx); + tcg_temp_free(memop); + return true; +#else + return false; +#endif +} + +#ifdef TARGET_RISCV64 +static bool trans_hlv_wu(DisasContext *ctx, arg_hlv_wu *a) +{ + REQUIRE_EXT(ctx, RVH); +#ifndef CONFIG_USER_ONLY + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv mem_idx =3D tcg_temp_new(); + TCGv memop =3D tcg_temp_new(); + + gen_get_gpr(t0, a->rs1); + tcg_gen_movi_tl(mem_idx, ctx->mem_idx); + tcg_gen_movi_tl(memop, MO_TEUL); + + gen_helper_hyp_load(t1, cpu_env, t0, mem_idx, memop); + gen_set_gpr(a->rd, t1); + + tcg_temp_free(t0); + tcg_temp_free(t1); + tcg_temp_free(mem_idx); + tcg_temp_free(memop); + return true; +#else + return false; +#endif +} + +static bool trans_hlv_d(DisasContext *ctx, arg_hlv_d *a) +{ + REQUIRE_EXT(ctx, RVH); +#ifndef CONFIG_USER_ONLY + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv mem_idx =3D tcg_temp_new(); + TCGv memop =3D tcg_temp_new(); + + gen_get_gpr(t0, a->rs1); + tcg_gen_movi_tl(mem_idx, ctx->mem_idx); + tcg_gen_movi_tl(memop, MO_TEQ); + + gen_helper_hyp_load(t1, cpu_env, t0, mem_idx, memop); + gen_set_gpr(a->rd, t1); + + tcg_temp_free(t0); + tcg_temp_free(t1); + tcg_temp_free(mem_idx); + tcg_temp_free(memop); + return true; +#else + return false; +#endif +} + +static bool trans_hsv_d(DisasContext *ctx, arg_hsv_d *a) +{ + REQUIRE_EXT(ctx, RVH); +#ifndef CONFIG_USER_ONLY + TCGv t0 =3D tcg_temp_new(); + TCGv dat =3D tcg_temp_new(); + TCGv mem_idx =3D tcg_temp_new(); + TCGv memop =3D tcg_temp_new(); + + gen_get_gpr(t0, a->rs1); + gen_get_gpr(dat, a->rs2); + tcg_gen_movi_tl(mem_idx, ctx->mem_idx); + tcg_gen_movi_tl(memop, MO_TEQ); + + gen_helper_hyp_store(cpu_env, t0, dat, mem_idx, memop); + + tcg_temp_free(t0); + tcg_temp_free(dat); + tcg_temp_free(mem_idx); + tcg_temp_free(memop); + return true; +#else + return false; +#endif +} +#endif + +static bool trans_hlvx_hu(DisasContext *ctx, arg_hlvx_hu *a) +{ + REQUIRE_EXT(ctx, RVH); +#ifndef CONFIG_USER_ONLY + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv mem_idx =3D tcg_temp_new(); + TCGv memop =3D tcg_temp_new(); + + gen_get_gpr(t0, a->rs1); + tcg_gen_movi_tl(mem_idx, ctx->mem_idx); + tcg_gen_movi_tl(memop, MO_TEUW); + + gen_helper_hyp_x_load(t1, cpu_env, t0, mem_idx, memop); + gen_set_gpr(a->rd, t1); + + tcg_temp_free(t0); + tcg_temp_free(t1); + tcg_temp_free(mem_idx); + tcg_temp_free(memop); + return true; +#else + return false; +#endif +} + +static bool trans_hlvx_wu(DisasContext *ctx, arg_hlvx_wu *a) +{ + REQUIRE_EXT(ctx, RVH); +#ifndef CONFIG_USER_ONLY + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv mem_idx =3D tcg_temp_new(); + TCGv memop =3D tcg_temp_new(); + + gen_get_gpr(t0, a->rs1); + tcg_gen_movi_tl(mem_idx, ctx->mem_idx); + tcg_gen_movi_tl(memop, MO_TEUL); + + gen_helper_hyp_x_load(t1, cpu_env, t0, mem_idx, memop); + gen_set_gpr(a->rd, t1); + + tcg_temp_free(t0); + tcg_temp_free(t1); + tcg_temp_free(mem_idx); + tcg_temp_free(memop); + return true; +#else + return false; +#endif +} + static bool trans_hfence_gvma(DisasContext *ctx, arg_sfence_vma *a) { REQUIRE_EXT(ctx, RVH); diff --git a/target/riscv/op_helper.c b/target/riscv/op_helper.c index 7cccd42a1e..3d306c343c 100644 --- a/target/riscv/op_helper.c +++ b/target/riscv/op_helper.c @@ -207,4 +207,118 @@ void helper_hyp_tlb_flush(CPURISCVState *env) riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); } =20 +target_ulong helper_hyp_load(CPURISCVState *env, target_ulong address, + target_ulong attrs, target_ulong memop) +{ + if (env->priv =3D=3D PRV_M || + (env->priv =3D=3D PRV_S && !riscv_cpu_virt_enabled(env)) || + (env->priv =3D=3D PRV_U && !riscv_cpu_virt_enabled(env) && + get_field(env->hstatus, HSTATUS_HU))) { + target_ulong pte; + + riscv_cpu_set_two_stage_lookup(env, true); + + switch (memop) { + case MO_SB: + pte =3D cpu_ldsb_data_ra(env, address, GETPC()); + break; + case MO_UB: + pte =3D cpu_ldub_data_ra(env, address, GETPC()); + break; + case MO_TESW: + pte =3D cpu_ldsw_data_ra(env, address, GETPC()); + break; + case MO_TEUW: + pte =3D cpu_lduw_data_ra(env, address, GETPC()); + break; + case MO_TESL: + pte =3D cpu_ldl_data_ra(env, address, GETPC()); + break; + case MO_TEUL: + pte =3D cpu_ldl_data_ra(env, address, GETPC()); + break; + case MO_TEQ: + pte =3D cpu_ldq_data_ra(env, address, GETPC()); + break; + default: + g_assert_not_reached(); + } + + riscv_cpu_set_two_stage_lookup(env, false); + + return pte; + } + + riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); + return 0; +} + +void helper_hyp_store(CPURISCVState *env, target_ulong address, + target_ulong val, target_ulong attrs, target_ulong m= emop) +{ + if (env->priv =3D=3D PRV_M || + (env->priv =3D=3D PRV_S && !riscv_cpu_virt_enabled(env)) || + (env->priv =3D=3D PRV_U && !riscv_cpu_virt_enabled(env) && + get_field(env->hstatus, HSTATUS_HU))) { + riscv_cpu_set_two_stage_lookup(env, true); + + switch (memop) { + case MO_SB: + case MO_UB: + cpu_stb_data_ra(env, address, val, GETPC()); + break; + case MO_TESW: + case MO_TEUW: + cpu_stw_data_ra(env, address, val, GETPC()); + break; + case MO_TESL: + case MO_TEUL: + cpu_stl_data_ra(env, address, val, GETPC()); + break; + case MO_TEQ: + cpu_stq_data_ra(env, address, val, GETPC()); + break; + default: + g_assert_not_reached(); + } + + riscv_cpu_set_two_stage_lookup(env, false); + + return; + } + + riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); +} + +target_ulong helper_hyp_x_load(CPURISCVState *env, target_ulong address, + target_ulong attrs, target_ulong memop) +{ + if (env->priv =3D=3D PRV_M || + (env->priv =3D=3D PRV_S && !riscv_cpu_virt_enabled(env)) || + (env->priv =3D=3D PRV_U && !riscv_cpu_virt_enabled(env) && + get_field(env->hstatus, HSTATUS_HU))) { + target_ulong pte; + + riscv_cpu_set_two_stage_lookup(env, true); + + switch (memop) { + case MO_TEUL: + pte =3D cpu_ldub_data_ra(env, address, GETPC()); + break; + case MO_TEUW: + pte =3D cpu_lduw_data_ra(env, address, GETPC()); + break; + default: + g_assert_not_reached(); + } + + riscv_cpu_set_two_stage_lookup(env, false); + + return pte; + } + + riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); + return 0; +} + #endif /* !CONFIG_USER_ONLY */ --=20 2.27.0 From nobody Mon May 6 08:59:59 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zohomail.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=1597260502; cv=none; d=zohomail.com; s=zohoarc; b=Z5vSevrRD1uCzg1Ho6OwokURxqfLiW6+NEknygrjfiDlmBcU1Y4vYZNagKG3aXSSXof8ZQkpJthAw8rFQ4J7ExE4BDnUviBYkFGTBLEFkuXBnIqeo6Blz7dnxsiXqFcHJVnQHkPvsKg6J1XI1skZEhFW3OFZeUmgUT89JfOlsy0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597260502; 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=drTK/H3vpgCaEiBmY2PQhyB1+prR8YlJN3xJexZbUK0=; b=Cg/Q6VotncP1eLR5H06WYgmkPxpO4895iO8I/1OVS3BNgbPRNrFnDGhm+jNhqMXcGpHtkwW7JfMuy0Wc9o5V2o5xACWg7u/4DYwbBZ9kvswD9/UPV6EtvkOUYjmfjWwHS4d01BVkqckikFiavtWtyMMNym/9TDcx9i+r/N1Gx74= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zohomail.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 1597260502265512.1446202363946; Wed, 12 Aug 2020 12:28:22 -0700 (PDT) Received: from localhost ([::1]:55388 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k5wQ8-0004pH-WB for importer@patchew.org; Wed, 12 Aug 2020 15:28:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59458) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5wLO-0004hv-Ss; Wed, 12 Aug 2020 15:23:26 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:4814) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5wLN-0000RC-4x; Wed, 12 Aug 2020 15:23:26 -0400 Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 13 Aug 2020 03:23:23 +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; 12 Aug 2020 12:10:30 -0700 Received: from jbfyk72.ad.shared (HELO risc6-mainframe.hgst.com) ([10.86.59.14]) by uls-op-cesaip02.wdc.com with ESMTP; 12 Aug 2020 12:23:23 -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=1597260205; x=1628796205; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=mBVne42E+z7WjzcmTmyYMYMA7SNAuVmXUkFCmKBKgCA=; b=PY1sqiCVVBzcsmKezZJywSMjKmiQqpHb6C3YYsXLcHm2amM1l/J5qn+E CdkjNQFdSrTMB88hEezYD1fcERmDDHYJmfXAUXFSyxq9ZXZS0+AcSBZ2e nlX05cGF9vfde2CTKskK6H7Xj2MOxYM/RkSfZOlUGQEJhgZCdTR+sX+OP nwL/ltyFHjT3q38dTVQSwdg9OKuvSST/luel0mn5dLyc2Y7hefnbcV7mg 2ubt5KS1QE4qDNqwHvJMTZJU/sBurqdEXOZNzpZ32CLUZOn564Da3CVW7 s5cHyKSd1Yb4Qs+9lpfKzpQZyAijetPYSL6kIUTiGXmvXI5Qo+N/2XcoH w==; IronPort-SDR: ykHOFWJ5zgPSOcnQgqMNe7Au01LkhD6Wxt2jkcAjCEi50HnDN/RiA0O1++8WcLx5PhKK4m1r7Z K0hG6seNzYFuW6eT3iPJS6n8c9aiLZSnjXD56piHIqGY65jJqUxju8afgplya3ZiWSIoo5D3j/ M0XPxdhEqJ49RAHRc2NNNL8jzAJN+nvlKG7h/ncyXwDzTxtpKX2w1oCyyoDYA2fHuroH8uNF54 GFQ5J3jkhO60woyElfGAy/A9CTA42jo8VT/LT3HKSH7FQLY1cUJCSZ1pi1vGq3Bc9LfIias5do VDM= X-IronPort-AV: E=Sophos;i="5.76,305,1592841600"; d="scan'208";a="146029196" IronPort-SDR: ZFlXZx/5V0I7SSOfmELKhpgu5SghfTLyYcpVTEDmpW2esLK9ISLuS2AbGawhsDsHhAhMkXcoKb xRzf/GLofC6Q== IronPort-SDR: lRBo3PVA30BiJAYMpqkkFc1H1Crb7vhCRJj3qEf1q856c7yHy70PhTqNvB7Cq3FJW8HMK9HP8p cclYjraY5j/A== WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v3 03/13] target/riscv: Do two-stage lookups on hlv/hlvx/hsv instructions Date: Wed, 12 Aug 2020 12:13:22 -0700 Message-Id: <024ad8a594fb2feaf0950fbfad1508cfa82ce7f0.1597259519.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=216.71.154.45; envelope-from=prvs=486123ee4=alistair.francis@wdc.com; helo=esa6.hgst.iphmx.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/12 15:23:20 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: alistair.francis@wdc.com, anup.patel@wdc.com, palmer@dabbelt.com, alistair23@gmail.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 | 60 ++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 35 deletions(-) diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 68abccc993..10c9f8b63b 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -340,22 +340,13 @@ static int get_physical_address(CPURISCVState *env, h= waddr *physical, * 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 (riscv_cpu_two_stage_lookup(env) && access_type !=3D MMU_INST_FETCH= ) { + use_background =3D true; + } + 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) && - MSTATUS_MPV_ISSET(env)) { - 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 @@ -607,7 +598,8 @@ static void raise_mmu_exception(CPURISCVState *env, tar= get_ulong address, } break; case MMU_DATA_LOAD: - if (riscv_cpu_virt_enabled(env) && !first_stage) { + if ((riscv_cpu_virt_enabled(env) || riscv_cpu_two_stage_lookup(env= )) && + !first_stage) { cs->exception_index =3D RISCV_EXCP_LOAD_GUEST_ACCESS_FAULT; } else { cs->exception_index =3D page_fault_exceptions ? @@ -615,7 +607,8 @@ static void raise_mmu_exception(CPURISCVState *env, tar= get_ulong address, } break; case MMU_DATA_STORE: - if (riscv_cpu_virt_enabled(env) && !first_stage) { + if ((riscv_cpu_virt_enabled(env) || riscv_cpu_two_stage_lookup(env= )) && + !first_stage) { cs->exception_index =3D RISCV_EXCP_STORE_GUEST_AMO_ACCESS_FAUL= T; } else { cs->exception_index =3D page_fault_exceptions ? @@ -705,8 +698,6 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, in= t size, hwaddr pa =3D 0; int prot, prot2; 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; @@ -716,30 +707,21 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, = int size, qemu_log_mask(CPU_LOG_MMU, "%s ad %" VADDR_PRIx " rw %d mmu_idx %d\n", __func__, address, access_type, mmu_idx); =20 - /* - * 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) && - MSTATUS_MPV_ISSET(env); - - 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); - } - 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); } } =20 - if (riscv_cpu_virt_enabled(env) || m_mode_two_stage || hs_mode_two_sta= ge) { + if (riscv_has_ext(env, RVH) && env->priv =3D=3D PRV_M && + access_type !=3D MMU_INST_FETCH && + get_field(env->mstatus, MSTATUS_MPRV) && + MSTATUS_MPV_ISSET(env)) { + riscv_cpu_set_two_stage_lookup(env, true); + } + + if (riscv_cpu_virt_enabled(env) || + (riscv_cpu_two_stage_lookup(env) && access_type !=3D MMU_INST_FETC= H)) { /* Two stage lookup */ ret =3D get_physical_address(env, &pa, &prot, address, access_type, mmu_idx, true, true); @@ -791,6 +773,14 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, i= nt size, __func__, address, ret, pa, prot); } =20 + /* We did the two stage lookup based on MPRV, unset the lookup */ + if (riscv_has_ext(env, RVH) && env->priv =3D=3D PRV_M && + access_type !=3D MMU_INST_FETCH && + get_field(env->mstatus, MSTATUS_MPRV) && + MSTATUS_MPV_ISSET(env)) { + riscv_cpu_set_two_stage_lookup(env, false); + } + if (riscv_feature(env, RISCV_FEATURE_PMP) && (ret =3D=3D TRANSLATE_SUCCESS) && !pmp_hart_has_privs(env, pa, size, 1 << access_type, mode)) { --=20 2.27.0 From nobody Mon May 6 08:59:59 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zohomail.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=1597260566; cv=none; d=zohomail.com; s=zohoarc; b=dDN1r/w7kzVnI89dbYuL4XSEHFo9an5eR/qUuW+5uSufNqIR9uzTJj4bHRuzzfWpW65vSA+zdtkynsOBPmywhGIlk6Ju6xANdvR+JvZ6CxUU5+8l2LWeAzt/gQ2w+uoFSxClcotO8sYfKgM18IqfyRsfI3XQoETOnULCMIuPJhA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597260566; 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=4nvj7B4VSMGa6dM6jCCNpKIRj7o9+Fe0nSaNTI9nJN0=; b=mX7MW3LEVTe0BiD7Pgg/JesSnv9u/rQ6YvkCJjsaaHzl3aT26JzTNMcE0nmTn7MHCOYfhjLNq5+Li1Ih6BEu4Z4fSKIa6mnsqBuvrey5vNzqzB+P4aV8Nb1MNmFg/Af4gtWnIBJr4kfsE48ltpsOXO5ZaHsU9rnLAOskxY0RBcc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zohomail.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 1597260566916681.4842957818944; Wed, 12 Aug 2020 12:29:26 -0700 (PDT) Received: from localhost ([::1]:58590 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k5wRB-0006AJ-Lh for importer@patchew.org; Wed, 12 Aug 2020 15:29:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59472) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5wLQ-0004km-6z; Wed, 12 Aug 2020 15:23:28 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:4810) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5wLO-0000Qu-KP; Wed, 12 Aug 2020 15:23:27 -0400 Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 13 Aug 2020 03:23:25 +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; 12 Aug 2020 12:10:33 -0700 Received: from jbfyk72.ad.shared (HELO risc6-mainframe.hgst.com) ([10.86.59.14]) by uls-op-cesaip02.wdc.com with ESMTP; 12 Aug 2020 12:23:26 -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=1597260207; x=1628796207; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=vlZ67bAT/zorltvkSQdWj17eSXvrdCgq5WM/GjFmfk0=; b=jZ7rQWITShG3OEzbrg3jyIB7CV5r4qoQmiKlpcr+hzOMNbk9q5zyWxhP oVf+9lDfy2yqBCDkNaEtegGP9zBwHARRhNJ6tCO3Sqy5n6+FV/k0patXZ FEG+U/wKPtj8dvpOHFJP9yesltlZNsrsOmKsUV9lLUQonLoDdGbPyuitr 0zsNhgcNcKHhFzT5dkicoHDny+ZEjjKZCDsNKq+KJEi5dS/v/adt+EYSx lh0pEOfSD9W2MFMvGZIl4EYSkIvDsFHL6zfZRzka9M9tBCTvJmQFCf0na TFrrtNa2G5ZUVgHxDoAKuDFoTIWEZmwk0Kcha6S1DeLelIO5zF8khrjFr g==; IronPort-SDR: jtEWHrE964QuBMTYdz0hGGVvZNDks1JjV061pwKb70n4VV9WIBoIyX3dFK6mmINwQl6qEE0WQ+ Sx8lbrPvYP9EXUbDO2e6jW5Koj7SQTxjriLr2P/QG4dn7iZcffQax0oNO2x5TqsM4zNAKthBHP ecNmneqVq29KvtCLD8Qy2xpa8GjRt36RVvVgWY7r+W3CAnXj6gJwLqA5crZuW/CtsD+pyaehF2 ct+sAD/5nkrPJ6RHvLyXScjEYMBVheIhfYbM/5Vb6alkPqHX1fOQt8ErpWXOmrbqC0DxXJK/Xt pm8= X-IronPort-AV: E=Sophos;i="5.76,305,1592841600"; d="scan'208";a="146029199" IronPort-SDR: B8tfvx9qqtSwd41Z6+VQlIuW0T/t2lzAw3z7/H+l4LhCZe8HUGkQvqozhPnmw4UW+Z4313Abxw NkrFUyqSSPng== IronPort-SDR: uCAvhyDEdLwKm1knfVPyh9OulTeIsU/iG9IGo2QV9P83ql0cYg+LPZsQgDEvYtN0E7dQ6oYmzw /MPKnPcmxY3g== WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v3 04/13] target/riscv: Don't allow guest to write to htinst Date: Wed, 12 Aug 2020 12:13:25 -0700 Message-Id: X-Mailer: git-send-email 2.27.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=216.71.154.45; envelope-from=prvs=486123ee4=alistair.francis@wdc.com; helo=esa6.hgst.iphmx.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/12 15:23:20 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: alistair.francis@wdc.com, anup.patel@wdc.com, palmer@dabbelt.com, alistair23@gmail.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/csr.c | 1 - 1 file changed, 1 deletion(-) diff --git a/target/riscv/csr.c b/target/riscv/csr.c index 6a96a01b1c..0f035d33b1 100644 --- a/target/riscv/csr.c +++ b/target/riscv/csr.c @@ -922,7 +922,6 @@ static int read_htinst(CPURISCVState *env, int csrno, t= arget_ulong *val) =20 static int write_htinst(CPURISCVState *env, int csrno, target_ulong val) { - env->htinst =3D val; return 0; } =20 --=20 2.27.0 From nobody Mon May 6 08:59:59 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zohomail.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=1597260281; cv=none; d=zohomail.com; s=zohoarc; b=SyL6Efp32BhwpeS73gGm1r+eHQlisOZO7TG/uQ7bGSdWCIjhCup7BLOTi1wcYNAEFahHA7YbHTuvJcXSyWdzxAU2hm7634jPeDgo8NBXG/pAr6dc+tA2Gyh4WX8RCMd6WL/P4aJ9wYELGRV5ZV64R7CCGnsidzQOMME4HUdhgrI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597260281; 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=Far682Nsen2aFPWwuQBpJLv4fSHdosHr+6dMeQTGS1c=; b=XC+ZYXd3g/btG8tlhenKRTMZa9wssFI+dXUDB+x5fSTA1Em7k7//3/jqE08GXqb1QoKxVVBAqa2zBgJtBPkc/HLCzbgn1HDVL4pyqprXlIyklaDyJoD1KGtt1ygwCcfAa3eHpKzyuJDgMiXNboJas9FDJJ88ylv1HEZwZdJY6Pk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zohomail.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 1597260281175670.1098423254826; Wed, 12 Aug 2020 12:24:41 -0700 (PDT) Received: from localhost ([::1]:38896 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k5wMa-0006b8-0L for importer@patchew.org; Wed, 12 Aug 2020 15:24:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59516) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5wLU-0004sD-8e; Wed, 12 Aug 2020 15:23:32 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:4810) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5wLR-0000Qu-8n; Wed, 12 Aug 2020 15:23:31 -0400 Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 13 Aug 2020 03:23:28 +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; 12 Aug 2020 12:10:36 -0700 Received: from jbfyk72.ad.shared (HELO risc6-mainframe.hgst.com) ([10.86.59.14]) by uls-op-cesaip02.wdc.com with ESMTP; 12 Aug 2020 12:23:29 -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=1597260209; x=1628796209; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=bTBYJS33X66hR5BWg52KbjhjVXejja8XXpAu0gSx3v8=; b=WBvuwhieZJZaR22bCnVIz/ROMf3pBwmnge3yUe8QE4ZUQVpu/hjpbCSC Vwt4XEZJEuYVwWaz/2Q0XMztGORF4HrtKHtjR7lTb0j+8P+mnTbdYXRUO 5tMEPAcntYsmoi5bJDZkNe14Ji9vOFX00TOKp0HWLZVUX40PFQQ+2+wNx J2+Tn7MEkTOFrZ0E6x6z+GK3hAYuIncdfbXWSMOu53l5RlMFO66RYf0gD wZYiDHlwMuSO6mPLbx0NB1mp24nRmyojIdB+4rYXJIZ0+xHGvdUlGYwuD /XN9727I9a4+1XWJoqOsi6NnVmC0g9bUczDTE4kJfJYrBivyIjazvkFX0 A==; IronPort-SDR: i/gnJVNX/FLywHF2+AW4m0q7IXyZxD2i730K91wZxGat58nUYZRsEeXjdpq7QZHrffQWpJryoL nBb/b5T+enJFCxWF0fR+eF4acxzzSZSXjOR4T9e8Vt/+PhmcLT4+ciULhA9a99HBVVgxmZ8sDE uZklH8UgrHYjGZmf6Sy5/Y6HW2DN8YDdHP2Y0C1CO8E4O7jgOSkanyyJTy9V5pz/blYewcVcGl y35+tYztOT7j3oz78spkF8yLHu8hHQW4gy85XmYgCrGqq0h5Ezx7cJGz7vbkd+uU8TFNX6oVql fzI= X-IronPort-AV: E=Sophos;i="5.76,305,1592841600"; d="scan'208";a="146029202" IronPort-SDR: 1OEodlBCKetwIFppLaOdSh38FyxWAHVAwuZRWe0HaiSMc4E8GCAZG4gYU7Nn8OtnU+Bjnn1NHv dPfBLMgk+FUg== IronPort-SDR: xWPvZb4NhCsOeI98eD7XcpHDboJymBg6VVNzh9Cyl+4KVQjKrUPQzq6O7vlxK8zRnP2FGrpG96 T2j1MQiSk+HA== WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v3 05/13] target/riscv: Convert MSTATUS MTL to GVA Date: Wed, 12 Aug 2020 12:13:27 -0700 Message-Id: <9308432988946de550a68524ed76e4b8683f10e2.1597259519.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=216.71.154.45; envelope-from=prvs=486123ee4=alistair.francis@wdc.com; helo=esa6.hgst.iphmx.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/12 15:23:20 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: alistair.francis@wdc.com, anup.patel@wdc.com, palmer@dabbelt.com, alistair23@gmail.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_bits.h | 5 +++-- target/riscv/cpu_helper.c | 24 ++++++++++++++++++++---- target/riscv/csr.c | 6 +++--- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h index 7abae4267f..43617e7c1f 100644 --- a/target/riscv/cpu_bits.h +++ b/target/riscv/cpu_bits.h @@ -379,10 +379,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_GVA 0x4000000000ULL #define MSTATUS_MPV 0x8000000000ULL #elif defined(TARGET_RISCV32) -#define MSTATUS_MTL 0x00000040 +#define MSTATUS_GVA 0x00000040 #define MSTATUS_MPV 0x00000080 #endif =20 @@ -444,6 +444,7 @@ #define HSTATUS_VTVM 0x00100000 #define HSTATUS_VTSR 0x00400000 #define HSTATUS_HU 0x00000200 +#define HSTATUS_GVA 0x00000040 =20 #define HSTATUS32_WPRI 0xFF8FF87E #define HSTATUS64_WPRI 0xFFFFFFFFFF8FF87EULL diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 10c9f8b63b..b5f4264525 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -894,6 +894,19 @@ void riscv_cpu_do_interrupt(CPUState *cs) if (riscv_has_ext(env, RVH)) { target_ulong hdeleg =3D async ? env->hideleg : env->hedeleg; =20 + if ((riscv_cpu_virt_enabled(env) || + riscv_cpu_two_stage_lookup(env)) && tval) { + /* + * If we are writing a guest virtual address to stval, set + * this to 1. If we are trapping to VS we will set this to= 0 + * later. + */ + env->hstatus =3D set_field(env->hstatus, HSTATUS_GVA, 1); + } else { + /* For other HS-mode traps, we set this to 0. */ + env->hstatus =3D set_field(env->hstatus, HSTATUS_GVA, 0); + } + if (riscv_cpu_virt_enabled(env) && ((hdeleg >> cause) & 1) && !force_hs_execp) { /* @@ -904,6 +917,7 @@ void riscv_cpu_do_interrupt(CPUState *cs) cause =3D=3D IRQ_VS_EXT) cause =3D cause - 1; /* Trap to VS mode */ + env->hstatus =3D set_field(env->hstatus, HSTATUS_GVA, 0); } else if (riscv_cpu_virt_enabled(env)) { /* Trap into HS mode, from virt */ riscv_cpu_swap_hypervisor_regs(env); @@ -952,13 +966,15 @@ void riscv_cpu_do_interrupt(CPUState *cs) #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)); + if (riscv_cpu_virt_enabled(env) && tval) { + env->mstatush =3D set_field(env->mstatush, MSTATUS_GVA, 1); + } #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= )); + if (riscv_cpu_virt_enabled(env) && tval) { + env->mstatus =3D set_field(env->mstatus, MSTATUS_GVA, 1); + } #endif =20 mtval2 =3D env->guest_phys_fault_addr; diff --git a/target/riscv/csr.c b/target/riscv/csr.c index 0f035d33b1..f9ac21d687 100644 --- a/target/riscv/csr.c +++ b/target/riscv/csr.c @@ -403,10 +403,10 @@ static int write_mstatus(CPURISCVState *env, int csrn= o, target_ulong val) MSTATUS_TW; #if defined(TARGET_RISCV64) /* - * RV32: MPV and MTL are not in mstatus. The current plan is to + * RV32: MPV and GVA are not in mstatus. The current plan is to * add them to mstatush. For now, we just don't support it. */ - mask |=3D MSTATUS_MTL | MSTATUS_MPV; + mask |=3D MSTATUS_MPV | MSTATUS_GVA; #endif =20 mstatus =3D (mstatus & ~mask) | (val & mask); @@ -432,7 +432,7 @@ static int write_mstatush(CPURISCVState *env, int csrno= , target_ulong val) tlb_flush(env_cpu(env)); } =20 - val &=3D MSTATUS_MPV | MSTATUS_MTL; + val &=3D MSTATUS_MPV | MSTATUS_GVA; =20 env->mstatush =3D val; =20 --=20 2.27.0 From nobody Mon May 6 08:59:59 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zohomail.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=1597260285; cv=none; d=zohomail.com; s=zohoarc; b=YLy+n+P2mlo+72veB5Fksnm5sN+Q+xyAtkwsxoMOx4swzg27Dx0oRNSmcCsnLpYIac4So3JoxGtbtH3EKkTN7PxnL/ryupTEM0GPIzZxFyb7d14eiDkHrjEct7THsfHDYZcc99YrSErQ0mU0EvNHTmj150r7Q/GrGCfxwexan1Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597260285; 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=wWgrxs6LRN3+H7KANBBPFZ3RcVr5m5EvuygIBs/NDEA=; b=Y6vd5jn4elrafb+hMLPY60FAJmyMP2ZVeP2u7axaCNUdcxlGyFQSwj3P7DbzM89DBonkxxx7iiZzH2+YVyvuhzNYgG9cgX6KLJOxoehHpZdsNhSohUgnegfv5rqO6HaMjAv4JJEMot7kBgMggDwhEA1hzJFdY03+ufKy+asP+4o= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zohomail.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 1597260285002630.3574757018774; Wed, 12 Aug 2020 12:24:45 -0700 (PDT) Received: from localhost ([::1]:39238 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k5wMc-0006jX-Q7 for importer@patchew.org; Wed, 12 Aug 2020 15:24:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59534) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5wLW-0004wW-8L; Wed, 12 Aug 2020 15:23:34 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:4824) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5wLU-0000SI-HQ; Wed, 12 Aug 2020 15:23:33 -0400 Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 13 Aug 2020 03:23:31 +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; 12 Aug 2020 12:10:39 -0700 Received: from jbfyk72.ad.shared (HELO risc6-mainframe.hgst.com) ([10.86.59.14]) by uls-op-cesaip02.wdc.com with ESMTP; 12 Aug 2020 12:23:32 -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=1597260212; x=1628796212; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=i6TsF+nWPUY4kyBuHNnNc0d363KnlgxkQHE3CnRI+so=; b=Xd5gxuzPNipJ8kJPeYTioi2s2yb5BX5ttttn4tG45HiqMBUxpHA+6/G0 Ds9kEPwhGBvrR+zLgLY1kBAQQ0r06nYQOgFlAbzC2zjxXhHVlKhe5PoTV 2IyBILGbQdPHz2+nkisKg1DTNmDwojMVlEu7i6QKsTy4TG/mgmqq0ra1j NTSJOqsMjLFkfAFxVkEnl+f8x9bRIHTIMe2xuznc+hIjCTYmTMlfR7YHp kRdqw1qiCcj1elIp2FcmOeUwK3F0qT5d2sKLJkgbi0UviGRVVrHuwfSN0 l/vKk3mfHuwdvhjJ2R68Evxb/FQEd4hE8xXh6RxBVoLvmZUHjc5RUgPoA g==; IronPort-SDR: P/W7JL4aYtEIXRVRLbW9DDDlQQx1TlvWxlxundkXoPqqbH0iswoSYSKj8QTyY+xa4zkagsQbGz i9qvuGvmEhaWDsXKnpVF+vkdmDyFYwbLxiREcGkIeMbHXfBSluhPnKqJJK73Q5XceIwsmFF0Jx yF19Mpv5ol1CxpYKblQYW899UgYpF3rssc/xvVuElwuNSjtUs2r+dc2uuFc+HV1EBlKoukS8m/ qbxXRTAeOsZCYxqWQQNliEkXL9bep5/bNgP9Xs0td9YJ/ga7vwbIo5JpMkQAcIZYoMqWQMUnW/ 6Gk= X-IronPort-AV: E=Sophos;i="5.76,305,1592841600"; d="scan'208";a="146029205" IronPort-SDR: FBl84v5v7N/qXvzKYKCppL8fhopBzNuv47Q6MzQ0T9s7sqKEFDB3ZYOnN9pNty+ZA0iotI+9TG GTAcvMu6UXvA== IronPort-SDR: q1CVShgbAh1DsTxCETgXK7d4m8LfQfWuv9JA3nnNK09Vwn2+Q1xO6UTng9LqtrrmZ08uROlwOP Z25IpNxfjGBA== WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v3 06/13] target/riscv: Fix the interrupt cause code Date: Wed, 12 Aug 2020 12:13:30 -0700 Message-Id: <85b7fdba8abd87adb83275cdc3043ce35a1ed5c3.1597259519.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=216.71.154.45; envelope-from=prvs=486123ee4=alistair.francis@wdc.com; helo=esa6.hgst.iphmx.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/12 15:23:20 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: alistair.francis@wdc.com, anup.patel@wdc.com, palmer@dabbelt.com, alistair23@gmail.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 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index b5f4264525..9ab3ca4675 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -909,14 +909,15 @@ void riscv_cpu_do_interrupt(CPUState *cs) =20 if (riscv_cpu_virt_enabled(env) && ((hdeleg >> cause) & 1) && !force_hs_execp) { + /* Trap to VS mode */ /* * See if we need to adjust cause. Yes if its VS mode inte= rrupt * no if hypervisor has delegated one of hs mode's interru= pt */ if (cause =3D=3D IRQ_VS_TIMER || cause =3D=3D IRQ_VS_SOFT = || - cause =3D=3D IRQ_VS_EXT) + cause =3D=3D IRQ_VS_EXT) { cause =3D cause - 1; - /* Trap to VS mode */ + } env->hstatus =3D set_field(env->hstatus, HSTATUS_GVA, 0); } else if (riscv_cpu_virt_enabled(env)) { /* Trap into HS mode, from virt */ --=20 2.27.0 From nobody Mon May 6 08:59:59 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zohomail.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=1597260661; cv=none; d=zohomail.com; s=zohoarc; b=NzdIurVGbHuhj4Ar6baMHK1ke0xSgBt+gAhEwv3IPlChxki1OdVdQMouub1Ye4WyDFbkvIsNaG9H/yfcM5IiPg9ydZ8FI6VY/yvut2EcX0wRUOfDv9i1X/xt37vdRUSeeZ+rLoNYAJy2gYVl1pD9xF8M7LuTLB1UCPOzvr/Vbfw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597260661; 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=iaGS48B9GKsQgtsXqLyUeCh/ilg3TkYK0TATyDv2mk0=; b=kf74kZEo3wxdP8ER8FE4yver0I+m3dWzKq6I/3LwP0CMqRJfNApOElFJ1tNJy83QMGfWUA9rOE7OtM50urlZtMotVxo0R1q/mrlgWni4dcPrD4AM6iy38tR6LPaOi5SlalEyfrxLoXbtoV6cZkFNmWnktuCwVwHrdq+NRpfT6gE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zohomail.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 1597260661710247.49450202393302; Wed, 12 Aug 2020 12:31:01 -0700 (PDT) Received: from localhost ([::1]:36832 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k5wSi-0000Pp-Hv for importer@patchew.org; Wed, 12 Aug 2020 15:31:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59562) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5wLY-00053N-MZ; Wed, 12 Aug 2020 15:23:36 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:4810) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5wLW-0000Qu-Ng; Wed, 12 Aug 2020 15:23:36 -0400 Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 13 Aug 2020 03:23:34 +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; 12 Aug 2020 12:10:41 -0700 Received: from jbfyk72.ad.shared (HELO risc6-mainframe.hgst.com) ([10.86.59.14]) by uls-op-cesaip02.wdc.com with ESMTP; 12 Aug 2020 12:23:34 -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=1597260215; x=1628796215; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=sgOyLkhLmD+vx2DwarIMU5m8PvXjjcCG07p8bd0Fzks=; b=LRPKjIxwlAW51OAjryjuTD0952yp7W4UymvzA2R9rEyYZv4IxGuXnqtb BDJvRrH4IyA7wgyIVM67j++ka8QqI1attWjQcL3yIHsjyc+p4OUr2OU9Y FVukmizSzZUkSKrFN7lgCm/TyU0eb8LbL7s/rgUsupploZKii9VlaspI7 QFH41f3P64x+XOB5MQXTerUPWd3npBd41c6MRmzD6zyF6uevBdSwZF3bu bAbpmw/gEh17Nf13Kg5jzOYcgWQei5H8Rc4R3/dyvHftBKRJMnyIOhzWe 9z192tJUVvRlxYyzBItQi+X3oQ/EGpJ5kPox43HlukTLc4fOjOzAmWB67 A==; IronPort-SDR: bq9IBVh/OzjHV6moGulsoBFDvDExxxezMRyoM+vcqK+NP8+fuPvAmf9HMe87f95XaX3Lpr5XCR S+jyVbC4exv2JCAOTOSHwoTjzqhZAARFM+Xwn4/zEQ13+jm4FUPnPmWEyRlRKAFgjlG71XhwLm S7BM1PLQTnhkW4uLMdofa4Aue8WjTVkDA5rbg4nihDaAvoPlGLIgucYKoIauYQKE5faqI3j6kF uaqJjp4S72tBcO6qGZNRzajpQgmdyQ63726+oCwVvD5USCRgV7k//xir+JCiQB0wheODnDPTjP JGU= X-IronPort-AV: E=Sophos;i="5.76,305,1592841600"; d="scan'208";a="146029207" IronPort-SDR: lp6BIsHYS0PPJq8a229N33K1QzQSsPK370GCCcC8ztLtORYpPJmNtBF1Gb+e6R8BupztYYOlr7 uYg/j0yI9wZg== IronPort-SDR: HxFbRqBpgc3yX0nYobIkwhglqese/yCQBH8mVohhWU+LOBsOFbQbUA5FXliA0JLFPhrVW6Oc8v KWndJ3aClAJQ== WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v3 07/13] target/riscv: Update the Hypervisor trap return/entry Date: Wed, 12 Aug 2020 12:13:33 -0700 Message-Id: X-Mailer: git-send-email 2.27.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=216.71.154.45; envelope-from=prvs=486123ee4=alistair.francis@wdc.com; helo=esa6.hgst.iphmx.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/12 15:23:20 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: alistair.francis@wdc.com, anup.patel@wdc.com, palmer@dabbelt.com, alistair23@gmail.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_bits.h | 1 + target/riscv/cpu_helper.c | 16 ++++++---------- target/riscv/op_helper.c | 8 ++------ target/riscv/translate.c | 10 ---------- 4 files changed, 9 insertions(+), 26 deletions(-) diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h index 43617e7c1f..fb6a3e9092 100644 --- a/target/riscv/cpu_bits.h +++ b/target/riscv/cpu_bits.h @@ -445,6 +445,7 @@ #define HSTATUS_VTSR 0x00400000 #define HSTATUS_HU 0x00000200 #define HSTATUS_GVA 0x00000040 +#define HSTATUS_SPVP 0x00000100 =20 #define HSTATUS32_WPRI 0xFF8FF87E #define HSTATUS64_WPRI 0xFFFFFFFFFF8FF87EULL diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 9ab3ca4675..79166875a9 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -922,9 +922,7 @@ void riscv_cpu_do_interrupt(CPUState *cs) } 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, + env->hstatus =3D set_field(env->hstatus, HSTATUS_SPVP, get_field(env->mstatus, SSTATUS_S= PP)); env->hstatus =3D set_field(env->hstatus, HSTATUS_SPV, riscv_cpu_virt_enabled(env)); @@ -935,13 +933,11 @@ void riscv_cpu_do_interrupt(CPUState *cs) 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_S= PP)); - env->hstatus =3D set_field(env->hstatus, HSTATUS_SPV, - riscv_cpu_virt_enabled(env)); - + if (!riscv_cpu_two_stage_lookup(env)) { + env->hstatus =3D set_field(env->hstatus, HSTATUS_SPV, + riscv_cpu_virt_enabled(env)); + } + riscv_cpu_set_two_stage_lookup(env, false); htval =3D env->guest_phys_fault_addr; } } diff --git a/target/riscv/op_helper.c b/target/riscv/op_helper.c index 3d306c343c..4b64bfe7d2 100644 --- a/target/riscv/op_helper.c +++ b/target/riscv/op_helper.c @@ -97,12 +97,8 @@ target_ulong helper_sret(CPURISCVState *env, target_ulon= g cpu_pc_deb) prev_priv =3D get_field(mstatus, MSTATUS_SPP); prev_virt =3D get_field(hstatus, HSTATUS_SPV); =20 - 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); + hstatus =3D set_field(hstatus, HSTATUS_SPV, 0); + mstatus =3D set_field(mstatus, MSTATUS_SPP, 0); mstatus =3D set_field(mstatus, SSTATUS_SIE, get_field(mstatus, SSTATUS_SPIE)); mstatus =3D set_field(mstatus, SSTATUS_SPIE, 1); diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 9632e79cf3..f896412235 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -768,16 +768,6 @@ static void riscv_tr_init_disas_context(DisasContextBa= se *dcbase, CPUState *cs) #if !defined(CONFIG_USER_ONLY) 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) && - MSTATUS_MPV_ISSET(env)) { - 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; } --=20 2.27.0 From nobody Mon May 6 08:59:59 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zohomail.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=1597260363; cv=none; d=zohomail.com; s=zohoarc; b=FvzFZBJdUVmhbrovYn5KDBXhDHKPH2BL4+ydslSo2hE5H+ZBPEzKCwpufCxdlROLPDxvsTjIo4szo3O2UYsz3n5HztTx1DpPMLnGUc5oj8nnsgvTZvHUehLH7lXtoGrr0dzWILWIsZW62tMMpLYn/4bfpA7/tGNwYBLuXvVfim4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597260363; 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=/wq0Z49Z3eT4QQypzeC7q4mzR4w9Ws7r93XNu0AYNkA=; b=g3kiwDcpN3JGRgDekbcS5HydAED4/GRRnokZ+LU3B/csSjgqtz+6fY77IFJHi41VH3kLQf+ocJ816RmI6N9p3HSzE+IV71KNhZAheo8oMnv9fTmNtNOh0uQEiVZtk/4NX1xAtk67vwcNJCAcU0KmqGh72LnFXtwCDsxoA4Ui2o0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zohomail.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 1597260363248705.1886785387222; Wed, 12 Aug 2020 12:26:03 -0700 (PDT) Received: from localhost ([::1]:47316 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k5wNu-0001Yc-32 for importer@patchew.org; Wed, 12 Aug 2020 15:26:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59592) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5wLb-0005AE-Jl; Wed, 12 Aug 2020 15:23:39 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:4837) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5wLZ-0000UE-Th; Wed, 12 Aug 2020 15:23:39 -0400 Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 13 Aug 2020 03:23:36 +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; 12 Aug 2020 12:10:44 -0700 Received: from jbfyk72.ad.shared (HELO risc6-mainframe.hgst.com) ([10.86.59.14]) by uls-op-cesaip02.wdc.com with ESMTP; 12 Aug 2020 12:23: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=1597260218; x=1628796218; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=LpK/Kkf+fwylS840kCf3NVSFUj6Cc/XdSH0z+Sq7yuI=; b=HNqUTAXNDm/WqNRsPlroYTbW91RvXt12wwW/Z9yAG722ejA21J6qtwAe vF9W91IxrbxfzrMxLHlRQjqXRP/9OJuS1Xzcva7QyyVpm5fViSJZsn5kJ rdNLS6Rk9eQTD02KN4wbaf21FOidAZitXqDSfdbA5kEfr+0YMba634D7L 3zg++aqwdvLUMaq62UJmfZ87WwFBaU9DrJS+ENDkMBlsRtmekOb52tL9j aWI/A4vZS1KIAum0XtzSzThE2sEucayxBLu04HWn6TgquCJOCdL6T26sA Q15zi26K+yFM9dA94FPvUyw9gTBPnqlhvT3XE3ujam+fq7bEmyBfZY3fq g==; IronPort-SDR: Lnr/1QQiU3I+u5jLoh56sjbPqlkKTzJelZKrmzst7rDSvAUQ7OsM/idSOfLuy8E8CzCRoZjfbD YCQzh+EsYRH2PrPvDzukkJu+g7sLNjVcDNsRrdd7d75wO9ArkEPh50BLd9vus7Qx6Cmn/BMRR6 HGg+PWVt4ny/vmKTv9X9GkOplCr5ekqah/AA9dDc8Z9QRmPxNsinTamXCw4r8eY+dG4LIR/M0V 6kFQ1oYRg+P5sBXevP4hfxlQCnzkipgW/C1Z+TJz9LY09KB20HEZGOeZwCZiSzv5H9/DzWs9mM 6Mw= X-IronPort-AV: E=Sophos;i="5.76,305,1592841600"; d="scan'208";a="146029209" IronPort-SDR: mCNlwNiAcf29vLpdbkdkQhi9h+viX6j+2m5ISF8zLLyVmrHQIlfjdxV0nTS+7cNdnOHiPcuVQy 5h1wQa+qhFbw== IronPort-SDR: QVLEhwbHRxQkgXlhOLRE7I8q0+ucx8R2opMC9tP2o+qLuU4KnwR0H0AQk5HNs+m9oNAJmRnI1q LPDbrZ+dAGXA== WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v3 08/13] target/riscv: Update the CSRs to the v0.6 Hyp extension Date: Wed, 12 Aug 2020 12:13:36 -0700 Message-Id: <4f227b30cb1816795296c0994f1123fab143666a.1597259519.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=216.71.154.45; envelope-from=prvs=486123ee4=alistair.francis@wdc.com; helo=esa6.hgst.iphmx.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/12 15:23:20 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: alistair.francis@wdc.com, anup.patel@wdc.com, palmer@dabbelt.com, alistair23@gmail.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_bits.h | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h index fb6a3e9092..573d85da41 100644 --- a/target/riscv/cpu_bits.h +++ b/target/riscv/cpu_bits.h @@ -437,15 +437,17 @@ #endif =20 /* hstatus CSR bits */ -#define HSTATUS_SPRV 0x00000001 +#define HSTATUS_VSBE 0x00000020 +#define HSTATUS_GVA 0x00000040 #define HSTATUS_SPV 0x00000080 -#define HSTATUS_SP2P 0x00000100 -#define HSTATUS_SP2V 0x00000200 +#define HSTATUS_SPVP 0x00000100 +#define HSTATUS_HU 0x00000200 +#define HSTATUS_VGEIN 0x0003F000 #define HSTATUS_VTVM 0x00100000 #define HSTATUS_VTSR 0x00400000 -#define HSTATUS_HU 0x00000200 -#define HSTATUS_GVA 0x00000040 -#define HSTATUS_SPVP 0x00000100 +#if defined(TARGET_RISCV64) +#define HSTATUS_VSXL 0x300000000 +#endif =20 #define HSTATUS32_WPRI 0xFF8FF87E #define HSTATUS64_WPRI 0xFFFFFFFFFF8FF87EULL --=20 2.27.0 From nobody Mon May 6 08:59:59 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zohomail.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=1597260738; cv=none; d=zohomail.com; s=zohoarc; b=lMrjO+BgqozVZfcwWhB7JttUNoibKmKSPMjIQ4eymkHCc2GG/apD04EHjaB98tjClG6sM26aIWA2yE1lFNFJB7ZfMEEaq6C0njuEnJVIz1+xjXxuauWJzcw4Hl1pGNGfruXWF48Pxo23BvyyHQQl0MS43XRGrhEe8q8F7Gm9fYs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597260738; 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=msawbMXphL03BRimwMbn1X3FrNFiuLP9JtxmWfcBcyA=; b=Y5YGPsBg9DO1tAXDrd7Gj42FP4h5QiUHaLH+StYzW61X053UvkjYhvXDZLg+Typ2lyzgyorfe9RH+3H72Z7/4c+5qyl1b3FPzL96RN0E99leK4Z6M3Opi3CL/QUvHOnF8lbSfZpRSq3hQmGjFRRmL9oIXldj1a4vSi8o3AHXQBU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zohomail.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 1597260738905415.267045121043; Wed, 12 Aug 2020 12:32:18 -0700 (PDT) Received: from localhost ([::1]:39310 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k5wTx-0001Ws-G9 for importer@patchew.org; Wed, 12 Aug 2020 15:32:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59618) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5wLh-0005Gs-SE; Wed, 12 Aug 2020 15:23:45 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:4839) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5wLc-0000UI-6t; Wed, 12 Aug 2020 15:23:45 -0400 Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 13 Aug 2020 03:23:39 +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; 12 Aug 2020 12:10:47 -0700 Received: from jbfyk72.ad.shared (HELO risc6-mainframe.hgst.com) ([10.86.59.14]) by uls-op-cesaip02.wdc.com with ESMTP; 12 Aug 2020 12:23:40 -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=1597260220; x=1628796220; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=FNpkEhXF3G0wGMMrrCplVS4/5vssOWwwtnYQkdrsvM4=; b=JM0hAoO61Qp/39GJaJcAlerGc2gEUreHdL8V8EXiPdPhjjqUcYJ1o231 V6ICGBU9wZRjoyICTJZ3N1tMfX9kiiA7qVBeELbSOufxbPuwdCNe9GlEG 5qeHW4U5AayO18qAWbSzeIMVqN9giiL0QbE8uAE3JQD+gC0Duhy2wg7cl nSTCziGyTdsblJzvbDo9EvHxBTwa+heVVrd2416+f9Yag7WuF/ON0kx/O o3TWwaEt+0Pto4JaqBj3/5FgfDIhuLRvaBXDFJEiGJMGOtRZLojyOUFex xihpXqsprvLBFG5fkTBMui+F9szFYktu6Xs8LiFKLarLiKBziEcZjnzVR A==; IronPort-SDR: HGGng6y8HBwQGg0OnTodWu3nWx7yRSyH2ZJXLqjznAgmXuEV/nAuG5QVDbn7KPf/YbVtxPXr7T arqwNDBam9NCVrqRDAkLU36truGkE6yhoSlPU/rCfW5Q+kuPL9objb/2n9QMhRbKFRqQvo2yYG 9ZhXJEEL7ZMLHsF0inStwg4Lt9qfxvtmrYjKbp8vwaGq5lrOzRAN9X419MzAF6Vo2B7cxTs4aF JEYZjJKf5n24Yx4Cs1hH7rFk/YUcZDfwxUSCH+ZaQL9+s6dZtX61GxsU1ymCL549o2HWBV1zZ2 G1A= X-IronPort-AV: E=Sophos;i="5.76,305,1592841600"; d="scan'208";a="146029210" IronPort-SDR: mUyccbobPowvVtvfZ8ovWKLzoEOGaGMhQ10pr5TVRhWl82fLhOSRZhc3gDte3G0KaUneA3PXcz NrDDTpModd/g== IronPort-SDR: OAF8VfAb7uykzh3vu+tDqaZHuU3eOlT+BgKqubBtIp2YytZqqU+Tu/Lmt7SKnioLPP+iUOAYKX Ty4nkq3VIeZw== WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v3 09/13] target/riscv: Only support a single VSXL length Date: Wed, 12 Aug 2020 12:13:38 -0700 Message-Id: X-Mailer: git-send-email 2.27.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=216.71.154.45; envelope-from=prvs=486123ee4=alistair.francis@wdc.com; helo=esa6.hgst.iphmx.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/12 15:23:20 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: alistair.francis@wdc.com, anup.patel@wdc.com, palmer@dabbelt.com, alistair23@gmail.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/csr.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/target/riscv/csr.c b/target/riscv/csr.c index f9ac21d687..390ef781e4 100644 --- a/target/riscv/csr.c +++ b/target/riscv/csr.c @@ -836,12 +836,21 @@ static int write_satp(CPURISCVState *env, int csrno, = target_ulong val) static int read_hstatus(CPURISCVState *env, int csrno, target_ulong *val) { *val =3D env->hstatus; +#ifdef TARGET_RISCV64 + /* We only support 64-bit VSXL */ + *val =3D set_field(*val, HSTATUS_VSXL, 2); +#endif return 0; } =20 static int write_hstatus(CPURISCVState *env, int csrno, target_ulong val) { env->hstatus =3D val; +#ifdef TARGET_RISCV64 + if (get_field(val, HSTATUS_VSXL) !=3D 2) { + qemu_log_mask(LOG_UNIMP, "QEMU does not support mixed HSXLEN optio= ns."); + } +#endif return 0; } =20 --=20 2.27.0 From nobody Mon May 6 08:59:59 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zohomail.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=1597260297; cv=none; d=zohomail.com; s=zohoarc; b=Su8wxxSCMAGMIkvmKCZX822hbW7aqtBgvcXXRaBmvYuayMmfM+KuNIzWHCSF2g580UvYjHFHQHyMzms3MhFFaUXkM/EJdHBsiHL82zdOjbBhClSA7moY2LuD9xzuzpfqQewL8n5VftS4WLK0WnOIv7OnjZX2XOi6wZTQkWW3A1s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597260297; 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=xxJgEfZJhYu86ROv9R8Z83/j415PNgusHhZGofZR5nA=; b=GYekjeaQ+Kf5ePezv/Hu7ffbuGtUS23ODfY6YF5XhzcDll/14tdhWyXfocs26Y84A3PITGfQkI3NRy6FnUp45VBUq9EPTFhJdMdutC1qPUJpWccAPSIVVZDawGtBIq57ryRR8U2LJf7LSBBaHARVq6B5mdOSx4qYZ0BKqJFOFmQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zohomail.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 1597260297513810.4858495803742; Wed, 12 Aug 2020 12:24:57 -0700 (PDT) Received: from localhost ([::1]:40718 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k5wMq-0007JB-9K for importer@patchew.org; Wed, 12 Aug 2020 15:24:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59646) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5wLj-0005M9-LM; Wed, 12 Aug 2020 15:23:47 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:4837) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5wLh-0000UE-VG; Wed, 12 Aug 2020 15:23:47 -0400 Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 13 Aug 2020 03:23:42 +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; 12 Aug 2020 12:10:49 -0700 Received: from jbfyk72.ad.shared (HELO risc6-mainframe.hgst.com) ([10.86.59.14]) by uls-op-cesaip02.wdc.com with ESMTP; 12 Aug 2020 12:23: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=1597260226; x=1628796226; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=QHW0eRBWKyc4PMGVbAwmtx2J+z/Y/6Gi6d4k1CzZukw=; b=cykqkFKtobNAxSwzmu8NE/oKOD0mlcVWkGiiJFl4BUo4yoMcJwT9evHj f4kLhBxn9qquUz/srfr7PKizrF476NeLt0vvsaXcL8bCLdcboeFThOoEM pi2cPbNrddKB/ooFThp9oKGxk5YzFN4NdY5lpQGJVVjiNhOHC6DIuSx8o 2lkOdNfuZgFgFAfc7wfbck9vdZj80A51+tF2CpX9tG0D3s7H0bhDJYxx5 Zi+wUJITI/xn07b+8bljraA7Mgbrwf5bKZZyaiHmLrSKB1bzT8e4eyBb1 e1DDnElhbjmBVNBImmVPwrtgTEQjeQQrNARymr/8APuyJEEdFsW3gyi0X Q==; IronPort-SDR: 7wZ/+qpW3jW7Y06zShSKfl0Eo6bwbXj7YHQqZuoAHtLUzikZpYGnBlKJjGKOjIgjAKjSunFd6c 7Bo2X0YIzKqveyLiWqz63+EGyVobXdyqmQZOkwo22SmMZVViQDRwMr9n5pvyaBL89CgOc4XR0m yr636OTOMKlIG8KcmlOawcuiN+D1/FCW5YbDcBzBu44izkctDpjpIA9SP616JrkM89hsQRRfNX ryHpNABctnNWdn/0g/F2zgvJf9khczXM4/yowWnIfMWbKUgxUavk8LY/n9sD8BXCy3TkqWLNDe 2ow= X-IronPort-AV: E=Sophos;i="5.76,305,1592841600"; d="scan'208";a="146029212" IronPort-SDR: +SV5fci2oawbE7CXequNznC7sVsi2w3SAIA9px65HdpfSlZ7GKJryfIVuh24rC+jhhckDOhXER XJQgTYy/uQpQ== IronPort-SDR: GuQPNRKtWXqGL3IMbkVqT/nBZ6tajQf0j4kiOTnYGCcQq8aFo8NRRUe8tIvgbPwzVcP9d9ixmb LFaIelGhOssA== WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v3 10/13] target/riscv: Only support little endian guests Date: Wed, 12 Aug 2020 12:13:41 -0700 Message-Id: <93e5d4f13eca0d2a588e407187f33c6437aeaaf9.1597259519.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=216.71.154.45; envelope-from=prvs=486123ee4=alistair.francis@wdc.com; helo=esa6.hgst.iphmx.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/12 15:23:20 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: alistair.francis@wdc.com, anup.patel@wdc.com, palmer@dabbelt.com, alistair23@gmail.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/csr.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/target/riscv/csr.c b/target/riscv/csr.c index 390ef781e4..5e50683c58 100644 --- a/target/riscv/csr.c +++ b/target/riscv/csr.c @@ -840,6 +840,8 @@ static int read_hstatus(CPURISCVState *env, int csrno, = target_ulong *val) /* We only support 64-bit VSXL */ *val =3D set_field(*val, HSTATUS_VSXL, 2); #endif + /* We only support little endian */ + *val =3D set_field(*val, HSTATUS_VSBE, 0); return 0; } =20 @@ -851,6 +853,9 @@ static int write_hstatus(CPURISCVState *env, int csrno,= target_ulong val) qemu_log_mask(LOG_UNIMP, "QEMU does not support mixed HSXLEN optio= ns."); } #endif + if (get_field(val, HSTATUS_VSBE) !=3D 0) { + qemu_log_mask(LOG_UNIMP, "QEMU does not support big endian guests.= "); + } return 0; } =20 --=20 2.27.0 From nobody Mon May 6 08:59:59 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zohomail.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=1597260798; cv=none; d=zohomail.com; s=zohoarc; b=XUJltpKOsAEtFmJmJoEYazyEW9h/+xt4k2Ktp1qCES/41RU+anW/dg6cwq33f1cm4YMFkXxtccBZ97yPKYY97jLBXoWAP/3LZKGNB7RNjM0Tw5l4b5MPU8SbthcyiNYu1pxDnu34YT7HieBtoMyLo3izEcMJWyWcT67Ogd7qgy0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597260798; 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=Fz2sD8Rj66wpK/srIL9wFa9GQOXh8kpRqikKf+q0MC4=; b=EtQw8lt5aa1kdN3WqADr6ZqSUb7oKKWx1cFq/4M9wH/zwYeXX871cl+PLvT+sci2jkYW1EjbBPQwZVV3A76geq5nLLWaTt5+agN9TZDaj/VqZRRZz25HVn3LLFdqGI2qaMuLBeK8ZxNQLTLXPtmc9PERIiSCwXy4OlW8uxLtWxo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zohomail.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 1597260798899663.8376279572616; Wed, 12 Aug 2020 12:33:18 -0700 (PDT) Received: from localhost ([::1]:41542 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k5wUv-0002XF-Pq for importer@patchew.org; Wed, 12 Aug 2020 15:33:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59648) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5wLj-0005Mu-Vj; Wed, 12 Aug 2020 15:23:48 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:4843) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5wLi-0000Va-2F; Wed, 12 Aug 2020 15:23:47 -0400 Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 13 Aug 2020 03:23:44 +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; 12 Aug 2020 12:10:52 -0700 Received: from jbfyk72.ad.shared (HELO risc6-mainframe.hgst.com) ([10.86.59.14]) by uls-op-cesaip02.wdc.com with ESMTP; 12 Aug 2020 12:23:45 -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=1597260226; x=1628796226; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=b3JcuKO+BmRuOqMKj+1jygBcHjqj6T22fWMw2Dk7EaE=; b=RbFBdfYCV/GJXXMvRPrM5tUZJ3CZrmHpAoKGl9FJOtCPjJGARMNJ8flX N51URWNQSzG6XmvD4j317YOhxkHSmi/tEk6pC3nmU42YteiCejliAABqa JAj8jsW5egkhWN2Q3NkvWyeYQC9/YjdRkFGTtLlD4OGPHipt0HD54TGVw mh4TNKkdop0Unx3F2pzVT3x3o2j9oLPRhe1QUVAZvRohvZWsbuX1MS7Km 8YuKDKAX8Vg7Omf2t75l1fjV9YNvB+J08W2VCumshOPZz59ZG3usckDZM kV8GUeLDSQLNd6yAjo+dnFkbKA2hsJR1K5jKUD5t/yBRMZtIxe3+SLwtK Q==; IronPort-SDR: oWJVMO3ZhG5NPEQovLoD/P3/iGmASCBoeSGJG7yX8Kwr5BR8lwuwgD/RdZg6FtZL17zRUdkmVR fKKlrZgCLSXaoYC3BevkCUu2UIY9m1+e4quI30TWkfgQx9UH/1uTZifg54/RF8RrXwysUgGpYh TKiDmGleW9HdAlIa+PffqX79x+3vK5CPkMZfUgcuwk2adcNX1qeF2fotVQQTKWZAagiPbkfyct u5elGonSYGncIgam7do+xrki9fq3LfmXkHmiBNlYw3wHpXdYGAi5O9daVq6O7XG3A2jCgrZqfJ XL0= X-IronPort-AV: E=Sophos;i="5.76,305,1592841600"; d="scan'208";a="146029213" IronPort-SDR: 8ey442028y/wFLMoqA/iwugdxDCYSMkshuesCx6M2ma/Hod1ZSNO4KtqLLr5KSCs+wonhB5FPq uQOqcOF8gTaA== IronPort-SDR: kbMWJKpA77Pz6dDH0+poUud5pet7du5OgPB8NXcfRpFAYafLF6HWnJ3D6HEx6PjaNrzmy4/F4f 3sdXkXAkcu9Q== WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v3 11/13] target/riscv: Support the v0.6 Hypervisor extension CRSs Date: Wed, 12 Aug 2020 12:13:44 -0700 Message-Id: <644b6c114b1a81adbee0ab8c9c66a8672059ec96.1597259519.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=216.71.154.45; envelope-from=prvs=486123ee4=alistair.francis@wdc.com; helo=esa6.hgst.iphmx.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/12 15:23:20 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: alistair.francis@wdc.com, anup.patel@wdc.com, palmer@dabbelt.com, alistair23@gmail.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_bits.h | 3 +++ target/riscv/csr.c | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h index 573d85da41..d88e2ea30d 100644 --- a/target/riscv/cpu_bits.h +++ b/target/riscv/cpu_bits.h @@ -197,9 +197,12 @@ #define CSR_HIDELEG 0x603 #define CSR_HIE 0x604 #define CSR_HCOUNTEREN 0x606 +#define CSR_HGEIE 0x607 #define CSR_HTVAL 0x643 +#define CSR_HVIP 0x645 #define CSR_HIP 0x644 #define CSR_HTINST 0x64A +#define CSR_HGEIP 0xE12 #define CSR_HGATP 0x680 #define CSR_HTIMEDELTA 0x605 #define CSR_HTIMEDELTAH 0x615 diff --git a/target/riscv/csr.c b/target/riscv/csr.c index 5e50683c58..7dc50e6299 100644 --- a/target/riscv/csr.c +++ b/target/riscv/csr.c @@ -883,12 +883,25 @@ static int write_hideleg(CPURISCVState *env, int csrn= o, target_ulong val) return 0; } =20 +static int rmw_hvip(CPURISCVState *env, int csrno, target_ulong *ret_value, + target_ulong new_value, target_ulong write_mask) +{ + int ret =3D rmw_mip(env, 0, ret_value, new_value, + write_mask & hip_writable_mask); + + *ret_value &=3D hip_writable_mask; + + return ret; +} + static int rmw_hip(CPURISCVState *env, int csrno, target_ulong *ret_value, target_ulong new_value, target_ulong write_mask) { int ret =3D rmw_mip(env, 0, ret_value, new_value, write_mask & hip_writable_mask); =20 + *ret_value &=3D hip_writable_mask; + return ret; } =20 @@ -916,6 +929,18 @@ static int write_hcounteren(CPURISCVState *env, int cs= rno, target_ulong val) return 0; } =20 +static int read_hgeie(CPURISCVState *env, int csrno, target_ulong *val) +{ + qemu_log_mask(LOG_UNIMP, "No support for a non-zero GEILEN."); + return 0; +} + +static int write_hgeie(CPURISCVState *env, int csrno, target_ulong val) +{ + qemu_log_mask(LOG_UNIMP, "No support for a non-zero GEILEN."); + return 0; +} + static int read_htval(CPURISCVState *env, int csrno, target_ulong *val) { *val =3D env->htval; @@ -939,6 +964,18 @@ static int write_htinst(CPURISCVState *env, int csrno,= target_ulong val) return 0; } =20 +static int read_hgeip(CPURISCVState *env, int csrno, target_ulong *val) +{ + qemu_log_mask(LOG_UNIMP, "No support for a non-zero GEILEN."); + return 0; +} + +static int write_hgeip(CPURISCVState *env, int csrno, target_ulong val) +{ + qemu_log_mask(LOG_UNIMP, "No support for a non-zero GEILEN."); + return 0; +} + static int read_hgatp(CPURISCVState *env, int csrno, target_ulong *val) { *val =3D env->hgatp; @@ -1341,11 +1378,14 @@ static riscv_csr_operations csr_ops[CSR_TABLE_SIZE]= =3D { [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_HVIP] =3D { hmode, NULL, NULL, rmw_hvip = }, [CSR_HIP] =3D { hmode, NULL, NULL, rmw_hip = }, [CSR_HIE] =3D { hmode, read_hie, write_hie = }, [CSR_HCOUNTEREN] =3D { hmode, read_hcounteren, write_hcoun= teren }, + [CSR_HGEIE] =3D { hmode, read_hgeie, write_hgeie= }, [CSR_HTVAL] =3D { hmode, read_htval, write_htval= }, [CSR_HTINST] =3D { hmode, read_htinst, write_htins= t }, + [CSR_HGEIP] =3D { hmode, read_hgeip, write_hgeip= }, [CSR_HGATP] =3D { hmode, read_hgatp, write_hgatp= }, [CSR_HTIMEDELTA] =3D { hmode, read_htimedelta, write_htime= delta }, #if defined(TARGET_RISCV32) --=20 2.27.0 From nobody Mon May 6 08:59:59 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zohomail.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=1597260860; cv=none; d=zohomail.com; s=zohoarc; b=At7XrOSm/17pPUnzP4mgknTyEbz6zl6sDAGeC2Iu5RRBPV1CU2Lp6olUXt4HlUFcDTpiX4kzgRe4oF/It2qAACcJa9MCr7D9i4xz8o+tan3JMKhy7Y6te5ceqprTIoqQ22NT06deYuUNjNWfXqTr/JKGttRZaRfUGZZmFwWSFKU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597260860; 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=BaUWznoz9yOVdYxDHBwza9sT7nqU231Y96MpcdFRJ18=; b=gCo2AUab6gMSvfx/jrNjP073J4qvHe6r8sLvcLIobX42ICLgCCH0VUSnnPkrX69wXhdK/e+FXkMuqMcFpAgfZyKNlQKoBJK2e1lpK5tSu/6q/DpeHuhmv8/kWD8dX9jXwHhnw8k/MmVQ1hWv2CVrkVtwoRv2L3+Bwbs8oe5TQF4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zohomail.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 1597260860085644.9935624536311; Wed, 12 Aug 2020 12:34:20 -0700 (PDT) Received: from localhost ([::1]:43970 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k5wVu-0003an-Ni for importer@patchew.org; Wed, 12 Aug 2020 15:34:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59676) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5wLm-0005UM-Kc; Wed, 12 Aug 2020 15:23:50 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:4839) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5wLk-0000UI-8i; Wed, 12 Aug 2020 15:23:50 -0400 Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 13 Aug 2020 03:23:47 +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; 12 Aug 2020 12:10:55 -0700 Received: from jbfyk72.ad.shared (HELO risc6-mainframe.hgst.com) ([10.86.59.14]) by uls-op-cesaip02.wdc.com with ESMTP; 12 Aug 2020 12:23:48 -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=1597260228; x=1628796228; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=07WsTc6gaeBdPMBMD4A/pfdjPV0i19qXTXVdCMkyTog=; b=SGLz9X+cXL209w5KlOQltX65pIWw21217a+is/DM/upMQjbj85ZLmBlh nSIGoBmqCqyebVaGYVIUYeE5StavHmWUCnNR+eefQ01tueGYY/gZhdSOx rVt9cEY2TkYxArvSI4ffDBhyy2Y/i6AJkKzgKQOUIwi/bO/st7mnXnY0d iTHRqmxg5VWqRxkk2AfAOoLz0qIS884iEcUClOsO/RKXKba5EcmqV5Ja3 PWgrct7h5KRjmXre5JYYpynYpjjt0FQ76TR9/L9gEv6ZR+Bcv4DkARWXp 2xMNovC+oAn/V1cz95b5bF6CRaimIvUmdK1vWQUHKpxLZaq41KzyQkRY+ g==; IronPort-SDR: F/1duVC1eLkWNkRsJxCV6xULZZeyiDyA35Lzl2oObfms20eAPrgMPNJm7URunydozEp8+Yahcu OSATzHMkC/V0wvpZFZaOuozagORlg908TUg1C2OI9i/LDGF/rJjK0LwZ5etCnbvwabTz0dhmUG rCnlFbZnvig1j7+rxaDAgnYd12kPp6n5VlnTgu5g2nmM71LGGM9Wraz7vX++yMd5y+Nryci8QI pXt7fG7wFhDVkq8HFOiORUD/hZQfsaEy+hCPmaFdbERYkMFGiELLJTkC5SAFk07Ae8idNBzame bwc= X-IronPort-AV: E=Sophos;i="5.76,305,1592841600"; d="scan'208";a="146029215" IronPort-SDR: hlZEhZc/SvATxmO3cQsn5CsytzriY8slBcYoxeKuVRYNL7uh+Oe1RZjgne2pRwIkTgxr5cyqQl ubRsGpWVN0EA== IronPort-SDR: 57/FA8X+pGpcRu0PeNnv63NqVhkzkaETnhevzqNIuQq8/CMu6js0xn8BlPu9+GdYSr8YzPkmnp /PWGfzoFZRaw== WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v3 12/13] target/riscv: Return the exception from invalid CSR accesses Date: Wed, 12 Aug 2020 12:13:46 -0700 Message-Id: X-Mailer: git-send-email 2.27.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=216.71.154.45; envelope-from=prvs=486123ee4=alistair.francis@wdc.com; helo=esa6.hgst.iphmx.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/12 15:23:20 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: alistair.francis@wdc.com, anup.patel@wdc.com, palmer@dabbelt.com, alistair23@gmail.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 performing a CSR access let's return a negative exception value on an error instead of -1. This will allow us to specify the exception in future patches. Signed-off-by: Alistair Francis --- target/riscv/csr.c | 46 ++++++++++++++++++++-------------------- target/riscv/op_helper.c | 18 ++++++++++------ 2 files changed, 35 insertions(+), 29 deletions(-) diff --git a/target/riscv/csr.c b/target/riscv/csr.c index 7dc50e6299..197ce97e95 100644 --- a/target/riscv/csr.c +++ b/target/riscv/csr.c @@ -51,7 +51,7 @@ static int fs(CPURISCVState *env, int csrno) return 0; } if (!env->debugger && !riscv_cpu_fp_enabled(env)) { - return -1; + return -RISCV_EXCP_ILLEGAL_INST; } #endif return 0; @@ -73,7 +73,7 @@ static int ctr(CPURISCVState *env, int csrno) =20 if (!cpu->cfg.ext_counters) { /* The Counters extensions is not enabled */ - return -1; + return -RISCV_EXCP_ILLEGAL_INST; } #endif return 0; @@ -101,7 +101,7 @@ static int hmode(CPURISCVState *env, int csrno) } } =20 - return -1; + return -RISCV_EXCP_ILLEGAL_INST; } =20 static int pmp(CPURISCVState *env, int csrno) @@ -115,7 +115,7 @@ static int read_fflags(CPURISCVState *env, int csrno, t= arget_ulong *val) { #if !defined(CONFIG_USER_ONLY) if (!env->debugger && !riscv_cpu_fp_enabled(env)) { - return -1; + return -RISCV_EXCP_ILLEGAL_INST; } #endif *val =3D riscv_cpu_get_fflags(env); @@ -126,7 +126,7 @@ static int write_fflags(CPURISCVState *env, int csrno, = target_ulong val) { #if !defined(CONFIG_USER_ONLY) if (!env->debugger && !riscv_cpu_fp_enabled(env)) { - return -1; + return -RISCV_EXCP_ILLEGAL_INST; } env->mstatus |=3D MSTATUS_FS; #endif @@ -138,7 +138,7 @@ static int read_frm(CPURISCVState *env, int csrno, targ= et_ulong *val) { #if !defined(CONFIG_USER_ONLY) if (!env->debugger && !riscv_cpu_fp_enabled(env)) { - return -1; + return -RISCV_EXCP_ILLEGAL_INST; } #endif *val =3D env->frm; @@ -149,7 +149,7 @@ static int write_frm(CPURISCVState *env, int csrno, tar= get_ulong val) { #if !defined(CONFIG_USER_ONLY) if (!env->debugger && !riscv_cpu_fp_enabled(env)) { - return -1; + return -RISCV_EXCP_ILLEGAL_INST; } env->mstatus |=3D MSTATUS_FS; #endif @@ -161,7 +161,7 @@ static int read_fcsr(CPURISCVState *env, int csrno, tar= get_ulong *val) { #if !defined(CONFIG_USER_ONLY) if (!env->debugger && !riscv_cpu_fp_enabled(env)) { - return -1; + return -RISCV_EXCP_ILLEGAL_INST; } #endif *val =3D (riscv_cpu_get_fflags(env) << FSR_AEXC_SHIFT) @@ -177,7 +177,7 @@ static int write_fcsr(CPURISCVState *env, int csrno, ta= rget_ulong val) { #if !defined(CONFIG_USER_ONLY) if (!env->debugger && !riscv_cpu_fp_enabled(env)) { - return -1; + return -RISCV_EXCP_ILLEGAL_INST; } env->mstatus |=3D MSTATUS_FS; #endif @@ -291,7 +291,7 @@ static int read_time(CPURISCVState *env, int csrno, tar= get_ulong *val) uint64_t delta =3D riscv_cpu_virt_enabled(env) ? env->htimedelta : 0; =20 if (!env->rdtime_fn) { - return -1; + return -RISCV_EXCP_ILLEGAL_INST; } =20 *val =3D env->rdtime_fn() + delta; @@ -304,7 +304,7 @@ static int read_timeh(CPURISCVState *env, int csrno, ta= rget_ulong *val) uint64_t delta =3D riscv_cpu_virt_enabled(env) ? env->htimedelta : 0; =20 if (!env->rdtime_fn) { - return -1; + return -RISCV_EXCP_ILLEGAL_INST; } =20 *val =3D (env->rdtime_fn() + delta) >> 32; @@ -570,7 +570,7 @@ static int write_mcounteren(CPURISCVState *env, int csr= no, target_ulong val) static int read_mscounteren(CPURISCVState *env, int csrno, target_ulong *v= al) { if (env->priv_ver < PRIV_VERSION_1_11_0) { - return -1; + return -RISCV_EXCP_ILLEGAL_INST; } *val =3D env->mcounteren; return 0; @@ -580,7 +580,7 @@ static int read_mscounteren(CPURISCVState *env, int csr= no, target_ulong *val) static int write_mscounteren(CPURISCVState *env, int csrno, target_ulong v= al) { if (env->priv_ver < PRIV_VERSION_1_11_0) { - return -1; + return -RISCV_EXCP_ILLEGAL_INST; } env->mcounteren =3D val; return 0; @@ -804,7 +804,7 @@ static int read_satp(CPURISCVState *env, int csrno, tar= get_ulong *val) } =20 if (env->priv =3D=3D PRV_S && get_field(env->mstatus, MSTATUS_TVM)) { - return -1; + return -RISCV_EXCP_ILLEGAL_INST; } else { *val =3D env->satp; } @@ -821,7 +821,7 @@ static int write_satp(CPURISCVState *env, int csrno, ta= rget_ulong val) ((val ^ env->satp) & (SATP_MODE | SATP_ASID | SATP_PPN))) { if (env->priv =3D=3D PRV_S && get_field(env->mstatus, MSTATUS_TVM)= ) { - return -1; + return -RISCV_EXCP_ILLEGAL_INST; } else { if((val ^ env->satp) & SATP_ASID) { tlb_flush(env_cpu(env)); @@ -991,7 +991,7 @@ static int write_hgatp(CPURISCVState *env, int csrno, t= arget_ulong val) static int read_htimedelta(CPURISCVState *env, int csrno, target_ulong *va= l) { if (!env->rdtime_fn) { - return -1; + return -RISCV_EXCP_ILLEGAL_INST; } =20 #if defined(TARGET_RISCV32) @@ -1005,7 +1005,7 @@ static int read_htimedelta(CPURISCVState *env, int cs= rno, target_ulong *val) static int write_htimedelta(CPURISCVState *env, int csrno, target_ulong va= l) { if (!env->rdtime_fn) { - return -1; + return -RISCV_EXCP_ILLEGAL_INST; } =20 #if defined(TARGET_RISCV32) @@ -1020,7 +1020,7 @@ static int write_htimedelta(CPURISCVState *env, int c= srno, target_ulong val) static int read_htimedeltah(CPURISCVState *env, int csrno, target_ulong *v= al) { if (!env->rdtime_fn) { - return -1; + return -RISCV_EXCP_ILLEGAL_INST; } =20 *val =3D env->htimedelta >> 32; @@ -1030,7 +1030,7 @@ static int read_htimedeltah(CPURISCVState *env, int c= srno, target_ulong *val) static int write_htimedeltah(CPURISCVState *env, int csrno, target_ulong v= al) { if (!env->rdtime_fn) { - return -1; + return -RISCV_EXCP_ILLEGAL_INST; } =20 env->htimedelta =3D deposit64(env->htimedelta, 32, 32, (uint64_t)val); @@ -1228,18 +1228,18 @@ int riscv_csrrw(CPURISCVState *env, int csrno, targ= et_ulong *ret_value, =20 if ((write_mask && read_only) || (!env->debugger && (effective_priv < get_field(csrno, 0x300)))) { - return -1; + return -RISCV_EXCP_ILLEGAL_INST; } #endif =20 /* ensure the CSR extension is enabled. */ if (!cpu->cfg.ext_icsr) { - return -1; + return -RISCV_EXCP_ILLEGAL_INST; } =20 /* check predicate */ if (!csr_ops[csrno].predicate || csr_ops[csrno].predicate(env, csrno) = < 0) { - return -1; + return -RISCV_EXCP_ILLEGAL_INST; } =20 /* execute combined read/write operation if it exists */ @@ -1249,7 +1249,7 @@ int riscv_csrrw(CPURISCVState *env, int csrno, target= _ulong *ret_value, =20 /* if no accessor exists then return failure */ if (!csr_ops[csrno].read) { - return -1; + return -RISCV_EXCP_ILLEGAL_INST; } =20 /* read old value */ diff --git a/target/riscv/op_helper.c b/target/riscv/op_helper.c index 4b64bfe7d2..948d204793 100644 --- a/target/riscv/op_helper.c +++ b/target/riscv/op_helper.c @@ -43,8 +43,10 @@ target_ulong helper_csrrw(CPURISCVState *env, target_ulo= ng src, target_ulong csr) { target_ulong val =3D 0; - if (riscv_csrrw(env, csr, &val, src, -1) < 0) { - riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); + int ret =3D riscv_csrrw(env, csr, &val, src, -1); + + if (ret < 0) { + riscv_raise_exception(env, -ret, GETPC()); } return val; } @@ -53,8 +55,10 @@ target_ulong helper_csrrs(CPURISCVState *env, target_ulo= ng src, target_ulong csr, target_ulong rs1_pass) { target_ulong val =3D 0; - if (riscv_csrrw(env, csr, &val, -1, rs1_pass ? src : 0) < 0) { - riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); + int ret =3D riscv_csrrw(env, csr, &val, -1, rs1_pass ? src : 0); + + if (ret < 0) { + riscv_raise_exception(env, -ret, GETPC()); } return val; } @@ -63,8 +67,10 @@ target_ulong helper_csrrc(CPURISCVState *env, target_ulo= ng src, target_ulong csr, target_ulong rs1_pass) { target_ulong val =3D 0; - if (riscv_csrrw(env, csr, &val, 0, rs1_pass ? src : 0) < 0) { - riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); + int ret =3D riscv_csrrw(env, csr, &val, 0, rs1_pass ? src : 0); + + if (ret < 0) { + riscv_raise_exception(env, -ret, GETPC()); } return val; } --=20 2.27.0 From nobody Mon May 6 08:59:59 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zohomail.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=1597260441; cv=none; d=zohomail.com; s=zohoarc; b=hIxQZTObNw6QqtO+TmDdFtmtEWe332Zyaec04cAQR4zd6e9dQPFSBccWwNbUFXApS7gJ8AUD2eVpbEAw175BCmIJqy8eNA/LHk0qSgqWv3sjw/efjrx/EYN6FuBoNyNtGSp74n4VQZnu9wok9GuYrSUYoMdiLh9G7Y8q7iBH8oE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597260441; 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=2n0Ryto/SK8pghL1lK2JKgkj261lOZyHb8cB6t0P6a4=; b=nGWzl6SWyrX+0z7aT+l2zKh5vWipAq5s92txTlMrFftcIJmlyjm0RB/6KIIgyFap2UnTnRkIzI0Bv+UZ4xNzhDdM6rNfY5afbhwoRB9NTF6Gm8iTrMoz1v1wWpcRo0+mjCuMdS4vb/+6fXWM+IDVz1FzTY8OmnZFkIf1SaLHg3o= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zohomail.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 1597260441414701.010710192669; Wed, 12 Aug 2020 12:27:21 -0700 (PDT) Received: from localhost ([::1]:51558 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k5wPA-0003HR-1o for importer@patchew.org; Wed, 12 Aug 2020 15:27:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59696) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5wLp-0005cF-G1; Wed, 12 Aug 2020 15:23:53 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:4839) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5wLn-0000UI-9S; Wed, 12 Aug 2020 15:23:53 -0400 Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 13 Aug 2020 03:23:50 +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; 12 Aug 2020 12:10:58 -0700 Received: from jbfyk72.ad.shared (HELO risc6-mainframe.hgst.com) ([10.86.59.14]) by uls-op-cesaip01.wdc.com with ESMTP; 12 Aug 2020 12:23: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=1597260231; x=1628796231; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=BuOfiM/OU52r4knOKjUz3UQYvDD2kDuwYjolVILgcEI=; b=AW5b4yx/OnmKswED2uOGkhjmNiMVrUpv0NwFYehNBAT52x6GRkjp7h3v sh6LX96SuKe5bMWWm+jdGYLgcY19NfxmKIg1Fn2OoDLuS8fyTARNTxBt8 Vb1aWLFBJIaU1jLzNkG+KejXhV/JsO3xs7usORcqhhCCqziuugzOAc/SH wDrF1cxImHn02mdCMB2kXxCiNtvzlmaW9c7mWE4HQwHxMypOqihGu2XA+ auAOOiUBOkyY8goiZUXpVB6XlftBK95FngNC/qj0IRscrnsjSZ57SQOaE JS32QYbzIPKVLNaBBd7b4052fJq7yqGVcXOcV6KDTuehBYi5W0OF1npC/ g==; IronPort-SDR: jQzqo6DgGz9c313vIUJvXNtZtjHJA51xCXiTLHmNEcslQlcEhZeRXRFqzDwbGmqW4yzcTtX494 O1nCpGejfoXXm2Uq3ZotYAGMSssKVX2Hh4pQ3qNJBbYx7pFaVDLY4Ql0Q4lgJY6J4DvYxe3dww qEPsFowE5D8oyf0XsdkbP1/3IPGw2g7MujxhcFtfKVKRBAo48YrYQtnbAbLjxZccyTeic3+SLA iux8rmor9EPtOclMRUNWEqpPhlT7yT17B7V5i94EDjgS3DmLWtcwAmKkuA0/emebEhCHn8WK9A 6m8= X-IronPort-AV: E=Sophos;i="5.76,305,1592841600"; d="scan'208";a="146029221" IronPort-SDR: gy2ANP8+iVX0CdQtuVr2+cUm+Ypkq3aWdUjbNyRIVFYOogoy8PER6vNWlx8ftXUV5VX6I6jtf7 O3VwNIyvTRxw== IronPort-SDR: F9e/grkYiS0PNEzyoOMVTqu7JodKEFO71uxfwtli+2NoWN5URq0irfTZHlD0EahP1RZqtNH6dT SefkgIgscZgw== WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v3 13/13] target/riscv: Support the Virtual Instruction fault Date: Wed, 12 Aug 2020 12:13:49 -0700 Message-Id: <4c744dce9b0b057cbb5cc0f4d4ac75cda682a8af.1597259519.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=216.71.154.45; envelope-from=prvs=486123ee4=alistair.francis@wdc.com; helo=esa6.hgst.iphmx.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/12 15:23:20 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: alistair.francis@wdc.com, anup.patel@wdc.com, palmer@dabbelt.com, alistair23@gmail.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_bits.h | 6 +++ target/riscv/helper.h | 1 + target/riscv/csr.c | 64 ++++++++++++++++++++++++- target/riscv/insn_trans/trans_rvh.inc.c | 2 +- target/riscv/op_helper.c | 42 ++++++++++++++-- 5 files changed, 109 insertions(+), 6 deletions(-) diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h index d88e2ea30d..bd36062877 100644 --- a/target/riscv/cpu_bits.h +++ b/target/riscv/cpu_bits.h @@ -461,6 +461,11 @@ #define HSTATUS_WPRI HSTATUS64_WPRI #endif =20 +#define HCOUNTEREN_CY (1 << 0) +#define HCOUNTEREN_TM (1 << 1) +#define HCOUNTEREN_IR (1 << 2) +#define HCOUNTEREN_HPM3 (1 << 3) + /* Privilege modes */ #define PRV_U 0 #define PRV_S 1 @@ -553,6 +558,7 @@ #define RISCV_EXCP_STORE_PAGE_FAULT 0xf /* since: priv-1.10.0= */ #define RISCV_EXCP_INST_GUEST_PAGE_FAULT 0x14 #define RISCV_EXCP_LOAD_GUEST_ACCESS_FAULT 0x15 +#define RISCV_EXCP_VIRT_INSTRUCTION_FAULT 0x16 #define RISCV_EXCP_STORE_GUEST_AMO_ACCESS_FAULT 0x17 =20 #define RISCV_EXCP_INT_FLAG 0x80000000 diff --git a/target/riscv/helper.h b/target/riscv/helper.h index c8029d83f9..4b690147fb 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -80,6 +80,7 @@ DEF_HELPER_1(tlb_flush, void, env) /* Hypervisor functions */ #ifndef CONFIG_USER_ONLY DEF_HELPER_1(hyp_tlb_flush, void, env) +DEF_HELPER_1(hyp_gvma_tlb_flush, void, env) DEF_HELPER_4(hyp_load, tl, env, tl, tl, tl) DEF_HELPER_5(hyp_store, void, env, tl, tl, tl, tl) DEF_HELPER_4(hyp_x_load, tl, env, tl, tl, tl) diff --git a/target/riscv/csr.c b/target/riscv/csr.c index 197ce97e95..200001de74 100644 --- a/target/riscv/csr.c +++ b/target/riscv/csr.c @@ -75,6 +75,61 @@ static int ctr(CPURISCVState *env, int csrno) /* The Counters extensions is not enabled */ return -RISCV_EXCP_ILLEGAL_INST; } + + if (riscv_cpu_virt_enabled(env)) { + switch (csrno) { + case CSR_CYCLE: + if (!get_field(env->hcounteren, HCOUNTEREN_CY) && + get_field(env->mcounteren, HCOUNTEREN_CY)) { + return -RISCV_EXCP_VIRT_INSTRUCTION_FAULT; + } + break; + case CSR_TIME: + if (!get_field(env->hcounteren, HCOUNTEREN_TM) && + get_field(env->mcounteren, HCOUNTEREN_TM)) { + return -RISCV_EXCP_VIRT_INSTRUCTION_FAULT; + } + break; + case CSR_INSTRET: + if (!get_field(env->hcounteren, HCOUNTEREN_IR) && + get_field(env->mcounteren, HCOUNTEREN_IR)) { + return -RISCV_EXCP_VIRT_INSTRUCTION_FAULT; + } + break; + case CSR_HPMCOUNTER3...CSR_HPMCOUNTER31: + if (!get_field(env->hcounteren, 1 << (csrno - CSR_HPMCOUNTER3)= ) && + get_field(env->mcounteren, 1 << (csrno - CSR_HPMCOUNTER3))= ) { + return -RISCV_EXCP_VIRT_INSTRUCTION_FAULT; + } + break; +#if defined(TARGET_RISCV32) + case CSR_CYCLEH: + if (!get_field(env->hcounteren, HCOUNTEREN_CY) && + get_field(env->mcounteren, HCOUNTEREN_CY)) { + return -RISCV_EXCP_VIRT_INSTRUCTION_FAULT; + } + break; + case CSR_TIMEH: + if (!get_field(env->hcounteren, HCOUNTEREN_TM) && + get_field(env->mcounteren, HCOUNTEREN_TM)) { + return -RISCV_EXCP_VIRT_INSTRUCTION_FAULT; + } + break; + case CSR_INSTRETH: + if (!get_field(env->hcounteren, HCOUNTEREN_IR) && + get_field(env->mcounteren, HCOUNTEREN_IR)) { + return -RISCV_EXCP_VIRT_INSTRUCTION_FAULT; + } + break; + case CSR_HPMCOUNTER3H...CSR_HPMCOUNTER31H: + if (!get_field(env->hcounteren, 1 << (csrno - CSR_HPMCOUNTER3H= )) && + get_field(env->mcounteren, 1 << (csrno - CSR_HPMCOUNTER3H)= )) { + return -RISCV_EXCP_VIRT_INSTRUCTION_FAULT; + } + break; +#endif + } + } #endif return 0; } @@ -98,6 +153,8 @@ static int hmode(CPURISCVState *env, int csrno) if ((env->priv =3D=3D PRV_S && !riscv_cpu_virt_enabled(env)) || env->priv =3D=3D PRV_M) { return 0; + } else { + return -RISCV_EXCP_VIRT_INSTRUCTION_FAULT; } } =20 @@ -340,6 +397,7 @@ static const target_ulong delegable_excps =3D (1ULL << (RISCV_EXCP_STORE_PAGE_FAULT)) | (1ULL << (RISCV_EXCP_INST_GUEST_PAGE_FAULT)) | (1ULL << (RISCV_EXCP_LOAD_GUEST_ACCESS_FAULT)) | + (1ULL << (RISCV_EXCP_VIRT_INSTRUCTION_FAULT)) | (1ULL << (RISCV_EXCP_STORE_GUEST_AMO_ACCESS_FAULT)); static const target_ulong sstatus_v1_10_mask =3D SSTATUS_SIE | SSTATUS_SPI= E | SSTATUS_UIE | SSTATUS_UPIE | SSTATUS_SPP | SSTATUS_FS | SSTATUS_XS | @@ -1238,9 +1296,13 @@ int riscv_csrrw(CPURISCVState *env, int csrno, targe= t_ulong *ret_value, } =20 /* check predicate */ - if (!csr_ops[csrno].predicate || csr_ops[csrno].predicate(env, csrno) = < 0) { + if (!csr_ops[csrno].predicate) { return -RISCV_EXCP_ILLEGAL_INST; } + ret =3D csr_ops[csrno].predicate(env, csrno); + if (ret < 0) { + return ret; + } =20 /* execute combined read/write operation if it exists */ if (csr_ops[csrno].op) { diff --git a/target/riscv/insn_trans/trans_rvh.inc.c b/target/riscv/insn_tr= ans/trans_rvh.inc.c index db650ae62a..881c9ef4d2 100644 --- a/target/riscv/insn_trans/trans_rvh.inc.c +++ b/target/riscv/insn_trans/trans_rvh.inc.c @@ -360,7 +360,7 @@ static bool trans_hfence_gvma(DisasContext *ctx, arg_sf= ence_vma *a) { REQUIRE_EXT(ctx, RVH); #ifndef CONFIG_USER_ONLY - gen_helper_hyp_tlb_flush(cpu_env); + gen_helper_hyp_gvma_tlb_flush(cpu_env); return true; #endif return false; diff --git a/target/riscv/op_helper.c b/target/riscv/op_helper.c index 948d204793..9b9ada45a9 100644 --- a/target/riscv/op_helper.c +++ b/target/riscv/op_helper.c @@ -94,6 +94,11 @@ target_ulong helper_sret(CPURISCVState *env, target_ulon= g cpu_pc_deb) riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); } =20 + if (riscv_has_ext(env, RVH) && riscv_cpu_virt_enabled(env) && + get_field(env->hstatus, HSTATUS_VTSR)) { + riscv_raise_exception(env, RISCV_EXCP_VIRT_INSTRUCTION_FAULT, GETP= C()); + } + mstatus =3D env->mstatus; =20 if (riscv_has_ext(env, RVH) && !riscv_cpu_virt_enabled(env)) { @@ -176,7 +181,7 @@ void helper_wfi(CPURISCVState *env) if ((env->priv =3D=3D PRV_S && get_field(env->mstatus, MSTATUS_TW)) || riscv_cpu_virt_enabled(env)) { - riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); + riscv_raise_exception(env, RISCV_EXCP_VIRT_INSTRUCTION_FAULT, GETP= C()); } else { cs->halted =3D 1; cs->exception_index =3D EXCP_HLT; @@ -191,6 +196,9 @@ void helper_tlb_flush(CPURISCVState *env) (env->priv =3D=3D PRV_S && get_field(env->mstatus, MSTATUS_TVM))) { riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); + } else if (riscv_has_ext(env, RVH) && riscv_cpu_virt_enabled(env) && + get_field(env->hstatus, HSTATUS_VTVM)) { + riscv_raise_exception(env, RISCV_EXCP_VIRT_INSTRUCTION_FAULT, GETP= C()); } else { tlb_flush(cs); } @@ -200,6 +208,10 @@ void helper_hyp_tlb_flush(CPURISCVState *env) { CPUState *cs =3D env_cpu(env); =20 + if (env->priv =3D=3D PRV_S && riscv_cpu_virt_enabled(env)) { + riscv_raise_exception(env, RISCV_EXCP_VIRT_INSTRUCTION_FAULT, GETP= C()); + } + if (env->priv =3D=3D PRV_M || (env->priv =3D=3D PRV_S && !riscv_cpu_virt_enabled(env))) { tlb_flush(cs); @@ -209,6 +221,16 @@ void helper_hyp_tlb_flush(CPURISCVState *env) riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); } =20 +void helper_hyp_gvma_tlb_flush(CPURISCVState *env) +{ + if (env->priv =3D=3D PRV_S && !riscv_cpu_virt_enabled(env) && + get_field(env->mstatus, MSTATUS_TVM)) { + riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); + } + + helper_hyp_tlb_flush(env); +} + target_ulong helper_hyp_load(CPURISCVState *env, target_ulong address, target_ulong attrs, target_ulong memop) { @@ -251,7 +273,11 @@ target_ulong helper_hyp_load(CPURISCVState *env, targe= t_ulong address, return pte; } =20 - riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); + if (riscv_cpu_virt_enabled(env)) { + riscv_raise_exception(env, RISCV_EXCP_VIRT_INSTRUCTION_FAULT, GETP= C()); + } else { + riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); + } return 0; } =20 @@ -289,7 +315,11 @@ void helper_hyp_store(CPURISCVState *env, target_ulong= address, return; } =20 - riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); + if (riscv_cpu_virt_enabled(env)) { + riscv_raise_exception(env, RISCV_EXCP_VIRT_INSTRUCTION_FAULT, GETP= C()); + } else { + riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); + } } =20 target_ulong helper_hyp_x_load(CPURISCVState *env, target_ulong address, @@ -319,7 +349,11 @@ target_ulong helper_hyp_x_load(CPURISCVState *env, tar= get_ulong address, return pte; } =20 - riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); + if (riscv_cpu_virt_enabled(env)) { + riscv_raise_exception(env, RISCV_EXCP_VIRT_INSTRUCTION_FAULT, GETP= C()); + } else { + riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); + } return 0; } =20 --=20 2.27.0