From nobody Sat Sep 26 20:01:31 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1788965396; cv=none; d=zohomail.com; s=zohoarc; b=mL28S7Ki7zTQ/E+XaBmHk4AbtKld4GmfNGYKep1ZtdWDCwcYHko3ezZnSzRu2xd0HlMXLufVSP2X77gfLz9sWydjtM0qazfXfuy8oysAtv5FMIwUBB/bs09y3CeWcLAhsRCu/zQNUri6gJ85R17ME2bYyLglDq/iahryHID9gso= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788965396; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Y1G43mXJyZCAkF2zCgiqyq5k8gvkMSyLp9Du7elC0Tc=; b=RIc8wGvPaheB9fwCtVupxTw1x4PE6U11d9M696t3qfRLayXuyodISy/cA6ys+PxtrAr2Ytny5vnbMTnmRtFV830iiUqOSdLsv282NhW3pn6vmGMMZ94RYFZkzWN4UtChczT+CrhXINguymlaFl4mukjLFO9Jidiuypx8TDJx6oE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788965396890976.1507751779424; Wed, 9 Sep 2026 07:49:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x4Jbb-0002fY-5e; Wed, 09 Sep 2026 10:48:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x4Jba-0002fI-0i for qemu-devel@nongnu.org; Wed, 09 Sep 2026 10:48:54 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x4JbX-00076v-Lu for qemu-devel@nongnu.org; Wed, 09 Sep 2026 10:48:53 -0400 Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 689BUF6h2376133 for ; Wed, 9 Sep 2026 14:48:50 GMT Received: from mail-yx1-f71.google.com (mail-yx1-f71.google.com [74.125.224.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gk5ru11qr-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 09 Sep 2026 14:48:50 +0000 (GMT) Received: by mail-yx1-f71.google.com with SMTP id 956f58d0204a3-66cdb701595so7091267d50.1 for ; Wed, 09 Sep 2026 07:48:50 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([177.18.66.131]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-910464bf898sm125678886d6.7.2026.09.09.07.48.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Sep 2026 07:48:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=Y1G43mXJyZC AkF2zCgiqyq5k8gvkMSyLp9Du7elC0Tc=; b=GIbdLtWM4BaeMC6P9l7QIg/OroO uNbJfaXB7hn8qiIDRrwuPEG8481aEflctbFWBCPRUyh5x4X7YKvjnO8Ai1//yH5M xiOzVcDJg3RbdLcB2epFUiHx9/J/r9jgzGPtnwmywca4l11JgAgjqydIp1zms1nR u2+8bRpU1jRxHf5vml2y9qgJ0MWCKV06RLMQTu4WkEDjQDTOJYb8OwW0M8VvNfLA qyseWhwZcZz3/LbzZX3OSfo4T764EaVDq2FsRium5travIcpLR9DDqMeMkvB5oGf tlvrorOopCrzHT46DxtAX9PpaBfMzzLkFT7W33U2FhI37pGN+R1xsZWtMlA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788965330; x=1789570130; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Y1G43mXJyZCAkF2zCgiqyq5k8gvkMSyLp9Du7elC0Tc=; b=Pp1YjiErQlmHTB6Z60gkMy4396Vy7vXAkPDXuw8FT/r9VbiRvC15TrceNTmTvuPG9+ DNz1EGqykCoivhn/1HRiaemZHHF76rHBIV9GupnLXH+6MAO3jv4NxfFTnd6t6GOXrOh5 NAUN3Jt9luWfAWshn+P2q5mI0YDbTZ024h2tIv9yNjZCJUlvF0H9UzRJYoqylSe0kbd2 C7HDDGEOFcz5K0M52VLVV9VWGswjMhh1PpMcjHkZ7GQWQ0CfWyI1EHNHh8VzNAcbjUm2 LJx5ExrnCX3ar3oBmUaoFzz778xI8e+abJ77cEciJex1JUHM5cbMJv8aIEoxQ2kcTcnC 01gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788965330; x=1789570130; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=Y1G43mXJyZCAkF2zCgiqyq5k8gvkMSyLp9Du7elC0Tc=; b=mM66J9DRLIGe45DoreI400Gra99UXQ/EJuF1aFgFbwp7oP/6dxeOGQ819vKY0oJZI5 VlRYgiliupiHeqaS+Q/RgC1K8zLruLBs+dXBgLbIuYWM5z+8HDsU/tssAeu8SM1yTd2n /wt5ka/gVRHi5pplvaj8MCcPojvAI4APLsRWRKO7bUVI6e6pTiq9F8fKCqk658SjR1Qd i0bUu4poM39QZLei+wscOiXFkWFD3GfyoNoS9fav/mOCkAugp+e0ntuY6FJ16XmfB40s njDzS+91IOevkKED8gRRWRkn420bW8QWW2WBAx7sFkVAPD36QgkWwhlev9aeVQOv90/7 7DMA== X-Gm-Message-State: AFuF++niXyHM6WEljlidQIrwPFtZxQKVGaB1dSIDP2g6n7nBwX7hlUXV M8qGiyNCs6dqgB4l1wxXjWVgy40u1t2NK/v0QuprM7W+MaR3f7jA/vgCyE88JrEOKHl03ONXKhA 89mH1HlJ1lSfPC1mevbkqzB3p04mUIR3/U6txA4yAvp3kMkHrskAXXr1cWpS5u3mJWg== X-Gm-Gg: AYBFou1kV7pXKpIy+xxhG1vrhg2DrLIYNuilv0m+D67u3J4H54KxbbB9FPno2lpcRTR 4TZv67n/Ye01jio61mRamxgLiBsiGMnU3U/bbxbG6bDAA6D5/nK74432hb1vW2cpk40u2+v8GwJ JzfC0CUVgO4hpEJRsgozYAkmDJ9ZF5UN5deSuyqVCAtput178a/Pmxhdp+2wN3gs83X7jCi0H8F lTjilHxjEqsnRkfM99GNY8dvOsLknPSswM8BOc8P6onfKx2Zyc7f2vv7u5THytMkMnDpuhXX2Ud 3K5BAykcqs2qg7zuiXd6kdItr4V/GPqPQrc4v+cn9sOWcFfgYPNroC/w+YygIpe6XJf+WJbt8qE ZHcNZgGBUUIaAYnyFUPZBOgyKOAUySBCdhYds X-Received: by 2002:a05:690e:4554:20b0:66f:c1d5:c6dc with SMTP id 956f58d0204a3-66fc1d5c8e2mr5271786d50.99.1788965329628; Wed, 09 Sep 2026 07:48:49 -0700 (PDT) X-Received: by 2002:a05:690e:4554:20b0:66f:c1d5:c6dc with SMTP id 956f58d0204a3-66fc1d5c8e2mr5271740d50.99.1788965328856; Wed, 09 Sep 2026 07:48:48 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, chao.liu@processmission.com, Chao Liu , Daniel Henrique Barboza , Tao Tang , Palmer Dabbelt Subject: [PATCH v9 1/7] target/riscv: add sdext debug CSRs state Date: Wed, 9 Sep 2026 11:48:34 -0300 Message-ID: <20260909144841.1766921-2-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260909144841.1766921-1-daniel.barboza@oss.qualcomm.com> References: <20260909144841.1766921-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=M+997Sws c=1 sm=1 tr=0 ts=6aa171d2 cx=c_pps a=ngMg22mHWrP7m7pwYf9JkA==:117 a=CQQxcbsX5Byh3TlVSSGwig==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=xvfqbYfxAAAA:20 a=pGLkceISAAAA:8 a=EUspDBNiAAAA:8 a=fgrLqfBXAAAA:8 a=8aUGYKOvqt1NoZA4oJ4A:9 a=yHXA93iunegOHmWoMUFd:22 a=_Ge82aPy-h_wFa7gWU4u:22 a=bA3UWDv6hWIuX7UZL3qL:22 X-Proofpoint-GUID: HZkuiq-pgx8KtsL5GmSf7BvMpfaUH-kc X-Proofpoint-ORIG-GUID: HZkuiq-pgx8KtsL5GmSf7BvMpfaUH-kc X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA5MDE2NSBTYWx0ZWRfXzznhMmKih9E6 RScS8JiYWJwZXDyJqFMv0WQPAAzGmxgUyxikNxyeNelZzZjYLh1mOFRAw9xnVBuYAFaGQr398y1 gbHnrmr2sZ2bU+fs22KRLEWhdfbkLKE= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA5MDE2NSBTYWx0ZWRfX3ZjLg3bWLwTr XpVW7Hr6sq1s8/3cWOqldSERf30T/WpI4s/GQSMNnyYlffuzHgBJ98zDa9I2jo+esEAvE0itZaG E9MJAOH8lJ3uPMudjmUSniEPcdACe3IRnaTtEFfWO+SP5SdJEM8lqxJF5KnqFBnvxjBA5HVO2Rr Kv1WzxJ7+auPUvIEJaTqTf0TJP60CG276kSs6fC4QvkjWOKOWOOk6UJ8lvHsyB+8OWVrxC7nBSE 20JN41nCnglP21/+W5+Ci4EJnrcqavukwi4O6NNvpUQgu5yKtR/ylBVPJCu5G+01NI51vhIlWsQ hPx1Zc9BA6HFB+yfgSuES8UdpFFxLmejLNAcqj/lMAk5pT5zLyYJcz/ql8329CJO4GKJ6mBbeMQ uiu2v34S2dN4fE1891cJoUIRTpbZhkHH6eIrAYXrD0ubkg+FaktdVCTBm+BYJ49UrI3HWpuRaeA FUYgg7BgwXgLxVSBxxQ== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-09_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 bulkscore=0 spamscore=0 phishscore=0 impostorscore=0 lowpriorityscore=0 suspectscore=0 clxscore=1015 priorityscore=1501 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609090165 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 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_BL_SPAMCOP_NET=1.347, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1788965399049158501 Content-Type: text/plain; charset="utf-8" From: Chao Liu RISC-V Debug Specification: https://github.com/riscv/riscv-debug-spec/releases/tag/1.0 Add architectural state for Sdext Debug Mode: debug_mode, dcsr, dpc and dscratch0/1. Wire up CSR access for dcsr/dpc/dscratch and gate them to Debug Mode (or host debugger access). The Sdext is not fully implemented, so it is disabled by default. Signed-off-by: Chao Liu Reviewed-by: Daniel Henrique Barboza Tested-by: Tao Tang Signed-off-by: Daniel Henrique Barboza --- target/riscv/cpu.c | 7 ++ target/riscv/cpu.h | 4 + target/riscv/cpu_bits.h | 33 ++++++++ target/riscv/cpu_cfg_fields.h.inc | 1 + target/riscv/machine.c | 20 +++++ target/riscv/tcg/csr.c | 126 ++++++++++++++++++++++++++++++ 6 files changed, 191 insertions(+) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 5fff9d745e..0fe9762022 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -248,6 +248,7 @@ const RISCVIsaExtData isa_edata_arr[] =3D { ISA_EXT_DATA_ENTRY(zvkt, PRIV_VERSION_1_12_0, ext_zvkt), ISA_EXT_DATA_ENTRY(zhinx, PRIV_VERSION_1_12_0, ext_zhinx), ISA_EXT_DATA_ENTRY(zhinxmin, PRIV_VERSION_1_12_0, ext_zhinxmin), + ISA_EXT_DATA_ENTRY(sdext, PRIV_VERSION_1_12_0, ext_sdext), ISA_EXT_DATA_ENTRY(sdtrig, PRIV_VERSION_1_12_0, ext_sdtrig), ISA_INTERNAL_EXT_DATA_ENTRY(shcounterenw, PRIV_VERSION_1_12_0, has_priv_1_12), @@ -1091,6 +1092,12 @@ static void riscv_cpu_reset_hold(Object *obj, ResetT= ype type) =20 #ifndef CONFIG_USER_ONLY #ifdef CONFIG_TCG + env->debug_mode =3D false; + env->dcsr =3D DCSR_DEBUGVER(4); + env->dpc =3D 0; + env->dscratch[0] =3D 0; + env->dscratch[1] =3D 0; + if (cpu->cfg.debug || cpu->cfg.ext_sdtrig) { riscv_trigger_reset_hold(env); } diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index c2138dbd4b..7b343d7a3e 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -507,6 +507,10 @@ struct CPUArchState { =20 /* True if in debugger mode. */ bool debugger; + bool debug_mode; + target_ulong dcsr; + target_ulong dpc; + target_ulong dscratch[2]; =20 uint64_t mstateen[SMSTATEEN_MAX_COUNT]; uint64_t hstateen[SMSTATEEN_MAX_COUNT]; diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h index c01050ce2b..769c945517 100644 --- a/target/riscv/cpu_bits.h +++ b/target/riscv/cpu_bits.h @@ -467,6 +467,39 @@ #define CSR_DCSR 0x7b0 #define CSR_DPC 0x7b1 #define CSR_DSCRATCH 0x7b2 +#define CSR_DSCRATCH1 0x7b3 + +/* DCSR fields */ +#define DCSR_XDEBUGVER_SHIFT 28 +#define DCSR_XDEBUGVER_MASK (0xfu << DCSR_XDEBUGVER_SHIFT) +#define DCSR_DEBUGVER(val) ((target_ulong)(val) << DCSR_XDEBUGVER_SHI= FT) +#define DCSR_EXTCAUSE_SHIFT 24 +#define DCSR_EXTCAUSE_MASK (0x7u << DCSR_EXTCAUSE_SHIFT) +#define DCSR_CETRIG BIT(19) +#define DCSR_PELP BIT(18) +#define DCSR_EBREAKVS BIT(17) +#define DCSR_EBREAKVU BIT(16) +#define DCSR_EBREAKM BIT(15) +#define DCSR_EBREAKS BIT(13) +#define DCSR_EBREAKU BIT(12) +#define DCSR_STEPIE BIT(11) +#define DCSR_STOPCOUNT BIT(10) +#define DCSR_STOPTIME BIT(9) +#define DCSR_CAUSE_SHIFT 6 +#define DCSR_CAUSE_MASK (0x7u << DCSR_CAUSE_SHIFT) +#define DCSR_V BIT(5) +#define DCSR_MPRVEN BIT(4) +#define DCSR_NMIP BIT(3) +#define DCSR_STEP BIT(2) +#define DCSR_PRV_MASK 0x3u + +#define DCSR_CAUSE_EBREAK 1 +#define DCSR_CAUSE_TRIGGER 2 +#define DCSR_CAUSE_HALTREQ 3 +#define DCSR_CAUSE_STEP 4 +#define DCSR_CAUSE_RESET 5 +#define DCSR_CAUSE_GROUP 6 +#define DCSR_CAUSE_OTHER 7 =20 /* Performance Counters */ #define CSR_MHPMCOUNTER3 0xb03 diff --git a/target/riscv/cpu_cfg_fields.h.inc b/target/riscv/cpu_cfg_field= s.h.inc index f91c780299..24f3606f94 100644 --- a/target/riscv/cpu_cfg_fields.h.inc +++ b/target/riscv/cpu_cfg_fields.h.inc @@ -105,6 +105,7 @@ BOOL_FIELD(ext_zvfbfmin) BOOL_FIELD(ext_zvfbfwma) BOOL_FIELD(ext_zvfh) BOOL_FIELD(ext_zvfhmin) +BOOL_FIELD(ext_sdext) BOOL_FIELD(ext_sdtrig) BOOL_FIELD(ext_smaia) BOOL_FIELD(ext_ssaia) diff --git a/target/riscv/machine.c b/target/riscv/machine.c index bf203bffce..8658d43643 100644 --- a/target/riscv/machine.c +++ b/target/riscv/machine.c @@ -301,6 +301,25 @@ static const VMStateDescription vmstate_debug =3D { VMSTATE_VARRAY_UINT32(env.tdata3, RISCVCPU, env.num_triggers, 0, vmstate_info_uint64, uint64_t), + VMSTATE_BOOL_V(env.debug_mode, RISCVCPU, 3), + VMSTATE_UINTTL_V(env.dcsr, RISCVCPU, 3), + VMSTATE_UINTTL_V(env.dpc, RISCVCPU, 3), + VMSTATE_UINTTL_ARRAY_V(env.dscratch, RISCVCPU, 2, 3), + VMSTATE_END_OF_LIST() + } +}; + +static const VMStateDescription vmstate_sdext =3D { + .name =3D "cpu/sdext", + .version_id =3D 1, + .minimum_version_id =3D 1, + .needed =3D debug_needed, + .post_load =3D debug_post_load, + .fields =3D (const VMStateField[]) { + VMSTATE_BOOL_V(env.debug_mode, RISCVCPU, 3), + VMSTATE_UINTTL_V(env.dcsr, RISCVCPU, 3), + VMSTATE_UINTTL_V(env.dpc, RISCVCPU, 3), + VMSTATE_UINTTL_ARRAY_V(env.dscratch, RISCVCPU, 2, 3), VMSTATE_END_OF_LIST() } }; @@ -576,6 +595,7 @@ const VMStateDescription vmstate_riscv_cpu =3D { &vmstate_ctr, &vmstate_sstc, &vmstate_mseccfg, + &vmstate_sdext, NULL } }; diff --git a/target/riscv/tcg/csr.c b/target/riscv/tcg/csr.c index bd4b6dc114..988261cccf 100644 --- a/target/riscv/tcg/csr.c +++ b/target/riscv/tcg/csr.c @@ -3207,6 +3207,126 @@ static RISCVException write_mtval(CPURISCVState *en= v, int csrno, return RISCV_EXCP_NONE; } =20 +#if !defined(CONFIG_USER_ONLY) +static RISCVException sdext(CPURISCVState *env, int csrno) +{ + if (!riscv_cpu_cfg(env)->ext_sdext) { + return RISCV_EXCP_ILLEGAL_INST; + } + + if (!env->debug_mode && !env->debugger) { + return RISCV_EXCP_ILLEGAL_INST; + } + + return RISCV_EXCP_NONE; +} + +static target_ulong dcsr_visible_mask(CPURISCVState *env) +{ + target_ulong mask =3D (target_ulong)-1; + RISCVCPU *cpu =3D env_archcpu(env); + + if (!riscv_has_ext(env, RVH)) { + mask &=3D ~(DCSR_EBREAKVS | DCSR_EBREAKVU | DCSR_V); + } + if (!riscv_has_ext(env, RVS)) { + mask &=3D ~DCSR_EBREAKS; + } + if (!riscv_has_ext(env, RVU)) { + mask &=3D ~DCSR_EBREAKU; + } + if (!cpu->cfg.ext_zicfilp) { + mask &=3D ~DCSR_PELP; + } + if (!cpu->cfg.ext_smdbltrp) { + mask &=3D ~DCSR_CETRIG; + } + + return mask; +} + +static RISCVException read_dcsr(CPURISCVState *env, int csrno, + target_ulong *val) +{ + *val =3D env->dcsr & dcsr_visible_mask(env); + return RISCV_EXCP_NONE; +} + +static target_ulong dcsr_writable_mask(CPURISCVState *env) +{ + target_ulong mask =3D DCSR_EBREAKM | DCSR_EBREAKS | DCSR_EBREAKU | + DCSR_STEPIE | DCSR_STOPCOUNT | DCSR_STOPTIME | + DCSR_STEP | DCSR_PRV_MASK; + RISCVCPU *cpu =3D env_archcpu(env); + + mask |=3D DCSR_MPRVEN; + + if (riscv_has_ext(env, RVH)) { + mask |=3D DCSR_EBREAKVS | DCSR_EBREAKVU | DCSR_V; + } + if (riscv_has_ext(env, RVS)) { + mask |=3D DCSR_EBREAKS; + } + if (riscv_has_ext(env, RVU)) { + mask |=3D DCSR_EBREAKU; + } + if (cpu->cfg.ext_zicfilp) { + mask |=3D DCSR_PELP; + } + if (cpu->cfg.ext_smdbltrp) { + mask |=3D DCSR_CETRIG; + } + + return mask; +} + +static RISCVException write_dcsr(CPURISCVState *env, int csrno, + target_ulong val, uintptr_t ra) +{ + target_ulong mask =3D dcsr_writable_mask(env); + target_ulong new_val =3D env->dcsr; + + new_val &=3D ~mask; + new_val |=3D val & mask; + new_val &=3D ~DCSR_XDEBUGVER_MASK; + new_val |=3D DCSR_DEBUGVER(4); + env->dcsr =3D new_val; + return RISCV_EXCP_NONE; +} + +static RISCVException read_dpc(CPURISCVState *env, int csrno, + target_ulong *val) +{ + *val =3D env->dpc & get_xepc_mask(env); + return RISCV_EXCP_NONE; +} + +static RISCVException write_dpc(CPURISCVState *env, int csrno, + target_ulong val, uintptr_t ra) +{ + env->dpc =3D val & get_xepc_mask(env); + return RISCV_EXCP_NONE; +} + +static RISCVException read_dscratch(CPURISCVState *env, int csrno, + target_ulong *val) +{ + int index =3D (csrno =3D=3D CSR_DSCRATCH1) ? 1 : 0; + + *val =3D env->dscratch[index]; + return RISCV_EXCP_NONE; +} + +static RISCVException write_dscratch(CPURISCVState *env, int csrno, + target_ulong val, uintptr_t ra) +{ + int index =3D (csrno =3D=3D CSR_DSCRATCH1) ? 1 : 0; + + env->dscratch[index] =3D val; + return RISCV_EXCP_NONE; +} +#endif /* !CONFIG_USER_ONLY */ + /* Execution environment configuration setup */ static RISCVException read_menvcfg(CPURISCVState *env, int csrno, target_ulong *val) @@ -6435,6 +6555,12 @@ riscv_csr_operations csr_ops[CSR_TABLE_SIZE] =3D { [CSR_TDATA3] =3D { "tdata3", debug, read_tdata, write_tdata = }, [CSR_TINFO] =3D { "tinfo", debug, read_tinfo, write_ignore = }, [CSR_MCONTEXT] =3D { "mcontext", debug, read_mcontext, write_mcontex= t }, +#if !defined(CONFIG_USER_ONLY) + [CSR_DCSR] =3D { "dcsr", sdext, read_dcsr, write_dcsr }, + [CSR_DPC] =3D { "dpc", sdext, read_dpc, write_dpc }, + [CSR_DSCRATCH] =3D { "dscratch0", sdext, read_dscratch, write_dscrat= ch }, + [CSR_DSCRATCH1] =3D { "dscratch1", sdext, read_dscratch, write_dscrat= ch }, +#endif =20 [CSR_MCTRCTL] =3D { "mctrctl", ctr_mmode, NULL, NULL, rmw_xctrc= tl }, [CSR_SCTRCTL] =3D { "sctrctl", ctr_smode, NULL, NULL, rmw_xctrc= tl }, --=20 2.43.0 From nobody Sat Sep 26 20:01:31 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1788965360; cv=none; d=zohomail.com; s=zohoarc; b=nNd0Az413b6cqcAqp3+k4dWfvDc/aZ686kWtfm2xIzRS3X2M6AL7Kkz/Xg72YF/DYZXjQs1pvwehcvWULaEQoS7UvLBhcyhMfWS0GkhboaERLq22t2HXkY0Jeyv68CqVJvUacCy5oJdGTIHOF43TIZ9WM1jYe/tTbhLy1lUVFak= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788965360; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=e3Yq/xUprvYvn7B1vx6090CtG1lk3xvMaGBB2wcxsBg=; b=iAACXZGCAL+KHuk2WwBfV96idMSBxpYrJxpsIXRxEeig9KGjPFJte15nmpjedD2//rJV0Nm3DPl94Nwp+Kc+qk7VDLEW6RO/Q81KgjIT5jtEcWdeXdqJzBCGh8m5c+71P7h2ntxrTjrvBapOkDpeDOwDsoUWN5feS2PyozY+/GQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788965360704425.0051798355653; Wed, 9 Sep 2026 07:49:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x4Jbk-0002i3-RO; Wed, 09 Sep 2026 10:49:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x4Jbi-0002gn-MH for qemu-devel@nongnu.org; Wed, 09 Sep 2026 10:49:03 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x4Jbf-000791-Gi for qemu-devel@nongnu.org; Wed, 09 Sep 2026 10:49:02 -0400 Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 689BUBnh2171847 for ; Wed, 9 Sep 2026 14:48:58 GMT Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gk5rgh1hk-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 09 Sep 2026 14:48:58 +0000 (GMT) Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-52d33c89a29so130905751cf.1 for ; Wed, 09 Sep 2026 07:48:58 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([177.18.66.131]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-910464bf898sm125678886d6.7.2026.09.09.07.48.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Sep 2026 07:48:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=e3Yq/xUprvY vn7B1vx6090CtG1lk3xvMaGBB2wcxsBg=; b=fnDazVjPOgLVhbXMEji5PZhuDo9 SnTYAu6i7ybGSMA+dzEGiuVDTF0dZ9v/2F4POxV7vKyK8EMtQokuKj6YJXONvHBl TdiaMJIim/2hkEv5J4O80zFULQeqqaQrBRsUAAdynMNvOf/jfiwnT6wCYwAngU8c KXeVzyLXCCaQhj6j7HUnr2s9R5Xub3wTnxIlRTZkcZMKA+MH2EKh8yK1hTNOkJdE bVF8m8ohgPn7js2rrWYxbBH3V8pns+Dai/bM9B3RzvFOwYHc1XVmhqgbI7xOyDBh kQ46l/VKs1l3dd5d+10tGROTwG3Bjt6NTGQEIwuBWBdXRldWmEIKd2p1xdg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788965338; x=1789570138; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=e3Yq/xUprvYvn7B1vx6090CtG1lk3xvMaGBB2wcxsBg=; b=fzEX/hx5N/IlSKiKYbYasLX0D4mKAqQ3szDEUSSKAztsRzGDTDheo37wunhpJFPLVa lt2d/z0OGzQQwfdTZ+5h5fv/jMYo5VLjog9D7yASqEIESepYDuMW33gpYtqTFQpZU64u 11fmn1WTsgoA+4h6CSCpKRgumq7geESCiNo3abMRaK0rE2d0T4n8V9mMrNq5s+50XOcC 4n3EqT0KU69uIYk8kUeWrCNoraeM0gseeyCSSxnCKIPiZFxqJqKTV32pRZbo+bDu2+Wp 1v+IZW/q3ODNacYmUUmjsZOZcBioetKJj/fs+yxTfYw4wZ1VfQZRcobLWR98AynbA5Pq cZBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788965338; x=1789570138; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=e3Yq/xUprvYvn7B1vx6090CtG1lk3xvMaGBB2wcxsBg=; b=FCAzl6/MmO18CbHvu0o4/CDPUmdjsVAvZeFj8BXPv34C3lbLISpYcdAYMVGrpXUH1C 22GgOLBcKG+0nZrEKbHSsvrpapPFWfziWymgCxOXvFV+AVkUeAHW7pwP7e+VtmZlra4D mU0D7aFCOdg817XFdSDHgN6fnkRuSu5JiS66nBkyJwoiFv472w48Vqt5oD5Xg/yUNEAB u2ufC1Wpl6TbTDvIluszUgp/yKIpztxvSZemImVusA7/cdBFwjQXDteH6XzkWvSf7OZ2 1jwKyx/HiheLwpHQhs7rAcVgCVGjNd6eSfRyE8laRoPELMofUVizh/ESz5AbdeB19oHy PdSw== X-Gm-Message-State: AFuF++kHGk22GRAp+p+8m4htABqttWJY4rHNR5xQQYTUpudCsMScCQsC NE4PE6jTOe+4A9zXKYoREGVOLVI164tnjpxPltyNnfk3ohjmXxwcZFaZtfEL368ehLctzZSkVoP ciJ0JMoc+h3m/pdl0G+hM5TqdwF6BCCint9M/B1DDvfClErgs/Ym7aSV+pIkz4Vy2VQ== X-Gm-Gg: AYBFou1E5DMAHx1Y1Y5yJRjMlr84C9acZ8iRajAi7f4IrOAd84u2v3JkPfFHrMReJYD n/m8QpXHMtrA8hZy86jnCJrKY6GoVyioezrbQgaWEWeFFGELnsLKqiRREtlSjBCLodHW6BmulO9 HnVU3eh5iMPmogrIC3CXsADti8kl0rH/yyMGGwaLgP6qM+9oV1Bzo+y4Gi+jDHXWj2qcY3IZrd6 fSNZ20NBeRHq5EKPOC9fkqqhvmMLxD7yN64t5rspIC0+zQdTvPS7ObUDVl7qckC5I2Spvf06443 6etv9aC1imVX4VXeqtALxDE4VMIToLR36vQA1cDRmDqr/pQ8b5ikRFe3SFr9lDjjOMaP4YkBYQO PST8F8sw2FQlrxQmScGbaehp+i8kVWqMDFg/X X-Received: by 2002:a05:622a:646:b0:530:430e:8125 with SMTP id d75a77b69052e-530aefba436mr27111811cf.46.1788965332457; Wed, 09 Sep 2026 07:48:52 -0700 (PDT) X-Received: by 2002:a05:622a:646:b0:530:430e:8125 with SMTP id d75a77b69052e-530aefba436mr27110811cf.46.1788965331850; Wed, 09 Sep 2026 07:48:51 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, chao.liu@processmission.com, Chao Liu , Daniel Henrique Barboza , Tao Tang , Palmer Dabbelt Subject: [PATCH v9 2/7] target/riscv: add sdext Debug Mode helpers Date: Wed, 9 Sep 2026 11:48:35 -0300 Message-ID: <20260909144841.1766921-3-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260909144841.1766921-1-daniel.barboza@oss.qualcomm.com> References: <20260909144841.1766921-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA5MDE2NSBTYWx0ZWRfX4GIawJYHxcL1 yheDf/ZCPp9PXtIExlRwgSgJ02yE42Tr9EyzeeoZHCcySDrWWb59lKnMT2lf6LQu04w/aI0nulR 0BqTXlu9xIsqptGuJBq1TnBrnldsl+E= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA5MDE2NSBTYWx0ZWRfX8q4HDE9iwyNP CGXN1VVtBSTBv6g3XlgTJbFEnCqQI/WDZ5PyNL1DqjQ7T5S0D6KDN6EM8Z8tpvlEFpfWnR+dPIE ZE/o3bUX1Wa9QJiwfY70kpxT7YqURtvdoQ3zyHk1Wv9cCAVpBXk4ZR5EhTbq1Od4cL/SIxl1e0c zDO2Yoj6fOzlFw9XbQQFSjuiA8Wfyforcj1sNau16W/TqhxX6DNy6MLlKJMIM2Ql1U0gvGF/CAW ghySeyHbTMsW9nu1tpnabvq6sbck85BE6NoONthI3erxRbR1l+Nw/NeljKjXXpbHect5jKB/Xx0 D6sTIngydtLSS4MtX/FHllWJlZunerZUUgE0VTY/ZLmviOpbm4mHTIwDi5ZvrB0WDQEokci7WHy aZpn2dv9D6p4uzRZJ/sOzNpnEBsA9pKyPOzjIGFKdvyMH3iyiBuaLjLwAFpmOErsBWTo5gqrMMb tnUVcX1tPw1mb2jLzGg== X-Authority-Analysis: v=2.4 cv=B6qJFutM c=1 sm=1 tr=0 ts=6aa171da cx=c_pps a=JbAStetqSzwMeJznSMzCyw==:117 a=CQQxcbsX5Byh3TlVSSGwig==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=xvfqbYfxAAAA:20 a=pGLkceISAAAA:8 a=EUspDBNiAAAA:8 a=fgrLqfBXAAAA:8 a=Mp8isO8jnsZoTyD_AnUA:9 a=uxP6HrT_eTzRwkO_Te1X:22 a=_Ge82aPy-h_wFa7gWU4u:22 a=bA3UWDv6hWIuX7UZL3qL:22 X-Proofpoint-GUID: 4pVJQMbEBXr4-1SnZnKBg9sBQ7tW3kzl X-Proofpoint-ORIG-GUID: 4pVJQMbEBXr4-1SnZnKBg9sBQ7tW3kzl X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-09_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 phishscore=0 spamscore=0 adultscore=0 malwarescore=0 bulkscore=0 clxscore=1015 impostorscore=0 lowpriorityscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609090165 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1788965363358158500 Content-Type: text/plain; charset="utf-8" From: Chao Liu RISC-V Debug Specification: https://github.com/riscv/riscv-debug-spec/releases/tag/1.0 Add helpers to enter/leave Debug Mode and to update dpc/dcsr. Model resume without a Debug Module by leaving Debug Mode at cpu_exec_enter and continuing from dpc. Signed-off-by: Chao Liu Reviewed-by: Daniel Henrique Barboza Tested-by: Tao Tang Signed-off-by: Daniel Henrique Barboza --- target/riscv/cpu.h | 3 ++ target/riscv/tcg/cpu_helper.c | 85 +++++++++++++++++++++++++++++++++++ target/riscv/tcg/debug.c | 5 +++ target/riscv/tcg/tcg-cpu.c | 14 ++++++ 4 files changed, 107 insertions(+) diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 7b343d7a3e..82eb61a18c 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -671,6 +671,9 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, in= t size, char *riscv_isa_string(RISCVCPU *cpu); int riscv_cpu_max_xlen(RISCVCPUClass *mcc); bool riscv_cpu_option_set(RISCVCPU *cpu, const char *optname); +void riscv_cpu_enter_debug_mode(CPURISCVState *env, target_ulong pc, + uint32_t cause); +void riscv_cpu_leave_debug_mode(CPURISCVState *env); =20 #ifndef CONFIG_USER_ONLY void riscv_cpu_do_interrupt(CPUState *cpu); diff --git a/target/riscv/tcg/cpu_helper.c b/target/riscv/tcg/cpu_helper.c index 07d9222652..e6d948991c 100644 --- a/target/riscv/tcg/cpu_helper.c +++ b/target/riscv/tcg/cpu_helper.c @@ -132,6 +132,91 @@ bool riscv_env_smode_dbltrp_enabled(CPURISCVState *env= , bool virt) #endif } =20 +#ifndef CONFIG_USER_ONLY +static bool riscv_sdext_enabled(CPURISCVState *env) +{ + return riscv_cpu_cfg(env)->ext_sdext; +} +#endif + +void riscv_cpu_enter_debug_mode(CPURISCVState *env, target_ulong pc, + uint32_t cause) +{ +#ifndef CONFIG_USER_ONLY + if (!riscv_sdext_enabled(env)) { + return; + } + + env->debug_mode =3D true; + env->dpc =3D pc & get_xepc_mask(env); + env->dcsr &=3D ~(DCSR_CAUSE_MASK | DCSR_PRV_MASK | DCSR_V); + env->dcsr |=3D ((target_ulong)(cause & 0x7)) << DCSR_CAUSE_SHIFT; + env->dcsr |=3D env->priv & DCSR_PRV_MASK; + if (env->virt_enabled && riscv_has_ext(env, RVH)) { + env->dcsr |=3D DCSR_V; + } + + if (env_archcpu(env)->cfg.ext_zicfilp) { + if (env->elp) { + env->dcsr |=3D DCSR_PELP; + } else { + env->dcsr &=3D ~DCSR_PELP; + } + env->elp =3D false; + } +#endif +} + +void riscv_cpu_leave_debug_mode(CPURISCVState *env) +{ +#ifndef CONFIG_USER_ONLY + if (!riscv_sdext_enabled(env)) { + return; + } + + target_ulong new_priv =3D env->dcsr & DCSR_PRV_MASK; + bool new_virt =3D riscv_has_ext(env, RVH) && (env->dcsr & DCSR_V); + + if (new_priv > PRV_M) { + new_priv =3D PRV_M; + } + if (new_priv =3D=3D PRV_M) { + new_virt =3D false; + } + + if (new_priv =3D=3D PRV_S && !riscv_has_ext(env, RVS)) { + new_priv =3D PRV_M; + new_virt =3D false; + } else if (new_priv =3D=3D PRV_U && !riscv_has_ext(env, RVU)) { + new_priv =3D riscv_has_ext(env, RVS) ? PRV_S : PRV_M; + new_virt =3D false; + } + + env->debug_mode =3D false; + riscv_cpu_set_mode(env, new_priv, new_virt); + + if (env_archcpu(env)->cfg.ext_zicfilp) { + env->elp =3D cpu_get_fcfien(env) && (env->dcsr & DCSR_PELP); + env->dcsr &=3D ~DCSR_PELP; + } + + if (new_priv !=3D PRV_M) { + env->mstatus =3D set_field(env->mstatus, MSTATUS_MPRV, 0); + } + + if (env_archcpu(env)->cfg.ext_smdbltrp && new_priv !=3D PRV_M) { + env->mstatus =3D set_field(env->mstatus, MSTATUS_MDT, 0); + } + if (env_archcpu(env)->cfg.ext_ssdbltrp && (new_priv =3D=3D PRV_U || ne= w_virt)) { + env->mstatus =3D set_field(env->mstatus, MSTATUS_SDT, 0); + if (new_virt && new_priv =3D=3D PRV_U) { + env->vsstatus =3D set_field(env->vsstatus, MSTATUS_SDT, 0); + } + } +#endif +} + + /* * Returns the effective PMM field. * diff --git a/target/riscv/tcg/debug.c b/target/riscv/tcg/debug.c index e4d719a1da..2537515f54 100644 --- a/target/riscv/tcg/debug.c +++ b/target/riscv/tcg/debug.c @@ -973,6 +973,11 @@ void riscv_cpu_debug_excp_handler(CPUState *cs) RISCVCPU *cpu =3D RISCV_CPU(cs); CPURISCVState *env =3D &cpu->env; =20 + /* Triggers must not match or fire while in Debug Mode. */ + if (env->debug_mode) { + return; + } + if (cs->watchpoint_hit) { if (cs->watchpoint_hit->flags & BP_CPU) { do_trigger_action(env, DBG_ACTION_BP); diff --git a/target/riscv/tcg/tcg-cpu.c b/target/riscv/tcg/tcg-cpu.c index b68160af83..959a1e89c8 100644 --- a/target/riscv/tcg/tcg-cpu.c +++ b/target/riscv/tcg/tcg-cpu.c @@ -269,6 +269,19 @@ static vaddr riscv_pointer_wrap(CPUState *cs, int mmu_= idx, } return extract64(result, 0, 64 - pm_len); } + +static void riscv_cpu_exec_enter(CPUState *cs) +{ + RISCVCPU *cpu =3D RISCV_CPU(cs); + CPURISCVState *env =3D &cpu->env; + + if (!cpu->cfg.ext_sdext || !env->debug_mode) { + return; + } + target_ulong pc =3D env->dpc; + riscv_cpu_leave_debug_mode(env); + env->pc =3D pc; +} #endif =20 const TCGCPUOps riscv_tcg_ops =3D { @@ -285,6 +298,7 @@ const TCGCPUOps riscv_tcg_ops =3D { #ifndef CONFIG_USER_ONLY .tlb_fill =3D riscv_cpu_tlb_fill, .pointer_wrap =3D riscv_pointer_wrap, + .cpu_exec_enter =3D riscv_cpu_exec_enter, .cpu_exec_interrupt =3D riscv_cpu_exec_interrupt, .cpu_exec_halt =3D riscv_cpu_has_work, .cpu_exec_reset =3D cpu_reset, --=20 2.43.0 From nobody Sat Sep 26 20:01:31 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1788965425; cv=none; d=zohomail.com; s=zohoarc; b=anwJucJ82XAw1unc3HapLOm3OhpwbF2rs9/ZcGMlTi9P45oRp8TOuhk2NnjtVkfiRVlf8nbMGqXdrmr8jYrVoi/27kPUBgA3nfcBXqNIS6QG9daNCZAi5cGD2pUzzEG4WXYACYeg12c6+t64kcNEWwMdE8x87fMDS4new1k4+fo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788965425; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=rQRIvS4B5EfnTVfHSEcinZ01H6Ql1EnlvJudtDsuPNE=; b=Oq2C/4FJRr8I/J2Z7kZXRKO5Z8caUD2hujxMocG0uw/x4wLR7oj5kKc4mzSWKNvvYsPZYaJplW5Y6IM0q8tC2NxnzZWw1ULAdGPpORbLPKB71Emv1rctHO2J+pHt24Hom3DohuWrzIZt912r2IuSo7qC77iG8J9+rPfr/GzFXdM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788965425590465.884280057727; Wed, 9 Sep 2026 07:50:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x4Jbp-0002jd-B8; Wed, 09 Sep 2026 10:49:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x4Jbk-0002he-Fv for qemu-devel@nongnu.org; Wed, 09 Sep 2026 10:49:04 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x4Jbi-00079i-F0 for qemu-devel@nongnu.org; Wed, 09 Sep 2026 10:49:04 -0400 Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 689CCpxg1401036 for ; Wed, 9 Sep 2026 14:49:01 GMT Received: from mail-qv1-f72.google.com (mail-qv1-f72.google.com [209.85.219.72]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gk78x0ps0-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 09 Sep 2026 14:49:00 +0000 (GMT) Received: by mail-qv1-f72.google.com with SMTP id 6a1803df08f44-90e869793d3so125919846d6.0 for ; Wed, 09 Sep 2026 07:49:00 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([177.18.66.131]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-910464bf898sm125678886d6.7.2026.09.09.07.48.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Sep 2026 07:48:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=rQRIvS4B5Ef nTVfHSEcinZ01H6Ql1EnlvJudtDsuPNE=; b=X6azPIPAm9fJ7/BxfAuQ4+rirSr 6THtdqlEezMZmrjgyhgPDCRvTT4EM/XJzYRuMhvZ09KoFXgwWt5LZTPckawesTc3 0UW4e2tsmhPo+FwV5Msn+xwZd04S3o/hOdl7A+eig4tfdpKTrvX+SLz5i5JavHKy /ZuEiESW1q4Lv5K3H9ZOKcpAdk3nAB+wqAlDweMOi4993jeBiGX+uPZPmkOonrRg 6XMzSbXlEAVoo8Ch+gaXyKbkY2v6Ks6sAtTZVkLSBtOkB30wwfXTDpXqXG2gIuOR tlOsUvgjf8JTjVN83msY/HXIWmlMydfRxWO0TeBRj4QmWd2qAdhEH02mF7Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788965340; x=1789570140; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=rQRIvS4B5EfnTVfHSEcinZ01H6Ql1EnlvJudtDsuPNE=; b=d2rHyUvCAPXaxMJVTwUfjbWMPhI6h9mJB8yEECGjp1oI2l405CjU9iHpz/BrRBGfnJ /dl4KqZpaNHk1jFauJrBAS8WltXIXqJDu7rk3CBw9LbKEWQM0KJeXQQVK0TUsDGkUto2 BWaOAMQfFzyxh7cdLokZsHkBBtLbiXdHqBu0bBumgZYa/wdYOkbblL3kud1EyAS6R4uc CBjP6a2XAaP6I5srJbUWKn2dcNKT/J0n06ScmV2isV7kWWBQjL2D8IPOKtw4qVXacUX4 UW2Q4m7Hv5HFA9ecJ8cs97LK7Qqn1ruDgrraRVOIUpQ98zyjjBiNiIwiQ59+oFIO+DrI bMqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788965340; x=1789570140; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=rQRIvS4B5EfnTVfHSEcinZ01H6Ql1EnlvJudtDsuPNE=; b=Y0dvgQDtkFo7zxq5xdiOvKqovIJHnVW4y0Vzs/ujCldyiXQNh413/wDnu0msmfp59F P6Wu25T0cFMwZjREGyI5OyCxTTUz1o4ILtgfTwmsLnPFQugqeyB95EYpoOQgBva0ap9S lzS6YYX4YdqgoLvqk3wQqPFjn3c6aEdY5+dK5BSjmPmHydcHsZuBJ2OyLJIgczxyJ9yi y84fRrfR0VnjrnJ2dW+WPzoQLeLJwTpt69ECOLIuugRbntb4hU+YHrhzycKsC0gFGbMS GXU9yUq31uep7Jl5HCLEoe8CJF+FEgFvGFD+00/OQ+6NDFE6KH19I0S9140yn7CExxrr yOtQ== X-Gm-Message-State: AFuF++kwGGQVpyl+gOf5XRPGjAlsV8uXw0okhqRxzFd+Pt9eDerWAz68 RCs/m3E9Pn3oTHUD0v2LwTqLiq3Lc/q5j68J+0f4j3hc8PfKUBf5izTQVv0PjwE/vNPtVVibEgQ rVZ599xBgS9SjXwAqRdqmEKh4W9NcGmkB3x30uG/Gz4rRJmdWYoRT3ZvqvviRwhlSSw== X-Gm-Gg: AYBFou2s7q1BEXjkZlgOj2f55lHGlukelE5u6phqghoeun51M9sisaaGKAMMGJI18Si wipDawaFZFeNA0e4fYPlLOR1GBDkJQrs196F7LAo4/7vbHx0udxP0rInmq7r6ffmPKI6plLvYID yHTiE8PP9SJhUSRYU17BMQtll+Mq0zOAVrxMHL+0GnVz115FV0uD7MSelIFJksY9DZWWqx6Twp3 0QJurKLdKN4xqDl2NSz1VQiEe9QuyQzKn+KlDmUmirWkRsXDoRpc6T92vzdWkSMAByncMgGcaiY A0bk4oLSVpUr1vxrAiK/BiSVpqP4zSax48ZdcegFXM+LnAA6peTWCf801yS5J1/YVB5GZOGxs/+ 2bnJVyxAvzhOAEvjez6zEZ7bAL+vXqayaPspL X-Received: by 2002:a05:6214:f24:b0:90e:9a7c:e5a0 with SMTP id 6a1803df08f44-910d0f46e0cmr16784026d6.17.1788965334895; Wed, 09 Sep 2026 07:48:54 -0700 (PDT) X-Received: by 2002:a05:6214:f24:b0:90e:9a7c:e5a0 with SMTP id 6a1803df08f44-910d0f46e0cmr16783536d6.17.1788965334417; Wed, 09 Sep 2026 07:48:54 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, chao.liu@processmission.com, Chao Liu , Daniel Henrique Barboza , Tao Tang , Palmer Dabbelt Subject: [PATCH v9 3/7] target/riscv: add dret instruction Date: Wed, 9 Sep 2026 11:48:36 -0300 Message-ID: <20260909144841.1766921-4-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260909144841.1766921-1-daniel.barboza@oss.qualcomm.com> References: <20260909144841.1766921-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: FEJYDDEJPlHof3In7x8wyqN6Y39ax4te X-Proofpoint-GUID: FEJYDDEJPlHof3In7x8wyqN6Y39ax4te X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA5MDE2NSBTYWx0ZWRfX1Z0gS2IL/rxp XVMAbjyguU6DFmUCnvGxHaROafvgiFmHwfJTSv1LN+Ha6iuEIooOUaXR3h6T5oOO2XLZozRHXOv h1OvBi/Jot6BoUqyFxGyX7fDlUx0GAU= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA5MDE2NSBTYWx0ZWRfXwWJ0pDtfvRiU TDU7VlezXjRddrhCdC7vMBLwHdQ4/JtCoY+WFhwzV5+hAcunUuMAw0cZTHLWIcO+sm//KdOs73O Nhr+WDf2xFeci0bkUraXR6RlR6i4g9OhXOlTgoqh1t63k9qlKWuC21Z+gG792qDCMgx3deUKUUV bARTOn1YIqfzvBPEcBl4Thc/VvSdBjE2Zt/Yb5MvUVyz7TskV7Dqcql9PM7s929gE4eSDLexdNU LE84bpq47NMvS9LE3eSFFv7IuscbJfZ0eJXbHPrMvK03+gPQZjagchn2TyY5M4KdMr+dxCLP6Gy eZbQKBJDr0+4zd4YUVajEHNxGH4nYEl3hUHV6z/HWAawpWgX3BFllWACg6LmBcGbFVb03YbMs3+ KcLoyJQLcsvzIheX9GWkiKqa4TwfKltXh9daOVuX/b/e0V2FbbaW6b/HB5ughN+MbczNj9mOv7k cYT7S/xLbga72Xv8Ojw== X-Authority-Analysis: v=2.4 cv=SvWgLvO0 c=1 sm=1 tr=0 ts=6aa171dc cx=c_pps a=7E5Bxpl4vBhpaufnMqZlrw==:117 a=CQQxcbsX5Byh3TlVSSGwig==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=xvfqbYfxAAAA:20 a=pGLkceISAAAA:8 a=EUspDBNiAAAA:8 a=fgrLqfBXAAAA:8 a=2wZ2TuoAFSEcmpuqsd8A:9 a=pJ04lnu7RYOZP9TFuWaZ:22 a=_Ge82aPy-h_wFa7gWU4u:22 a=bA3UWDv6hWIuX7UZL3qL:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-09_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 spamscore=0 phishscore=0 bulkscore=0 malwarescore=0 adultscore=0 priorityscore=1501 lowpriorityscore=0 suspectscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609090165 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1788965427329158500 Content-Type: text/plain; charset="utf-8" From: Chao Liu RISC-V Debug Specification: https://github.com/riscv/riscv-debug-spec/releases/tag/1.0 Add DRET decode/translate and a helper to leave Debug Mode and return to dpc. Executing DRET outside Debug Mode raises illegal instruction. Signed-off-by: Chao Liu Reviewed-by: Daniel Henrique Barboza Tested-by: Tao Tang Signed-off-by: Daniel Henrique Barboza --- target/riscv/helper.h | 1 + target/riscv/insn32.decode | 1 + .../tcg/insn_trans/trans_privileged.c.inc | 18 ++++++++++++++++++ target/riscv/tcg/op_helper.c | 16 ++++++++++++++++ 4 files changed, 36 insertions(+) diff --git a/target/riscv/helper.h b/target/riscv/helper.h index 4fc2d3a155..b4c47d0738 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -132,6 +132,7 @@ DEF_HELPER_6(csrrw_i128, tl, env, int, tl, tl, tl, tl) #ifndef CONFIG_USER_ONLY DEF_HELPER_1(sret, tl, env) DEF_HELPER_1(mret, tl, env) +DEF_HELPER_1(dret, tl, env) DEF_HELPER_1(mnret, tl, env) DEF_HELPER_1(ctr_clear, void, env) DEF_HELPER_1(wfi, void, env) diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index aa02dae3c9..46b00411ff 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -118,6 +118,7 @@ sctrclr 000100000100 00000 000 00000 1110011 uret 0000000 00010 00000 000 00000 1110011 sret 0001000 00010 00000 000 00000 1110011 mret 0011000 00010 00000 000 00000 1110011 +dret 0111101 10010 00000 000 00000 1110011 wfi 0001000 00101 00000 000 00000 1110011 sfence_vma 0001001 ..... ..... 000 00000 1110011 @sfence_vma =20 diff --git a/target/riscv/tcg/insn_trans/trans_privileged.c.inc b/target/ri= scv/tcg/insn_trans/trans_privileged.c.inc index a8eaccef67..4e57901880 100644 --- a/target/riscv/tcg/insn_trans/trans_privileged.c.inc +++ b/target/riscv/tcg/insn_trans/trans_privileged.c.inc @@ -125,6 +125,24 @@ static bool trans_mret(DisasContext *ctx, arg_mret *a) #endif } =20 +static bool trans_dret(DisasContext *ctx, arg_dret *a) +{ +#ifndef CONFIG_USER_ONLY + if (!ctx->cfg_ptr->ext_sdext) { + return false; + } + decode_save_opc(ctx, 0); + translator_io_start(&ctx->base); + gen_update_pc(ctx, 0); + gen_helper_dret(cpu_pc, tcg_env); + exit_tb(ctx); /* no chaining */ + ctx->base.is_jmp =3D DISAS_NORETURN; + return true; +#else + return false; +#endif +} + static bool trans_mnret(DisasContext *ctx, arg_mnret *a) { #ifndef CONFIG_USER_ONLY diff --git a/target/riscv/tcg/op_helper.c b/target/riscv/tcg/op_helper.c index 3e94005d2b..54269efee1 100644 --- a/target/riscv/tcg/op_helper.c +++ b/target/riscv/tcg/op_helper.c @@ -473,6 +473,22 @@ target_ulong helper_mret(CPURISCVState *env) return retpc; } =20 +target_ulong helper_dret(CPURISCVState *env) +{ + uintptr_t ra =3D GETPC(); +#ifdef CONFIG_USER_ONLY + riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, ra); + return 0; +#else + if (!riscv_cpu_cfg(env)->ext_sdext || !env->debug_mode) { + riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, ra); + } + target_ulong retpc =3D env->dpc & get_xepc_mask(env); + riscv_cpu_leave_debug_mode(env); + return retpc; +#endif +} + target_ulong helper_mnret(CPURISCVState *env) { target_ulong retpc =3D env->mnepc; --=20 2.43.0 From nobody Sat Sep 26 20:01:31 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1788965422; cv=none; d=zohomail.com; s=zohoarc; b=cyLg9jvcdVvZRABU0gfWJKPw62UGn7Fe+VwCucqTElDpLn9y+oRVh1J0hEae3C4IbAsAXKvZ0ND2CEd+iPZ+9SHUmrrb2xmvY3uKDx74Ul0SZlIxnvuE7tnxVWOmY/2qipS6Ar4ZwzDHGlHsKtmI5vc/3E4puZ672pRtepJsbzk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788965422; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=mSiaHjamEiKgBhiTky4VCSqYrt7tGD65LQ7WnvRfMqE=; b=Ourp5OBqFNQ3xA5PAgcEka/rtUB9KwDwogY/ovLt1/igach2gIZaumhqE1Hy6PF5FJkXmKAHwiQCDkTK8gak9DrpC28Cdc/WZVpHourHupCPs5NBcuEyotDFW++bJtRya6W2ovUEZpMuB6rJCE5Lvhy2dx1X3US+PMrNCg9XnTs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788965422467173.6046489488108; Wed, 9 Sep 2026 07:50:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x4Jby-0002mT-Pt; Wed, 09 Sep 2026 10:49:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x4Jbt-0002ke-2a for qemu-devel@nongnu.org; Wed, 09 Sep 2026 10:49:13 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x4Jbp-0007BS-Si for qemu-devel@nongnu.org; Wed, 09 Sep 2026 10:49:12 -0400 Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 689BUFGT2376136 for ; Wed, 9 Sep 2026 14:49:09 GMT Received: from mail-yw1-f198.google.com (mail-yw1-f198.google.com [209.85.128.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gk5ru11sw-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 09 Sep 2026 14:49:08 +0000 (GMT) Received: by mail-yw1-f198.google.com with SMTP id 00721157ae682-845f687dfa2so111506537b3.2 for ; Wed, 09 Sep 2026 07:49:08 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([177.18.66.131]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-910464bf898sm125678886d6.7.2026.09.09.07.48.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Sep 2026 07:48:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=mSiaHjamEiK gBhiTky4VCSqYrt7tGD65LQ7WnvRfMqE=; b=ojDHVwFRLF0qhGoDIqiteDJPNbS MrYFXDcaDyVpXwAuUebM3qsqZIqjTqR5PnyP0fiDQqgixGbctdA0oWF6yHEffdUE 8NPiDQoiIGWfaRv2UhlUg2B5TvNgmiEfg9W9znrShvR72Ml8o0fgB1NRXv6V04xm 897aV+pXcxcb/rY/sJxKTImRfZjxE9bTlGnTtF5vqJRWeH11C5YY/PL+tOX6ucIg 5IQWkzLfMAPhUlpfmV3surU1EIjcDBU8rtTeFRqQx14lVXVUCP2IV0TTpAPHIVuq StHdiVbldFRtcIWADNqGbIxA/IFoyeCOr9ct5PqvsxILhz5e+p6fY7dnI2Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788965348; x=1789570148; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=mSiaHjamEiKgBhiTky4VCSqYrt7tGD65LQ7WnvRfMqE=; b=NDYot32zGiXoAYRE9cRBVl60gEYP45JrWU2yGPgRSBaiz9kXluZUz7G/r8YIOkG3VV uXNe+rarGWkELLXq7IiLG6Hm9eJwcNY2SRAXVksdMGlh/ztG6xY5k7MJg3TzcdOuGB0a SAmwQYrnZ0O+ot2LLEz1wK/k9k3MnIqR97IyQ1xyE/K5QZYTcb3ZS4/VM+XSZsQHEeMT Dkz0F14N8l1NgWOi4z0OPxAckTBLuJ9EhcVo3PxzerVc+jDy2DB4cDZFBYfB5tPGoL2w K2S/iE9yHk+Q6dMmIDpFBIIw6AtpJxHFZ+mzLJHar24qvFFFLrf7EE17VvtB4KieaWen qKbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788965348; x=1789570148; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=mSiaHjamEiKgBhiTky4VCSqYrt7tGD65LQ7WnvRfMqE=; b=Nv63NY2yOtAQyi5tag8mpFDaZcwGB5O+xpsQJTskYYqKtjydyfzAbHJuZdzZAsvi5+ h6MtIEFncAjB4gA7EdrBa1XlaspRaIOrPzxOpdWplPqB3iCJJtQ8GRfAFW2PO7FXnAuf HDFyUkrvZXluWqptzqCXASv1+pNsMk2oOKHX2Fi/qqdfIJlF2hm0NBoi6H8OZbWsklo1 2jRajZdo013u2GeXz7GXOA6ls8KmhIHVLOHa6UJAqzS2t0PGyx+hBQa99MuejvpUdvRH mnfllsUkM0xhdcUwgtcHpuUgxRP8FWiw7SAmudhx3uuqOI6tJ/ecjRdjesUVy7x1IGvU pwvg== X-Gm-Message-State: AFuF++k+jIo72tSVOt9yq7sZH6X8ZRzQbliHjftt5mzYCeQd34+MC3j4 kS77V4wexWWcKiVcC/VDKx0QQMaDyVJFuz4DvAOIQ9iSu1gZ7/1cat/NDXEq69PWx5r8lJTrgR0 LxLNQ91SfPkC5umaGVT/wj8B0gSWs9h94f5CGcNg0DV+EX3ygJ6pzYVsNa+7RDFEtMA== X-Gm-Gg: AYBFou1CZtqGaVkdVTZ2x/OJhJgDf2Uo2PaRtJLE0NrjJMlrvDwfoXgj+bW6OuwwgXi fqIAr5mlE28i/LjuakMY30lep7nN6/aRjFaOH/SjV2+KmAVjCJvQeRTQcLUF3rR4N7llLwvqApA 30CUOgZvku9fsU+WVVntCmd+yWGhg1/tuxMsntwU4GgY9NhxWB/vdpDHjcJ+ZajIoIuK65M+34y 5KXoulnOixPKAMaWEjx8uvX3X3QeiMBxqOBSa8pgXST1Jre71ACNjsQcy9Dl1O/DMPkFXleGRoA O7zVLiUT1E3rqc74WfGzreyNOh49N1z+o0SmGc2svgI+szvbrDAb2QtbmyxnMGaW5b2ZnZSnqwg ZWmTpwQRJgCyNLGFSKNVJOlBTyhHiSl+Wy+3o X-Received: by 2002:a05:690e:11cc:b0:670:fce2:60b7 with SMTP id 956f58d0204a3-670fce26dd9mr3798943d50.84.1788965343312; Wed, 09 Sep 2026 07:49:03 -0700 (PDT) X-Received: by 2002:a05:690e:11cc:b0:670:fce2:60b7 with SMTP id 956f58d0204a3-670fce26dd9mr3798568d50.84.1788965338053; Wed, 09 Sep 2026 07:48:58 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, chao.liu@processmission.com, Chao Liu , Daniel Henrique Barboza , Tao Tang , Palmer Dabbelt Subject: [PATCH v9 4/7] target/riscv: add sdext enter Debug Mode on ebreak Date: Wed, 9 Sep 2026 11:48:37 -0300 Message-ID: <20260909144841.1766921-5-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260909144841.1766921-1-daniel.barboza@oss.qualcomm.com> References: <20260909144841.1766921-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=M+997Sws c=1 sm=1 tr=0 ts=6aa171e4 cx=c_pps a=g1v0Z557R90hA0UpD/5Yag==:117 a=CQQxcbsX5Byh3TlVSSGwig==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=xvfqbYfxAAAA:20 a=pGLkceISAAAA:8 a=EUspDBNiAAAA:8 a=fgrLqfBXAAAA:8 a=ITXOtABjXhpKHoTPUzwA:9 a=MFSWADHSvvjO3QEy5MdX:22 a=_Ge82aPy-h_wFa7gWU4u:22 a=bA3UWDv6hWIuX7UZL3qL:22 X-Proofpoint-GUID: RGhAlYerur4_pny-9nt4NM3XmDdn_GXD X-Proofpoint-ORIG-GUID: RGhAlYerur4_pny-9nt4NM3XmDdn_GXD X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA5MDE2NSBTYWx0ZWRfX1bCK2x13Vgzg 2KERHkaapkIQTRfB7AXYA5DNcautCIXzXtF1k2iNRHPWJPL95zH8fLV5cY1hCQTTCu+JRBT2H/d 7Z2VOPDquJFujavjkk6n+kQjxVdHwVc= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA5MDE2NSBTYWx0ZWRfX+IPjZAoWKrnT dFcyLUNUhhWe3e9ZjAjFP0i6FPbALCB76f+66fXNQcFFEe09HVNHZkRnWeVw81rrv8Brap42fKF 0NWko1x0yoLejRo3bZcARE+Av5PkJE/3oVw6dfKpn2DVYFZmXjZLSFDsk00OFRw7tx0e2NttBIU KOsLFL3r0F0prJ6b5SCWwmQ54+0f/QRlWdQe/W4HblYNly/pn4O0JcXDOUxnMPiOk6qQDPxUXSh MAkBFnmEIdWoNj806vpOehPhxninW436Fx30HXwRuJLr/FLpa2Ds2yCVniGRSU184GZnAhPo9B+ +wmCdV1q1bKl8GXr83ld9QTshAdaGDfitX23znqHiJynbufv7uPAHAXJc4a9EMbyqVZaSzcXDtO dzHdt9krmPXBg5OfXFLbW5s7LEEy2ncyz0wv5zR4Vtj0dqwKEhukZK15P2AGYUQFE3azf8nVmGP POQzIaPkzGMRfhNhy+g== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-09_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 bulkscore=0 spamscore=0 phishscore=0 impostorscore=0 lowpriorityscore=0 suspectscore=0 clxscore=1015 priorityscore=1501 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609090165 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1788965423230158500 Content-Type: text/plain; charset="utf-8" From: Chao Liu RISC-V Debug Specification: https://github.com/riscv/riscv-debug-spec/releases/tag/1.0 Route EBREAK via helper_sdext_ebreak. If Sdext is enabled and the matching dcsr.ebreak* bit is set, enter Debug Mode with cause=3Debreak and stop with EXCP_DEBUG. Otherwise keep the normal breakpoint trap. Signed-off-by: Chao Liu Reviewed-by: Daniel Henrique Barboza Tested-by: Tao Tang Signed-off-by: Daniel Henrique Barboza --- target/riscv/helper.h | 1 + .../tcg/insn_trans/trans_privileged.c.inc | 6 ++++ target/riscv/tcg/op_helper.c | 34 +++++++++++++++++++ 3 files changed, 41 insertions(+) diff --git a/target/riscv/helper.h b/target/riscv/helper.h index b4c47d0738..0d9ae15e3e 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -142,6 +142,7 @@ DEF_HELPER_1(tlb_flush_all, void, env) DEF_HELPER_4(ctr_add_entry, void, env, tl, tl, tl) /* Native Debug */ DEF_HELPER_1(itrigger_match, void, env) +DEF_HELPER_2(sdext_ebreak, void, env, tl) #endif =20 /* Hypervisor functions */ diff --git a/target/riscv/tcg/insn_trans/trans_privileged.c.inc b/target/ri= scv/tcg/insn_trans/trans_privileged.c.inc index 4e57901880..42bf2ffb53 100644 --- a/target/riscv/tcg/insn_trans/trans_privileged.c.inc +++ b/target/riscv/tcg/insn_trans/trans_privileged.c.inc @@ -68,9 +68,15 @@ static bool trans_ebreak(DisasContext *ctx, arg_ebreak *= a) if (pre =3D=3D 0x01f01013 && ebreak =3D=3D 0x00100073 && post =3D=3D 0= x40705013) { generate_exception(ctx, RISCV_EXCP_SEMIHOST); } else { +#ifndef CONFIG_USER_ONLY + gen_update_pc(ctx, 0); + gen_helper_sdext_ebreak(tcg_env, tcg_constant_tl(ebreak_addr)); + ctx->base.is_jmp =3D DISAS_NORETURN; +#else tcg_gen_st_i64(tcg_constant_i64(ebreak_addr), tcg_env, offsetof(CPURISCVState, badaddr)); generate_exception(ctx, RISCV_EXCP_BREAKPOINT); +#endif } return true; } diff --git a/target/riscv/tcg/op_helper.c b/target/riscv/tcg/op_helper.c index 54269efee1..5db4f6aacd 100644 --- a/target/riscv/tcg/op_helper.c +++ b/target/riscv/tcg/op_helper.c @@ -489,6 +489,40 @@ target_ulong helper_dret(CPURISCVState *env) #endif } =20 +void helper_sdext_ebreak(CPURISCVState *env, target_ulong pc) +{ + CPUState *cs =3D env_cpu(env); + bool enter_debug =3D false; + + if (riscv_cpu_cfg(env)->ext_sdext && !env->debug_mode) { + if (env->virt_enabled) { + if (env->priv =3D=3D PRV_S) { + enter_debug =3D env->dcsr & DCSR_EBREAKVS; + } else if (env->priv =3D=3D PRV_U) { + enter_debug =3D env->dcsr & DCSR_EBREAKVU; + } + } else { + if (env->priv =3D=3D PRV_M) { + enter_debug =3D env->dcsr & DCSR_EBREAKM; + } else if (env->priv =3D=3D PRV_S) { + enter_debug =3D env->dcsr & DCSR_EBREAKS; + } else if (env->priv =3D=3D PRV_U) { + enter_debug =3D env->dcsr & DCSR_EBREAKU; + } + } + } + + env->badaddr =3D pc; + + if (enter_debug) { + riscv_cpu_enter_debug_mode(env, pc, DCSR_CAUSE_EBREAK); + cs->exception_index =3D EXCP_DEBUG; + cpu_loop_exit_restore(cs, GETPC()); + } + + riscv_raise_exception(env, RISCV_EXCP_BREAKPOINT, GETPC()); +} + target_ulong helper_mnret(CPURISCVState *env) { target_ulong retpc =3D env->mnepc; --=20 2.43.0 From nobody Sat Sep 26 20:01:31 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1788965434; cv=none; d=zohomail.com; s=zohoarc; b=dspNmeMGdQ7qQsOUcYxZZowJfvBWiECWrXRoK556XGAXSYs8LRruBK12UccRJIevhZlDAtUy1YQlweYXLltMonbb//LJgUJ6qiUz+4XecdMWeLZuszpXJUtf1fDid/j5DKbiE+3nOAvuzVwYX2N5HL2Hkj8s6F04e/Mm7tQIvtk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788965434; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=6xDJVLNp6v1diqmwXjAJksBLyIgVcOAjgYvoDlVpeOc=; b=YK5Ja0kSfyHuHCZ/jg9zGrzdfqaQSYneJkQI2kcsFK7KeL5VfV2tarE7DHMGsItxijs4niIRC/8FieUH0/LGXuWyvprlpLgv/Gxjr3Sg+3SQOtWbYLyLl2fmM6ohCuQxqpB4OAWRKu6/rWMivrPosBLeQKXG8MwwPxXEaQEMd2k= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788965434359795.6188018248223; Wed, 9 Sep 2026 07:50:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x4Jbq-0002k3-NX; Wed, 09 Sep 2026 10:49:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x4Jbp-0002jg-G4 for qemu-devel@nongnu.org; Wed, 09 Sep 2026 10:49:09 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x4Jbk-0007AT-Cr for qemu-devel@nongnu.org; Wed, 09 Sep 2026 10:49:06 -0400 Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 689BU7LQ2375945 for ; Wed, 9 Sep 2026 14:49:03 GMT Received: from mail-qv1-f72.google.com (mail-qv1-f72.google.com [209.85.219.72]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gk5ru11s6-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 09 Sep 2026 14:49:03 +0000 (GMT) Received: by mail-qv1-f72.google.com with SMTP id 6a1803df08f44-91043af01d9so92729846d6.2 for ; Wed, 09 Sep 2026 07:49:03 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([177.18.66.131]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-910464bf898sm125678886d6.7.2026.09.09.07.48.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Sep 2026 07:49:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=6xDJVLNp6v1 diqmwXjAJksBLyIgVcOAjgYvoDlVpeOc=; b=RBRAptCcJDuGLsH7jf32yYRH9gj wI++YSV/apu8D9ricJFEzBg9LEZjWRSR9lwnYQnw367oxideZpoNpzDOynE2ts9D W7VDGc5WUJyCEKVF59JNTY4N35zxidI5PKkMRCZrwRk1BKqEfQcsDXXDKaA2xopf e0W4UpMJJ6k7AIzPcRowIHuqbi0p+dI9BvhJPEkOezp6mRZo4qQXdg4+T9T5z/yE HV3nXCm4THMLSLiIGDVwIzoP2AhcPp6SVLmwT56hAokGC4tIJvfCNdukagEyyo3M YURDn7b2kjxCGIDz11OWB1gwRYbVahktxqBJEtoaNyRJvgMB+yBCaoEITBw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788965343; x=1789570143; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=6xDJVLNp6v1diqmwXjAJksBLyIgVcOAjgYvoDlVpeOc=; b=hRvYjEOOkdskRauzk1j1EjJdq6L6l5dLQFy/PW8sfrZQPLyT/nPeQA/PKCQsI89l8l /4boN5fZ70A/g7j2AspVGuJN9XqqzWbd6GV52Xr2hndRYVztKnYIAlyvjHyQ+XnkqGZe 88Dt+3GBy7RPwDzZQx2T/Weq/lTSW2AvlB2yoTIn4u6XeUIwoRGTkAb2KpZVlIteBcJy 0ZlV309pFwumEmzr4IVqezo+foIDOpekTrx0v2uL4YneAPg9qacfuKc+2XdhXGdtlEa9 hnmtyiugNZ56D0I4aLNJry2J0+zmGTTwlD00w2DKjFFDNWa5Bsa6dBZZSMhlbsW/ODOL JlDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788965343; x=1789570143; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=6xDJVLNp6v1diqmwXjAJksBLyIgVcOAjgYvoDlVpeOc=; b=rpcPnvMiQ/hojBjLfQdUx56CZsLPYOg7txQS3opQNnOrC9ON1bGELao8o2nfT0LvM8 4c6xwUQNip30/f3pRq63wxuVStU9MGzCdNj8UNNhV32Or+KFEG1PLK0Gfqchi6QmIKra 2bK1nxbqkBdQw2z1KKye6m4emvW49MeS/BETbjwslLm8loQlEBqv3JYcFSJRTlSpT1m3 yRQDFBOGn9uG5wteRomZtnwUWdiPVKKHmo0DTPniWZyGQAUVR5tabgV7Hsz/9pbG/s3s Vr53KW+zUM9IrrL42s6EtJ7R2baLp8IDS1DJwGZugxjPimgp4aV8GtbqjEb7hmw/FYPD MGPA== X-Gm-Message-State: AFuF++nJ8q1vMPV3+QueQelvcRlVu/JMK5i4Nq2lkc1CDWKwFXdXilrl jgJ4cOqAAmaaRWioCCK9iYKffLwEEPWYjheUydetP3XuJZx42rFL6rVK+3p3Mb2iboqTyB5SlFT sxKfKOQgWN5E2RlTs9Xu5tz0p5i2Lwy4OrNJc6IcdkGqwbat827qEOYrP+5V/hTjFIw== X-Gm-Gg: AYBFou1GNdDkBscVi33rIJFDHSeiHZ5KtJPBuTDdNeJ5HBJwAam42mLNyb1EleTHHDG e4PFZXvGjOo1h8N//aAFdKP66H0PCI7SfPs7Ckp86uDlBGqvSSFbKCUPp32bZxEFmiGCLZHTsgD 9yteil1MC/MMRVQHV/vkplflhRSGrSJfBTywDmJBET+cbiEk6+J0U4ktfLlzD/EvlkwemXaxJu4 mx4hUtfxiluCTFD9tYqZBoa5Gk+3KQtEC7oYaPCZ/DvxBIflBFIFUsbw+B/J59QiOcNCuR+acek jH1v040CntQq9W+MNm5H7FT4VQZOqdg6+JeEwT/9Hy3MOLSEvtWTZ8OMxKNjKWJDd/s5ye5UZs/ 5W/HZz+OBdLPFy1CHHVOHAVG4WqJh9zmYEqSw X-Received: by 2002:a05:6214:4803:b0:910:3453:670 with SMTP id 6a1803df08f44-9103f0ef6cfmr463665366d6.34.1788965342516; Wed, 09 Sep 2026 07:49:02 -0700 (PDT) X-Received: by 2002:a05:6214:4803:b0:910:3453:670 with SMTP id 6a1803df08f44-9103f0ef6cfmr463664556d6.34.1788965341734; Wed, 09 Sep 2026 07:49:01 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, chao.liu@processmission.com, Chao Liu , Daniel Henrique Barboza , Tao Tang , Palmer Dabbelt Subject: [PATCH v9 5/7] target/riscv: add sdext single-step support Date: Wed, 9 Sep 2026 11:48:38 -0300 Message-ID: <20260909144841.1766921-6-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260909144841.1766921-1-daniel.barboza@oss.qualcomm.com> References: <20260909144841.1766921-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=M+997Sws c=1 sm=1 tr=0 ts=6aa171df cx=c_pps a=7E5Bxpl4vBhpaufnMqZlrw==:117 a=CQQxcbsX5Byh3TlVSSGwig==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=xvfqbYfxAAAA:20 a=VwQbUJbxAAAA:8 a=pFyQfRViAAAA:8 a=pGLkceISAAAA:8 a=EUspDBNiAAAA:8 a=fgrLqfBXAAAA:8 a=tgk7fgI0p9FEwYF5lhYA:9 a=pJ04lnu7RYOZP9TFuWaZ:22 a=oJz5jJLG1JtSoe7EL652:22 a=_Ge82aPy-h_wFa7gWU4u:22 a=bA3UWDv6hWIuX7UZL3qL:22 X-Proofpoint-GUID: LzoPHPg7ZHaFBdNHE7FgalaigS4po79D X-Proofpoint-ORIG-GUID: LzoPHPg7ZHaFBdNHE7FgalaigS4po79D X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA5MDE2NSBTYWx0ZWRfX8jdQ+d9AgnKk ZbF4S1FqGBYdPyYpTskNBe8u3bBy9xjppXCSCFxterH0mPwwy77J6GUjwET24YLls12CRzsaRz/ BEGsmYTcMRrudPla8nqlK8t4+mIuEZg= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA5MDE2NSBTYWx0ZWRfX6EbiwMyPoJhH f1nJj5VNi5Ot0dFNm8lbygJnac2B8Qe4+uYtI26I9g9rcBJPtePL4MP2U49vozr7odISiiI285a wdxjre2kTI9PMXybcTIeCUi2kwAaCRIBKB2JM4O9Xw1FhOuj+5k2OoXjFOU48vKfVT+I9BJOBJD 3rn2cl8jea4vAGaDNFWhXjDGUlV+UnHeZXO325RhlA+F956WFiXNNSQ9kCTyI6h7UJ8Y24A43Z9 TTyccIwjPGrfKlO3az/eqMnZZU/WONveLkV8wywXsXVIIMrAHjqO6tQ27q94gA0fxFYf3oBfhLJ rz9ZBe00hYNM9NPAH8j06kgKzdfuzfOebc/eyuCr31Jh3NgmmJDwYz5gggzmICWUORobiBrXAdm fExCzPY3Q7hk/SLbq2u2u0L2s5IGYgDAFLPrBjKrYtqrl65SfZL+3dClOfnGO3QlIYHnQby+g9j IUFDNJN3qCQGaT1RVNw== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-09_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 bulkscore=0 spamscore=0 phishscore=0 impostorscore=0 lowpriorityscore=0 suspectscore=0 clxscore=1015 priorityscore=1501 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609090165 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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_LOW=-0.7, SPF_HELO_NONE=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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1788965435217158500 Content-Type: text/plain; charset="utf-8" From: Chao Liu RISC-V Debug Specification: https://github.com/riscv/riscv-debug-spec/releases/tag/1.0 Use a TB flag when dcsr.step is set (and we are not in Debug Mode). When the flag is on, build 1-insn TBs and do not chain to the next TB. Add a TB-exit helper that enters Debug Mode with cause=3Dstep and sets dpc to the next pc, then stops with EXCP_DEBUG. If dcsr.stepie is 0, do not take interrupts while stepping. Treat WFI as a nop so the hart does not sleep during a step. PS: This patch references Max Chou's handling of ext_tb_flags. https://lore.kernel.org/qemu-devel/20260108132631.9429-6-max.chou@sifive.co= m/ Signed-off-by: Chao Liu Reviewed-by: Daniel Henrique Barboza Tested-by: Tao Tang Signed-off-by: Daniel Henrique Barboza --- include/exec/translation-block.h | 4 ++-- target/riscv/cpu.h | 2 ++ target/riscv/helper.h | 1 + target/riscv/tcg/cpu_helper.c | 6 ++++++ target/riscv/tcg/op_helper.c | 20 ++++++++++++++++++++ target/riscv/tcg/tcg-cpu.c | 5 +++++ target/riscv/tcg/translate.c | 15 +++++++++++++-- 7 files changed, 49 insertions(+), 4 deletions(-) diff --git a/include/exec/translation-block.h b/include/exec/translation-bl= ock.h index 40cc699031..ee15608c89 100644 --- a/include/exec/translation-block.h +++ b/include/exec/translation-block.h @@ -64,8 +64,8 @@ struct TranslationBlock { * x86: the original user, the Code Segment virtual base, * arm: an extension of tb->flags, * s390x: instruction data for EXECUTE, - * sparc: the next pc of the instruction queue (for delay slots). - * riscv: an extension of tb->flags, + * sparc: the next pc of the instruction queue (for delay slots), + * riscv: an extension of tb->flags. */ uint64_t cs_base; =20 diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 82eb61a18c..db49ad7682 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -755,6 +755,8 @@ FIELD(TB_FLAGS, PM_SIGNEXTEND, 31, 1) FIELD(EXT_TB_FLAGS, MISA_EXT, 0, 32) FIELD(EXT_TB_FLAGS, ALTFMT, 32, 1) FIELD(EXT_TB_FLAGS, BIG_ENDIAN, 33, 1) +/* sdext single-step needs a TB flag to build 1-insn TBs */ +FIELD(EXT_TB_FLAGS, SDEXT_STEP, 34, 1) =20 #ifdef TARGET_RISCV32 #define riscv_cpu_mxl(env) ((void)(env), MXL_RV32) diff --git a/target/riscv/helper.h b/target/riscv/helper.h index 0d9ae15e3e..5193440e1c 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -142,6 +142,7 @@ DEF_HELPER_1(tlb_flush_all, void, env) DEF_HELPER_4(ctr_add_entry, void, env, tl, tl, tl) /* Native Debug */ DEF_HELPER_1(itrigger_match, void, env) +DEF_HELPER_1(sdext_step, void, env) DEF_HELPER_2(sdext_ebreak, void, env, tl) #endif =20 diff --git a/target/riscv/tcg/cpu_helper.c b/target/riscv/tcg/cpu_helper.c index e6d948991c..a7344b1be2 100644 --- a/target/riscv/tcg/cpu_helper.c +++ b/target/riscv/tcg/cpu_helper.c @@ -500,6 +500,12 @@ bool riscv_cpu_exec_interrupt(CPUState *cs, int interr= upt_request) if (interrupt_request & mask) { RISCVCPU *cpu =3D RISCV_CPU(cs); CPURISCVState *env =3D &cpu->env; + + if (cpu->cfg.ext_sdext && !env->debug_mode && + (env->dcsr & DCSR_STEP) && !(env->dcsr & DCSR_STEPIE)) { + return false; + } + int interruptno =3D riscv_cpu_local_irq_pending(env); if (interruptno >=3D 0) { cs->exception_index =3D RISCV_EXCP_INT_FLAG | interruptno; diff --git a/target/riscv/tcg/op_helper.c b/target/riscv/tcg/op_helper.c index 5db4f6aacd..489aac28e7 100644 --- a/target/riscv/tcg/op_helper.c +++ b/target/riscv/tcg/op_helper.c @@ -489,6 +489,22 @@ target_ulong helper_dret(CPURISCVState *env) #endif } =20 +void helper_sdext_step(CPURISCVState *env) +{ +#ifndef CONFIG_USER_ONLY + CPUState *cs =3D env_cpu(env); + + if (!riscv_cpu_cfg(env)->ext_sdext || env->debug_mode || + !(env->dcsr & DCSR_STEP)) { + return; + } + + riscv_cpu_enter_debug_mode(env, env->pc, DCSR_CAUSE_STEP); + cs->exception_index =3D EXCP_DEBUG; + cpu_loop_exit_restore(cs, GETPC()); +#endif +} + void helper_sdext_ebreak(CPURISCVState *env, target_ulong pc) { CPUState *cs =3D env_cpu(env); @@ -621,6 +637,10 @@ void helper_wfi(CPURISCVState *env) (prv_u || (prv_s && get_field(env->hstatus, HSTATUS_VTW))))= { riscv_raise_exception(env, RISCV_EXCP_VIRT_INSTRUCTION_FAULT, GETP= C()); } else { + if (riscv_cpu_cfg(env)->ext_sdext && !env->debug_mode && + (env->dcsr & DCSR_STEP)) { + return; + } cs->halted =3D 1; cs->exception_index =3D EXCP_HLT; cpu_loop_exit(cs); diff --git a/target/riscv/tcg/tcg-cpu.c b/target/riscv/tcg/tcg-cpu.c index 959a1e89c8..16d26cee5c 100644 --- a/target/riscv/tcg/tcg-cpu.c +++ b/target/riscv/tcg/tcg-cpu.c @@ -196,6 +196,11 @@ static TCGTBCPUState riscv_get_tb_cpu_state(CPUState *= cs) ext_flags =3D FIELD_DP64(ext_flags, EXT_TB_FLAGS, MISA_EXT, env->misa_= ext); ext_flags =3D FIELD_DP64(ext_flags, EXT_TB_FLAGS, BIG_ENDIAN, mo_endian_env(env) =3D=3D MO_BE); +#ifndef CONFIG_USER_ONLY + if (cpu->cfg.ext_sdext && !env->debug_mode && (env->dcsr & DCSR_STEP))= { + ext_flags =3D FIELD_DP64(ext_flags, EXT_TB_FLAGS, SDEXT_STEP, 1); + } +#endif =20 return (TCGTBCPUState){ .pc =3D env->xl =3D=3D MXL_RV32 ? env->pc & UINT32_MAX : env->pc, diff --git a/target/riscv/tcg/translate.c b/target/riscv/tcg/translate.c index 9684dbe752..1a38d6aeb5 100644 --- a/target/riscv/tcg/translate.c +++ b/target/riscv/tcg/translate.c @@ -112,6 +112,8 @@ typedef struct DisasContext { bool ztso; /* Use icount trigger for native debug */ bool itrigger; + /* Enter Debug Mode after next instruction (sdext single-step). */ + bool sdext_step; /* FRM is known to contain a valid value. */ bool frm_valid; bool insn_start_updated; @@ -286,6 +288,9 @@ static void lookup_and_goto_ptr(DisasContext *ctx) if (ctx->itrigger) { gen_helper_itrigger_match(tcg_env); } + if (ctx->sdext_step) { + gen_helper_sdext_step(tcg_env); + } #endif tcg_gen_lookup_and_goto_ptr(); } @@ -296,6 +301,9 @@ static void exit_tb(DisasContext *ctx) if (ctx->itrigger) { gen_helper_itrigger_match(tcg_env); } + if (ctx->sdext_step) { + gen_helper_sdext_step(tcg_env); + } #endif tcg_gen_exit_tb(NULL, 0); } @@ -309,7 +317,8 @@ static void gen_goto_tb(DisasContext *ctx, unsigned tb_= slot_idx, * Under itrigger, instruction executes one by one like singlestep, * direct block chain benefits will be small. */ - if (translator_use_goto_tb(&ctx->base, dest) && !ctx->itrigger) { + if (translator_use_goto_tb(&ctx->base, dest) && + !ctx->itrigger && !ctx->sdext_step) { /* * For pcrel, the pc must always be up-to-date on entry to * the linked TB, so that it can use simple additions for all @@ -1350,6 +1359,7 @@ static void riscv_tr_init_disas_context(DisasContextB= ase *dcbase, CPUState *cs) ctx->bcfi_enabled =3D FIELD_EX32(tb_flags, TB_FLAGS, BCFI_ENABLED); ctx->fcfi_lp_expected =3D FIELD_EX32(tb_flags, TB_FLAGS, FCFI_LP_EXPEC= TED); ctx->fcfi_enabled =3D FIELD_EX32(tb_flags, TB_FLAGS, FCFI_ENABLED); + ctx->sdext_step =3D FIELD_EX64(ext_tb_flags, EXT_TB_FLAGS, SDEXT_STEP); ctx->zero =3D tcg_constant_tl(0); ctx->virt_inst_excp =3D false; ctx->decoders =3D cpu->decoders; @@ -1402,7 +1412,8 @@ static void riscv_tr_translate_insn(DisasContextBase = *dcbase, CPUState *cpu) =20 /* Only the first insn within a TB is allowed to cross a page boundary= . */ if (ctx->base.is_jmp =3D=3D DISAS_NEXT) { - if (ctx->itrigger || !translator_is_same_page(&ctx->base, ctx->bas= e.pc_next)) { + if (ctx->itrigger || ctx->sdext_step || + !translator_is_same_page(&ctx->base, ctx->base.pc_next)) { ctx->base.is_jmp =3D DISAS_TOO_MANY; } else { unsigned page_ofs =3D ctx->base.pc_next & ~TARGET_PAGE_MASK; --=20 2.43.0 From nobody Sat Sep 26 20:01:31 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1788965425; cv=none; d=zohomail.com; s=zohoarc; b=WEi/ejXcKkzN24yMMv6Gzt9DlJ63jk1N0zyq4Y+yNrON44rby7n656nfvySBk0as5Ton+CtQhiFbaZUWa+BH8xSbVLiv3zTOENUHm8w8KjwSd0my5rcAw0qKKKmCNjbdVJkG7/mv2LM0Cs/Al04HF2fMpeKhHQJo6LdYcymDB7A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788965425; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=agsb+31+gBTrXzGhEiv94ST7wrQa2woGkjbFulwC/V4=; b=UkmOvfiaDAGUxJ2SKA87MAizQ6I5+WpNPObzlp7EvXKHpMzlIRm94+WmvjwXiRKn4JRW1cg22vzyIDtMtATYhr4FGOOwAZ7agE2y36eX+xrQHsBlIuHIOxIzxE2bVszPDNR25EoMzhNvKXS29v/V7/71IgtSHKYCUsuetwfW1KQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17889654252891018.4211595485757; Wed, 9 Sep 2026 07:50:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x4Jc1-0002rK-Jo; Wed, 09 Sep 2026 10:49:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x4Jbz-0002p9-TI for qemu-devel@nongnu.org; Wed, 09 Sep 2026 10:49:20 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x4Jbx-0007Ei-Nq for qemu-devel@nongnu.org; Wed, 09 Sep 2026 10:49:19 -0400 Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 689CCxvg3053161 for ; Wed, 9 Sep 2026 14:49:16 GMT Received: from mail-qv1-f71.google.com (mail-qv1-f71.google.com [209.85.219.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gk7920pfn-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 09 Sep 2026 14:49:15 +0000 (GMT) Received: by mail-qv1-f71.google.com with SMTP id 6a1803df08f44-9106fce784dso11606856d6.2 for ; Wed, 09 Sep 2026 07:49:15 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([177.18.66.131]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-910464bf898sm125678886d6.7.2026.09.09.07.49.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Sep 2026 07:49:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=agsb+31+gBT rXzGhEiv94ST7wrQa2woGkjbFulwC/V4=; b=UQ4rCdHVP1dsw4FSOIUCIIH2drO qI8DfJk+PXnp0/MSvIbIGUCfbmQ57a+SQTPDPUSu4WkEE7p1BSSeUzvUU28MB3gc zXvpn4JfnwPqeXAHwNj/Vk4OyT4DnYN0rZwrscTRgRrxUAjGYqRQfBMfsQBBef/C JAkVn6RSaSF5yylQBOhJ9ouIYrnC0M0yl75EgDsBkKDHsSiacb8oTyeJerA6eSDf agBAeR6Ex8QAoDPVTbist3zOvBdR+8OPmHPauXOY8+LUX0Th7QgAiQq4+wY0T2k1 mcyFW3qB25+UYTrIPQsd2CU4eMuZD6/jOwjc+Bma/jp47gfK/kBwiUmdJEg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788965355; x=1789570155; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=agsb+31+gBTrXzGhEiv94ST7wrQa2woGkjbFulwC/V4=; b=F2mR5dzClVDjgA/mR+SY8rD0vaJ7MWb/XD6Kt5d672fTHriSnbw80W1K+AYuHybIiU 6un0BczMnZZfqWqgr7QzOaIMh6NGG/OHeW/uycOMmpBKG39lzXqtDr7WGUZ209O0aBSE JRUu9Izr9mkhjfaqW5W8sFr+3mWkely51nn2y+E28WovuIDXmuIPi0tRp9oXqXvlaOr8 cMJqZgc0kIOOSoq9zv66JZeA/yU8c7bLsS/0zstt4t+k/nc9Cjoq4L9GuWyvuMHFSJzk 7eK6UiCr3H0Ns448qR4yjTOlVHFO8Vv1jpblx5aJJuaIg48Qq237r1UUP8ey62m+NJh7 Bxxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788965355; x=1789570155; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=agsb+31+gBTrXzGhEiv94ST7wrQa2woGkjbFulwC/V4=; b=Sc/aHJXmvw6dS9kXI3rgu+v/igJi0tSyDeM6cs2b07jgBK7SvezW1HLN2mpgstBf9W 1PhtG5A0WR74jyJK/EhukKlqbbIVC01+W+W9MM15dDnhdVvuRS/2EbO8zz2K5oQXCcMu Q9X/ok4Y9FKIQnMVJ9Hldrip2w+r4BIsKoc4irkIivGzUru8uV7e2p0CerI5qFDKuzIJ Xf5SAzsEiMvmhjQnnTRKiOwA+pO4RvOOYfXhguAOWkT6tE6saMeUN7k8sqXxaOEWaexS gRi5D0644ZWbcVoPdbq96lph++0oUghTjHU4Q8WS7L0y2ih7vUiyXEJ8lz+h03Y2PP+J 9yOQ== X-Gm-Message-State: AFuF++lcizJY5MHGyxUk4yYJs/193IIPMbp1l/pV01j4FjJnvsEOqyih cATiKAcIzkNHQZRaerUqCfApgNw/tunEnZ+C837Ybu7Js15xehPPrD+BLF0r3z5FQ2TRyEsqPnb IcM1o8AbMgF6d5NNSDG/WiG9DkVCW9wrrnI7oab7Cv6a8Xtr91GQZXT/pUdS+sohQXA== X-Gm-Gg: AYBFou1SIOgxhoppdMx4S4lU8klTn9gGQA68nbBAr9o/KGHnmtbFJzaguFxh7mm5aVI Q0y6LUipgNzvELjfHWMgE8VKGiwyLgy7+AgCdl7sf9XeD4XDfntSu8X8u/s+p6HFFT+D8LH7brX 4fiipMDPIcRLvLj6psgbFR+3WLfs9imVF7Wod1MBiIi+/sTEdHpZG67PGEjv/9alU9uQuaV7i9z cCX0UH5B/OKpppViovFbUTa9hwVJDomUmdhkZL12j8BHzPx3+vSXNDRZ6Dgvt5p03BtaKM7zNdB ZBbP9tBq4NlOBCQIbiL2rBY8lnwAoi/9q5wcnO7WWx9CywZqc+Md1T/A3YLBZuqC93ghQyJ9jQh i/qY6nKz0e4OpBro+fX9x1NuIaFEuaz7lYB2i X-Received: by 2002:a05:6214:2b92:b0:90c:c6fd:e8fe with SMTP id 6a1803df08f44-910d106b56emr26589716d6.30.1788965349728; Wed, 09 Sep 2026 07:49:09 -0700 (PDT) X-Received: by 2002:a05:6214:2b92:b0:90c:c6fd:e8fe with SMTP id 6a1803df08f44-910d106b56emr26581006d6.30.1788965344415; Wed, 09 Sep 2026 07:49:04 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, chao.liu@processmission.com, Chao Liu , Daniel Henrique Barboza , Tao Tang , Palmer Dabbelt Subject: [PATCH v9 6/7] target/riscv: add sdtrig trigger action=debug mode Date: Wed, 9 Sep 2026 11:48:39 -0300 Message-ID: <20260909144841.1766921-7-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260909144841.1766921-1-daniel.barboza@oss.qualcomm.com> References: <20260909144841.1766921-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=bd1bluPB c=1 sm=1 tr=0 ts=6aa171eb cx=c_pps a=UgVkIMxJMSkC9lv97toC5g==:117 a=CQQxcbsX5Byh3TlVSSGwig==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=xvfqbYfxAAAA:20 a=pGLkceISAAAA:8 a=EUspDBNiAAAA:8 a=fgrLqfBXAAAA:8 a=jq8im54kr7_wP6Zmv5cA:9 a=1HOtulTD9v-eNWfpl4qZ:22 a=_Ge82aPy-h_wFa7gWU4u:22 a=bA3UWDv6hWIuX7UZL3qL:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA5MDE2NSBTYWx0ZWRfXx/9hdy6ky71l t5gFjYwagfoWupIcNrY8TEzv/nQmJMlUtsOeV79Z4vh+TxJAU6wkkhZVVNSfKKOqen4DH0cEGYm KFv9D2K6PGR8tQ8Ux6Bis50Ome72XdrGuzSWQyIEhRIHSF4bss4DnANd8g3L1kQbGqXCVs4jaDN nbBLAaxC2gvWmabMUDm2QVyWJA5OW08z7EIdfyoiMRXimDIVv9Nj3rqWrYfILs8zmdcaaabK9LS 2loQ8HBD/vR4B11KA8TiTnZoU3ZGKeGv10a3aF2dWhUVUYTKNNOX6jTL+H07FIPyALt3/8ZWUpv WflLClm0NxhjYb8BWo19ytQopQjk0aW8GLZeSNb4YUt8iJvoq3KEpbPEJ0FQUBlpBU2RoY8coo2 LY50n53enYLUdPTr7nCFXl/emDUFUIb3o5thw16EmBgsmUtq/vesQ/Q5542/UCi/uoBRM3g7R9/ 4HgBVEwZR0Fy2B6nusQ== X-Proofpoint-ORIG-GUID: PnKXPELMTyIIsyI4dvuzdnnimqf86jkK X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA5MDE2NSBTYWx0ZWRfX8I2w8xYRH8Lf a7x89SqJGPcVIJe4k/ygf1RQKkkQQgppDFa3nPoahbD3i+w/lsKObF/cJz47AYti3bS7lDoEDDd 9n80ei2Q187egbEsGuAtALNVa8//Tro= X-Proofpoint-GUID: PnKXPELMTyIIsyI4dvuzdnnimqf86jkK X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-09_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 clxscore=1015 spamscore=0 lowpriorityscore=0 suspectscore=0 bulkscore=0 impostorscore=0 phishscore=0 priorityscore=1501 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609090165 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1788965427375158500 Content-Type: text/plain; charset="utf-8" From: Chao Liu RISC-V Debug Specification: https://github.com/riscv/riscv-debug-spec/releases/tag/1.0 Allow mcontrol/mcontrol6 action=3D1 when Sdext is enabled. When such a trigger hits, enter Debug Mode with cause=3Dtrigger and stop with EXCP_DEBUG. Also report inst-count triggers in tinfo and read their action field. Signed-off-by: Chao Liu Reviewed-by: Daniel Henrique Barboza Tested-by: Tao Tang Signed-off-by: Daniel Henrique Barboza --- target/riscv/tcg/debug.c | 54 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/target/riscv/tcg/debug.c b/target/riscv/tcg/debug.c index 2537515f54..aaf2dca17e 100644 --- a/target/riscv/tcg/debug.c +++ b/target/riscv/tcg/debug.c @@ -34,6 +34,7 @@ #include "exec/watchpoint.h" #include "system/cpu-timers.h" #include "exec/icount.h" +#include "accel/tcg/cpu-loop.h" =20 /* * The following M-mode trigger CSRs are implemented: @@ -117,6 +118,8 @@ static trigger_action_t get_trigger_action(CPURISCVStat= e *env, action =3D (tdata1 & TYPE6_ACTION) >> 12; break; case TRIGGER_TYPE_INST_CNT: + action =3D tdata1 & ITRIGGER_ACTION; + break; case TRIGGER_TYPE_INT: case TRIGGER_TYPE_EXCP: case TRIGGER_TYPE_EXT_SRC: @@ -287,6 +290,7 @@ static target_ulong textra_validate(CPURISCVState *env,= target_ulong tdata3) =20 static void do_trigger_action(CPURISCVState *env, target_ulong trigger_ind= ex) { + CPUState *cs =3D env_cpu(env); trigger_action_t action =3D get_trigger_action(env, trigger_index); =20 switch (action) { @@ -296,6 +300,21 @@ static void do_trigger_action(CPURISCVState *env, targ= et_ulong trigger_index) riscv_raise_exception(env, RISCV_EXCP_BREAKPOINT, 0); break; case DBG_ACTION_DBG_MODE: + if (!env_archcpu(env)->cfg.ext_sdext) { + qemu_log_mask(LOG_GUEST_ERROR, + "trigger action=3Ddebug mode requires Sdext\n"); + riscv_raise_exception(env, RISCV_EXCP_BREAKPOINT, 0); + } + riscv_cpu_enter_debug_mode(env, env->pc, DCSR_CAUSE_TRIGGER); + /* + * If this came from the Trigger Module's CPU breakpoint/watchpoin= t, + * we're already returning via EXCP_DEBUG. Otherwise, stop now. + */ + if (cs->exception_index !=3D EXCP_DEBUG) { + cs->exception_index =3D EXCP_DEBUG; + cpu_loop_exit_restore(cs, GETPC()); + } + break; case DBG_ACTION_TRACE0: case DBG_ACTION_TRACE1: case DBG_ACTION_TRACE2: @@ -448,6 +467,7 @@ static target_ulong type2_mcontrol_validate(CPURISCVSta= te *env, { target_ulong val; uint32_t size; + uint32_t action; =20 /* validate the generic part first */ val =3D tdata1_validate(env, ctrl, TRIGGER_TYPE_AD_MATCH); @@ -455,11 +475,25 @@ static target_ulong type2_mcontrol_validate(CPURISCVS= tate *env, /* validate unimplemented (always zero) bits */ warn_always_zero_bit(ctrl, TYPE2_MATCH, "match"); warn_always_zero_bit(ctrl, TYPE2_CHAIN, "chain"); - warn_always_zero_bit(ctrl, TYPE2_ACTION, "action"); warn_always_zero_bit(ctrl, TYPE2_TIMING, "timing"); warn_always_zero_bit(ctrl, TYPE2_SELECT, "select"); warn_always_zero_bit(ctrl, TYPE2_HIT, "hit"); =20 + action =3D (ctrl & TYPE2_ACTION) >> 12; + if (action =3D=3D DBG_ACTION_BP) { + val |=3D ctrl & TYPE2_ACTION; + } else if (action =3D=3D DBG_ACTION_DBG_MODE) { + if (env_archcpu(env)->cfg.ext_sdext) { + val |=3D ctrl & TYPE2_ACTION; + } else { + qemu_log_mask(LOG_GUEST_ERROR, + "trigger action=3Ddebug mode requires Sdext\n"); + } + } else { + qemu_log_mask(LOG_UNIMP, "trigger action: %u is not supported\n", + action); + } + /* validate size encoding */ size =3D type2_breakpoint_size(env, ctrl); if (access_size[size] =3D=3D -1) { @@ -576,6 +610,7 @@ static target_ulong type6_mcontrol6_validate(CPURISCVSt= ate *env, { target_ulong val; uint32_t size; + uint32_t action; =20 /* validate the generic part first */ val =3D tdata1_validate(env, ctrl, TRIGGER_TYPE_AD_MATCH6); @@ -583,7 +618,6 @@ static target_ulong type6_mcontrol6_validate(CPURISCVSt= ate *env, /* validate unimplemented (always zero) bits */ warn_always_zero_bit(ctrl, TYPE6_MATCH, "match"); warn_always_zero_bit(ctrl, TYPE6_CHAIN, "chain"); - warn_always_zero_bit(ctrl, TYPE6_ACTION, "action"); warn_always_zero_bit(ctrl, TYPE6_SELECT, "select"); warn_always_zero_bit(ctrl, TYPE6_HIT, "hit"); =20 @@ -593,6 +627,21 @@ static target_ulong type6_mcontrol6_validate(CPURISCVS= tate *env, warn_always_zero_bit(ctrl, TYPE6_TIMING_0_13, "timing"); } =20 + action =3D (ctrl & TYPE6_ACTION) >> 12; + if (action =3D=3D DBG_ACTION_BP) { + val |=3D ctrl & TYPE6_ACTION; + } else if (action =3D=3D DBG_ACTION_DBG_MODE) { + if (env_archcpu(env)->cfg.ext_sdext) { + val |=3D ctrl & TYPE6_ACTION; + } else { + qemu_log_mask(LOG_GUEST_ERROR, + "trigger action=3Ddebug mode requires Sdext\n"); + } + } else { + qemu_log_mask(LOG_UNIMP, "trigger action: %u is not supported\n", + action); + } + /* validate size encoding */ size =3D extract32(ctrl, 16, 4); if (access_size[size] =3D=3D -1) { @@ -959,6 +1008,7 @@ void tdata_csr_write(CPURISCVState *env, int tdata_ind= ex, target_ulong val) target_ulong tinfo_csr_read(CPURISCVState *env) { target_ulong val =3D BIT(TRIGGER_TYPE_AD_MATCH) | + BIT(TRIGGER_TYPE_INST_CNT) | BIT(TRIGGER_TYPE_AD_MATCH6); =20 if (debug_trigger_version_1_0(env)) { --=20 2.43.0 From nobody Sat Sep 26 20:01:31 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1788965422; cv=none; d=zohomail.com; s=zohoarc; b=QBS4UWg4DxFGLC9iItKh/xRUicFRjFX9zKVz61W3jyUKrIC4ZFrwIGU/3DuAnFDA4iCXNiZRKuGgdyNZLETuXbejN2pk54IoFyfcfM3Ka9NNVciZGgObv4GkCbIOjvAGQsz0jOXlxd+1ghSSXahdqTcInHihpRugcF13WpDv1zI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788965422; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=zdD492Xt6kCItyItAdMpgXFLX67x5JL6tQl71pJj8kI=; b=hqkJt3cASO9fe3gDILLS+r7BT4fn9NteoQze0T05qVF6IoXajIy2ow4QUAiNcCOPiJzvg/Xpgvx53HbRjmeJkh1N2FUn0AIIza/VHpsYLE+gv5e9srDN4JDmudvlJeHIoVhD+9pj5jTaxKKv69qh3Io23cNDwZFOjuVIFZDsI8w= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788965422975978.8335903157993; Wed, 9 Sep 2026 07:50:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x4Jc0-0002pn-6F; Wed, 09 Sep 2026 10:49:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x4Jbu-0002ku-A1 for qemu-devel@nongnu.org; Wed, 09 Sep 2026 10:49:15 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x4Jbp-0007BQ-RU for qemu-devel@nongnu.org; Wed, 09 Sep 2026 10:49:14 -0400 Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 689BoUIL2698507 for ; Wed, 9 Sep 2026 14:49:08 GMT Received: from mail-yw1-f197.google.com (mail-yw1-f197.google.com [209.85.128.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gk6xh0saw-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 09 Sep 2026 14:49:08 +0000 (GMT) Received: by mail-yw1-f197.google.com with SMTP id 00721157ae682-836c9f68dcbso113724157b3.0 for ; Wed, 09 Sep 2026 07:49:08 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([177.18.66.131]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-910464bf898sm125678886d6.7.2026.09.09.07.49.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Sep 2026 07:49:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=zdD492Xt6kC ItyItAdMpgXFLX67x5JL6tQl71pJj8kI=; b=iNO9NRfdgLKzbMHpJRKcgpE4o7x jK9QucEdDfz7zD1JqA75nTm8VSQ4odhLydcSP1psq8L30plMG5JVWRPWE6veJLhr +cX8J+ZzYoQ7/Kl9BsH7XET8G6zRfEPZXtsmH1BRmDCQj+XBVTxtRZKNJ3LssBuc WK4OBYJ5P73dB3yVrUElQzaSxBLyz6AG6HXlii5D0CDBzUexW/iv4ISniK+irF3m z7cehvVaRVeIThOhkfk2Hn+NZMwoAGVxcJbuNQrUkN3aQfFFU2xth0W4oqz6E3Kg 6KEN8bpv5HyW9BsO8scIv3UDYK3uAAcee9oIf0XtzZ/2JUksIsZpVI+bEZQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788965347; x=1789570147; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=zdD492Xt6kCItyItAdMpgXFLX67x5JL6tQl71pJj8kI=; b=PEjBUIAcSz2f8gLkSJKyRHH6+KrgwJA6BzESWnQBC2qoblHe1AElFxOHQd6BNtnX3Y I6ZbmUM0aFbKBS6qrvTioEepHBVO2AoLJpMl8xzQWeSw9eninDxmJ1ioHJkyyatWKMpn ZAqXvvCwANyjraoyuhcPDTf3l8IMXWK0UjboLsqhW2sMSDeKgK6A00cmtxaFl1aRQb8a 1GfBUrstZ43fDtrZu7hWGbJojukraDX5HHV+HAOAdTmrHDyMeVwM430/5Mn8hhT3T6i+ UWTNySUo1zEuxKH+H+kTrjG7v8PJXdPkWxBRtE+QsOm4FDF24R9vs0Xm+ZB+/+zzVB7V zKKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788965347; x=1789570147; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=zdD492Xt6kCItyItAdMpgXFLX67x5JL6tQl71pJj8kI=; b=U98KKfBbhNijCChzOYSqHte5nGOeBxsK7sc4AIxtCdbUo8vTmxfNYdq4VPZ4T5zO7I GiKGqzzGeGFKesKkzGvIKEcMWF0cGcU+Edw7SCscWubd6s558J4evL7rlpTWjeycAeqJ +E723rWbBGzPi5Q/0ZZoZqNODKFOtfCWQgm0fz23tRF0R2xHuXto+4pB5fR5eFtO3jOd pyFLj/EkzSXR+wdZArT7HYeqsYseo4zPN14lh7UXFEJIiqUFrO5XcBPsWCc7aPcgemHx 4puFQgQsd8fPQE4AUbwrEEadcERfamil6htCRdySl5AmOJwGePQmJJ+yB5r0BuarGokK xo4A== X-Gm-Message-State: AFuF++mRqXIjrHartBYkO2WHCvhf8Niux0YGqMf6dUnWI1PVXHF8BPF3 1Kns/so5uDZDVd5xpOnJI0tV5IdqO6nT5RCNHMKWn+DmxGj3M9E8Tsy5jb7RAKNKfEnysgECjP5 ZYGblQJh/4FQmxceDrr4XALNNsm+BgDfx+QWU1ZsNalxeI+oUyuTvlgKs19F4JbZMPA== X-Gm-Gg: AYBFou1w4NxiQYLIOM2pjGFJ7ApwRcsGv2f9RJ132gNLC76jxUdk481M6JRA7Ug6vMW KGq0Rw0sDlNIExdC94wx487zrB7yAjGTBzY9JuX/n6sbf+J8Y5ZciHtWuvL6QGKjX/mPdHmijec nvsa6x3LtqBdFQJK2qQD5WRq3Lh/PKRUPy7CR4hTq2Djk0kow3KyTSsezek0JIxlF5iTIknW1jM ZLFOmCBmfmIHTsBH/xLgiYwbovYL2pllO53B4lqIpleGGjGfYyaoekKHcyMkNN7/ARJQJyavnGZ /soMQAMFjqp4Q/dGwI0B5XLqUdItWV+JoFWnLX6d5Vaqc6dbIJ04ZeBtwvMYWF5WMQLuG+/9s8B TIgUq5S0z04V8K1ryW3rJa23imFQCud0EB6Eg X-Received: by 2002:a05:690c:4f10:b0:86f:e98c:fbfb with SMTP id 00721157ae682-871284f6f3emr109361277b3.15.1788965347345; Wed, 09 Sep 2026 07:49:07 -0700 (PDT) X-Received: by 2002:a05:690c:4f10:b0:86f:e98c:fbfb with SMTP id 00721157ae682-871284f6f3emr109360757b3.15.1788965346841; Wed, 09 Sep 2026 07:49:06 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, chao.liu@processmission.com, Daniel Henrique Barboza , Palmer Dabbelt Subject: [PATCH v9 7/7] tests/tcg/riscv64: add sdext "not on Debug mode" sigill tests Date: Wed, 9 Sep 2026 11:48:40 -0300 Message-ID: <20260909144841.1766921-8-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260909144841.1766921-1-daniel.barboza@oss.qualcomm.com> References: <20260909144841.1766921-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA5MDE2NSBTYWx0ZWRfX8642ld7zpr4/ epCqUbd1j6saxpl0plab+Hl0x+4yNMlrLPVhv+MFlzImfnT1kZ3x7dwt8ju011a2a8zIFFq3iGL CoawnVsYRMHCm2gL7jorvQwZBSzTIEobMN9KBqw2L1ZkdfuzvmHUdP0YMVl2YmOZGgB/TfLFRiF bQFVnLB+ZrABLJ+XildxP6uxzDZYvMnxMUYlGooRS4jOw+LOOPZ25C3MmJQ9DmlEWCFDZ7QlqYk PZuza3k/ePjOk7PwdiUwADVDVAks2NYMtuTxG4e9CR7sCIelGBqJYxnmCoe/m87JL/Fev4adRke KIthqb+lPxZs0uhavg12+0E3cBSSXF27o+XDry1lm4xq59dvzj/ooFI913xS9Ogr3ldXnEF5r2u dtTm8EImU2jwVZ92p85WpPXePu2c+8G0SkA2AffQJNnl8SU1PZ3QA3aXZ48OUk1ueVb31hPlecc IyFyxp3dmaEjwRlZgrg== X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA5MDE2NSBTYWx0ZWRfX7PQ7Vlh/AIZ1 UuYpT2UOgOgLVkz4TwR3avqZQooLgZIqqKxUTGB/HlY5IW1i2kkGNNrZXOh65EL+2+zbFl0d5ok 3lbPy+2rgdP9bjonXc7HJnFh4Lw7fq0= X-Proofpoint-GUID: siw6KG78PlENUt_byyDISTYF-YPldR6s X-Authority-Analysis: v=2.4 cv=KOlqylFo c=1 sm=1 tr=0 ts=6aa171e4 cx=c_pps a=0mLRTIufkjop4KoA/9S1MA==:117 a=CQQxcbsX5Byh3TlVSSGwig==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=lQlWDN6XiApmBSmPJFMA:9 a=WgItmB6HBUc_1uVUp3mg:22 X-Proofpoint-ORIG-GUID: siw6KG78PlENUt_byyDISTYF-YPldR6s X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-09_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 priorityscore=1501 spamscore=0 impostorscore=0 phishscore=0 lowpriorityscore=0 bulkscore=0 suspectscore=0 clxscore=1015 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609090165 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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_LOW=-0.7, SPF_HELO_NONE=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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1788965424963158500 Content-Type: text/plain; charset="utf-8" Adding proper TCG automated tests to sdext CSRs requires enabling gdbstub support for riscv64, which we don't have, since the nature of the CSRs added is that they run in a higher privilege than M mode. DCSR has bits to allow for context switching from other modes to Debug mode, but those bits must be set via an external entity (e.g. gdb) beforehand. What we can do for now is a "negative" TCG test to ensure that we'll throw illegal insn traps when trying to write sdext CSRs in machine mode. Signed-off-by: Daniel Henrique Barboza --- tests/tcg/riscv64/system/meson.build | 8 +++ tests/tcg/riscv64/test-sdext-sigill.S | 83 +++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 tests/tcg/riscv64/test-sdext-sigill.S diff --git a/tests/tcg/riscv64/system/meson.build b/tests/tcg/riscv64/syste= m/meson.build index 8604c2a45a..6a836994e6 100644 --- a/tests/tcg/riscv64/system/meson.build +++ b/tests/tcg/riscv64/system/meson.build @@ -61,6 +61,14 @@ tests +=3D { } } =20 +tests +=3D { + 'test-sdext-sigill.S': { + 'exe_name': 'test-sdext-sigill', + 'cflags': cflags + ['-march=3Drv64gcv'], + 'qemu_args': ['-cpu', 'rv64,sdtrig=3Dtrue,sdext=3Dtrue', qemu_args], + } +} + if 'qemu-system-riscv64' in emulators tcg_tests +=3D { 'riscv64-softmmu': { diff --git a/tests/tcg/riscv64/test-sdext-sigill.S b/tests/tcg/riscv64/test= -sdext-sigill.S new file mode 100644 index 0000000000..80a6c06465 --- /dev/null +++ b/tests/tcg/riscv64/test-sdext-sigill.S @@ -0,0 +1,83 @@ +/* + * RISC-V sdext extension "SIGILL" test: check if sdext CSRs + * and 'dret' will throw SIGILLs outside of Debug Mode. + * + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +.equ CSR_DCSR, 0x7b0 +.equ CSR_DPC, 0x7b1 +.equ CSR_DSCRATCH0, 0x7b2 + + .option norvc + .text + + .global _start + +_start: + la t0, trap_handler + csrw mtvec, t0 + + dret + j _fail + + li t0, 1 + csrw CSR_DPC, t0 + j _fail + + li t0, 1 + csrw CSR_DSCRATCH0, t0 + j _fail + + li t0, 1 + csrw CSR_DCSR, t0 + j _fail + + li a0, 0 + j _exit + +_fail: + li a0, 1 + +/* Exit through the semihosting SYS_EXIT_EXTENDED call with a0 as the code= . */ +_exit: + la a1, semiargs + li t0, 0x20026 /* ADP_Stopped_ApplicationExit */ + sd t0, 0(a1) + sd a0, 8(a1) + li a0, 0x20 /* TARGET_SYS_EXIT_EXTENDED */ + .balign 16 + slli zero, zero, 0x1f + ebreak + srai zero, zero, 0x7 + j . + + + .balign 4 +trap_handler: + csrr t4, mcause + la t5, trap_mcause + sd t4, 0(t5) + csrr t4, mtval + la t5, trap_mtval + sd t4, 0(t5) + csrr t4, mepc + + /* + * Skip 2 insns (8 increment in mepc) to skip both the + * insn that caused the trap and the "j _fail" insn + * that follows it. + */ + addi t4, t4, 8 + csrw mepc, t4 + mret + + .data + .balign 8 +semiargs: + .space 16 +trap_mcause: + .space 8 +trap_mtval: + .space 8 --=20 2.43.0