From nobody Sat Sep 26 20:01:37 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=1788781681; cv=none; d=zohomail.com; s=zohoarc; b=YupoQoO8IzC8JdRhvuGAlyV5ksr3cP7JVZ2irN3RtS9vMJ4bdB27hNvnrPLyo/oEUYXNDFoO0DBdUDP3HgQSvLdryuxgKV7V5xoLrmqc1s4X/s+DKbMv92fnhU31wAcJZ13Jju/InUhh9iglErkdc/VwlkrfHEgaUO4pHDWTkAQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788781681; 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=SM7MtFv4BNBsgJqZcEG5MOgQiwjcmD01gdu+WKc/Lbw=; b=IgWZ/Aab5kuP1ptYjvSCodzbmS4DE1zoV2KI6MY4msemey8YqJyeAAU60CKh42cb0BqhmJFik2Qq1FrlRyJBO7BVGk2bm7eHODtjOdcEVMN1UaqTO5F0YESlR6yxKbOJF8H/lzp8Z7fYQ/NXLkJiMM3E6v9eg6an0LQ8kUXJovg= 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 1788781681046546.2775538286578; Mon, 7 Sep 2026 04:48:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x3XoA-0002iH-8z; Mon, 07 Sep 2026 07:46:42 -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 1x3Xo1-0002gs-5C for qemu-devel@nongnu.org; Mon, 07 Sep 2026 07:46:33 -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 1x3Xny-0003ES-E3 for qemu-devel@nongnu.org; Mon, 07 Sep 2026 07:46:32 -0400 Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 687AnGic3863138 for ; Mon, 7 Sep 2026 11:46:28 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 4ghq66hn22-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 07 Sep 2026 11:46:28 +0000 (GMT) Received: by mail-qv1-f72.google.com with SMTP id 6a1803df08f44-90e7db8d191so79899386d6.1 for ; Mon, 07 Sep 2026 04:46:28 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([177.18.66.131]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-91040679e13sm89834876d6.26.2026.09.07.04.46.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Sep 2026 04:46:26 -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=SM7MtFv4BNB sgJqZcEG5MOgQiwjcmD01gdu+WKc/Lbw=; b=HFdwrwXYpiTR8MYtjxrzioBfEZq HE4hKFgWxk/VUAwPwyuFBFbXHzraorMCsiz0dxBEUh+5eBipPosSfa/uk3nkr3Uu e4gPd8wWrH9JnjGZPppF1PfYah4votJtnEWtNLKDB1wjW8XIXFN1uOT8iyWy+NTq mpMaY9V11ytdrd6W3WaPokEUDgQdEF7qGWnFZoPVCW7H2fee+vDcfd7m5zezNCCM G1GJKr3eKSI/VFn2mQiI7xKruokMZ3ikVuP2B3eMd3TusFUebxlLBcjSZqb93g0X LGbY8SC0U7mHen/ASxH/xKwvMjZmvUe9G+ZOKgAjKbPEFS/Ywx4MMMg2+iw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788781588; x=1789386388; 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=SM7MtFv4BNBsgJqZcEG5MOgQiwjcmD01gdu+WKc/Lbw=; b=W1jylKGlb4fh9yZqgcykTnwPxHt1zrKzkyTz/KKJ1hwkBC3FUXddJjrgclfhH0AcgF FTaFHZ3HdAtjx/4pH3sYIxa1zThAtQKzLG3rYMxx1MQAcu2KxEAHLSOOs3ps1w3IWkZQ g9Lv6u3MMc9Y8B7kF9Yl3S8A5JPLtZm/GbaXhIOiwS3ojsCLrdKR84f5bizQvRUFV848 RXWS9gh2iDTeEhyX1Ys4TG7JaLp0B7d5/3gOpQxbrTI8unv54VRJGsHH2NSmCKoTqVEU vPzxhaEtaeW+I4L4DH2+6cvLi2tCn+IPe/cy0vKjwTaU4iB3g7h9Ux5jsYPLYtFuKWXc qh0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788781588; x=1789386388; 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=SM7MtFv4BNBsgJqZcEG5MOgQiwjcmD01gdu+WKc/Lbw=; b=Be6OhikhVT1xNGKfppJ3b2E9tBTeM+45LCEZ/FxhKIomuZtKV+benc+dkG5QnwWMcS MfEszy6qsDMVto6CrUpAuEmi2iIe+LcJVSbkK+ObTV3V9kPjNo3Vp2JQCDkpC/7ZRdoT hi53sCRWw0V0Q6um5KJO8qx9LzWZJlDDhPSewdYBDLaNpNxuLhicWu6smCyf/I3WK05b 0JS887uSFC4+0qRms0hJAP9N+Qbbxu6Zrmt8QELQAyf0tIcNqMoKoDaK6Y3xxdJvJqrw s62fXGLzYew0jM1sCQSMvZC20cIwSCCutOnbED8LVfBJoNPbMWq7FJ6Iyel486mRlYBN z3hg== X-Gm-Message-State: AFuF++l8GY2+AQNjMdRgnkrXd7FtDifo7kTunLib0qeeat6a8EDDJppY CWrsicefaWqH/U92eaEqzTh49Npz/8eGY/ysXEXnlqLoWw/utZvD76xZdbO+AoyNP6wG3SjWT9M zSfBtSkImpTVJLlX9A0MaDnmcG3E1+q1Ry34UHWxWh+EJBiSy8AuKefVQEL1elfsM2g== X-Gm-Gg: AYBFou39h2pgK/gf1PbCWROHr/PkMfhXaDxdkofT8F1SuKBFUny1kbyeGoQ4WcU1w12 wmtUfWeGH9msNs+w76XG+VvWW9vG0zrlQOlIU3RnfT5uQ+qJRdenXVGSe6eoew49U+x4f54tTr6 eGEbnRzncgaMBq3v0l7fAzebx8FDynXLJ3UxrxZ3bd/+ERH1EVpxB7VVGYFlyQ2AXXViL3gBLtt zYOIfJTWEuX2ngqI6u3gOBUggJ8L/p1m6KOVMfhKWekvJfX1TCV8TDs4MJcX05geh4U7SdRj5yw qV2FSpyd1mm6eUcZlMGRfUpY7Gus2dV3dF+/0h4LIrhcYWLxGJAbMYJzXtin9XGHymuAZa0crOy 84bWDZgeOjkk7Kn5O7PZpvfk/sITXz+8DaNB5 X-Received: by 2002:a05:6214:85d4:20b0:8ef:e0d0:9fae with SMTP id 6a1803df08f44-9103ef2ddb7mr201189006d6.14.1788781587739; Mon, 07 Sep 2026 04:46:27 -0700 (PDT) X-Received: by 2002:a05:6214:85d4:20b0:8ef:e0d0:9fae with SMTP id 6a1803df08f44-9103ef2ddb7mr201188646d6.14.1788781587240; Mon, 07 Sep 2026 04:46:27 -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 v8 1/7] target/riscv: add sdext debug CSRs state Date: Mon, 7 Sep 2026 08:46:08 -0300 Message-ID: <20260907114615.1609913-2-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260907114615.1609913-1-daniel.barboza@oss.qualcomm.com> References: <20260907114615.1609913-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=QPhYgALL c=1 sm=1 tr=0 ts=6a9ea414 cx=c_pps a=7E5Bxpl4vBhpaufnMqZlrw==:117 a=CQQxcbsX5Byh3TlVSSGwig==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=xvfqbYfxAAAA:20 a=pGLkceISAAAA:8 a=EUspDBNiAAAA:8 a=fgrLqfBXAAAA:8 a=8aUGYKOvqt1NoZA4oJ4A:9 a=pJ04lnu7RYOZP9TFuWaZ:22 a=_Ge82aPy-h_wFa7gWU4u:22 a=bA3UWDv6hWIuX7UZL3qL:22 X-Proofpoint-GUID: BdYLR61uvIi3KgQ3HW8_yFKc8Bul2hbT X-Proofpoint-ORIG-GUID: BdYLR61uvIi3KgQ3HW8_yFKc8Bul2hbT X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDEzMCBTYWx0ZWRfXwYFq8zrh+cDI roqme2uIVB8BXkjGeRhBrk+dTVV4/V7qnXo4MfXbmLf0KO5UCe9CV5wmo/g7t5g33FBJXc6toc4 CRyrD9ZFcwEt5D6iqtX83jC+4ZfVHnA= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDEzMCBTYWx0ZWRfX9XZw0VCb2OBV ET0KGr4ax/1QECSPav9mMXkQrIrtjNdF95sZUEoqkkLxpPJ/HrqdLSlSgbjTp8SGbfI0sSrbzyP 9rvtg9gP1c3riSzx0k00ji1p2ADwY0SvZyL9AKzRpdM6Q/MmYn1vInlFmMiGu5m7qF+OtTXXzwJ /MbFAAlJDlxIlfe9Y9htIQHGluH5y3BdhMBteZuXfRb59p5/mHtCOGZOY2nmkPmf10TbYvlXekD Vo0hTYvDELXb9ok5Qj0l8oQnucq96R3nF9lTGBvwrd5lpAcvrfYmHDl6FBG1+5WqjqW2cxIt894 cfvm4pbcJq0oEbK/Q8s0bJPgWCTe/iGe3cgXT3JRCdWaBBxeX0A8lS7gs0CdS8RfKWIPJCrqaYo uOzjJZKJZo/dh/qv43u7BP/28A50/31PyXJh3kL+D/60nCCAt8Zv+DGcskJZQCXkr5d43XYKbkK mthez+fQsG/0F6joLDQ== 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-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 suspectscore=0 adultscore=0 spamscore=0 priorityscore=1501 bulkscore=0 lowpriorityscore=0 impostorscore=0 malwarescore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609070130 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: 1788781682031158500 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 652311ddef..c71986da61 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:37 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=1788781681; cv=none; d=zohomail.com; s=zohoarc; b=l/V5R4B2CwKnw6aYOZ7LY42zDhz7ZGvSiXELJi6UIFNN1PIFbN3NpK6CFSC0CG/1DqfNJR3AZulLnUarQ9zuCjWYPi2FjTKhSkttkRzOc1WJW3OgeXCNPH1FaSIcgg5oLA8y7am2euUXckHh04WHFe7AItnpLCyjbJlRvjfa/Zw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788781681; 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=WlKjhlqD8hVQwSafCBRtE3wtpKx0iv0hIXrlkPrQeu/UZhSsqT+DjEpGwp8faOX4bSD4wYa2E6Mux/FCFpgVXHADIfr0SuH1rVhgO77ryBPnztROaK1pfAHVQd5UntL8BjzeNSqt4cyUlbg3THPbTnFbHyS3WQl0Tk0Qx+H0S0w= 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 1788781681275309.98879361262937; Mon, 7 Sep 2026 04:48:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x3XoH-0002kI-Of; Mon, 07 Sep 2026 07:46:49 -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 1x3Xo2-0002h7-QS for qemu-devel@nongnu.org; Mon, 07 Sep 2026 07:46:35 -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 1x3Xo0-0003Eu-S2 for qemu-devel@nongnu.org; Mon, 07 Sep 2026 07:46:34 -0400 Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 687AmxaL3180859 for ; Mon, 7 Sep 2026 11:46:31 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 4ghsw20scy-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 07 Sep 2026 11:46:31 +0000 (GMT) Received: by mail-qv1-f71.google.com with SMTP id 6a1803df08f44-90e8472ee1eso59395896d6.0 for ; Mon, 07 Sep 2026 04:46:31 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([177.18.66.131]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-91040679e13sm89834876d6.26.2026.09.07.04.46.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Sep 2026 04:46:29 -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=Hdab29kfzr6BxLSeorw+bQGirfE Pma9jlgcecwJbMALO94hxSvYi5SOPGzkJac5AeSzjCaG3tRmn6w8DGE/iKl7TmpJ KEWtMORy5IsB87Cw5fMcLbACyHyCHjVkxoNX37wLxzBqTLftRb8D3NS0oxY4Dimy Z3tMBWoIU+ZdsyYqeYKd9ZGYrBLsron1TXYHZxb9LHd+ZRGnC9OSozSEZmBOHFLk i89ZLyoZI1gadgdtHVmgHwN636rYJwbr+pu3RfId5swSCcxxcgcHrH9a4WaKn8PG U0dJPIbvgxpLLVM5Ilp4DJ0EkHN/K6JgeAjpLPralook/uo6NdhX2aPHUxw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788781590; x=1789386390; 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=HYS4Nu+bJ3PSe/ccFivg6PeLe9Q2HDJ0ytHGpyZMMTdr7ROn1BFzeEttZZ8rSfYAT0 8co/22dw+QDhaWHI0dZ/04dd//uDKkZO4cA0vBu3RhIRrxvPc9BwvydM6Njhm6pAllvl mCjM9SBG7tddFVsiUfr9geuntFG8nJSO2tjc7w0HlENMX3uHSt3prNLt7i3nhAs0ggD9 QHxZMnYjqWrEPPYsxvwmtPqqkJZ5qzrk56CIs5tm4PKwE4VAwdTdL4dr0BFuKYmej3EX XIxmUVm8Vy9zqwpcgtSOubNYLrtWflw9T0Uz06EhuTfCYRCcxefCy3gsNIBSDqZWZRd+ /l0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788781590; x=1789386390; 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=BJTeZ3CLW7hnsx8T6IqA3KZPXmgJJqYlg2hU4AoUTZN9cp58FWZiSC765mYPdwsBF+ xCAFYaTVeZiu0oL/PQS7NBFsAen/7ayLYH1WKiY+FHKgJ0PAAmpydR79Fh+aJc1Uta1q UeOwNMKXWWCnCyCqA6OwKF+gzrOBPIzRJA80Flg2Ef5aRpDQRzPKp1V0SDtXAb3TcoMK DZpJyIOVT8iWJ2p+Y8qTIMi0bD4kWr6vXgcRMrsuC5gXajGWDkSjgI+yKvKf+y67K7y+ cH/vlXNdvWCIV3GMdMq/GR98WhAW+cTQ5+e78K5tGI+JfHORPIKp+3nP8eQoqmO7ZdIW KcBg== X-Gm-Message-State: AFuF++no80PEU86fteWZskAjK70GVlJ6N2TDUV2YWrq/Fei5ErAJCjfz DkcGQH0CQ0OJ1QmDTYK0kOoPzrSEbt4MGQQCRojpLqvuEamdHTx5U7xj/O9SXqu59FN5rVt1RSm yNIaM4Q7Olx480SA1TUBqJ47yfe3ouvNc+k1MWdUJh23C4NrwCjoHsoMcoBh3bQs6pA== X-Gm-Gg: AYBFou1WeCInqcNtOXjb9ojUQpRz45+2PyjHYHV8i+wzn1wIgvE9V6NAdNjEGIYKU2p trJbeEFtOScGXWZDvKgsR3VUXnQYCmIGbAbXcNdvetTodRLKDEVfDtrtAUZlN6Bz74/uGR354cn F1djysArBJn3GIbkGmvnDtPTXT3msMmFOD6RldtRGXXVIdxfErTyUR4ZIlHP9rB4tivqNlCwU7C 2DPl1vIZN4W/PiM2bm7cncZZm+P/uadw5VBvdqqPCmwouFnKY5ykzHy8/ygKfjvHYvqANpDHmPr 7Hs157xRRO1ZbOc7j+lquFetvG1cJpiHk0v/cG8ehVDeNHNmn1x9sdMO6LXGbxURAX4XPAvELU4 ypu1sJwKzl90DBhCC8q+UHTbpS4I6ObLn4NlQ X-Received: by 2002:a05:6214:4689:b0:910:345a:b805 with SMTP id 6a1803df08f44-9103f0de5e6mr319838936d6.36.1788781590220; Mon, 07 Sep 2026 04:46:30 -0700 (PDT) X-Received: by 2002:a05:6214:4689:b0:910:345a:b805 with SMTP id 6a1803df08f44-9103f0de5e6mr319838326d6.36.1788781589734; Mon, 07 Sep 2026 04:46:29 -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 v8 2/7] target/riscv: add sdext Debug Mode helpers Date: Mon, 7 Sep 2026 08:46:09 -0300 Message-ID: <20260907114615.1609913-3-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260907114615.1609913-1-daniel.barboza@oss.qualcomm.com> References: <20260907114615.1609913-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: RndTv1rFpHtYIPrdlQ9KGiEIS2A3b2xq X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDEzMCBTYWx0ZWRfX1AyEuCDycf2D sl9j5enx6DV2d5MMRLDEw/BM56YGh7iDGLxtCG/vMQd2hDHwiWRJoV8G0ncNMcKEK+VZSmHb6qp drTskO/Vq38IAPEhJJASL4piKbKuJ0c= X-Authority-Analysis: v=2.4 cv=eKwjSnp1 c=1 sm=1 tr=0 ts=6a9ea417 cx=c_pps a=UgVkIMxJMSkC9lv97toC5g==:117 a=CQQxcbsX5Byh3TlVSSGwig==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=xvfqbYfxAAAA:20 a=pGLkceISAAAA:8 a=EUspDBNiAAAA:8 a=fgrLqfBXAAAA:8 a=Mp8isO8jnsZoTyD_AnUA:9 a=1HOtulTD9v-eNWfpl4qZ:22 a=_Ge82aPy-h_wFa7gWU4u:22 a=bA3UWDv6hWIuX7UZL3qL:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDEzMCBTYWx0ZWRfX5KtMjKu3Uw3O u1LJezq652lEC9+pnvNhtwENjEv6LdIzAS3VwKm5uQj7DMk+y3Tngd/st7DqyT8YP3rVIpYdOy9 ytSZmSSF1x/Ln47OfbWRKtphJakHmVHGdU/V+QPx0CbACOOjbqh41aJEczo2BOETX7pWqxsKEmp lTFlUM/sq5MaJMQGa1NH+8lFXWOLeBZZcgcWsaEP08g1owa+BPgvUv7eWJ9lN/ggy1hCkZ8Vpxf LUeomh0AGySQwcvSjEWYjHr1peEmYUyRu/DQdk5nK1SAjMmDC9wgdbmD2Pgj3LBCGjh90B/kFsW M7a65De34JF3K9hdORDAj1UBT3rbgyUhPdd/6SzbKxNIAbzEgDrK0I8aH50Mk4NFTMwCD9iwWWA URkgQmQ8L3wem2xJ/XEZsn0AIewlcAnLsEBw67oSZdE/pmSYCdqXxy5dHXbNYNdcA7uorYUg9w6 4FzE8SqeOI6W1GnWCJw== X-Proofpoint-GUID: RndTv1rFpHtYIPrdlQ9KGiEIS2A3b2xq 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-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 lowpriorityscore=0 malwarescore=0 priorityscore=1501 suspectscore=0 clxscore=1015 adultscore=0 spamscore=0 phishscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609070130 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: 1788781684717154100 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:37 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=1788781691; cv=none; d=zohomail.com; s=zohoarc; b=fAKn2kpeqw4pjZ6u/fLjyn2NtcH2mLUlVD5uLZmPLKGxAklrfAFkA607e3gYjedQ7hLJp/c9SyKydyT4I+5hGM9BCzMRqTEh3S3Wc5adeidJ3ArhjlcKOB+XSG7nbXkI59hydh0hRKGVz50qHPIZa32gQk/Djn3MWLzmHySA8o8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788781691; 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=Ty9Fhfw5cA+wEiHV3RJiRjrztwuWoo3LjSf7T7fk52s3OIV7Pb4JUB69IOicXGN/kc4zAl0vYt8gb0XIealsA3xAeKGoI8kjuTanUM5u/9mZ0NIJJ+Ih23/Qg54wimLbsUbYcYKRsywq7orWwdm5tjYvGSP7peDpN7IP68OLeLw= 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 178878169134438.42180433213855; Mon, 7 Sep 2026 04:48:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x3XoR-0002sy-Fj; Mon, 07 Sep 2026 07:46:59 -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 1x3Xo5-0002iE-5L for qemu-devel@nongnu.org; Mon, 07 Sep 2026 07:46:40 -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 1x3Xo3-0003FQ-5x for qemu-devel@nongnu.org; Mon, 07 Sep 2026 07:46:36 -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 687AvKYD496165 for ; Mon, 7 Sep 2026 11:46:34 GMT Received: from mail-qv1-f70.google.com (mail-qv1-f70.google.com [209.85.219.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ghuyk852w-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 07 Sep 2026 11:46:33 +0000 (GMT) Received: by mail-qv1-f70.google.com with SMTP id 6a1803df08f44-9102f07f2fdso76466706d6.0 for ; Mon, 07 Sep 2026 04:46:33 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([177.18.66.131]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-91040679e13sm89834876d6.26.2026.09.07.04.46.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Sep 2026 04:46:31 -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=Jr1/YFrtmYToCltqTwneyOSSWOF 9gfJIIdJLxvUAB6qoZLUIJcoW/oQJXfNhjXKITXzmsdov/SQt7kgOpIBDBWFpVGU 64eGviFsj16lX+mvmI3PLgjHnzjC11NyGVnLO5iTXqSm1EIbmVclrPQzgQSSGCAl NLSu+oSdsF68o81VxICFN0kqe0Ds05k4DtU+ScE8rZ4B7JldhejJ4mIsmiF7LLFJ HickOgTbiLYQFKEvXTa3/3VX6CPHmmmQIy655ATyX+prvQJYsRa/kttRXQe0kRKR 9DVbpSYlpAmrL08L9yaKJxwuq1Mi+LOnyDbvMdieMV/+qljH0EH9zB98F1Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788781593; x=1789386393; 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=KHBbfDRw69bXLBYS5wnVAzqknT0m1YT4JszMSl/wL00F+x4XSc7ed7ftofUziO/XKE q1lf5PtFRfh5TLTx1obPdhLArOMR/FOf4SCGArcjCl1nthcbFSLQo1ZholWX8gcNKMtn vbHZI6HLCXzrUGSlek1z2R0yJwyBfDQ9F1/n6NVf/aDTM7p6Tpwq+k1dmZJtkE2KDdmB pYIpUr3S/LYpay4vEGG3s6Hq+NFM2xtkREUwx2IimZYF4tCXSGJ5frXTG15RXCGJMAj1 +A/+NcYG9nJwzFZqVHwtYFhqilNZDI/4J2+N1yTqynP6FXr5FwctNBIX0D2O8+g1Zu4F sV5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788781593; x=1789386393; 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=BxjDT6vM4EUoH4IK+y3xRUBbgzkOZ+1+hmJ2yav9WAuTyHgnFmysOPkpNFTIS/LrJ6 VA/jskFFh55LqTQJDZQy3UTyFVrDTMepE8GqZDkFEmYXe+JnqiH+Lf6J4F8qv4SGc4ct pa+wvNqWh9m4ZhukR6edjLugSpiKYB+3sdkyaD7+uw8tmzPWvwZ9stV8i8QR0+lKBBkn Pt/UfhrXXzfW2ApdbfnMUbyHaz/5DDnLc9PPFN3Lu9YQhoMugXthN1ituAmGQINf9fLk xNRWW2LreCqkL9uZ2HMD3BEcvUIOBBAE+CsXDvDySWJA/8Jw+ZINy81xPy88k1KrI5bc XhKQ== X-Gm-Message-State: AFuF++l/lbgh0v1fjVad4qzlwOhCPnt3mqzu5ljKR/TFdaHYax+laP4z 9ju/c+cLP9+Ui6nKqqE7h4BmQrMemwSvB0rFfjLM7lHZHf443w8d2oebQlHTwwCLAdu5cKCmUOJ wS39cv4kT9Daanx8azacxTg1UV1p3sPQC+Edzdm0dydac7zessTd8mYBWWH9Esg4sEQ== X-Gm-Gg: AYBFou1bPxZ1QJzOUMA2rTimZDE0cMrnTdN8Dfk+ogvDkKakgFKxk/VitV+BS/lmgMI KSdliyzNPM+xC/udQRNeBlG/NdmK3xtTr5QjKm6/8itexeaTrkBe9u1X8LwPEHtWQlIPfmRyE1j Ia5Pkl3bTo85cacb7GZTShTBn91d/Zlr4jIiBDoUGccCT2ZrVC5YBW6GNeF9td0aBU0Q0KcIedT 26wBwYna61JQ3IfrrV+1nOMU8dk9cy2ZERPW0hBLCxV1zK2Df6cgsq0eOUClOTlkh68nenWhKss z5LJJgIplRxrqd4cANDCbgx+KjKPmFgxud5xOzDXT06fp9OhV8n5yyXMnlvORR/3nustVw50Dk5 wj57Y/sr7+VNYd/UuLUcGf2O/pDy+SCe9sTA9 X-Received: by 2002:a05:6214:4001:b0:90e:940d:afe6 with SMTP id 6a1803df08f44-9106202083dmr4093836d6.15.1788781592716; Mon, 07 Sep 2026 04:46:32 -0700 (PDT) X-Received: by 2002:a05:6214:4001:b0:90e:940d:afe6 with SMTP id 6a1803df08f44-9106202083dmr4093496d6.15.1788781592267; Mon, 07 Sep 2026 04:46:32 -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 v8 3/7] target/riscv: add dret instruction Date: Mon, 7 Sep 2026 08:46:10 -0300 Message-ID: <20260907114615.1609913-4-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260907114615.1609913-1-daniel.barboza@oss.qualcomm.com> References: <20260907114615.1609913-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDEyOSBTYWx0ZWRfX/7EzO5lhVw7t MKEbcf22EdeGGBeq1ZCnaA4MidDQ0jC7q8nW3hD4H41cllllT9CHLGIUAMr+E1HLLQcsanZ5xem DdPdloy9urXUNNHeSo8diID/Q5isSCs= X-Proofpoint-GUID: xSS1srNtfdlPSGJ9w68V86GYnbBhltfN X-Authority-Analysis: v=2.4 cv=ObSoyBTY c=1 sm=1 tr=0 ts=6a9ea419 cx=c_pps a=oc9J++0uMp73DTRD5QyR2A==:117 a=CQQxcbsX5Byh3TlVSSGwig==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=xvfqbYfxAAAA:20 a=pGLkceISAAAA:8 a=EUspDBNiAAAA:8 a=fgrLqfBXAAAA:8 a=2wZ2TuoAFSEcmpuqsd8A:9 a=iYH6xdkBrDN1Jqds4HTS:22 a=_Ge82aPy-h_wFa7gWU4u:22 a=bA3UWDv6hWIuX7UZL3qL:22 X-Proofpoint-ORIG-GUID: xSS1srNtfdlPSGJ9w68V86GYnbBhltfN X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDEyOSBTYWx0ZWRfX+utj0yeOzHnY wFzn09UPttRa4Rrs6mB4C1PhTZ79jl7g8u7mKPacxl8K/uxfxcmSk+iC6tSrW4+/is25y6uSEsg wvvtyU59M/RZrixYDxKoC0pkVgUp4CCsKo64ITYd80pnNHWkhK8Na2DUoJwc5mNXXqYVRvP5910 vF3v57UlSPY2QIJOr3ieWkk/RPpsc4IT1z6uGzColENcVgTjbwNcY28cWn4xxDPVuXwP0yxashp CNpLOnG//03hU3Mp1R+jRrnau2GmYPEBy9JaKBQ4hvDndnVTnIMYdTmAjAJCsPmrUFeBIkd8Sfx LwO/7y79TXjROW3SU0GGz3bF+EbiokffPrLRwnOIavas6HbKvFvYEmzvG2yTeGD9Gs2ezD8v37T MuyhVE8LuYv34NnOLoh5VWu4oANB+jAGHbVHK1HccKgiLiFM7QS3AbUfGo8uphMXnfwslYXx7uC QRsLTFYQ2Gt8lTnM+KQ== 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-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 lowpriorityscore=0 impostorscore=0 adultscore=0 phishscore=0 priorityscore=1501 malwarescore=0 clxscore=1015 bulkscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609070129 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: 1788781692097158501 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:37 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=1788781673; cv=none; d=zohomail.com; s=zohoarc; b=cTPp5YL54Rq+fhT16kNLOD13+5kiicLVH6Zn5nYkBjK3K5CVsDfzY/CsRkK0zKFblV+7xvpwTv1B6DoX5tU80oR67EEfxIwOBl3ZrCNckg4NaHMX3S+mvf2XCtrdxZtHw1ziEhkvELZSAIOhlP3m3/mEggeqTH7ohBG/Oo36kgI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788781673; 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=jhqSAIjtGhnfMpdnzaKx0mHyWdFiEQk6MQYOwVbuNp4nhiQ337+50en6COemIuqzBNrR+6SC75+jvKuil0MB8pIy0iCuDs9f/oSjp47tNhtXdyIolZKmOMaeYcwgclbYG8yJ65AvZHd/FyjYPdCsghEASzYIUhZa6YNdJUGBjeI= 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 1788781673590150.81781344791113; Mon, 7 Sep 2026 04:47:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x3XoP-0002rG-S4; Mon, 07 Sep 2026 07:46:57 -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 1x3Xo7-0002iJ-F7 for qemu-devel@nongnu.org; Mon, 07 Sep 2026 07:46:42 -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 1x3Xo5-0003Fn-LX for qemu-devel@nongnu.org; Mon, 07 Sep 2026 07:46:39 -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 687AvLN8496177 for ; Mon, 7 Sep 2026 11:46:36 GMT Received: from mail-qv1-f69.google.com (mail-qv1-f69.google.com [209.85.219.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ghuyk8534-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 07 Sep 2026 11:46:36 +0000 (GMT) Received: by mail-qv1-f69.google.com with SMTP id 6a1803df08f44-90cc0ed09b5so34574556d6.0 for ; Mon, 07 Sep 2026 04:46:36 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([177.18.66.131]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-91040679e13sm89834876d6.26.2026.09.07.04.46.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Sep 2026 04:46:34 -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=H0759PQ/+6SzNWysfqndYu/QZnI pVW0wiSo3mkzj9MOaR0ZBxEkfF0LiE2pvHY2mIIHlVmz+oDKouDzlUL5iowO0BHW QArn6Ib0pyjF5JEA6toIsHms1AfMBR50d/N8rHYfouLXkixISdLX1MTtrZTSqZa0 fOolJ6WSPzEKrTNzTcLxPqqYqP5f1yYdc9yzxPVoWuV0TpMcae8YKzIiqhL1DuyS p2ExxXnyucyhBCm9q3GmFRyNFUX3Tjm/6bFdN0CvylTzMSKUjh9LrrGrReeKIKcv VQg1aacZ8PAUwpTiA4h/WwYFsSAsWBYatB4Nd1Ci4nhNu5Hph9ZloqXTIZg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788781595; x=1789386395; 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=aStNbGx2ZaIxmBGVNFSbY8U7qflVHLOZtPo36bGy6yEjQwIcsnLKYJhhTGzCXHPbkq eUFmMzAUF+YxRrb0AQTK29mIu+K9ZpL0Cd5Ery22jb3X3p239Se7MCFd+3THHvYpZ/Me Rw4lNSScJojIKWZMUWc1KwHHtXYaCzJIWftyUP/2G5RGMmjO4YvtHY1e3xI8D5cb/37d FoTLCHqiwRwwcKYWiI4c59tgfN8EeuJXq9aQw/bWfoSqyFmMN02H9a60IklUlc2kgz07 FnwpzxbxYzMovoYhDqN4XeOZyDdyjEWOzdF32RrIXF/bYit/5qL842dMoYLZmxrFzjNl KUsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788781595; x=1789386395; 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=Ts3X9Fac0iSPOkCJvnXy11st0oGEaaCocaBzCcouWUrBPQiUr9en9iXUWr62wur+5M 9ymWdxXaHIcjVd9BjBnIi8+PPXAecJMnLllPoIqDtdFpg0PVAAvRJ93RYlRG3pgNGQeu qxfkc6qV7Cn3p6jynJyy+o08aaOTLvURvsHnAadQkCKXZj4HKPt+zWma5CLoF3OsX1+E zpqdH2xP5+r3vjK3wDA2INsX2UnU8W04FzgaFRXKm/VC1hH9qwQlj5L2M5tmOtgoD1fh z03X3EpkKdZElWdpK2fZ1MqI3jfiPc4RxOEHD7xSxxlbljVrc8loGbjp5U23nsX4twJf X5gg== X-Gm-Message-State: AFuF++lYElKP8t0yewVOSQe6B5eRm0B1T0psRmqUW3z7/3WeU7KHFTiD S36TUX0xpyHLHPZfH1Jv3GPuiiRZVIIfDIGP2VRSjOkfnLnF9GEKqt1RWO2H2ycEmedi3kV8HQv OEtZTDp+piFmOPV7GVIkNDBDOojPOMMI/8C355q50GbqxxJaP3lWWWFW0sxuyVkD7Wg== X-Gm-Gg: AYBFou2dQabz3Crwsk87hSUORu50dJNgOgjr8AiTmmM3wzyT72d9nd5aKtJZVqy+EG2 rqD+v8gO9bH/IgFDvxfA9rwVZhJInBuOTnf3iEdUS9jYhVhNyT97Xw/NmJhmbglXkWSPBqThaZx q0f3dsq9E8AHUxRcGwvbKHJSGSXnj91J7xfvOzQ6Tkd0CyeYMLOoj/EeJ/IpzB2dMauo8OZJmui nIxiO7WqfIcyuGuutLUFATboAnpGQEt89QJqP/eihulEoxfsIPpmjm+u/T4kZutao5t+aRgvWrH 7uo+Rts5sXmnBewELj1pH7PmCyrMqzI13u9HPtZ1srt8lZP/3lJi/edNdS9EWPZSeeg60jLINfB 7ypu+5MKOWlvhIKuMYgRSzLUjSHLM8kGLdJ+4 X-Received: by 2002:a05:620a:4802:b0:939:1498:cd55 with SMTP id af79cd13be357-9398044b5c7mr2377690585a.36.1788781595268; Mon, 07 Sep 2026 04:46:35 -0700 (PDT) X-Received: by 2002:a05:620a:4802:b0:939:1498:cd55 with SMTP id af79cd13be357-9398044b5c7mr2377684085a.36.1788781594758; Mon, 07 Sep 2026 04:46:34 -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 v8 4/7] target/riscv: add sdext enter Debug Mode on ebreak Date: Mon, 7 Sep 2026 08:46:11 -0300 Message-ID: <20260907114615.1609913-5-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260907114615.1609913-1-daniel.barboza@oss.qualcomm.com> References: <20260907114615.1609913-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDEyOSBTYWx0ZWRfXyOWQN5olkc+2 B/9Jv+qJWOiEGH4AKr+R/zr/d/9f6AaI99gbzKOOD8meXMWalOB9NC/bnBGiM+GtJ5/ZRhTumXo Um4HP65QFDF92+WBjX+r5fCXU/pNl2g= X-Proofpoint-GUID: y9yTHxP22YmANvKyemBEtirjnl1gtq6m X-Authority-Analysis: v=2.4 cv=ObSoyBTY c=1 sm=1 tr=0 ts=6a9ea41c cx=c_pps a=wEM5vcRIz55oU/E2lInRtA==:117 a=CQQxcbsX5Byh3TlVSSGwig==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=xvfqbYfxAAAA:20 a=pGLkceISAAAA:8 a=EUspDBNiAAAA:8 a=fgrLqfBXAAAA:8 a=ITXOtABjXhpKHoTPUzwA:9 a=OIgjcC2v60KrkQgK7BGD:22 a=_Ge82aPy-h_wFa7gWU4u:22 a=bA3UWDv6hWIuX7UZL3qL:22 X-Proofpoint-ORIG-GUID: y9yTHxP22YmANvKyemBEtirjnl1gtq6m X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDEyOSBTYWx0ZWRfXwsNyG0nxPryZ 7AdqtH1p+PTqoJ/nlKlWnKwXW+Tt8z3Zd7c6Ti55+n+NOkh9g9sKPiPqXbMqdRoLGflsp18tTg3 uyjCWe7ssZRojIASQNCOUHrOT7iQoAfZ1WHHYXaJtI6OvdyiQ10g4jGRT7MRyVNKMoYJpad4zk9 vWyV6kcetJnHYgh1qXhMFYJVKtsQkUYosJdfvTpoCg7Y85GzGER62zPCTnM0INRQXY/c8EYW+A/ rB/TgzLKMjpIlEIDc+Ha2N6G1L0W5IML8DFZ5fB8bjCGn/AWmNEUp0Jsl9VdVotuLn0IifIAHs4 lDKywWA7xfBhB9JTFOBW3QweliJBPDiGCmzmbzUYjgC6mvCguLF+F/x+lTt6htU2+k3ynOCtrgF yTyMPV4owPoxBerM0WCHHnug3CbPxJBOnwHV6h6yfuDjYSbgm1O1Va2PSbEAfS9VkXJuX/tGUJQ fXhJAUsiBm0yxo5KoLg== 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-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 lowpriorityscore=0 impostorscore=0 adultscore=0 phishscore=0 priorityscore=1501 malwarescore=0 clxscore=1015 bulkscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609070129 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: 1788781676259158500 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:37 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=1788781691; cv=none; d=zohomail.com; s=zohoarc; b=Ai79qB5LWmXz0KFoiES/Kgz7kd3EKFWpK7AcQfZyfoS2NIEp+L7SGR+Bef3QbBzl5+DsmFMCHA1rNxBj2byx4NM9V6ZhLxFOEsdWXaQYUdnEK4YaZJOrwIAQa76zWYQD0ytPcF/Rn5dugMkbvOEkXSlGzOwA4Ws6GQXyvUHS5Sk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788781691; 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=TQ3qUUgsaM3/HEJq0syRvLjK8aFfYgS4fNur92dENp79gbdXrSXevcxTIvJ8XmN/su9dCU15oET5r+P/vIz+pj5/jWf7AxxzMHf4O7Is+tJz8oB7qw4PAG+/xSONCwRjrX3fkCKpp+thOIsyvuUBbTIrWVSiBhi/cdUs5wsXNZ4= 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 1788781691307568.1209010941875; Mon, 7 Sep 2026 04:48:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x3XoQ-0002ra-2t; Mon, 07 Sep 2026 07:46:58 -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 1x3XoD-0002jI-T9 for qemu-devel@nongnu.org; Mon, 07 Sep 2026 07:46:45 -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 1x3Xo8-0003GD-Ka for qemu-devel@nongnu.org; Mon, 07 Sep 2026 07:46:42 -0400 Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 687AnE9e2652808 for ; Mon, 7 Sep 2026 11:46:39 GMT Received: from mail-qv1-f70.google.com (mail-qv1-f70.google.com [209.85.219.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ghtty0fjh-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 07 Sep 2026 11:46:38 +0000 (GMT) Received: by mail-qv1-f70.google.com with SMTP id 6a1803df08f44-90e853561c5so33116666d6.1 for ; Mon, 07 Sep 2026 04:46:38 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([177.18.66.131]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-91040679e13sm89834876d6.26.2026.09.07.04.46.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Sep 2026 04:46:36 -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=YUThA84lfFAJtzkLYpaYJB12znH TQmY5UYK4uZPDlOU7QATcCXxer1unzQRNEJMg3uqWk901GtOMN6KxhYeKgHh1Oh2 vf2lbWJDcXRboRDrcwKl2SOfWairsWilf3asK2eIUObSyWklPAfFB2uVGOrAldcz 1oxslQX6pm5oGDbah0BszzxNur/E1S0IbvI8qtMn/rNNb3Tw6RI8V1HvANZoOCfh mZO3WH/W4bWO7Wg0JsVSNpKeZ2Clz39YskfYWofUB+6xBbL8yUwQALF74TfcB7m3 A3hsMNJb+C2jkMcxecenzlVyvXMkhYm3SsEhjLF7xv87EVYXdbb5jhTxJzw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788781598; x=1789386398; 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=kCKvqtGojcUhx7Oo5LmtPxdYyMvlpLT0TbIMZyGRS902AYSO5XFBuJwrhw3oQjdjpf TtBkuwTyHdursLXGMJwHDvHDKHKWyUEtgT89SCDeMOoCz11P/IxPJZz/ei8DCn7pu0eo xEkuK9PnffHCdvy4+MzNqQkmWjbO0nC7Hf8vyuwOjFeeQmrAkFfZBBikd5uX+GYQcbQa qyWNT6GdGWPuJT1WqViNP4iDJZ2QLPRgY5506x4hP20Ln+JQNMLXkmgMGhPp8qOcoHEN Jjt/9cw8/aIiqrB/WvCVuNkMFe+ScOXgOO8bZuKxJt6Jj81SrshzPNPZ9s3nUeSU2Nqn 0rbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788781598; x=1789386398; 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=lAkjDw836xgi7BJdj0TlXLAmBuvML/+9nHttlCjYUPjyXCoM4QuhOeQiGN5kMLopX5 Rtsg6uo9OlxiM67OaK3ICjp1+JFgnxmL1IfaShiiEUgp0/udW3WrH2AA1EW7EYS4+A0f 5fs+keCg2LlIMFLPBaTMoZmxStdBP48eQxDgYLstvEPtDndDzsMiBSuo09jz/HcEkYpQ /bRvJ54pdGNSHXF/QuQS4zFuF6BAiADMm5uZIc1EcMVdcXMlj27lu2l4MSLesZkIwhSF WmawPGHRG9vOFsGxMj88GwwVW+/pBhIeOvdjo6yRoWJjeCI+Rdod4Q+VC0Sw3EyNXY0J PqAg== X-Gm-Message-State: AFuF++kT/CEYc3MZkMMsDBdF6Ty02AQy3u4hGXkmrsou+B/YC71wEz/U M92meCQfEt8NUCAHfVNHoHiTUTWGtcu8Jcwj46dasm/JaWEr08+A3uJl2+owG5y5jeuaI7SQMyN p1eY7e+N+GlUWbAf6RWIfLHg2CdXo776aguXmFeeXS9+ccuJeCWWgbRSfde1Oem95Wg== X-Gm-Gg: AYBFou3iBlM/o3bddNnitIw6KOc8dEsSMmIkperrMPLhcQwqDXOou0f6f+KpSw0Sjf1 dEFLPI25HR7/hVBpYL8BF+2arSyN+b9EvB9iIzSr86h8rai3+yZY5n6bL7260KloGjAbbcdl+hl uRzlmKMDwTItotxPjCQSyG7po5SzxNyWjNOUbKTJ7C+cLgmY26ZVcjGI1GQAj8HTFeGs+Pmz/oe 4Dnk3QpCgyPLW5VRhmozrmSN2UF+MbrF3OYvMwvJDOOjHrLnnz2TaKrBF+ipIcnpZQukQns6Iz4 SpChyJOFm0zEcXj2ZZMG8xxrpPdu7OODK2BUqcDVro08yc5NgyO79yNisAQYPaV5pJ516RsOveZ KCcmfN3myy4fchzzmXDXGlvJbQxw6/WOP0W9M X-Received: by 2002:a05:6214:202b:b0:910:cd4:23a with SMTP id 6a1803df08f44-9103ef980c2mr284321246d6.20.1788781597839; Mon, 07 Sep 2026 04:46:37 -0700 (PDT) X-Received: by 2002:a05:6214:202b:b0:910:cd4:23a with SMTP id 6a1803df08f44-9103ef980c2mr284320576d6.20.1788781597310; Mon, 07 Sep 2026 04:46:37 -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 v8 5/7] target/riscv: add sdext single-step support Date: Mon, 7 Sep 2026 08:46:12 -0300 Message-ID: <20260907114615.1609913-6-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260907114615.1609913-1-daniel.barboza@oss.qualcomm.com> References: <20260907114615.1609913-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=QNBYgALL c=1 sm=1 tr=0 ts=6a9ea41e cx=c_pps a=oc9J++0uMp73DTRD5QyR2A==:117 a=CQQxcbsX5Byh3TlVSSGwig==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=xvfqbYfxAAAA:20 a=VwQbUJbxAAAA:8 a=pFyQfRViAAAA:8 a=pGLkceISAAAA:8 a=EUspDBNiAAAA:8 a=fgrLqfBXAAAA:8 a=tgk7fgI0p9FEwYF5lhYA:9 a=iYH6xdkBrDN1Jqds4HTS:22 a=oJz5jJLG1JtSoe7EL652:22 a=_Ge82aPy-h_wFa7gWU4u:22 a=bA3UWDv6hWIuX7UZL3qL:22 X-Proofpoint-ORIG-GUID: IjX30WvlPrnroAK2alwBL9VtMV0PejO_ X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDEzMCBTYWx0ZWRfX1acaG1N8s4d7 /3rvRUa1Sp8y76RWZNWmmq7SI5mOTZMjogfaHKbpsaueykuGWFf1mIHoQ2otlB7bF1tcW/0sX4h UUa33TDb1VsjL5tl5/bU02eiAu/gMUo= X-Proofpoint-GUID: IjX30WvlPrnroAK2alwBL9VtMV0PejO_ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDEzMCBTYWx0ZWRfXxAMVnOaey5Hz CqZ3oLhAg29haNExkLsh1SqJ9j1dMOFSYyuqg9dVPVzlxTd/0R6ZGnu8H5QEJY/BC7w8eIVSN9j aWFF9mgw5p0s1mRsK4/4gKUynZREg5SMdFRwBfXSJ81cCSJd1WYOQkA+lnu2/G/9MZVUdtMT2ed e2RaxPpXpNnxeVETwkKJeQ/i1suXffLL0PL9czFAxkZM1fZn7Y4GIWEzdUWNRDS0YgKkMdE+R7W fQEdAYrlnGlysWDlJ6ECx18z9KGXR5YHkpnLZ7IL0r0xeKr3c7Bgc8UNhFE88v7x7GawRPRFfYV 0jv3CqVlY4dadu/z2Llg8Q1cq+wDHDlF6Z7Od+MKJHVJoeS1mgtRuQZHk3jq6f/qZWeemWf+5KG 7mfZHXd3+3Yo+5oQwUstqKeQj+RS1qqNm0EPRxiwsUuGUSnW71oT9qYkX22Ejzuti17p30v8bBr Gupwnf3jWVU5F0r7Q8Q== 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-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 spamscore=0 suspectscore=0 phishscore=0 priorityscore=1501 lowpriorityscore=0 adultscore=0 clxscore=1015 bulkscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609070130 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: 1788781693845154100 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:37 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=1788781691; cv=none; d=zohomail.com; s=zohoarc; b=Wnf2Vul6VmeXK2GJGFMcGfiiYFm8RDs8QEbol2oDa0piujrqYF33jWWtJ+z8q4Q9gdJ+HIiS6F5olVloCWfDiNZhwfY1TEDJC1Mq12DiykzW+Qx2h+BmdII6GL8JvBktNX3S7IPv48iRWc9VaX3LLLC7RFlwRtrlHQuwqB9HzLQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788781691; 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=VXxLHlrfkGo621VsqFMW+DBpRhfWojOL4ijO5oko/rQukrqT7QH84E3QRMZYBJTJ5rX1vP6KNIk/S8btXL0d5cCNxxNkLxTcxImo3GdqwbsLMPd8g8WQFVXsy5Uz31VmyJXh76y+kMBME9n1ihELSW9C9rH+WKDsJv5Hn9WkPic= 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 1788781691788960.6531386152899; Mon, 7 Sep 2026 04:48:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x3XoQ-0002sa-Pd; Mon, 07 Sep 2026 07:46:58 -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 1x3XoG-0002kQ-Up for qemu-devel@nongnu.org; Mon, 07 Sep 2026 07:46:49 -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 1x3XoD-0003GO-M6 for qemu-devel@nongnu.org; Mon, 07 Sep 2026 07:46:48 -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 687AvPjl496297 for ; Mon, 7 Sep 2026 11:46:41 GMT Received: from mail-qt1-f199.google.com (mail-qt1-f199.google.com [209.85.160.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ghuyk853f-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 07 Sep 2026 11:46:41 +0000 (GMT) Received: by mail-qt1-f199.google.com with SMTP id d75a77b69052e-530256c61b4so62608101cf.3 for ; Mon, 07 Sep 2026 04:46:41 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([177.18.66.131]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-91040679e13sm89834876d6.26.2026.09.07.04.46.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Sep 2026 04:46:39 -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=L/Pt6BmR+X4FieKjpHs3HPZg8ln +CmIY1rdEBuj7K8FcXs8eFtzDi4eV7TZy320CqneeDiSI75x+kBfCSbfb+Ji5Y1a byKICAcev9ZIPApNr0tXeOhjVCeRg9YWzbTvUQrbGrEYu82T3/n+7qSw44OISSxa OZuoRaDwk07MbrYUXDUR1IObhLStcTPDTBjyQ2Rtnk4bBeed9yNywyTmmU6e3irI eyZYc7vnJWBU+hArIpGznpJjiyLfAHcVYUapAmSM4HZci0Pw7E7jmzvnfkk584ON JuCwEINnU0LWXaLvar5ItbQuF7i9a/akVSwO3lwESX2DRXw4/igHg8WxsBg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788781600; x=1789386400; 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=E34RoUzkhrEw/vMLifp80ybBNk0RQMKnfSvQ0LE/FhgGMroKKWvaOZ0a6SjvxdkqWR 6sCmpI2g26wH2C1GSRUakTTWvBjg5JMdmJgV3mkG6yhSJWwiKesGbwOhw1EzxMRoQUd4 aeY8aJeOFAU12b0+F3O0CU60os/2JHjXDwIR69wea508FgiyJftoHnmbBCE19M7rC7GQ zxb9KbB4NIh12cULVz1RsFC5pDAMiDhHVOev/XsRq9ppwMQ/ydogoyJUjpRR3Ajp5BWC SMzeJJ2mBi1DPWq2Ad2UzLRYMGMLU+WaxDlWEQEeQeAubEQCZNwSNVNQ+ERJpPzkzDu2 P/VQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788781600; x=1789386400; 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=Ymdi4tWVly4f4sNCN96ZNNxcGZ7ZgPECAnMswzSZcnfTSodIqhgCfjvmf8xLHtkeDn eaHCEnLW9uK/JcSY7nPaUkmIQsoLxf13Tw7Om9huC7v52Si9wpyCwAjN/T4Rbfd8jFs4 fkH/oEpaYTkivufWeHzJ6IaUoimak2CntgPneXV0daK8oq+eUt+szYyf8281WMRyI8Oh BqPvDiXDArpuIvVM/2CZsgrI9ovypfN3alb6u9lFR1CcaRzehvsuVZpNL49jbDWZGbjk hsbpjU+PCZh7VqBDlQ8WyAJmAUl14L7jLR3OrSFYsDE1BNIksU/ANOATlTmYriCiybdB Q7YQ== X-Gm-Message-State: AFuF++nYFbvQVcr74PG0XJ2OMzecSJ7tkDZP2911Bt6lh8UzvDE3ek7r 7DKSfxPdJ97ENtNkuBxkvUHFDnnyMvGn8mQwzl+h0zeUXREfYkVp7PnCTn+Z1R4E6/bGCWqruBT wLeueKnHiLtH+mQRC2O0GgBke1kr1nMe83L1/6CD1oa+pC3C5LS/0O0pk/J9Fjii/nw== X-Gm-Gg: AYBFou0uW6/fqYk483HfLKVNSsAsCfGSWKvp8IiUfELdK4Iz/wbbf9exX5zGBzp8mXB 9GndHm5OzCcKQ6BBl+FCBHwlCCfvyqvlqRfcgMae8jiFB5IoOzEEfuR2cN2ii/3E6AZHT4R/VU8 FC8OGN0IKwQwqPi2/sd7p6/B/l2UmqKzVA/PJzXyffAE+HG9xOJ1U8ALYGgLtrN9MEfjPuIGkpN tkipTpe3AH2CAeIcRq11O4vtHHRu1VnLLFYtFnN3HfUoiVZo92lLWniyLc88WsGyTOVdZ91CMfG omwmAM4IEPWnY/NyCiZPzASHShgLCX7zplMCbwzzXPs8eGjr1wXMEZQHTnnOuQnmACUDpV2vw/9 Q5gHvDUiKVUXgXddEf3ax26D5/HmvlJFiYLng X-Received: by 2002:a05:622a:17cb:b0:52f:a0b3:bcb9 with SMTP id d75a77b69052e-530546cfd29mr225688111cf.10.1788781600351; Mon, 07 Sep 2026 04:46:40 -0700 (PDT) X-Received: by 2002:a05:622a:17cb:b0:52f:a0b3:bcb9 with SMTP id d75a77b69052e-530546cfd29mr225687701cf.10.1788781599892; Mon, 07 Sep 2026 04:46:39 -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 v8 6/7] target/riscv: add sdtrig trigger action=debug mode Date: Mon, 7 Sep 2026 08:46:13 -0300 Message-ID: <20260907114615.1609913-7-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260907114615.1609913-1-daniel.barboza@oss.qualcomm.com> References: <20260907114615.1609913-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDEzMCBTYWx0ZWRfX4JitsXKFXa8Y on1c9WpDfteEUi6uKZ1cKeDzxqWE76QzbKVbl+fkw9SiTaoxk6IVb3pA5aPwF0elWMjEgnedELT cN47vmjlKs00ERllxnFXsbht3dNhg9Q= X-Proofpoint-GUID: -i3MtNASy9H7x7HUBy896rgsI7vg6p9G X-Authority-Analysis: v=2.4 cv=ObSoyBTY c=1 sm=1 tr=0 ts=6a9ea421 cx=c_pps a=WeENfcodrlLV9YRTxbY/uA==:117 a=CQQxcbsX5Byh3TlVSSGwig==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=xvfqbYfxAAAA:20 a=pGLkceISAAAA:8 a=EUspDBNiAAAA:8 a=fgrLqfBXAAAA:8 a=jq8im54kr7_wP6Zmv5cA:9 a=kacYvNCVWA4VmyqE58fU:22 a=_Ge82aPy-h_wFa7gWU4u:22 a=bA3UWDv6hWIuX7UZL3qL:22 X-Proofpoint-ORIG-GUID: -i3MtNASy9H7x7HUBy896rgsI7vg6p9G X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDEzMCBTYWx0ZWRfX0crn2lyfAGGl LTAOZDeQfNke84Zb34F+JaC7j+oqmh4E9yXBwzRVDTmYcev/npp16bsor8dvt+c67kWeTZnx32N 848m+v+qpdDYxaacfoEor4F/Q/O2h6r1N6qpSw+avQF/pTadK6FbzwCKRTBFRKL8BcNVuD1tdyA UyMJDKUSBH4QNB4mGKt8gyIHGxW8L1oJqzVh3hW9td7t7t1RMjETz10GJw+GFOoXzLIxYLdpCnv +YK7U7tLPKLWTqSwqPc6LU5HuhBz9xoU6bL6nLBYvhd5uXvpL/IMbBcokeU22o1tSBpkxgPCcyX qWydNS0eOAiPhdLWXSxIWETfi3N57cNCtziPPDOJmAyMTR8sTKShKy8/KKGTD4J+Xb/wtzdoSzS 4+Ul9S1TFCeiYuI+ayt9SfnM22WQkJ0iyCgMjLTqHkQLRE7tV/vZaE/I3g1OQJDj/TxYRhjrXYS dZslr6LQjLNk4ELoE8Q== 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-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 lowpriorityscore=0 impostorscore=0 adultscore=0 phishscore=0 priorityscore=1501 malwarescore=0 clxscore=1015 bulkscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609070130 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: 1788781692107158500 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:37 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=1788781691; cv=none; d=zohomail.com; s=zohoarc; b=HsuXnUUsqELaxQ9VT7jC6X9HMD0Vav6wdltIDv6XJvF8XF6mT+uf1FhC+oJrsRzTdQMlE1IQF8mEQ5vzZCa3v7RaoNaMQL9ZXz3LPWWnxj4ISWONv+JobeyhiIx479kl5g3smHvuVHCqzczydBMvriXNE0AsMFi6E+hhMLPANsU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788781691; 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=1LQc3MHagbsqNP6Gfy/bvJe0yknu38X5VO+oSaaO4w8=; b=DsAvILvM7ow+MwIXKx0+LdRYedzsyX1KUejo8Sl9pUCWygT4bjPAVjrb/h8h8tvEIr7aCta8d4SwKw8wL/WgBUWpwdmrVvTfuZneW7P2FBI7mSqubeJVHQWPiPuVYbbPqrhHGBWTI+SoODC9oqPQVZFn83gYzc5PbwuhgGfbYCk= 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 1788781691744261.5448820930517; Mon, 7 Sep 2026 04:48:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x3XoR-0002tD-Pb; Mon, 07 Sep 2026 07:46:59 -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 1x3XoF-0002jl-Bh for qemu-devel@nongnu.org; Mon, 07 Sep 2026 07:46:48 -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 1x3XoD-0003Ge-Mi for qemu-devel@nongnu.org; Mon, 07 Sep 2026 07:46:47 -0400 Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 687AnMLr3777326 for ; Mon, 7 Sep 2026 11:46:44 GMT Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ghsfygwnq-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 07 Sep 2026 11:46:43 +0000 (GMT) Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-936e393061dso462227985a.2 for ; Mon, 07 Sep 2026 04:46:43 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([177.18.66.131]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-91040679e13sm89834876d6.26.2026.09.07.04.46.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Sep 2026 04:46:41 -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=1LQc3MHagbs qNP6Gfy/bvJe0yknu38X5VO+oSaaO4w8=; b=Pvl8E5oD9/g4FGMGdre9JP9oP51 bvaOokE2xRslFkZxkbdHvbikuQb6HOMVli4/eora0VO656azj5eywm5yiSZVTGDn O7xZsPx0NAEcQ229Vb+u+4wODEYhQttVJkZIhBOiSeAnS1C268pHexoEGX8d4sHD FydK/jvw+jMPox9l6arYfm+HJReS93qVuvUcZCRrmMi8O1PnPT75AQSZ7cgfj0Gd C4oY6bZQAmqDmNuRjrbVD5hFIySl0hs6wrVB++tBGt7Ib4yPEoe5dxZsMdaDAmGy SMNvg6hodWv0o2JiAlpa1UTGEje8E0LpuZQTi/SpBLrm4sgNz5zf6fvhE+Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788781603; x=1789386403; 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=1LQc3MHagbsqNP6Gfy/bvJe0yknu38X5VO+oSaaO4w8=; b=A8aNQVk67dyoHgc0b8Ez7cFH8kmnnlmXCCbYH4TWbOz+mhgMPxBlz5TE7wYPss8yqC +tMCObS6F/rsl/ZbRwpiVxs3nhUJgjwB4hRjYviB9C8GwEJkGfUnYODpO4w958nNATLP 244FBylN1iyjZRuCJliN8OgyIOe/hd84TQpiBmD/mf7BXNcpE91YTAKlefxOoqYsjnO9 /nkWy/781FdSEiRUdGW9n2+8VDcz9oElT/k6Y2xVAwNa4o0vZHqqz7Njgz5WRSWSGWL7 7fNNNN6UkET8s4xADBfndbQtB+8Ljgv8j6blXAQ5FXBqVxwKPjgs8KQoJM5R1laNItaE FsUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788781603; x=1789386403; 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=1LQc3MHagbsqNP6Gfy/bvJe0yknu38X5VO+oSaaO4w8=; b=EmKxNnFyew6SiRKB/v0mmbMrdoaIMAGmS2w5iP8g57LrteFOWoo1Z5Uz4r6+28Zd+g U0ONBsSrlGQJclhhOUdH1YscO4OHvaLtqDbQ15uJhZzQaqpI80oiCLPYTtrSVldr/G3E 2V6WrIjRcDMAZxdA+cVGhUbQE4iM9ZL2QHjhdyPpGLIW6U+iYvPJIQn5bM6yvYwBfHEF Tt2Mv/cdDhyhJ+CWeHpxrRZfjXU/epc8u9FJsCssZi+33ebDH+TfSGNzXYr2pyJzkOFi nBzt02a0B6/BD3+G1th0Rm3Gpy3NplnD4s+JEkluGCCGek3iurT1wWmOQxchRwsCiWqs M/PA== X-Gm-Message-State: AFuF++ldjJQi7zIfeIe4DDs9FK6AQLwW509tH6oKrtdXMWI9gvl59LbL rhN7Iod54XbvVgXwRFfDMadXavRBVq65LjGWhcqr6nk7DXbJEN5lai7CqN20pISiux9c6Q3r4ry 9ojGgnNMZAgBRz8Z4mi0rdEmjH/C13kJBqf1XRZu6uLQh9mkQ60Xorm2T41CrVSyxug== X-Gm-Gg: AYBFou3swpe82lQSqXXFJf9HjSNlKDBv6nDZSmJDfy6/u2rtNphJsyyQ3rCcy0+1oQH wt0Qtn7p5LKFCmsuOKNkIIIxwqGhR3uiiqRUANiZvRvbBv2E89oR/iVXpbkalbCCuLx4IlNcnOe a9JyPcyQMWjKnggqSpKOPNqt3wCG0hBOX/VVd8d9nctagUjZIg3Lv3dCpiOajDpRiJvn0RzqOCm ZYhTVcHTCPoJD6jsEB4q1qxwrMaDRzraCjSewKGQUaCjFo+5hp/VY4RKMzAH4kjEVHhRZxoNNfX KCdQ7RyMyNbFvAzLcU7CPayUzIC0kntfp5SsbQ2tHcTJBtdHCUfsxchPwXC7yLHF/fcpcP28GHw XoPgJ87bpneihO+CYfhmyOrH7s/2SW+mcRJpL X-Received: by 2002:a05:620a:5229:b0:936:afa0:3661 with SMTP id af79cd13be357-939804a386cmr1758001985a.36.1788781602942; Mon, 07 Sep 2026 04:46:42 -0700 (PDT) X-Received: by 2002:a05:620a:5229:b0:936:afa0:3661 with SMTP id af79cd13be357-939804a386cmr1757996185a.36.1788781602375; Mon, 07 Sep 2026 04:46:42 -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 v8 7/7] tests/tcg/riscv64: add sdext "not on Debug mode" sigill tests Date: Mon, 7 Sep 2026 08:46:14 -0300 Message-ID: <20260907114615.1609913-8-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260907114615.1609913-1-daniel.barboza@oss.qualcomm.com> References: <20260907114615.1609913-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: whEr0IrSxe4eI1Zeuz7u2n6qlaW7V4qf X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDEzMCBTYWx0ZWRfX8tZsmii/eGOk ZLNPVOhGEIt3OYuLv4+rCqD6Ok+aVr+HC+byITZBdljkKwOBLMPNJV7lKQxsCmksYYmlitSer+z RYZNx/iSD5jRz4A+XhFSm+e4wrEtuvAITsp5ofdNQuivGwdGRzMQxvGvOO6jT0romxOum01yvyy agngBo3Xpr3XjIvA+zGRUEt1tnqb84FMlkMrxDiyYqoKlJc/nHjmtDc49j9p/G9IlkU1rjUzd2r E/jjJ0R2MgC+JIIBD4DVFclRyHPyxVIzxrwTsl9Re5+WIq2HGG3pNKnbODQWCCUpgSbcJYB9txS Qzv/F/5/L5oVe24DOy5NQWqO4yMIvGPPtTma/tZRCjBJG9NGQxKxru7O3lguUMhkKnDJz5ra9sk 8N2pqPTWe3fJWoH5UJmH5OrrrkqpfogPSDBi9zX+5QLX00rVnx424I4E9bvxxHM9iFkBBZpW9TH 4lSIRMEsgL4Jb1O9img== X-Proofpoint-GUID: whEr0IrSxe4eI1Zeuz7u2n6qlaW7V4qf X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDEzMCBTYWx0ZWRfX+FRDKqmdsnBS Y/cJCUH+IOKYGA2kBM9ST1b1u8xEzxbpVrZNA0qBXutvDSP6CG2nB5ktuzZpkg46BZvDp8TUXtp Yq9Y/1M3ANqKB1EbHP87p21pTATQ0TY= X-Authority-Analysis: v=2.4 cv=AduB2XXG c=1 sm=1 tr=0 ts=6a9ea423 cx=c_pps a=hnmNkyzTK/kJ09Xio7VxxA==:117 a=CQQxcbsX5Byh3TlVSSGwig==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=EUspDBNiAAAA:8 a=FibE5N0eoUlo320SlN0A:9 a=PEH46H7Ffwr30OY-TuGO: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-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 lowpriorityscore=0 spamscore=0 bulkscore=0 adultscore=0 phishscore=0 clxscore=1015 suspectscore=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-2609070130 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: 1788781693726154100 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/Makefile.softmmu-target | 5 ++ tests/tcg/riscv64/test-sdext-sigill.S | 83 +++++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 tests/tcg/riscv64/test-sdext-sigill.S diff --git a/tests/tcg/riscv64/Makefile.softmmu-target b/tests/tcg/riscv64/= Makefile.softmmu-target index f2c75abd57..0a36376f85 100644 --- a/tests/tcg/riscv64/Makefile.softmmu-target +++ b/tests/tcg/riscv64/Makefile.softmmu-target @@ -85,5 +85,10 @@ run-test-vle32ff: test-vle32ff $(call run-test, $<, $(QEMU) -cpu rv64$(comma)v=3Dtrue $(QEMU_OPTS)$<) test-vle32ff: CFLAGS +=3D -march=3Drv64gcv =20 +EXTRA_RUNS +=3D run-test-sdext-sigill +SDEXT_CPU =3D rv64$(comma)sdtrig=3Dtrue$(comma)sdext=3Dtrue +run-test-sdext-sigill: test-sdext-sigill + $(call run-test, $<, $(QEMU) -cpu $(SDEXT_CPU) $(QEMU_OPTS)$<) + # We don't currently support the multiarch system tests undefine MULTIARCH_TESTS 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