From nobody Mon Apr 29 11:47:11 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=1603896936; cv=none; d=zohomail.com; s=zohoarc; b=IxN2rypCb0ySFz2vNu7OM9tf46XeR9TOEiRZD4bnVAQ9JvlZAPaFFMeHt8yLTABXLe9Tsoq02Csjkg2AnvnOSwzFNKtXMOL/58NwEqGtpefA9FXR+SaleyvIFTjNdVHjOiT5Cjfj+64YNpx91BUY1qN8sk3GXJ+syJFD6MUUxqU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1603896936; 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=UqFGF0R4rqmnfz7ZsZOh/AulEwbfqrtrGd0L4Oefxtk=; b=FYddkDysTTuzUeSvnBU4EHawAdEwRx06dAuRCuDoRPCD1GwYW1rQTDkCQLn1IjRVlhFBOEpH0mTjvWFfgMDbFara81k+K1Rx/BtpRg/Vf/AYaJD+mrYHS+/ExqpaIYg2MS5h+1ZbW/uuOHo4EKljuGjLMkinFXkgNqGOvqyh6X4= 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 1603896936751166.84738230503956; Wed, 28 Oct 2020 07:55:36 -0700 (PDT) Received: from localhost ([::1]:35586 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kXmrP-0003Sz-1j for importer@patchew.org; Wed, 28 Oct 2020 10:55:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38492) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXmpi-0001mO-5d; Wed, 28 Oct 2020 10:53:50 -0400 Received: from esa5.hgst.iphmx.com ([216.71.153.144]:10513) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXmpf-00035l-Mq; Wed, 28 Oct 2020 10:53:49 -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; 28 Oct 2020 22:53:45 +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; 28 Oct 2020 07:38:55 -0700 Received: from usa003000.ad.shared (HELO risc6-mainframe.hgst.com) ([10.86.60.131]) by uls-op-cesaip01.wdc.com with ESMTP; 28 Oct 2020 07:53: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=1603896827; x=1635432827; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=1m/uJoL+53mnBQz9EVIpdmTHpWP0VnXUqGjtcq/apck=; b=n80A/y59H/ARwEkKP1qXs4KWJB1o5heKNUzJkXf8EIWZM8J4pfum5yK0 Zc3Of5EB5CtaSPlye0R6wv3QqXYLH3J0NRqaB1oxZGGFKAdHF6zv6d0g+ 8QCZKErO30hT5B139Mag283zPrkoz0P30rkS5yvvF55Nbu1nAXJkC80LA 1rIwuvUZFkcKzCvIrPsWi06OcDKpiDcr0ftv93QSOb/s3h9GcnyczUEwt OLi/HslRrp11jCz1hUd3wy2LVRuw7558TUYr9cQTGfhMU1z2Rb/vAW4RN mIEH8druF7sqeyOWoycnH/N2I+XPB/h0951brUJeaAb7LQrXC3YKUwKp7 A==; IronPort-SDR: 8udSw06UGFWoPsjxlHJpJ0uJhPCC2syDuTCnvdWB2r4+wKKcTl41WjW9gbhLiw4J7TDbyu21CK 1EFRRGmsb61cAWHo0195TWjduK8LbNCZSFA4yzq39QoLuljSJsoqSnBojMBTR/5AVtxsL9mHfx TkQbn7c1frlOs7MWdZL3caLCVsvAhNU7MUl8mqSI7tgBadZIm+Ob5qOhhRzQrTDkkiAOa5zvW3 pblBHizttmFithiLcSraQAt4OELq+8igg/o8tXCEhH/QdtoM9V8jETFj9YASPqkG49VmciEJG5 dok= X-IronPort-AV: E=Sophos;i="5.77,426,1596470400"; d="scan'208";a="151200363" IronPort-SDR: fh8lP5nth2vCp8GKJNJXxuH7Xz4BtD0v6QUZnssKtR8dEoxXE2vVLXdZCfsVbpFl2h43TiUiKi xtB14UaLEA9AHDB7tPh2fqASGxRlUsX/pNmm4CoeSu1un3+zKuqzMEPTuUvVONBUWmtc1VRgeZ /+KcAdwlCwVHLTr7E0E6nx7eKX/crxppJ+ad67zqyoJequg1JX72klNsYky7sMYWrgezmhkjfN m7tE7iw39JbL1W85+JjFHRuwaNgN6KTmTZhZNhrvpsfRa2hQ4bphOovV2mIpFs7htCUfQ/bDYb xkeeuAYffucymrfIcOWAWmG/ IronPort-SDR: iwf4uBidU2hz+jSOULmo4t82ScoJIbYFCa4BXbcO3CCsiVfBQqqAyGqDv8hPfzM+ek7aaoclpZ c4g4E57Xb/nDmI5tmHtdjKDdgTd3QxTeXVOMZuyvBrjXtpfG6qwQO8SYzPGQqYS4nLqdyHjfKC xTAnfEKqTAtsnLIlYEQbZffyNPLqv3ZUZW1ipFAGI3vuuJtJm7zM+Ru8xPRwOT25f00rNN6AXc cOEz4IZ+UYfccvHokVNYFAF4VAoB0fCOcxfI9hJVpe4uYpC0tosz+l6fZH18HOrgz40uAYv1HY vWk= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 1/5] target/riscv: Add a virtualised MMU Mode Date: Wed, 28 Oct 2020 07:42:20 -0700 Message-Id: X-Mailer: git-send-email 2.28.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.153.144; envelope-from=prvs=563b96974=alistair.francis@wdc.com; helo=esa5.hgst.iphmx.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/10/28 10:53:43 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 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, richard.henderson@linaro.org, bmeng.cn@gmail.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" Add a new MMU mode that includes the current virt mode. Signed-off-by: Alistair Francis --- target/riscv/cpu-param.h | 10 +++++++++- target/riscv/cpu.h | 4 +++- target/riscv/cpu_helper.c | 6 +++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/target/riscv/cpu-param.h b/target/riscv/cpu-param.h index 664fc1d371..0db6e23140 100644 --- a/target/riscv/cpu-param.h +++ b/target/riscv/cpu-param.h @@ -18,6 +18,14 @@ # define TARGET_VIRT_ADDR_SPACE_BITS 32 /* sv32 */ #endif #define TARGET_PAGE_BITS 12 /* 4 KiB Pages */ -#define NB_MMU_MODES 4 +/* + * The current MMU Modes are: + * - U mode 0b000 + * - S mode 0b001 + * - M mode 0b011 + * - HU mode 0b100 + * - HS mode 0b101 + */ +#define NB_MMU_MODES 6 =20 #endif diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 87b68affa8..5d8e54c426 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -363,7 +363,9 @@ void QEMU_NORETURN riscv_raise_exception(CPURISCVState = *env, target_ulong riscv_cpu_get_fflags(CPURISCVState *env); void riscv_cpu_set_fflags(CPURISCVState *env, target_ulong); =20 -#define TB_FLAGS_MMU_MASK 3 +#define TB_FLAGS_MMU_MASK 7 +#define TB_FLAGS_PRIV_MMU_MASK 3 +#define TB_FLAGS_PRIV_HYP_ACCESS_MASK (1 << 2) #define TB_FLAGS_MSTATUS_FS MSTATUS_FS =20 typedef CPURISCVState CPUArchState; diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 3eb3a034db..453e4c6d8a 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -30,6 +30,10 @@ int riscv_cpu_mmu_index(CPURISCVState *env, bool ifetch) #ifdef CONFIG_USER_ONLY return 0; #else + if (riscv_cpu_virt_enabled(env)) { + return env->priv | TB_FLAGS_PRIV_HYP_ACCESS_MASK; + } + return env->priv; #endif } @@ -323,7 +327,7 @@ static int get_physical_address(CPURISCVState *env, hwa= ddr *physical, * (riscv_cpu_do_interrupt) is correct */ MemTxResult res; MemTxAttrs attrs =3D MEMTXATTRS_UNSPECIFIED; - int mode =3D mmu_idx; + int mode =3D mmu_idx & TB_FLAGS_PRIV_MMU_MASK; bool use_background =3D false; =20 /* --=20 2.28.0 From nobody Mon Apr 29 11:47:11 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=1603897075; cv=none; d=zohomail.com; s=zohoarc; b=MzL/BMdw7FOXxiLsPBv4pNxj27zwspT3GgcDzjytl3e/Ex7PPIhi9EocHVVdePHirTa/L/dQ3j1rhtFYNgL9FLP6sO5q85VhLs0x0cFjMdFDvYxNtzGG/gcE9yv5+bmzAphdgMOwAR+5ua6YaJalHewVahSuBPWe6B3ZIGreOmk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1603897075; 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=lkuTDBrzgcyQItCXOM4w+hX4mgKGB+6gGyARz+/1c8U=; b=lNB7OmEEsCGJsFpmnLYcrkcG+fOeprFuC1TqEAcFFMJEuvbNr6e28F3i1lFmgbjX+jdMHjYU3cU+TUJyZO0Xq43jL1j7lPJzSqSo1gfNdd6cjszaTQ7u+r+fjDwU58cfLyKm2wyfcIdRD/BoY2tXkL0tqNJFjzXoIFPrWvaGNkg= 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 1603897075957642.5149979979482; Wed, 28 Oct 2020 07:57:55 -0700 (PDT) Received: from localhost ([::1]:42732 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kXmte-0006RD-Qb for importer@patchew.org; Wed, 28 Oct 2020 10:57:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38514) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXmpk-0001ng-8B; Wed, 28 Oct 2020 10:53:52 -0400 Received: from esa5.hgst.iphmx.com ([216.71.153.144]:10516) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXmpi-00036U-Bv; Wed, 28 Oct 2020 10:53:51 -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; 28 Oct 2020 22:53:48 +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; 28 Oct 2020 07:38:58 -0700 Received: from usa003000.ad.shared (HELO risc6-mainframe.hgst.com) ([10.86.60.131]) by uls-op-cesaip01.wdc.com with ESMTP; 28 Oct 2020 07:53: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=1603896830; x=1635432830; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=1d/Pc82dQ4fgFa8gXxhoCsb7iNK2pBewRrK+00Mlt+o=; b=RLMvOGp+QbaxJqy+/5jyp4XU5iC/cTtS4kXNP4R+5YlUN+LmYHYoAZOy sXe66Vh2AKZhBZXEeOW0+nFeqwey5ujtQKPfphRv5niFEqHOZZGTURZDS Dt4Q4OavxZ+QYU/f282oNpQ3Efr7x73r5e+tgTPBaKjj9X7OYBTK++Z9W qOYUbcOBGONqd1GDpR8AXv2P/vxH2uWdrxbxaAtpfX9N+Y7d9mNWcytYP FAOcEeUpbj0SltaxtK8muI6kkoDGnAe/8IQeBcBLf91qbHGrvYEoAdsbc qlqC6saybPSUmixC0OA3NiZJDjqgENXJxaUAP4PCpNeYhRCV0mujiqkaW Q==; IronPort-SDR: Y7Abz3bGNl4wgbLgtaodAF0oJNSzakfY7nBPHDiZBWvZRotCmXKiXPr7yA814QXhcVcNyMBBn8 jWUbwBh1omUaDzEXUzMswZtETOi4NAGZ0JhHz0KG7jCVIBHiB8jvZJqF8Y0NnXAmQaA+oWY1TF scrv0LMxdlbJbc6oBR6gUrS8qBzAgCnLN7ubGfd0RsBE0/QaBjmR3QdR4DJMbLReCebCGgXXcY MkY9lBG1J0/zbncV2DJaNBwzH8faenfucLloDQhDFi/P9TGR9kKQmQ63UVk8cGuLQnkWHEuTgX fFM= X-IronPort-AV: E=Sophos;i="5.77,426,1596470400"; d="scan'208";a="151200379" IronPort-SDR: YjVpCiR/xMkcwzDB45HPiOd316SuKqF22VwXfuXxI1Ly48SXpqXWk5Jm+9do/fgeo91BEWun0s Cb0aUsO5gpd4Tu/fYOC3gfBtfLmqghiHGeMif8DJnJ0z7HyFWdsl+fM2RKOu5p35/q31atPP2o qbLtNbqKmarEp369dmrQOksXYtBbQulZJLv9N7QmVZB2ZiH2mT+oQbOOkTGODaZ2dthc+NdB6C 5+SQRNg2YzEXrQbIRSCynSapiMZrP/oTqiy4cm+RHTjzfGTcRTBRAEoQTi/BVYz0Bc5rP1nHYX L1F8GnCXxn8WPcTy9vWkrT7v IronPort-SDR: zzoOC2sZNKh9S/ZA3v3cgCTF6zN0aIqRqydjTLlcGjXnGQRYuxp0pPQkn/a4f4x3nSZHfhDrrw Dh4Sr3sZGkhDhi5iomAq+h1RsMAU3e/6OLKbcMrIPOkVqLHqHzX/wiw+YrO8wIHTtY6OqnuUMY a0BaQVDwS4tqs1Ah1YZNjFYpzIuMOnXBFjpHT9qp1VuATcmkO0U6fs+t+92ZHBKvgYMT3B2wjf 5iEbUO+gLQFPym/he3xm1XflWCrLO2DTostM03jjtq+kTM9F0J2IRQqX0wDa3Eo9XECFWBkYgj q1w= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 2/5] target/riscv: Set the virtualised MMU mode when doing hyp accesses Date: Wed, 28 Oct 2020 07:42:23 -0700 Message-Id: <3f5666c9eb72758011c14a660de99ba86a0b6561.1603896075.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.28.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.153.144; envelope-from=prvs=563b96974=alistair.francis@wdc.com; helo=esa5.hgst.iphmx.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/10/28 10:53:43 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 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, richard.henderson@linaro.org, bmeng.cn@gmail.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 the hypervisor load/store operations set the MMU mode to indicate that we are virtualised. Signed-off-by: Alistair Francis Reviewed-by: Richard Henderson --- target/riscv/op_helper.c | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/target/riscv/op_helper.c b/target/riscv/op_helper.c index e20d56dcb8..548c5851ec 100644 --- a/target/riscv/op_helper.c +++ b/target/riscv/op_helper.c @@ -235,30 +235,31 @@ target_ulong helper_hyp_load(CPURISCVState *env, targ= et_ulong address, (env->priv =3D=3D PRV_U && !riscv_cpu_virt_enabled(env) && get_field(env->hstatus, HSTATUS_HU))) { target_ulong pte; + int mmu_idx =3D cpu_mmu_index(env, false) | TB_FLAGS_PRIV_HYP_ACCE= SS_MASK; =20 riscv_cpu_set_two_stage_lookup(env, true); =20 switch (memop) { case MO_SB: - pte =3D cpu_ldsb_data_ra(env, address, GETPC()); + pte =3D cpu_ldsb_mmuidx_ra(env, address, mmu_idx, GETPC()); break; case MO_UB: - pte =3D cpu_ldub_data_ra(env, address, GETPC()); + pte =3D cpu_ldub_mmuidx_ra(env, address, mmu_idx, GETPC()); break; case MO_TESW: - pte =3D cpu_ldsw_data_ra(env, address, GETPC()); + pte =3D cpu_ldsw_mmuidx_ra(env, address, mmu_idx, GETPC()); break; case MO_TEUW: - pte =3D cpu_lduw_data_ra(env, address, GETPC()); + pte =3D cpu_lduw_mmuidx_ra(env, address, mmu_idx, GETPC()); break; case MO_TESL: - pte =3D cpu_ldl_data_ra(env, address, GETPC()); + pte =3D cpu_ldl_mmuidx_ra(env, address, mmu_idx, GETPC()); break; case MO_TEUL: - pte =3D cpu_ldl_data_ra(env, address, GETPC()); + pte =3D cpu_ldl_mmuidx_ra(env, address, mmu_idx, GETPC()); break; case MO_TEQ: - pte =3D cpu_ldq_data_ra(env, address, GETPC()); + pte =3D cpu_ldq_mmuidx_ra(env, address, mmu_idx, GETPC()); break; default: g_assert_not_reached(); @@ -284,23 +285,25 @@ void helper_hyp_store(CPURISCVState *env, target_ulon= g address, (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))) { + int mmu_idx =3D cpu_mmu_index(env, false) | TB_FLAGS_PRIV_HYP_ACCE= SS_MASK; + riscv_cpu_set_two_stage_lookup(env, true); =20 switch (memop) { case MO_SB: case MO_UB: - cpu_stb_data_ra(env, address, val, GETPC()); + cpu_stb_mmuidx_ra(env, address, val, mmu_idx, GETPC()); break; case MO_TESW: case MO_TEUW: - cpu_stw_data_ra(env, address, val, GETPC()); + cpu_stw_mmuidx_ra(env, address, val, mmu_idx, GETPC()); break; case MO_TESL: case MO_TEUL: - cpu_stl_data_ra(env, address, val, GETPC()); + cpu_stl_mmuidx_ra(env, address, val, mmu_idx, GETPC()); break; case MO_TEQ: - cpu_stq_data_ra(env, address, val, GETPC()); + cpu_stq_mmuidx_ra(env, address, val, mmu_idx, GETPC()); break; default: g_assert_not_reached(); @@ -326,15 +329,16 @@ target_ulong helper_hyp_x_load(CPURISCVState *env, ta= rget_ulong address, (env->priv =3D=3D PRV_U && !riscv_cpu_virt_enabled(env) && get_field(env->hstatus, HSTATUS_HU))) { target_ulong pte; + int mmu_idx =3D cpu_mmu_index(env, false) | TB_FLAGS_PRIV_HYP_ACCE= SS_MASK; =20 riscv_cpu_set_two_stage_lookup(env, true); =20 switch (memop) { case MO_TEUW: - pte =3D cpu_lduw_data_ra(env, address, GETPC()); + pte =3D cpu_lduw_mmuidx_ra(env, address, mmu_idx, GETPC()); break; case MO_TEUL: - pte =3D cpu_ldl_data_ra(env, address, GETPC()); + pte =3D cpu_ldl_mmuidx_ra(env, address, mmu_idx, GETPC()); break; default: g_assert_not_reached(); --=20 2.28.0 From nobody Mon Apr 29 11:47:11 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=1603896940; cv=none; d=zohomail.com; s=zohoarc; b=CubYebEoczc61gynZZK5BylanxIvz8AdH0X2kzhJp5SUnNGUGBIwx5gdDdI5LEobjNNiJz7/RgsM2Z8vwbWbKUS2+K2Ap5vwGk2joQxR0Ufta9M0/gAMJC6iN/WVlRHT8LyU3KJjBIa0WTNDvsMK5AUKvIGf3sU/9CXqQ9crFes= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1603896940; 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=MfVoSPL+mbq0Tsu7Lt7pVHZxaGAvQtdfyUumPfH0TcI=; b=jael85Z987anbrWMGNOI0Q7kiC0NOeNx+Lr++Pjf4o1wBKDrBk6HIvgeMfNbgcossp8/yh0Yo57/8S5f4DnbPfGZSspjGhzuBgBfyoFmQvoXgtLFnkTA4KejcptpSFG3m8TbpLOkDRk37iQSfwbEQ7G3wOjYGhQ+d0Cl6T3G83U= 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 1603896940959429.7236338304085; Wed, 28 Oct 2020 07:55:40 -0700 (PDT) Received: from localhost ([::1]:36008 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kXmrT-0003dA-RG for importer@patchew.org; Wed, 28 Oct 2020 10:55:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38544) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXmpn-0001vm-BQ; Wed, 28 Oct 2020 10:53:55 -0400 Received: from esa5.hgst.iphmx.com ([216.71.153.144]:10516) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXmpk-00036U-VJ; Wed, 28 Oct 2020 10:53:54 -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; 28 Oct 2020 22:53:51 +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; 28 Oct 2020 07:39:00 -0700 Received: from usa003000.ad.shared (HELO risc6-mainframe.hgst.com) ([10.86.60.131]) by uls-op-cesaip02.wdc.com with ESMTP; 28 Oct 2020 07:53:51 -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=1603896832; x=1635432832; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=4fmhVEpyTKkxdBEGIbCbnfbyxKg1xJ3rFczT7p5RZD0=; b=mDBiqayRkAvwV984skf9YGIAsKpQY+XwW5iG5ancdC2QmBGaQBNIrR4U +O5XRtZ8heQiFOpn2wJVdjkLgD+uNViSKr6bpRLMNu+0+opIPN+Dd4Hwc JAAL7Hnl6Ff2OF0nX+y1w2DVz8noYU3IkAkNnncAxWIdJXBD4kdV3TbX8 28Mnt8qFtJ7RNr5IHupl4knESYYbaIl1b49jOlG1v02q8icX4vyklNTWZ 64m7EtATbEz7afVzHaZesR52+0lTzpaZdEQyoIu/e6MhCci4g12Rrt3TY cdeBNW6/Sphj/L3DE7sC3aaq1tFMvM5I+l4xGkcY9EMWurkhhy2pHXzl5 w==; IronPort-SDR: 7zQjpusSfKj82xKdmhFsh7FyKFvPbRywvDuc8evXJ7j8GMmPR1XHQR3sXBEwZlIFRqYkRC8vzH 7QC7NRkKnXxBTBiT+gLUQgIn5fRC+E4TPvx2c+YtKp962wsMErGHtcSoJuST1GMByqETy8F3+U YQU4wxKgNGYUjVYcGQOGwkDxaZWTtFGmZ0owQZjhm7g608HWGn48ZCKuxb2aFGep+J7tkPSk4p Rfv5Sndz+H4IyRppdRAczmp4idjq87BjMDubiSuAyCVlelsjY7NlVH+W/RcooassZ02vS9y/P/ pRA= X-IronPort-AV: E=Sophos;i="5.77,426,1596470400"; d="scan'208";a="151200395" IronPort-SDR: 9lcpNcthPH48wRakKWzjzZOs8DMiozI6ZpkE3OY5DwbA8/9Yad5V7W7Ombn7cgdY4/kTkwbZqZ DgKKpyeuB+LbJVUZr8i4F7aJnIot0Bk/R5vOnM2LJmeqFGO1hQvGOlPohTTOEe4EXjIf3CtsMC kR4CVi7GnvFhhq13GttPtJlb5ABQ1+R2yf7jvp2GC4LK5gas6r8eLOJcspBd3SBAoDNrcCOr+9 c9PK8EiUx9cKm1uxgT7umwdIpcRuOArsEqMyX79qV4PT9wz+RsUkJSp0X7p4NxZ8yKHTxn1lyn bdqU/uEQSCB8+xF2F5kNw3ei IronPort-SDR: zqwTBXQlofkXqsNQQNrt9fC1zLylX/o8qWTSv75CcodQXvmrFE3/TjE/lJ/DrYUcBQ85SshibP TiLgYJxIcRfY5HpTu87zF9Ol8PcTrQwzWgq+1x/DZ/2xlSUrboMD/7IA+bpm0h4RdYCEsT34kK ayJdlnB61R8agN2KbC+glkwKdjXltrMOgZGbBAk7i+bpFLG8m6hSMKEY1CsRcyvVXzFz1H+Ynn 4HrU4Yh8aKYoylcBcXpbuj7506AvSvE+KZQRKLtAmethXrU7+LY2hUo6u8e1e2vVGAWSkR3EJO h5U= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 3/5] target/riscv: Remove the HS_TWO_STAGE flag Date: Wed, 28 Oct 2020 07:42:26 -0700 Message-Id: <93215b3e15ba7f908eae44885d466dd7e9378b59.1603896075.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.28.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.153.144; envelope-from=prvs=563b96974=alistair.francis@wdc.com; helo=esa5.hgst.iphmx.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/10/28 10:53:43 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 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, richard.henderson@linaro.org, bmeng.cn@gmail.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" The HS_TWO_STAGE flag is no longer required as the MMU index contains the information if we are performing a two stage access. Signed-off-by: Alistair Francis Reviewed-by: Richard Henderson --- target/riscv/cpu.h | 3 +- target/riscv/cpu_bits.h | 1 - target/riscv/cpu_helper.c | 61 ++++++++++++++++----------------------- target/riscv/op_helper.c | 12 -------- 4 files changed, 26 insertions(+), 51 deletions(-) diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 5d8e54c426..0cf48a1521 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -323,8 +323,7 @@ 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); +bool riscv_cpu_two_stage_lookup(int mmu_idx); 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 daedad8691..24b24c69c5 100644 --- a/target/riscv/cpu_bits.h +++ b/target/riscv/cpu_bits.h @@ -469,7 +469,6 @@ * 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 453e4c6d8a..9edf7282d9 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -211,22 +211,9 @@ 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) +bool riscv_cpu_two_stage_lookup(int mmu_idx) { - 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); + return mmu_idx & TB_FLAGS_PRIV_HYP_ACCESS_MASK; } =20 int riscv_cpu_claim_interrupts(RISCVCPU *cpu, uint32_t interrupts) @@ -337,7 +324,8 @@ static int get_physical_address(CPURISCVState *env, hwa= ddr *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= ) { + if ((!riscv_cpu_virt_enabled(env) && riscv_cpu_two_stage_lookup(mmu_id= x)) + && access_type !=3D MMU_INST_FETCH) { use_background =3D true; } =20 @@ -576,7 +564,7 @@ restart: =20 static void raise_mmu_exception(CPURISCVState *env, target_ulong address, MMUAccessType access_type, bool pmp_violat= ion, - bool first_stage) + bool first_stage, bool two_stage) { CPUState *cs =3D env_cpu(env); int page_fault_exceptions; @@ -599,8 +587,7 @@ static void raise_mmu_exception(CPURISCVState *env, tar= get_ulong address, } break; case MMU_DATA_LOAD: - if ((riscv_cpu_virt_enabled(env) || riscv_cpu_two_stage_lookup(env= )) && - !first_stage) { + if (two_stage && !first_stage) { cs->exception_index =3D RISCV_EXCP_LOAD_GUEST_ACCESS_FAULT; } else { cs->exception_index =3D page_fault_exceptions ? @@ -608,8 +595,7 @@ static void raise_mmu_exception(CPURISCVState *env, tar= get_ulong address, } break; case MMU_DATA_STORE: - if ((riscv_cpu_virt_enabled(env) || riscv_cpu_two_stage_lookup(env= )) && - !first_stage) { + if (two_stage && !first_stage) { cs->exception_index =3D RISCV_EXCP_STORE_GUEST_AMO_ACCESS_FAUL= T; } else { cs->exception_index =3D page_fault_exceptions ? @@ -700,6 +686,7 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, in= t size, int prot, prot2; bool pmp_violation =3D false; bool first_stage_error =3D true; + bool two_stage_lookup =3D false; int ret =3D TRANSLATE_FAIL; int mode =3D mmu_idx; target_ulong tlb_size =3D 0; @@ -719,11 +706,12 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, = int size, access_type !=3D MMU_INST_FETCH && get_field(env->mstatus, MSTATUS_MPRV) && get_field(env->mstatus, MSTATUS_MPV)) { - riscv_cpu_set_two_stage_lookup(env, true); + two_stage_lookup =3D true; } =20 if (riscv_cpu_virt_enabled(env) || - (riscv_cpu_two_stage_lookup(env) && access_type !=3D MMU_INST_FETC= H)) { + ((riscv_cpu_two_stage_lookup(mmu_idx) || two_stage_lookup) && + access_type !=3D MMU_INST_FETCH)) { /* Two stage lookup */ ret =3D get_physical_address(env, &pa, &prot, address, &env->guest_phys_fault_addr, access_typ= e, @@ -786,14 +774,6 @@ 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) && - get_field(env->mstatus, MSTATUS_MPV)) { - 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)) { @@ -815,7 +795,10 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, i= nt size, } else if (probe) { return false; } else { - raise_mmu_exception(env, address, access_type, pmp_violation, firs= t_stage_error); + raise_mmu_exception(env, address, access_type, pmp_violation, + first_stage_error, + riscv_cpu_virt_enabled(env) || + riscv_cpu_two_stage_lookup(mmu_idx)); riscv_raise_exception(env, cs->exception_index, retaddr); } =20 @@ -919,9 +902,16 @@ void riscv_cpu_do_interrupt(CPUState *cs) /* handle the trap in S-mode */ if (riscv_has_ext(env, RVH)) { target_ulong hdeleg =3D async ? env->hideleg : env->hedeleg; + bool two_stage_lookup =3D false; + + 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))) { + two_stage_lookup =3D true; + } =20 - if ((riscv_cpu_virt_enabled(env) || - riscv_cpu_two_stage_lookup(env)) && write_tval) { + if ((riscv_cpu_virt_enabled(env) || two_stage_lookup) && write= _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 @@ -959,11 +949,10 @@ void riscv_cpu_do_interrupt(CPUState *cs) riscv_cpu_set_force_hs_excep(env, 0); } else { /* Trap into HS mode */ - if (!riscv_cpu_two_stage_lookup(env)) { + if (!two_stage_lookup) { 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 548c5851ec..5759850e69 100644 --- a/target/riscv/op_helper.c +++ b/target/riscv/op_helper.c @@ -237,8 +237,6 @@ target_ulong helper_hyp_load(CPURISCVState *env, target= _ulong address, target_ulong pte; int mmu_idx =3D cpu_mmu_index(env, false) | TB_FLAGS_PRIV_HYP_ACCE= SS_MASK; =20 - riscv_cpu_set_two_stage_lookup(env, true); - switch (memop) { case MO_SB: pte =3D cpu_ldsb_mmuidx_ra(env, address, mmu_idx, GETPC()); @@ -265,8 +263,6 @@ target_ulong helper_hyp_load(CPURISCVState *env, target= _ulong address, g_assert_not_reached(); } =20 - riscv_cpu_set_two_stage_lookup(env, false); - return pte; } =20 @@ -287,8 +283,6 @@ void helper_hyp_store(CPURISCVState *env, target_ulong = address, get_field(env->hstatus, HSTATUS_HU))) { int mmu_idx =3D cpu_mmu_index(env, false) | TB_FLAGS_PRIV_HYP_ACCE= SS_MASK; =20 - riscv_cpu_set_two_stage_lookup(env, true); - switch (memop) { case MO_SB: case MO_UB: @@ -309,8 +303,6 @@ void helper_hyp_store(CPURISCVState *env, target_ulong = address, g_assert_not_reached(); } =20 - riscv_cpu_set_two_stage_lookup(env, false); - return; } =20 @@ -331,8 +323,6 @@ target_ulong helper_hyp_x_load(CPURISCVState *env, targ= et_ulong address, target_ulong pte; int mmu_idx =3D cpu_mmu_index(env, false) | TB_FLAGS_PRIV_HYP_ACCE= SS_MASK; =20 - riscv_cpu_set_two_stage_lookup(env, true); - switch (memop) { case MO_TEUW: pte =3D cpu_lduw_mmuidx_ra(env, address, mmu_idx, GETPC()); @@ -344,8 +334,6 @@ target_ulong helper_hyp_x_load(CPURISCVState *env, targ= et_ulong address, g_assert_not_reached(); } =20 - riscv_cpu_set_two_stage_lookup(env, false); - return pte; } =20 --=20 2.28.0 From nobody Mon Apr 29 11:47:11 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=1603896944; cv=none; d=zohomail.com; s=zohoarc; b=KECNWySOpt7ohf4YEuq2n79nm5MVUFV7+VC3yjVGQL0HdSzuXgBhZknla4IDDeDT5Jx+kdUjEDWSfMWBhGzpchdYKArkjaKomSxFqTmK1VXWB4X+k52XJteV8RRSphIaKRC+Az1+6U9X0HQbOAIIPO1fDXx9FFhBXeI9Uq08+bM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1603896944; 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=YWEHhlTYs7H9+dQgsCbVX85dPshkOtrQhwRCoQGiG3I=; b=OKrs8eDdMx1dOSQVuZSHF5bw2uFysc0Iw/RDuS2W+OEjm8rPb2DpVVH8NI9eeU7ES0H5LUAqS4YCwbdk3ms7S7KgMWAwrfbIxELsFgjjrOBV5gFjgKGSmE1rgq2l8mrO9WN8krehTsLfdjPUuV7XrHq93wupotg5rmc4t4tNAwY= 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 1603896944519539.4568630416912; Wed, 28 Oct 2020 07:55:44 -0700 (PDT) Received: from localhost ([::1]:36378 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kXmrW-0003m6-Sa for importer@patchew.org; Wed, 28 Oct 2020 10:55:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38570) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXmpq-00023P-EZ; Wed, 28 Oct 2020 10:53:58 -0400 Received: from esa5.hgst.iphmx.com ([216.71.153.144]:10520) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXmpn-00038G-GB; Wed, 28 Oct 2020 10:53:58 -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; 28 Oct 2020 22:53:54 +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; 28 Oct 2020 07:39:03 -0700 Received: from usa003000.ad.shared (HELO risc6-mainframe.hgst.com) ([10.86.60.131]) by uls-op-cesaip01.wdc.com with ESMTP; 28 Oct 2020 07:53:54 -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=1603896835; x=1635432835; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=MA3yZb5xZY5wksazZHFHCFmSDbZgG6ZtV5oqcwwv4MM=; b=R2YQx993dMumHJDWL7LSuOUogrpi1sZjwbOPMxLjgZ7IKAla8Pb6+THb dzZR2CQ5lBlCLPkzy8mkikrGU1LQ0+uxuGojAWDX2ZGCpuBqoUVSeukIT JWHKKEGdppgXBsch14M5Ard0h/lA3HSKm5KBaUxMEP0MbrG0iWyEMY/OD S/X3m1WgDQI2OlW59y6wWMgjtShqRA9HcsYqZOkKe5MI/PRMUEfHaa9Ti ikFs+Ssb3ydnmsIBytyoKt4zM+gj3BPNhyxueHPzXXyapWAVhJ0B2q/iw kgrhr8ZNUygLMVW3VdQ94T4+135g6a0GIvrZt+rkVwlfDs2X6AEChGMid w==; IronPort-SDR: 6pL8AiqHf3iv+QweqDinF+CTAb+vZNuSjqYyPz3Vx/YKK4XQzOFWQfpqeVfWeroTeqO8GgDBXZ X10cpOsPgBPb3NiN8M+N1HoMQDxn9tzluMflFUjO5BmRm35wGLdKf886T5ObBBTasNfXYXA78M I1WPzqhKJW+JWkPXEqmB3PgSgV2HIVT8Hy4z7IO0YfQ9T8SYRyBNXcEgb7o+V3F2leVrMYLdOk jy9RhQJ/q5VfxJCCmSb9s/LSmaUKELVcp6ixP8uyQenMMb3q2tJuJ9vIBz/+ErKQKngtWMhKf2 pJw= X-IronPort-AV: E=Sophos;i="5.77,426,1596470400"; d="scan'208";a="151200411" IronPort-SDR: 0yTH+YFvA/jMpIwK00VLq6/g74+jr68HeU+osGZanO7i6bMwDgj6bH/fhieNqouHRrK5FpaYSR iGYtx42YjR/KOGkKV6JEzwOonLjBq+SAHs0FVS1P+jHvm84RPA8a6oesd//Lp6cu07l44k/G30 nD+f/CSnkApSGIL3ZWoonXRHmxGIy/a0h+irLGcdSbaar+f0C3Ya+nGTEa50kQOqRUnuHlL+ku +AEPz5U2kVScusEH86U3eqZN1wMKtcmmEXWmm9i5xEf9GwWevMx39KH/vHVLsV2XTImo+wzq/K W6INN3aSEk//nqSgn5Euhxlo IronPort-SDR: 6S/4F7ZL2SwCZkpdD33pq5ZdjKg5zoPsXW6Fenq3cTXTa9ayJzR98Qhb4lwyOPrm5D57jAttrn O6MF9bisAelVRWUXZyVf6D2PBhv0nwSljzvyomSIzfC0XrWKVVoqedKzbn4rWSjXvti/54yGar YJVPAW0KSu+v/iD9kzqNyC/Rda+P1TX/z6ZcYUp0oAO9JxdREXOnQB6tHktsztlU9k9J5SMxaM X9HBsnp8+PlQEHiOONnuyf1TlsQzrUpaByEXO0gT6lWfp3xH2XhW/QIIPq8wnPMGDKdLjfSOda pu0= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 4/5] target/riscv: Remove the hyp load and store functions Date: Wed, 28 Oct 2020 07:42:29 -0700 Message-Id: <5ead43dea141994823a113a2e7f1494df12d32dd.1603896076.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.28.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.153.144; envelope-from=prvs=563b96974=alistair.francis@wdc.com; helo=esa5.hgst.iphmx.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/10/28 10:53:43 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 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, richard.henderson@linaro.org, bmeng.cn@gmail.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" Remove the special Virtulisation load and store functions and just use the standard tcg tcg_gen_qemu_ld_tl() and tcg_gen_qemu_st_tl() functions instead. As part of this change we ensure we still run an access check to make sure we can perform the operations. Signed-off-by: Alistair Francis --- target/riscv/helper.h | 3 +- target/riscv/op_helper.c | 72 +-------------- target/riscv/insn_trans/trans_rvh.c.inc | 111 +++++++----------------- 3 files changed, 35 insertions(+), 151 deletions(-) diff --git a/target/riscv/helper.h b/target/riscv/helper.h index 4b690147fb..7dbdd117d2 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -81,8 +81,7 @@ DEF_HELPER_1(tlb_flush, void, env) #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_1(hyp_access_check, void, env) DEF_HELPER_4(hyp_x_load, tl, env, tl, tl, tl) #endif =20 diff --git a/target/riscv/op_helper.c b/target/riscv/op_helper.c index 5759850e69..d81d8282cc 100644 --- a/target/riscv/op_helper.c +++ b/target/riscv/op_helper.c @@ -227,82 +227,12 @@ void helper_hyp_gvma_tlb_flush(CPURISCVState *env) helper_hyp_tlb_flush(env); } =20 -target_ulong helper_hyp_load(CPURISCVState *env, target_ulong address, - target_ulong attrs, target_ulong memop) +void helper_hyp_access_check(CPURISCVState *env) { 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; - int mmu_idx =3D cpu_mmu_index(env, false) | TB_FLAGS_PRIV_HYP_ACCE= SS_MASK; - - switch (memop) { - case MO_SB: - pte =3D cpu_ldsb_mmuidx_ra(env, address, mmu_idx, GETPC()); - break; - case MO_UB: - pte =3D cpu_ldub_mmuidx_ra(env, address, mmu_idx, GETPC()); - break; - case MO_TESW: - pte =3D cpu_ldsw_mmuidx_ra(env, address, mmu_idx, GETPC()); - break; - case MO_TEUW: - pte =3D cpu_lduw_mmuidx_ra(env, address, mmu_idx, GETPC()); - break; - case MO_TESL: - pte =3D cpu_ldl_mmuidx_ra(env, address, mmu_idx, GETPC()); - break; - case MO_TEUL: - pte =3D cpu_ldl_mmuidx_ra(env, address, mmu_idx, GETPC()); - break; - case MO_TEQ: - pte =3D cpu_ldq_mmuidx_ra(env, address, mmu_idx, GETPC()); - break; - default: - g_assert_not_reached(); - } - - return pte; - } - - 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; -} - -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))) { - int mmu_idx =3D cpu_mmu_index(env, false) | TB_FLAGS_PRIV_HYP_ACCE= SS_MASK; - - switch (memop) { - case MO_SB: - case MO_UB: - cpu_stb_mmuidx_ra(env, address, val, mmu_idx, GETPC()); - break; - case MO_TESW: - case MO_TEUW: - cpu_stw_mmuidx_ra(env, address, val, mmu_idx, GETPC()); - break; - case MO_TESL: - case MO_TEUL: - cpu_stl_mmuidx_ra(env, address, val, mmu_idx, GETPC()); - break; - case MO_TEQ: - cpu_stq_mmuidx_ra(env, address, val, mmu_idx, GETPC()); - break; - default: - g_assert_not_reached(); - } - return; } =20 diff --git a/target/riscv/insn_trans/trans_rvh.c.inc b/target/riscv/insn_tr= ans/trans_rvh.c.inc index 881c9ef4d2..79968701e9 100644 --- a/target/riscv/insn_trans/trans_rvh.c.inc +++ b/target/riscv/insn_trans/trans_rvh.c.inc @@ -22,20 +22,16 @@ static bool trans_hlv_b(DisasContext *ctx, arg_hlv_b *a) #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_helper_hyp_access_check(cpu_env); =20 gen_get_gpr(t0, a->rs1); - tcg_gen_movi_tl(mem_idx, ctx->mem_idx); - tcg_gen_movi_tl(memop, MO_SB); =20 - gen_helper_hyp_load(t1, cpu_env, t0, mem_idx, memop); + tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MAS= K, MO_SB); gen_set_gpr(a->rd, t1); =20 tcg_temp_free(t0); tcg_temp_free(t1); - tcg_temp_free(mem_idx); - tcg_temp_free(memop); return true; #else return false; @@ -48,20 +44,16 @@ static bool trans_hlv_h(DisasContext *ctx, arg_hlv_h *a) #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_helper_hyp_access_check(cpu_env); =20 gen_get_gpr(t0, a->rs1); - tcg_gen_movi_tl(mem_idx, ctx->mem_idx); - tcg_gen_movi_tl(memop, MO_TESW); =20 - gen_helper_hyp_load(t1, cpu_env, t0, mem_idx, memop); + tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MAS= K, MO_TESW); gen_set_gpr(a->rd, t1); =20 tcg_temp_free(t0); tcg_temp_free(t1); - tcg_temp_free(mem_idx); - tcg_temp_free(memop); return true; #else return false; @@ -74,20 +66,16 @@ static bool trans_hlv_w(DisasContext *ctx, arg_hlv_w *a) #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_helper_hyp_access_check(cpu_env); =20 gen_get_gpr(t0, a->rs1); - tcg_gen_movi_tl(mem_idx, ctx->mem_idx); - tcg_gen_movi_tl(memop, MO_TESL); =20 - gen_helper_hyp_load(t1, cpu_env, t0, mem_idx, memop); + tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MAS= K, MO_TESL); gen_set_gpr(a->rd, t1); =20 tcg_temp_free(t0); tcg_temp_free(t1); - tcg_temp_free(mem_idx); - tcg_temp_free(memop); return true; #else return false; @@ -100,20 +88,16 @@ static bool trans_hlv_bu(DisasContext *ctx, arg_hlv_bu= *a) #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_helper_hyp_access_check(cpu_env); =20 gen_get_gpr(t0, a->rs1); - tcg_gen_movi_tl(mem_idx, ctx->mem_idx); - tcg_gen_movi_tl(memop, MO_UB); =20 - gen_helper_hyp_load(t1, cpu_env, t0, mem_idx, memop); + tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MAS= K, MO_UB); gen_set_gpr(a->rd, t1); =20 tcg_temp_free(t0); tcg_temp_free(t1); - tcg_temp_free(mem_idx); - tcg_temp_free(memop); return true; #else return false; @@ -126,20 +110,15 @@ static bool trans_hlv_hu(DisasContext *ctx, arg_hlv_h= u *a) #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(); =20 - 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_access_check(cpu_env); =20 - gen_helper_hyp_load(t1, cpu_env, t0, mem_idx, memop); + gen_get_gpr(t0, a->rs1); + tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MAS= K, MO_TEUW); gen_set_gpr(a->rd, t1); =20 tcg_temp_free(t0); tcg_temp_free(t1); - tcg_temp_free(mem_idx); - tcg_temp_free(memop); return true; #else return false; @@ -152,20 +131,16 @@ static bool trans_hsv_b(DisasContext *ctx, arg_hsv_b = *a) #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_helper_hyp_access_check(cpu_env); =20 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); =20 - gen_helper_hyp_store(cpu_env, t0, dat, mem_idx, memop); + tcg_gen_qemu_st_tl(dat, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MA= SK, MO_SB); =20 tcg_temp_free(t0); tcg_temp_free(dat); - tcg_temp_free(mem_idx); - tcg_temp_free(memop); return true; #else return false; @@ -178,20 +153,16 @@ static bool trans_hsv_h(DisasContext *ctx, arg_hsv_h = *a) #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_helper_hyp_access_check(cpu_env); =20 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); =20 - gen_helper_hyp_store(cpu_env, t0, dat, mem_idx, memop); + tcg_gen_qemu_st_tl(dat, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MA= SK, MO_TESW); =20 tcg_temp_free(t0); tcg_temp_free(dat); - tcg_temp_free(mem_idx); - tcg_temp_free(memop); return true; #else return false; @@ -204,20 +175,16 @@ static bool trans_hsv_w(DisasContext *ctx, arg_hsv_w = *a) #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_helper_hyp_access_check(cpu_env); =20 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); =20 - gen_helper_hyp_store(cpu_env, t0, dat, mem_idx, memop); + tcg_gen_qemu_st_tl(dat, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MA= SK, MO_TESL); =20 tcg_temp_free(t0); tcg_temp_free(dat); - tcg_temp_free(mem_idx); - tcg_temp_free(memop); return true; #else return false; @@ -231,20 +198,16 @@ static bool trans_hlv_wu(DisasContext *ctx, arg_hlv_w= u *a) #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_helper_hyp_access_check(cpu_env); =20 gen_get_gpr(t0, a->rs1); - tcg_gen_movi_tl(mem_idx, ctx->mem_idx); - tcg_gen_movi_tl(memop, MO_TEUL); =20 - gen_helper_hyp_load(t1, cpu_env, t0, mem_idx, memop); + tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MAS= K, MO_TEUL); gen_set_gpr(a->rd, t1); =20 tcg_temp_free(t0); tcg_temp_free(t1); - tcg_temp_free(mem_idx); - tcg_temp_free(memop); return true; #else return false; @@ -257,20 +220,16 @@ static bool trans_hlv_d(DisasContext *ctx, arg_hlv_d = *a) #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_helper_hyp_access_check(cpu_env); =20 gen_get_gpr(t0, a->rs1); - tcg_gen_movi_tl(mem_idx, ctx->mem_idx); - tcg_gen_movi_tl(memop, MO_TEQ); =20 - gen_helper_hyp_load(t1, cpu_env, t0, mem_idx, memop); + tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MAS= K, MO_TEQ); gen_set_gpr(a->rd, t1); =20 tcg_temp_free(t0); tcg_temp_free(t1); - tcg_temp_free(mem_idx); - tcg_temp_free(memop); return true; #else return false; @@ -283,20 +242,16 @@ static bool trans_hsv_d(DisasContext *ctx, arg_hsv_d = *a) #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_helper_hyp_access_check(cpu_env); =20 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); =20 - gen_helper_hyp_store(cpu_env, t0, dat, mem_idx, memop); + tcg_gen_qemu_st_tl(dat, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MA= SK, MO_TEQ); =20 tcg_temp_free(t0); tcg_temp_free(dat); - tcg_temp_free(mem_idx); - tcg_temp_free(memop); return true; #else return false; --=20 2.28.0 From nobody Mon Apr 29 11:47:11 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=1603897128; cv=none; d=zohomail.com; s=zohoarc; b=AguerJJPl7vLgQ8Im73RjBvOLUYwpsNEGT191qX4zy9BRTn29JNnsaLYcuyu/OR7xLDLdfNWp6UlhL7BqwcUFb6uA+U0SZkD8igRSz9fWf2zT1VFKZBnRwiyVBrzJTG8VuuQZURbSKm0NqHMmJeaISV6EixCFpCwOMmizB/Ovb4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1603897128; 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=crX+hQQiv4Mxz5+KAKPEvweAjCNj7aEqxqZTv+932t0=; b=c/7yHQxJngNZj0NzxwyIpuKdxJDfbviza4i/lM3Q0+jvrrpQQyYSvFS4gl97NW3bUHA3Tami0rzFS9FUtgRiltT0r9LSewUsfMm8ropvTP2J4Zm2YTaZMUI/3Q+dYjim6So/q5Bp5ZGmwmPQAgQpEUNFnFtCLyG1Pttw4NFlAhw= 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 1603897128069943.0477177885778; Wed, 28 Oct 2020 07:58:48 -0700 (PDT) Received: from localhost ([::1]:45150 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kXmuV-0007Sd-1h for importer@patchew.org; Wed, 28 Oct 2020 10:58:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38590) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXmps-00027m-9a; Wed, 28 Oct 2020 10:54:00 -0400 Received: from esa5.hgst.iphmx.com ([216.71.153.144]:10516) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXmpq-00036U-4d; Wed, 28 Oct 2020 10:53:59 -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; 28 Oct 2020 22:53:56 +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; 28 Oct 2020 07:39:06 -0700 Received: from usa003000.ad.shared (HELO risc6-mainframe.hgst.com) ([10.86.60.131]) by uls-op-cesaip02.wdc.com with ESMTP; 28 Oct 2020 07:53:57 -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=1603896838; x=1635432838; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=KntYN7zGHoqvB6l1jjDFFz/dW+GlIx3yJAuj7ZeGIxQ=; b=dalxqAwhFAG1Kib+VgIcE29h99CfuM3J7kBei1gC4RIB3IkFm7cAaoOQ LTKu8gOs/SezrYajCEkX30JD24n83jRNDDKbodezJYs0t5UPaf/yPNIg/ e5ZmtpP7KANMiEWxUTpXwRTYzNOjsmyzu0lF60aeX7Z3f9qOEWjyLPAlp wjyCofnwjm2BCHYtmfydKn1UlfgeuB95z5sL9FrvWXbUO6rnnBAXNvyC8 +GyszDj+xo/EdIAQzZzCd5FKQnm3Ufy99IZSitSUT7parsimEZ6vFR5py 713XCZRU53xs5/W7CRq0B55416pmk7y3HA3qtxE4rBnFwOlerY1xDwwP+ A==; IronPort-SDR: Vs5vlnNIsUCbGdPBeRL6Mh5ZSEDtzbz3sCmy24ZbAlwEapxlbE9BomClHbQFB/AZuku3+oXlgB bbPAytBYvWbWNUFeMGQh/509zAV/cj5MLTCJLAmB1Jq50HQ8BuVJRyNdvZWr6F7hhhZpNYKFif hPXkKxoW5LO6Pu/PreFtWPWZpPzt/c6YVi6RRsAIU4kDgvJcqY8KFQ0pzoO+1ztM5H9kI68fxX i/Z71uJ7pb8og+mx8hM20ffgNgid8YUBeejA9twOpg+gnR/PLyVDpjItv/g0KbdQr+ZKFEM2GQ OE8= X-IronPort-AV: E=Sophos;i="5.77,426,1596470400"; d="scan'208";a="151200426" IronPort-SDR: GjHRHJtWv/aNblOWAAIZwAIHILKVr6qLaTnFP7KXh4JXW/jPvqjwABnT/GHvuX4Lz2/ctQGrpe +3PEJ1XEmnMebapUcGzgfxnmPowMV1gbCgmibZZSMpb4TbsNFgsVF+nnt9eWYG6lfZ5IHZANtW C00PW3drAAGGjsel7FIOR8aU+ZCQDvP27P6QibWGzAAyskjqq5/OnCsIsA1lwylS9DlpAWfGgT gEDZ3iCWB9HH0JumFHrzOjscWdWP736sIQ4cfmHc+2uq8jcH1wCwM5gNqKOXwI86hM+AuBkyRd ID12WWjdRjDc161kwRtMd9Tf IronPort-SDR: gussgivtZe/vtadAsAVF0pj2KSg1IdV79cpfJ/vwDgMB51aQ1/guWDJDLj5DJ/lqJctgkI9yg/ btmfxKAqsnPwy6LASwc4Gf7+f52bX52EpTzlcnh6ruAUhCnBjOOm2Wf7VFQuWE8HPrMuBjLjXT grb9AdrOBsVpzjY6YF95yyREKc1IdLhZrT/g8FkAUrhfTRdEeUu4N/hP73WN4vfLZTrGiWcqQZ Enz5SpTjRq0xn7TKDOSKz6uEJcXem2SktaTi0jnQQoYh453xcN+QKEGtyT6zlSe5pWjo6RGXq0 Xt4= WDCIronportException: Internal From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH v2 5/5] target/riscv: Split the Hypervisor execute load helpers Date: Wed, 28 Oct 2020 07:42:31 -0700 Message-Id: X-Mailer: git-send-email 2.28.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.153.144; envelope-from=prvs=563b96974=alistair.francis@wdc.com; helo=esa5.hgst.iphmx.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/10/28 10:53:43 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 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, richard.henderson@linaro.org, bmeng.cn@gmail.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" Split the hypervisor execute load functions into two seperate functions. This avoids us having to pass the memop to the C helper functions. Signed-off-by: Alistair Francis --- target/riscv/helper.h | 3 +- target/riscv/op_helper.c | 38 ++++++++++++++----------- target/riscv/insn_trans/trans_rvh.c.inc | 16 ++--------- 3 files changed, 26 insertions(+), 31 deletions(-) diff --git a/target/riscv/helper.h b/target/riscv/helper.h index 7dbdd117d2..ae50730273 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -82,7 +82,8 @@ DEF_HELPER_1(tlb_flush, void, env) DEF_HELPER_1(hyp_tlb_flush, void, env) DEF_HELPER_1(hyp_gvma_tlb_flush, void, env) DEF_HELPER_1(hyp_access_check, void, env) -DEF_HELPER_4(hyp_x_load, tl, env, tl, tl, tl) +DEF_HELPER_2(hyp_hlvx_hu, tl, env, tl) +DEF_HELPER_2(hyp_hlvx_wu, tl, env, tl) #endif =20 /* Vector functions */ diff --git a/target/riscv/op_helper.c b/target/riscv/op_helper.c index d81d8282cc..ff4426cf4d 100644 --- a/target/riscv/op_helper.c +++ b/target/riscv/op_helper.c @@ -243,28 +243,34 @@ void helper_hyp_access_check(CPURISCVState *env) } } =20 -target_ulong helper_hyp_x_load(CPURISCVState *env, target_ulong address, - target_ulong attrs, target_ulong memop) +target_ulong helper_hyp_hlvx_hu(CPURISCVState *env, target_ulong address) { 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; - int mmu_idx =3D cpu_mmu_index(env, false) | TB_FLAGS_PRIV_HYP_ACCE= SS_MASK; - - switch (memop) { - case MO_TEUW: - pte =3D cpu_lduw_mmuidx_ra(env, address, mmu_idx, GETPC()); - break; - case MO_TEUL: - pte =3D cpu_ldl_mmuidx_ra(env, address, mmu_idx, GETPC()); - break; - default: - g_assert_not_reached(); - } + int mmu_idx =3D cpu_mmu_index(env, true) | TB_FLAGS_PRIV_HYP_ACCES= S_MASK; + + return cpu_lduw_mmuidx_ra(env, address, mmu_idx, 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; +} + +target_ulong helper_hyp_hlvx_wu(CPURISCVState *env, target_ulong address) +{ + 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))) { + int mmu_idx =3D cpu_mmu_index(env, true) | TB_FLAGS_PRIV_HYP_ACCES= S_MASK; =20 - return pte; + return cpu_ldl_mmuidx_ra(env, address, mmu_idx, GETPC()); } =20 if (riscv_cpu_virt_enabled(env)) { diff --git a/target/riscv/insn_trans/trans_rvh.c.inc b/target/riscv/insn_tr= ans/trans_rvh.c.inc index 79968701e9..f3ffd742d3 100644 --- a/target/riscv/insn_trans/trans_rvh.c.inc +++ b/target/riscv/insn_trans/trans_rvh.c.inc @@ -265,20 +265,14 @@ static bool trans_hlvx_hu(DisasContext *ctx, arg_hlvx= _hu *a) #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(); =20 gen_get_gpr(t0, a->rs1); - tcg_gen_movi_tl(mem_idx, ctx->mem_idx); - tcg_gen_movi_tl(memop, MO_TEUW); =20 - gen_helper_hyp_x_load(t1, cpu_env, t0, mem_idx, memop); + gen_helper_hyp_hlvx_hu(t1, cpu_env, t0); gen_set_gpr(a->rd, t1); =20 tcg_temp_free(t0); tcg_temp_free(t1); - tcg_temp_free(mem_idx); - tcg_temp_free(memop); return true; #else return false; @@ -291,20 +285,14 @@ static bool trans_hlvx_wu(DisasContext *ctx, arg_hlvx= _wu *a) #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(); =20 gen_get_gpr(t0, a->rs1); - tcg_gen_movi_tl(mem_idx, ctx->mem_idx); - tcg_gen_movi_tl(memop, MO_TEUL); =20 - gen_helper_hyp_x_load(t1, cpu_env, t0, mem_idx, memop); + gen_helper_hyp_hlvx_wu(t1, cpu_env, t0); gen_set_gpr(a->rd, t1); =20 tcg_temp_free(t0); tcg_temp_free(t1); - tcg_temp_free(mem_idx); - tcg_temp_free(memop); return true; #else return false; --=20 2.28.0