From nobody Sat Sep 26 21:37:17 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787669370; cv=none; d=zohomail.com; s=zohoarc; b=eL0xnCPMsVwNQliDWc3RnV2BTJP4s94i1OqyfJyz2IePw52psNEuUcxTDzd671kCpnJ5kOJjP7i4r9UlyjfzibCtRVeN4CAKdKTCVCFAeXw0EXSdJ5im1NVcpvdwAN2z+Vh681r6iLycCi8Y/G3KC5NMwa5kOoufNBsx+/AvcF0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787669370; h=Content-Type: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=44lRTpz8iB0AVFJbeBxFTF9DSmyurvrQH0SNXPQReOs=; b=fU7ErftiC/+uXliZsix/rwck3fZO68mjwGn2+tE7EAgeZxZ8g33KmjzVxrNknZf96Ri/ahROt6J221MWgTX2yJHFvNj6gJjwVE8WOf7IYdrqxL7V5DiqPBBoaOzaKAWROTgKsp0ibtTv++IBEXoH4zGXrE1U+oAyn3fDCwWKUCg= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787669370383743.5876354825483; Tue, 25 Aug 2026 07:49:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wysR0-0000id-SH; Tue, 25 Aug 2026 10:47:30 -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 1wys2t-0002sh-5B for qemu-devel@nongnu.org; Tue, 25 Aug 2026 10:22:35 -0400 Received: from mail-lj1-x231.google.com ([2a00:1450:4864:20::231]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wys2q-0002AX-Nv for qemu-devel@nongnu.org; Tue, 25 Aug 2026 10:22:34 -0400 Received: by mail-lj1-x231.google.com with SMTP id 38308e7fff4ca-3a115c08b0bso37721521fa.0 for ; Tue, 25 Aug 2026 07:22:32 -0700 (PDT) Received: from [127.0.1.1] (broadband-90-154-73-22.ip.moscow.rt.ru. [90.154.73.22]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3a1c82f6b02sm22457551fa.41.2026.08.25.07.22.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 07:22:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787667751; x=1788272551; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=44lRTpz8iB0AVFJbeBxFTF9DSmyurvrQH0SNXPQReOs=; b=m+xYoWWARG3wf61oBkyAK4dajDHMP6xgSKbK+v63QLareWkfaRMWl8DwEIPfSlkDq6 zVH0J8326ivs9esOqsC3vUQ6zvlUxNzE8OBgWKwWMo5YUtN2qU/tqTv3bSkvuxqOnzQI XSGViwrNUgN6bu8wvF5nq03tK1v1+y+4Cl/+0QGA6DBzw0ScS69G5C11MTi2Cf8eyuc8 +h7c9CormtWp/WT8ld4ClWd1dJGsPRZxsQiMGe/2e6Lx+3gRnuYkDrq2ZltBmDpxhw2p smEv7Em9ZY5DksAMHm+yJyimAsyNkiDaE287g1xeyo5/lVcQLb6DfxJD8pzwfGnkqlpn tQcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787667751; x=1788272551; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=44lRTpz8iB0AVFJbeBxFTF9DSmyurvrQH0SNXPQReOs=; b=YCtdVKlFAtRcZr5lpTDCaWo8eDGGuORZ5WScTp1axd7YW1B1g26XyeZuWa58Dl1QND huMdvhMKGbPSmQVJAO9L3gYa21M88kDJxZ9pn+T0xUSN3Pwv4aA+ai79fczM4o3KHLaK CQe5mxXtbtfo61LfctuAeEwO3nxRDKoajQOwlU/QT4lVIJxwFU1oDxlD3gEZIp+LAzX2 Lm56j41VTUAToBcQeOG/mwPHl+b80n1ohyzN94mBveUpqsr+ASJ8L0xRFF2G/Fvz6R2/ 0LPDTkpChF+FohRHox80ANuOIyAuH2oG0eWxWGwzTmCkyeM9ZLqAzd1oynj7Ct3g1KMl mErQ== X-Gm-Message-State: AFuF++lZ7/ttsh9Ry0ASLT+T94QltMsHy+rVCNFuBccWYcRAkVq2Wkod gj7YxxZ97u7niYJgMH1iFJN92LROJVh8qjMem6BU3EUkiQb2mZoj6FS1 X-Gm-Gg: AR+sD106JA8e6wEDRzBTUS3WU4ozQOBKaRtGubJ9ax782ojwKpbbwnuLIoFTTA6bf+I 2Za/34JjcdI3viMYISsz/TI+1ChsdYfbCILi03e99PoraU5QEv+6LSdCbMKgkhxFixlrUOiybYV XSgjlOnbiAqLRERrMVSUHzqlhCriJnkMFo4Qy6B6HzVfdQqbmIDqDacBvIEfhVUdmvv4izLS6F7 +X1LkyZ7NNKI6ukIJJp5KTMfBfCZay6mduq5Shtb6I7ZrCXUaMk5KZX7ePzvVxKw6pHbO2500aw a6wZXoIYR1ic7r6RkOj9G26Ed4mJFh0dvtep2MpWYuDZ7IEwi4pZkK8oS/8s1ln9Wa9I8umgKf4 z++7rYSccKytfMbMmU5e85ZuHNQLSUvXwUFGwH84KW2OgXnHtEXEu7AVn354MFHDrNODRndt8Ym BmO9hRK+W+LDgjW39VdOXq/vS3ZlSIyGiFzagIDYjq+KenFHz1OV659oZZbhCAEjfcBEPudf3Vy drZduwHzrHAU/UMzQd8Ll/NEpW/kdy/qfS0q63tRA== X-Received: by 2002:a05:651c:43dc:20b0:3a1:7c1c:9fab with SMTP id 38308e7fff4ca-3a1aebdf04emr59621431fa.8.1787667750777; Tue, 25 Aug 2026 07:22:30 -0700 (PDT) From: Konstantin Semichastnov Date: Tue, 25 Aug 2026 17:22:25 +0300 Subject: [PATCH 01/13] hw/riscv/trace-encoder: add ntrace enable flag MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260825-upstream-ntrace_core-v1-1-f8be2f40d2fd@gmail.com> References: <20260825-upstream-ntrace_core-v1-0-f8be2f40d2fd@gmail.com> In-Reply-To: <20260825-upstream-ntrace_core-v1-0-f8be2f40d2fd@gmail.com> To: qemu-devel@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , qemu-riscv@nongnu.org, Fabiano Rosas , Laurent Vivier , Paolo Bonzini , Alexei Filippov , Konstantin Semichastnov X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4404; i=antikostya2@gmail.com; h=from:subject:message-id; bh=UFIBq4OXYLwpRLUSsWgnfrok8avlyztAbJkS9Yp8lhM=; b=owEBbQKS/ZANAwAKAUiKpW6lUN52AcsmYgBqjaUixEcWCTvX3jB6AsB7xL+uhsl71ME0igMy5 Bhq1YR2pamJAjMEAAEKAB0WIQRMBWLx2o+linEPEBhIiqVupVDedgUCao2lIgAKCRBIiqVupVDe dpM8EACa9Ct/z3roUHRCTC3BxflLcOWesjBzaB0qR9CVTyiIWfmmj95BDsp0cSoTM1wCZujJymC IFt2yERJ+V1U/+3W7J8kRqcoQfAg0uiXmIpBi9oVNmBNAUfe/7TKWzlYC69u8frFlv4X7Dy12j3 0kvuQe18wh/shLeX6fIP7Wm/Vq3HADg2WCkGE2lJGDk3p1VuZK9LW0UmiThl+qXjnmOwk+xVEJ3 QwP0T3Wi7rKALbaL/+XKKyDxPYDWKc209Bg6HyM/j7MsDIYDGvOu8CULgWQn7QAbLbtqzj/K/T2 qMa6VAya8mx/+V23jsY8GNFDWTRLLGIYEF8m1c0querbgGeRtVEgdjbkNPqaZ5C6450+p7JJ0nz +lT4Jrztt4xEnAJOPKHs4+BSBVpeQ9mWVXl7ayQkg/QrNTSkg/uHecZvicDRZT4+RqTIg3Lg4CY G7O1jHRaDm+XsJzxazsQELV2U8WKjtIroKjCFI3R+0ubSkE/nzV2Ru2Za1aoOZ01ehcmBr4RwMm urJHLxgF3Y/mSmQFZCAWggOivBBZVlrALCe0igwEwKvpClR7MobE/4jrC2LEF3ceAzj5c5HjXUZ KNv5A7F4fPcdLOOo/bGMyU45UP/ZjljmslDlzKD60+J5qWtJ8qFbG3J0JCxEp+dS4j3gPtPGQGF fA507PfAkd7qKAQ== X-Developer-Key: i=antikostya2@gmail.com; a=openpgp; fpr=4C0562F1DA8FA58A710F1018488AA56EA550DE76 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=2a00:1450:4864:20::231; envelope-from=antikostya2@gmail.com; helo=mail-lj1-x231.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Tue, 25 Aug 2026 10:47:29 -0400 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 @gmail.com) X-ZM-MESSAGEID: 1787669372022158500 Initial commit of N-Trace support patch series based on "RISC-V n-trace (Nexus-based Trace) Specification" Version 1.0. With Trace control devices based on "RISC-V Trace Control Interface Specification" Version 1.0. Selecting trace message format rely on trTeFormat bit of trTeControl trace encoder register. We will mirror trTeFormat value in trace encoder in `ntrace` field to simplify checking of current format in trace encoder logic. This commit only mirrors register value in field, logic based on this field value is added in next commit. Signed-off-by: Konstantin Semichastnov --- hw/riscv/trace-encoder.c | 22 +++++++++++++++++++++- hw/riscv/trace-encoder.h | 2 ++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/hw/riscv/trace-encoder.c b/hw/riscv/trace-encoder.c index 55acb1f2ae..53345a478c 100644 --- a/hw/riscv/trace-encoder.c +++ b/hw/riscv/trace-encoder.c @@ -84,6 +84,9 @@ REG32(TR_TE_CONTROL, 0x0) #define R_TR_TE_CONTROL_RESET R_TR_TE_CONTROL_EMPTY_MASK #define R_TR_TE_CONTROL_RO_BITS R_TR_TE_CONTROL_EMPTY_MASK =20 +#define TR_TE_CONTROL_FORMAT_ETRACE 0 +#define TR_TE_CONTROL_FORMAT_NTRACE 1 + /* * trTeImpl register fields */ @@ -153,7 +156,6 @@ static uint64_t trencoder_te_ctrl_set_hardwire_vals(uin= t64_t input) input =3D FIELD_DP32(input, TR_TE_CONTROL, CONTEXT, 0); input =3D FIELD_DP32(input, TR_TE_CONTROL, INST_STALL_ENA, 0); input =3D FIELD_DP32(input, TR_TE_CONTROL, INHIBIT_SRC, 1); - input =3D FIELD_DP32(input, TR_TE_CONTROL, FORMAT, 0); =20 /* SYNC_MODE and SYNC_MAX will be revisited */ input =3D FIELD_DP32(input, TR_TE_CONTROL, INST_SYNC_MODE, 0); @@ -168,6 +170,7 @@ static uint64_t trencoder_te_ctrl_prew(RegisterInfo *re= g, uint64_t val) uint32_t trTeActive =3D ARRAY_FIELD_EX32(te->regs, TR_TE_CONTROL, ACTI= VE); uint32_t trTeInstTracing =3D ARRAY_FIELD_EX32(te->regs, TR_TE_CONTROL, INST_TRACING); + uint32_t trTeFormat =3D ARRAY_FIELD_EX32(te->regs, TR_TE_CONTROL, FORM= AT); uint32_t temp; =20 val =3D trencoder_te_ctrl_set_hardwire_vals(val); @@ -205,6 +208,19 @@ static uint64_t trencoder_te_ctrl_prew(RegisterInfo *r= eg, uint64_t val) val =3D FIELD_DP32(val, TR_TE_CONTROL, INST_TRACING, 0); } =20 + temp =3D FIELD_EX32(val, TR_TE_CONTROL, FORMAT); + if (te->trace_running) { + /* Do not allow to change tracing format while tracing is enabled.= */ + val =3D FIELD_DP32(val, TR_TE_CONTROL, FORMAT, trTeFormat); + } else if (temp !=3D TR_TE_CONTROL_FORMAT_ETRACE && + temp !=3D TR_TE_CONTROL_FORMAT_NTRACE) { + /* + * Do not change format, if requested format is not supported + * (only E-Trace and N-Trace formats are supported for now) + */ + val =3D FIELD_DP32(val, TR_TE_CONTROL, FORMAT, trTeFormat); + } + return val; } =20 @@ -215,6 +231,7 @@ static void trencoder_te_ctrl_postw(RegisterInfo *reg, = uint64_t val) uint32_t trTeEnable =3D ARRAY_FIELD_EX32(te->regs, TR_TE_CONTROL, ENAB= LE); uint32_t trTeInstTracing =3D ARRAY_FIELD_EX32(te->regs, TR_TE_CONTROL, INST_TRACING); + uint32_t trTeFormat =3D ARRAY_FIELD_EX32(te->regs, TR_TE_CONTROL, FORM= AT); RISCVCPU *cpu =3D te->cpu; CPURISCVState *env =3D &cpu->env; =20 @@ -233,6 +250,8 @@ static void trencoder_te_ctrl_postw(RegisterInfo *reg, = uint64_t val) =20 te->enabled =3D trTeEnable ? true : false; =20 + te->ntrace =3D (trTeFormat =3D=3D TR_TE_CONTROL_FORMAT_NTRACE); + if (!te->trace_running && trTeInstTracing) { /* Starting trace. Ask the CPU for the first trace insn */ te->trace_next_insn =3D true; @@ -314,6 +333,7 @@ static void trencoder_reset(DeviceState *dev) te->enabled =3D false; te->trace_running =3D false; te->trace_next_insn =3D false; + te->ntrace =3D false; env->trace_running =3D false; =20 te->branch_map =3D 0; diff --git a/hw/riscv/trace-encoder.h b/hw/riscv/trace-encoder.h index 48cf8366ee..fed0ef9a48 100644 --- a/hw/riscv/trace-encoder.h +++ b/hw/riscv/trace-encoder.h @@ -44,6 +44,8 @@ struct TraceEncoder { bool enabled; bool trace_running; bool trace_next_insn; + + bool ntrace; }; =20 #define TYPE_TRACE_ENCODER "trace-encoder" --=20 2.43.0 From nobody Sat Sep 26 21:37:17 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787669379; cv=none; d=zohomail.com; s=zohoarc; b=mMsC8Dy7FeBJ3r5GsZMRkyktcS/e9t2noQlhlYrYRhb642imEzMOaSRNlTcG6LA3RXnj/9VazhlH7fE1dc0KfakYvdCnTxBQmtLvmuU6RgucOvYexnGTbpmZEulZmBgmHjBN8i6clffNSu92EHDCArTgiu/ModMpId9wAMjM3Jc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787669379; h=Content-Type: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=UxmpAQ4p41B4A/aNtId4HsemUVtqDwwv6IPxghI3qK8=; b=Kot5Q+ssoE6YHXmGPQNI8E9Z5RXSZWpCiMysR8CqJcwD8BQlrr+HYmXju4G8PX+owDcN39y7KGlaD6f5dOT2yCAbDoV1yQ1qxVK5//kUus5bOrRRCJlQUvbfOUX3pU1ct08K4bZyh39OSFUZXkjbm4TshtZ00UbpNXGodwhzDCc= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787669379871782.6338339674222; Tue, 25 Aug 2026 07:49:39 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wysR1-0000in-PK; Tue, 25 Aug 2026 10:47:31 -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 1wys2u-0002vB-3E for qemu-devel@nongnu.org; Tue, 25 Aug 2026 10:22:36 -0400 Received: from mail-lj1-x235.google.com ([2a00:1450:4864:20::235]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wys2s-0002Ap-9B for qemu-devel@nongnu.org; Tue, 25 Aug 2026 10:22:35 -0400 Received: by mail-lj1-x235.google.com with SMTP id 38308e7fff4ca-39faf9e2c62so31763191fa.3 for ; Tue, 25 Aug 2026 07:22:33 -0700 (PDT) Received: from [127.0.1.1] (broadband-90-154-73-22.ip.moscow.rt.ru. [90.154.73.22]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3a1c82f6b02sm22457551fa.41.2026.08.25.07.22.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 07:22:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787667752; x=1788272552; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=UxmpAQ4p41B4A/aNtId4HsemUVtqDwwv6IPxghI3qK8=; b=JBSHl74VsdSb6YcpH7uJmZtCuSUSPps4HZy+6fS/IurDSosDNvkJ5H/1UBwKAAJaIa Ta3g1KvMEleSxrxCGvvsDimhmRvhnLn5TxNf2fbI7jgmxJbMjbremu3SyH0o9EqVRq9k QIvBl94g6YUSIXJ8xCggqkpiAt6/6FMP/3ZP1fwNHI50LDgogpch6vj93FZU85KB6TPK 2CL3vR1k3+EK0/FhtSc4YZIQdaf4xBhqfcIvv/lXPLnObmB9zAP/tDHYh1f3mAmngF1V cKjMUKZ9ZOn5ui+tQ7w36xDGBWB56oNsee2M0CQJpHvGz36PaMBDlxaGdcBNVrdcS1c6 mq8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787667752; x=1788272552; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=UxmpAQ4p41B4A/aNtId4HsemUVtqDwwv6IPxghI3qK8=; b=WT9mA1U2pQ687ZEtqKQauM91Ko8OzauuMitMnf0pK7vcKlEKkJ5zJUXin2tkXXAIUL d/b6Xucon2924ekLP0taqcbwWupqMBNxOiz0YI0eHlZ7IYVPpJz9VZgSNa6ejEjqjDzZ hrg19sayk+qyO5pHKRY/6AlxRWqsnBaLrP3KGqE5qC/KtvuUzB1IdDjUQ4wCYkzHgJnS fpw9PMmz+RsRMPXaDV8qodbUq4vF3YEaMSZkCoHN8vwPpO+1JZFP0Mhg6TLtd7migExI 4VErhK7obz68hNF1tZ6zVLWSLm1MfYhBvKwvzt1IAGQgSZWWaRGa2Gmxuhw4apQrBtgF 1new== X-Gm-Message-State: AFuF++kWFbroS1+l4GYnAih+us++wS/QD6uJcnZPxWzYI/li1lENDu7y 1GuxCjRiJj6CP7ISODQs3BbammkgYabWLF6prKPaV5eIHdXqhdgbdRLO X-Gm-Gg: AR+sD12r5dT36CynMAn5h1uNvvd4WhDGMo+XsA6BFDTYRgrkeg/7uFPt6+qH9mBGFur uf6Gx7QuoqwrhTfprypbbFmXaZLOpmExz75MxGpGjsNTWRc15/TI5tACHo1g+HnhsRklOCjsgk3 xDFT4WzjPIoOncxzJ3bw4Z+BBX82TiN7FdneHtXaSAFqG1ajIkLaerQ+ns3Dy18895s79LJ2L2U 1BrpzN/Ud9hVoa1KlaYnuPVWqa6A+G1ic3moDQ/GHejg3eZ+XvZg7YSLKn+DTZRHpOmo/LbBosY r/qfyFPDJ2E+SLaCB9b6oUjizTbDy/OSml5sZVmVg4Bo7DNWDwevnyjg6zmbvfDj94eNbAck3Ys 4lF+qZFOSv7t1RaQ3wZjD+ddl7x82bwE1OBhBWJcUAA+gBwak4JHW0Gmj+aRLE2pOMNG3onjAAC g9/BfbFPGzZBxsG8HaaIAXkGrD2ur9Uo1kq0W1MLeEIJKZl3bbM/zqJE/ShzV/J2/gnrEzuHxXa TBZn6uGqR988FOxm+A5GUXRgWB3Hw== X-Received: by 2002:a05:651c:2205:b0:3a1:534e:249d with SMTP id 38308e7fff4ca-3a1c1e03253mr60095171fa.4.1787667752156; Tue, 25 Aug 2026 07:22:32 -0700 (PDT) From: Konstantin Semichastnov Date: Tue, 25 Aug 2026 17:22:26 +0300 Subject: [PATCH 02/13] hw/riscv/trace-encoder.c: add trace ntrace/etrace selection logic MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260825-upstream-ntrace_core-v1-2-f8be2f40d2fd@gmail.com> References: <20260825-upstream-ntrace_core-v1-0-f8be2f40d2fd@gmail.com> In-Reply-To: <20260825-upstream-ntrace_core-v1-0-f8be2f40d2fd@gmail.com> To: qemu-devel@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , qemu-riscv@nongnu.org, Fabiano Rosas , Laurent Vivier , Paolo Bonzini , Alexei Filippov , Konstantin Semichastnov X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4258; i=antikostya2@gmail.com; h=from:subject:message-id; bh=iOuVN5s3606uBw5VmjkyaRTVPL4JqFZaPnUIboojA0Q=; b=owEBbQKS/ZANAwAKAUiKpW6lUN52AcsmYgBqjaUi0XR9ddupQ/s7cIBmjr645wiNlBsXay/tv YyfOVusjmmJAjMEAAEKAB0WIQRMBWLx2o+linEPEBhIiqVupVDedgUCao2lIgAKCRBIiqVupVDe di5REACZzsWPujTbI7fYm3QvcazU7UE2EVphk7/Dvwnqc2AkfvU0v6f2K2zRLlhI+bO05yJ2Yaz wy32r/iqxBN+VRduJo519tIeGKtMQ/V/fYyBgrjUqDx0pO9JB2S+Pi/O1/FcWzgfcy67bcFyU9/ +AcAlouuGJtk3EYmaI77QC48S2wmnNd5m8H8UMQbY2pkBQgAgcoSJcjg3OtskVjmZAlVtHeMRYl JnlDAGZtZBEK/l+yZ9m8KlHLI5pXm9gEWC3pcLcNplVv6eQFYLKSGunGI2wwhA35o/pKwYb8DGM rxipvmmQdET0pg9iTot0h7NH+ixbufezaJDgGlkggJxdrCCJGbQGToWfs5eXJqzdX//ktKUrI6z v6/dHY/HYV9PgSxwEKGcb3RIGW9ll33hXhr8zVZLxbvlKKzAXsuI9KKQyQa/DYCXKew9Ak5Jthx wenAntQs2Dyb1IYmRhUpHVNMgkBzoMqDG8iKFw3jVf2tRGIeacep3eqRabqlK2UAvPz1FxhxzNB 5siMPZww7roeSfgN4TxKn42zqIxIIuUtUAr/fERkOG93/Wrzy/ByEPvYFDjOfMWzaGuoR7iQJx2 ZveqmhkXzRnMKkOUdLUHJEEdVUEOqyHJPNJJHxQwohC7dMnGCToYSyzkFJOEENuNADQO0O43wmp jtZnnVnK6a69vCg== X-Developer-Key: i=antikostya2@gmail.com; a=openpgp; fpr=4C0562F1DA8FA58A710F1018488AA56EA550DE76 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=2a00:1450:4864:20::235; envelope-from=antikostya2@gmail.com; helo=mail-lj1-x235.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Tue, 25 Aug 2026 10:47:29 -0400 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 @gmail.com) X-ZM-MESSAGEID: 1787669382093158500 Selecting trace message format rely on `TraceEncoder->ntrace` flag. This flag mirrors trTeFormat bit. For now only two values supported: - E-Trace (trTeFormat =3D 0), trace format, described by Efficient trace s= pec. - N-Trace (trTeFormat =3D 1), trace format, described by Nexus trace spec. For now we not yet implemented any N-Trace messages, so currently `ntrace` field only disables E-Trace messages competely. We will reuse this field in following commits, when N-Trace messages added. Signed-off-by: Konstantin Semichastnov --- hw/riscv/trace-encoder.c | 29 +++++++++++++++++++++++++---- target/riscv/trace_helper.c | 8 ++++++-- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/hw/riscv/trace-encoder.c b/hw/riscv/trace-encoder.c index 53345a478c..34c8f60ce1 100644 --- a/hw/riscv/trace-encoder.c +++ b/hw/riscv/trace-encoder.c @@ -254,7 +254,11 @@ static void trencoder_te_ctrl_postw(RegisterInfo *reg,= uint64_t val) =20 if (!te->trace_running && trTeInstTracing) { /* Starting trace. Ask the CPU for the first trace insn */ - te->trace_next_insn =3D true; + if (te->ntrace) { + /* send ProgTraceSync message */ + } else { + te->trace_next_insn =3D true; + } =20 te->ramsink_ramstart =3D trencoder_read_ramsink_writep(te); te->ramsink_ramlimit =3D trencoder_read_ramsink_ramlimit(te); @@ -442,6 +446,8 @@ static void trencoder_send_sync_msg(Object *trencoder_o= bj, uint64_t pc) uint8_t msg_size; bool is_branch_taken; =20 + g_assert(!trencoder->ntrace); + trencoder->first_pc =3D pc; is_branch_taken =3D trencoder_addr_is_branch_taken(trencoder, pc); msg_size =3D rv_etrace_gen_encoded_sync_msg(msg, pc, priv, @@ -458,6 +464,8 @@ static void trencoder_send_updiscon(TraceEncoder *trenc= oder, uint64_t pc) bool updiscon =3D !notify; uint8_t msg_size; =20 + g_assert(!trencoder->ntrace); + if (trencoder->branches > 0) { msg_size =3D rv_etrace_gen_encoded_format1(format2_msg, trencoder->branches, @@ -485,6 +493,8 @@ void trencoder_set_first_trace_insn(Object *trencoder_o= bj, uint64_t pc) uint8_t msg_size; bool is_branch_taken; =20 + g_assert(!trencoder->ntrace); + if (trencoder->updiscon_pending) { trencoder_send_updiscon(trencoder, pc); } @@ -508,6 +518,11 @@ void trencoder_trace_trap_insn(Object *trencoder_obj, g_autofree uint8_t *msg =3D g_malloc0(TRACE_MSG_MAX_SIZE); uint8_t msg_size; =20 + if (trencoder->ntrace) { + /* send IndirectBranchHist message */ + return; + } + if (trencoder->updiscon_pending) { trencoder_send_updiscon(trencoder, pc); } @@ -525,9 +540,15 @@ static void trencoder_send_branch_map(Object *trencode= r_obj) g_autofree uint8_t *msg =3D g_malloc0(TRACE_MSG_MAX_SIZE); uint8_t msg_size; =20 - msg_size =3D rv_etrace_gen_encoded_format1_noaddr(msg, - te->branches, - te->branch_map); + if (te->ntrace) { + /* send ResourceFull message */ + return; + } else { + msg_size =3D rv_etrace_gen_encoded_format1_noaddr(msg, + te->branches, + te->branch_map); + } + trencoder_send_message_smem(te, msg, msg_size); } =20 diff --git a/target/riscv/trace_helper.c b/target/riscv/trace_helper.c index cd57641d9b..9b43aeac09 100644 --- a/target/riscv/trace_helper.c +++ b/target/riscv/trace_helper.c @@ -34,8 +34,12 @@ void helper_trace_updiscon(CPURISCVState *env) RISCVCPU *cpu =3D env_archcpu(env); TraceEncoder *te =3D TRACE_ENCODER(cpu->trencoder); =20 - te->updiscon_pending =3D true; - te->trace_next_insn =3D true; + if (te->ntrace) { + /* send IndirectBranchHist message */ + } else { + te->updiscon_pending =3D true; + te->trace_next_insn =3D true; + } } =20 void helper_trace_branch(CPURISCVState *env, target_ulong pc, int taken) --=20 2.43.0 From nobody Sat Sep 26 21:37:17 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787669331; cv=none; d=zohomail.com; s=zohoarc; b=YXFG0BxmFe5BR3aukUeWq1IaYf38SMTw5KvHZOV0E7U61XX84DZU4Q1PPIvSncayy8LNd7n4UCCofBLjC5cc2moAtnj/BtPihLb50HWUOJaEKE0xa/4IELg+v2YLFmOojIxwaNMXOnRHCJyUSrFCnlN3LuBvYmLShO9q7f2KXKE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787669331; h=Content-Type: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=OzW86D2A1WfEQrpaeRRQf+AcujcXbbZ8Qz00fhhJRAU=; b=bNW9t4NH484lljfT6q8IVknCByEJT7jMdeutjo0kY9E0UW8EieFyTZZC8EH8z+Kbzqq9tSLMmabFWIlJzD08wKFbDiFub1ps4Yl7RIdUlZ7S1BhJj7z8bAmGhnrQAERqdVI6VMzmpylUn/xAQNZz+6gLPXToacwGYu3Jaa2TtjQ= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17876693319668.8908174306099; Tue, 25 Aug 2026 07:48:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wysR0-0000hy-EX; Tue, 25 Aug 2026 10:47:30 -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 1wys2v-0002vo-M1 for qemu-devel@nongnu.org; Tue, 25 Aug 2026 10:22:37 -0400 Received: from mail-lf1-x133.google.com ([2a00:1450:4864:20::133]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wys2t-0002BN-KA for qemu-devel@nongnu.org; Tue, 25 Aug 2026 10:22:37 -0400 Received: by mail-lf1-x133.google.com with SMTP id 2adb3069b0e04-5b015b2d792so4576365e87.3 for ; Tue, 25 Aug 2026 07:22:35 -0700 (PDT) Received: from [127.0.1.1] (broadband-90-154-73-22.ip.moscow.rt.ru. [90.154.73.22]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3a1c82f6b02sm22457551fa.41.2026.08.25.07.22.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 07:22:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787667754; x=1788272554; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=OzW86D2A1WfEQrpaeRRQf+AcujcXbbZ8Qz00fhhJRAU=; b=JYsUf+rAG2Ei2iLHb9MZs9wKXU4OWx5ua4UhWDeuQUEIhQDl7IeHOFXnLmE8fCz+64 So2LBapmyNswFT4AZBAc6J74ed1brMH69HxSrWQgjkoh9nzgfB+gHV6RKNpjwDzbzpoh vMID197w5WLfVHEAUzgckWAYp4A9J+gaAtB10kk3ba78X07XIzUqO1JJbdLJvpLdRRsy pp3HAhhYMMA0uZsJfe8rdx18ysOvJpuFysI5rn6nZnbfcZA6gnj5LWCIUvWKp2pfyjnR X5/B/l0zkm6JD6XrwaWGOHclNcHw7BtDkWgBoHYEDzLlElLceCQMU7K242URQnXBFplI 4Q7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787667754; x=1788272554; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=OzW86D2A1WfEQrpaeRRQf+AcujcXbbZ8Qz00fhhJRAU=; b=NUeGEAkelHZcIS+1icYv+tSSExrRHxxEGS9oHsLbaBkbyHdjUvM646XN/W2vlCrha4 M1dwcVCtaF7KfyS9w165Vgyk7MzWy/ykJ7u1qbWQB75L3GLUbvqzyrf7aM1L3c2B/oDZ E4EFUox2teIG7G+zWTnCoe30alA4iVmAUxSai9kO4iuq6f3QB5W8sFLNerHxqlLw2/TJ qtICV35FIXXWT/8V+YDEZ2cpQprfeVhCgjZ1Brahbg3Qp5S+uP0hfx8/ONo4PaIrsoJR rxeh4K266rHRASTyqQBVZrskJMB/SM8t6hYjAy9XuKdpzoaLlfkKyyJSVq1XaLO8sPSQ pyeg== X-Gm-Message-State: AFuF++lKZq4Fx5k3AIn056YmrQV9hxBb9nsUxMqUMu6/ya8Rvvev03Mg WLYFvT69/WgEqGsSwoP6nKnu4ZEgUSlpR4Z02/trY+QuYyMo/FPTo5tf X-Gm-Gg: AR+sD12g2gWDkfAbTwr/O9dqjIMHzXSn3E7QgnhuQRyHGQJY3QxQohH5WgA/JBBc4R1 ECTaKfzUz0m/nbHnOHADW0UvLRkY4rwEV+Ak8cC72pe6e4MJbPyxM1rLJNUWfUIxsAIzHDp8Mcq N4XB87NAXDtbm+Evy1xsxxE0I0dwyV+zQY7ZlStZOnultLFGY0hgUBjrPSV8Bw2B7SfmmHSxQS9 b3HQQtV1gN6cxVwgs+ihXxbqTbrG9zhxDO7QpEf5KGna2YcNZfbsvlzjLDjRLUYkxYFx/+RCEPH zq60xcKjREjHe0zg3GH7PRk9hJR3GpXT85q/E7HhEKTXb3HSAjZeW+DgQz8NcWL4OKnA6K9c02L qstTP0+YYLwse42iEibrr1Iw45H/BZxhsr9xNxAeiKWRhjtixrC7rABkZ3CL9+HZ219TAepCOdV KV6PdQ/IoBhhA67pVcUejC5+is85JpwwxzdhqW6oF8iPIuis23AuklNLgyGHNDzYj46XdfHBCCy u1l+OrvBvlYN8fP1Hb9XBhGwpXeSFQL7u1ZVE2p X-Received: by 2002:a05:6512:8381:b0:5b0:23b4:be97 with SMTP id 2adb3069b0e04-5b48421a625mr8958086e87.6.1787667753452; Tue, 25 Aug 2026 07:22:33 -0700 (PDT) From: Konstantin Semichastnov Date: Tue, 25 Aug 2026 17:22:27 +0300 Subject: [PATCH 03/13] hw/riscv: add n-trace encoder with ProgTraceSync message MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260825-upstream-ntrace_core-v1-3-f8be2f40d2fd@gmail.com> References: <20260825-upstream-ntrace_core-v1-0-f8be2f40d2fd@gmail.com> In-Reply-To: <20260825-upstream-ntrace_core-v1-0-f8be2f40d2fd@gmail.com> To: qemu-devel@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , qemu-riscv@nongnu.org, Fabiano Rosas , Laurent Vivier , Paolo Bonzini , Alexei Filippov , Konstantin Semichastnov X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=8283; i=antikostya2@gmail.com; h=from:subject:message-id; bh=hWSIj6Fg7DbARIuisjiJMlp8YHlOaERfE21onkZwFs8=; b=owEBbQKS/ZANAwAKAUiKpW6lUN52AcsmYgBqjaUiGqP9GtW0ntxoZujT3oAAdQDpETYCHr+yV H0lBdwIVXaJAjMEAAEKAB0WIQRMBWLx2o+linEPEBhIiqVupVDedgUCao2lIgAKCRBIiqVupVDe dljqEACE3JXKlfrhukYWtU1tBftjyHMcfp76CxheuAvUO+kqabrZ/BDz9b88WkRXwik8LQsG+bS OFppQEBuiTfcKaq9myVa6HlduqLyZvX75FdoovWXhnpfi5KjlcXdFw/gHlrhqr6oKUvjL9r/bkV CSkLpAFzQgCKcMyAi7HRRkrbpTJ7d9mk/T3X+b5KJ29hEkMjy0d+ysXwI+JRHynLy8yLfun6/L4 IaCQ2CzgGZ1pEo+geKd1GbBCDwT6CIZw4OUvN9UhQPmAfi1MeDAOHHjx10SkM2O1eijZetIUlHD NbX4Aq/bs9pNdZdYcvVyUFg2LHtnPvu2wPzSAEII+LA/TfLkGB+kYnS4u5Kkgi6drh73nuZgQYX 7014ilgwB59UyiHsiq6+uW443k2+7t+4Zpy6OZLwGLpt9ts7LzMRleA9HV8vSyG2WvIJ0rFZcvs 4OIYysTaQ5Shnmput249k1w3K6hEGw8+ju8HnUnS9Vev1WLvNfT7g6sOjoPPsW1+iC72K2qHAZ3 NYogCXdAYuM3w8Y0pgPQARqRr+XbMrrFwkLbotwNMNjgsbyGjQP6qA1hCzMfzQNRyWyRKkFy4Mn iI3+nLFun3/kEh6sIgYPtoaHfMHyvwQd4gIshCBH2pwwd8T5F3orl9Y9KYfo3YeAhnSaTTv6HI8 WMMq5M0CtB8HLow== X-Developer-Key: i=antikostya2@gmail.com; a=openpgp; fpr=4C0562F1DA8FA58A710F1018488AA56EA550DE76 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=2a00:1450:4864:20::133; envelope-from=antikostya2@gmail.com; helo=mail-lf1-x133.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Tue, 25 Aug 2026 10:47:29 -0400 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 @gmail.com) X-ZM-MESSAGEID: 1787669334347158500 Introduce N-Trace format message encoder, based on "RISC-V n-trace (Nexus-based Trace) Specificationand" Version 1.0. Add generation, encoding and sending logic for ProgTraceSync message Signed-off-by: Konstantin Semichastnov --- hw/riscv/rv-trace-messages.c | 154 +++++++++++++++++++++++++++++++++++++++= ++++ hw/riscv/rv-trace-messages.h | 1 + hw/riscv/trace-encoder.c | 29 +++++++- hw/riscv/trace-encoder.h | 1 + 4 files changed, 184 insertions(+), 1 deletion(-) diff --git a/hw/riscv/rv-trace-messages.c b/hw/riscv/rv-trace-messages.c index 932f3ae499..0b90d6a437 100644 --- a/hw/riscv/rv-trace-messages.c +++ b/hw/riscv/rv-trace-messages.c @@ -338,3 +338,157 @@ size_t rv_etrace_gen_encoded_format1(uint8_t *buf, =20 return HEADER_SIZE + header.length; } + +#define MDO_BITS_NUM 6 +#define MSEO_BITS_NUM 2 + +#define MSEO_VAR_FIELD_FINISHED 0b01 +#define MSEO_END_OF_MESSAGE 0b11 + +typedef enum { + FIELD_END =3D 0, + FIELD_FIXED, + FIELD_VAR, +} NTraceFieldType; + +typedef enum { + WIDTH_TCODE =3D 6, + WIDTH_SYNC =3D 4, + WIDTH_ICNT =3D 22, + WIDTH_FADDR =3D 63, +} NTraceFieldWidth; + +typedef enum { + TCODE_PROG_TRACE_SYNC =3D 0x9, +} NTraceTcodeFieldValues; + +typedef enum { + SYNC_PERIODIC =3D 2, + SYNC_TRACE_ENABLED =3D 5, +} NTraceSyncFieldValues; + +typedef struct NTraceFieldPayload { + NTraceFieldType type; + NTraceFieldWidth width; + uint64_t value; +} NTraceFieldPayload; + +#define PAYLOAD_TCODE(val) \ + { \ + .type =3D FIELD_FIXED, \ + .width =3D WIDTH_TCODE, \ + .value =3D (val), \ + } + +#define PAYLOAD_SYNC(val) \ + { \ + .type =3D FIELD_FIXED, \ + .width =3D WIDTH_SYNC, \ + .value =3D (val), \ + } + +#define PAYLOAD_ICNT(val) \ + { \ + .type =3D FIELD_VAR, \ + .width =3D WIDTH_ICNT, \ + .value =3D (val), \ + } + +#define PAYLOAD_FADDR(val) \ + { \ + .type =3D FIELD_VAR, \ + .width =3D WIDTH_FADDR, \ + .value =3D (val), \ + } +#define PAYLOAD_END() \ + { \ + .type =3D FIELD_END, \ + .width =3D 0, \ + .value =3D 0, \ + } + +static size_t rv_ntrace_gen_encoded_msg(uint8_t *buf, + const NTraceFieldPayload *payload) +{ + uint8_t buf_byte =3D 0; + uint8_t packed_bit =3D 0; + uint8_t packed_cur =3D 0; + uint8_t nr_move =3D 0; + + /* + * as described in "Chapter 3. N-Trace Transmission Protocol" of N-Tra= ce + * spec each byte has only bits[7:2] filled with data, called MDO bits. + * Lowest 2 bits[1:0] are called MSEO bits and used to signal about + * boundaries between message fields and messages + */ + + while (payload->type !=3D FIELD_END) { + for (uint8_t offset =3D 0; offset < payload->width; offset +=3D nr= _move) { + nr_move =3D MIN(MDO_BITS_NUM - packed_bit, payload->width - of= fset); + uint8_t chunk =3D extract64(payload->value, offset, nr_move); + + packed_cur =3D deposit32(packed_cur, packed_bit, nr_move, chun= k); + packed_bit +=3D nr_move; + + if (packed_bit =3D=3D MDO_BITS_NUM) { + buf[buf_byte++] =3D packed_cur << MSEO_BITS_NUM; + packed_bit =3D 0; + packed_cur =3D 0; + } + } + + /* + * if field has variable length - last byte of this field should h= ave + * MSEO (lowest 2) bits set to 01, and zero filled to end of byte + * + * N-Trace spec: 3.1. MSEO Sequences. + */ + if (payload->type =3D=3D FIELD_VAR) { + if (packed_bit !=3D 0) { + /* last chunk was not finished, leave remaining bits clear= ed */ + buf[buf_byte++] =3D packed_cur << MSEO_BITS_NUM; + packed_bit =3D 0; + packed_cur =3D 0; + } + + /* correct last chunk MSEO bits */ + buf[buf_byte - 1] =3D deposit32(buf[buf_byte - 1], 0, + MSEO_BITS_NUM, + MSEO_VAR_FIELD_FINISHED); + } + + payload++; + } + + if (packed_bit !=3D 0) { + /* last chunk was not finished, so finish it now */ + buf[buf_byte++] =3D packed_cur; + } + + /* + * last byte of message should have MSEO (lowest 2) bits set to 11 + * + * N-Trace spec: 3.1. MSEO Sequences. + */ + buf[buf_byte - 1] =3D deposit32(buf[buf_byte - 1], 0, + MSEO_BITS_NUM, + MSEO_END_OF_MESSAGE); + + return buf_byte; +} + +size_t rv_ntrace_gen_encoded_prog_trace_sync_msg(uint8_t *buf, uint64_t fa= ddr) +{ + const NTraceFieldPayload msg_fields[] =3D { + PAYLOAD_TCODE(TCODE_PROG_TRACE_SYNC), + /* SRC field is not supported for now */ + PAYLOAD_SYNC(SYNC_TRACE_ENABLED), + PAYLOAD_ICNT(0), + PAYLOAD_FADDR(faddr), + /* TSTAMP field is not supported for now */ + PAYLOAD_END(), + }; + + return rv_ntrace_gen_encoded_msg(buf, msg_fields); +} + diff --git a/hw/riscv/rv-trace-messages.h b/hw/riscv/rv-trace-messages.h index 6f700eac8e..635e498393 100644 --- a/hw/riscv/rv-trace-messages.h +++ b/hw/riscv/rv-trace-messages.h @@ -37,4 +37,5 @@ size_t rv_etrace_gen_encoded_format1(uint8_t *buf, uint64_t addr, bool notify, bool updiscon); =20 +size_t rv_ntrace_gen_encoded_prog_trace_sync_msg(uint8_t *buf, uint64_t fa= ddr); #endif diff --git a/hw/riscv/trace-encoder.c b/hw/riscv/trace-encoder.c index 34c8f60ce1..10e52e207e 100644 --- a/hw/riscv/trace-encoder.c +++ b/hw/riscv/trace-encoder.c @@ -255,7 +255,13 @@ static void trencoder_te_ctrl_postw(RegisterInfo *reg,= uint64_t val) if (!te->trace_running && trTeInstTracing) { /* Starting trace. Ask the CPU for the first trace insn */ if (te->ntrace) { - /* send ProgTraceSync message */ + /* + * N-Trace require to trace from very first instruction, + * not from next instruction, after enabling the trace, + * like E-Trace. So we need to send message here, instead of + * using te->trace_next_insn + */ + trencoder_send_prog_trace_sync(OBJECT(te), env->pc); } else { te->trace_next_insn =3D true; } @@ -508,6 +514,27 @@ void trencoder_set_first_trace_insn(Object *trencoder_= obj, uint64_t pc) trencoder_send_message_smem(trencoder, msg, msg_size); } =20 +static uint64_t rv_ntrace_encode_faddr(uint64_t pc) +{ + return pc >> 1ul; +} + +void trencoder_send_prog_trace_sync(Object *trencoder_obj, uint64_t pc) +{ + TraceEncoder *trencoder =3D TRACE_ENCODER(trencoder_obj); + g_autofree uint8_t *msg =3D g_malloc0(TRACE_MSG_MAX_SIZE); + uint8_t msg_size; + + uint64_t faddr =3D rv_ntrace_encode_faddr(pc); + + g_assert(trencoder->ntrace); + + msg_size =3D rv_ntrace_gen_encoded_prog_trace_sync_msg(msg, faddr); + + trencoder_send_message_smem(trencoder, msg, msg_size); +} + + void trencoder_trace_trap_insn(Object *trencoder_obj, uint64_t pc, uint32_t ecause, bool is_interrupt, diff --git a/hw/riscv/trace-encoder.h b/hw/riscv/trace-encoder.h index fed0ef9a48..96324d2b9a 100644 --- a/hw/riscv/trace-encoder.h +++ b/hw/riscv/trace-encoder.h @@ -53,6 +53,7 @@ struct TraceEncoder { OBJECT_DECLARE_SIMPLE_TYPE(TraceEncoder, TRACE_ENCODER) =20 void trencoder_set_first_trace_insn(Object *trencoder_obj, uint64_t pc); +void trencoder_send_prog_trace_sync(Object *trencoder_obj, uint64_t pc); void trencoder_trace_trap_insn(Object *trencoder_obj, uint64_t pc, uint32_t ecause, bool is_interrupt, --=20 2.43.0 From nobody Sat Sep 26 21:37:17 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787669342; cv=none; d=zohomail.com; s=zohoarc; b=E7iQ2CMlq+lQIUEPzZoDszZYHtgRg47G0X/Q2flIpvznmRPeqQvRzXXOHwZPjSvi32b7P1RnEbH8xtr23RYVn4+OnH+8MsVf4grlN0xv1O+crEUgQg4buM6L4saMn6fGDl1g0SujxyZmNMixrirHWu8PXZ2N2GysSJBfQ/xoVHw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787669342; h=Content-Type: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=LI3sq1n8XBnLR5ub4+Q8rmK77n4x7xn6BqJ31PJd3nw=; b=dBMWvnoAMlDO6RJDQd1prPXbJuqqe4GIOGoFVOnyCt136DtPB3FsVeUNrjbcOuaTVptjWLJbG0F768hXHQzrHN+qMOzHrJxD6sNk5rZwGyu0NmyGaqkzJMzyAlVjr35gIVs2ZB17OMY+uctY4D15LKqzB+YGRx4ibmuzLPXXpPY= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787669342877379.3525032505421; Tue, 25 Aug 2026 07:49:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wysR0-0000i2-IE; Tue, 25 Aug 2026 10:47:30 -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 1wys2w-0002wG-5D for qemu-devel@nongnu.org; Tue, 25 Aug 2026 10:22:38 -0400 Received: from mail-lf1-x12c.google.com ([2a00:1450:4864:20::12c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wys2u-0002Bj-IX for qemu-devel@nongnu.org; Tue, 25 Aug 2026 10:22:37 -0400 Received: by mail-lf1-x12c.google.com with SMTP id 2adb3069b0e04-5aeba09900bso3766895e87.2 for ; Tue, 25 Aug 2026 07:22:36 -0700 (PDT) Received: from [127.0.1.1] (broadband-90-154-73-22.ip.moscow.rt.ru. [90.154.73.22]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3a1c82f6b02sm22457551fa.41.2026.08.25.07.22.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 07:22:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787667755; x=1788272555; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=LI3sq1n8XBnLR5ub4+Q8rmK77n4x7xn6BqJ31PJd3nw=; b=YKII06pd1uGQiNIuOIEuVOIg/oq7+qePODAJ76lnH9I5dvigCuaCUtstwE1ioQBM6m yPaI9fCgV+n/rid2UBS9tjuZu/sK2EL3lTWvWNHZRdoM+O/Hu+BbE8LBjWfeRuoSjSgO +P5Zm5StaZSCBtmJvGA9tUKt4XzF604Bigll+j8/tCmnOeWcEa3sdchkAM375BZBfp+/ fxSyUHrUYTxe0Zev2qOJ6OYCJ1jCKvtvtqwRJ/FzWjyqt3a6+d9g8eG/ZtXFn0AlFo0l lt1jTML6aV13/kW+pJoR9gDoMe9fEpiAGCQ5jb0Nep55OirtiuP7Za/KKfVOT96Z8ixr s4eg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787667755; x=1788272555; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=LI3sq1n8XBnLR5ub4+Q8rmK77n4x7xn6BqJ31PJd3nw=; b=Ol/ctekF9vrUkQH4ozTILz5C51uuY3avnqupHGN3S2dQaEWHMOYz9mdZTVwQUAfVs0 BG7d5EFnnPTgLdQuG376CIgviGMc5xn9mG910v23iydRqSZRDyzIujp/HlkWgam4rd0r +ED9bh+u1k5kh+eOFSAsExiq5qATD75zy9449KrhYkH4QNMInZ7cyTj0nUIR8dXkZ/Nl TNkGBahwdV8adEVTnY8zjg4KK84buqewwscLl5loLFhWFjryVT449OTh9TIoHgMbuN+c cDNaEjx6tW+BNRW9z4ewQUWYE7C9tFF5xnO7QAN1djq1jJp2violyawwh01vadkSDR33 mW0g== X-Gm-Message-State: AFuF++kKHzdCJNClguGIobVarxvk5m8VlihDeVwRKqeIq4banK4qMlMI gsy29WSZS0C8bNFx/GtLGQK0blI7OXF84ifpieR8kY/ydeBekiDbay/s X-Gm-Gg: AR+sD13sMeFKjKSB4Dx+WFoAQelImLHJuSf2lu83DmxsaqWKbvg0gIVHuszX3j5Gd5L cq9kg2Oi0nsVUdFzJA4i1P1U2ojAYcOgIP7flTj0E8tiVT746ohN2T8bc3Ntla6eIcGCRQnJaTW h1vyY0vmmT1xatCJMagSaqrYU8YwODxsQdLj/SlJ/5wfHkDWJbgCv23oQTQxRx1IkYyQ2w0ZzkM +q67HsoQeespqvq+SnoQQjNKP0rEO2y61fPpIQjk3lSiiVotJBtK9bbJ9aVt+5R3F5z4w/p4Zy6 BmR4VVCNnLFPi/cFXGRs+0pC/3HGQePWZh4meTemx3zvFcwEIO3qIfXhGp/4WQjs1lHEu+z7x7K RmE6VD+UdkR2sgbKxW7fNVMq/NRW07jy8zzdz8qml/1gmQU2MBNS8dXG4SSBpL+i1+zj2My+CYR eAD/FFy4wpHugehlLJdrugcNrzPVbT9i04B+YfKn+Em0USyKOW0q+WKLfb+OIkxvlul8R3NVlTs ECRM+1MyCRPIWAq/OiS7oCJBV5XsQ== X-Received: by 2002:a05:6512:3984:b0:5ae:bfd6:1bc1 with SMTP id 2adb3069b0e04-5b49cdbd7a9mr2072476e87.14.1787667754610; Tue, 25 Aug 2026 07:22:34 -0700 (PDT) From: Konstantin Semichastnov Date: Tue, 25 Aug 2026 17:22:28 +0300 Subject: [PATCH 04/13] hw/riscv/trace-encoder.c: align ntrace messages with ones MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260825-upstream-ntrace_core-v1-4-f8be2f40d2fd@gmail.com> References: <20260825-upstream-ntrace_core-v1-0-f8be2f40d2fd@gmail.com> In-Reply-To: <20260825-upstream-ntrace_core-v1-0-f8be2f40d2fd@gmail.com> To: qemu-devel@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , qemu-riscv@nongnu.org, Fabiano Rosas , Laurent Vivier , Paolo Bonzini , Alexei Filippov , Konstantin Semichastnov X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2125; i=antikostya2@gmail.com; h=from:subject:message-id; bh=tHjTrH7pT1Lm/SAlViZQNQityFhQMBTTvYUp/zeZ1NE=; b=owEBbQKS/ZANAwAKAUiKpW6lUN52AcsmYgBqjaUjFsEo44uVfvzYKKDsDgRvgzx4AhMbxN35V wQD9rY3fbyJAjMEAAEKAB0WIQRMBWLx2o+linEPEBhIiqVupVDedgUCao2lIwAKCRBIiqVupVDe dpGmD/92JTGTTCu1GuWFErE7vjJPkk3BHxDIjmuFkpli6mtmw3/Bn9fje/ZErzJSgS8XAhF1J3M EQ9XlSLeiT1C4rdIbAy5cLG5n4qRvaFkis5cCm4a1FpFhpQhugXiQJZVbSJ5JejzdYN0sXX0EMK tkGp359qal39z/YA/eURyziG6Pp2VjCbeBIDI8DFSsYsgbDGQ4GswlBKtbjepw+6vwveo3odhH0 mjF6MDXAC0SHGlB7BepCLF0hr4ctoxjtx14ciGFwi6Ss7AUkvle59Q3FTHBJGgd8WKIgGD3hgcS Q7pj1UChCb64J6VOLV0SXZSnTqN0Z8eb2xtvULECu+QTRBRTreW5TWpC9P0bzpfE4KUmkUWT8g2 YSD72YTIvAukuQY4QXOgSkDzTYWYXhvaoSy7IaRwqvE66QLvJhSAnOFiMDpNbEU25PLsbmCLaCA 3gWLEQHyaCWXVklXfDr/UiTb8SMpuZMXv4ujob3TsNwriCfASZlwyPLRzoe7v9aq2wHEUUhmtil Krv6k3HYO8bJ3HSsllKbRk72R1RpyTkIu5VaXtPME0zVxcWyR6KKke6kIiu8XgBXpgpSovMevb1 U8lJn+ZPgKHGdDZhptJzOAtcdAeN2r5VqUXorQI01g9bMK3TPof6oqVGf9zYdnJGJlAXUcS12qq YJFcgmeKeqiivPw== X-Developer-Key: i=antikostya2@gmail.com; a=openpgp; fpr=4C0562F1DA8FA58A710F1018488AA56EA550DE76 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=2a00:1450:4864:20::12c; envelope-from=antikostya2@gmail.com; helo=mail-lf1-x12c.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Tue, 25 Aug 2026 10:47:29 -0400 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 @gmail.com) X-ZM-MESSAGEID: 1787669344148158500 N-Trace format requires idle bytes to be filled with 0xff, instead of zeroes, like E-Trace format Signed-off-by: Konstantin Semichastnov --- hw/riscv/trace-encoder.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/hw/riscv/trace-encoder.c b/hw/riscv/trace-encoder.c index 10e52e207e..703454c9b7 100644 --- a/hw/riscv/trace-encoder.c +++ b/hw/riscv/trace-encoder.c @@ -398,21 +398,35 @@ static void trencoder_send_message_smem(TraceEncoder = *trencoder, hwaddr dest =3D trencoder_read_ramsink_writep(trencoder); bool wrapped =3D false; =20 + if (trencoder->ntrace) { + /* + * RISC-V N-Trace 3.1. MSEO Sequences: + * idle bytes in N-Trace format are filled with 0xff, instead of z= eroes + */ + memset(msg + msg_size, 0xff, 4 - msg_size % 4); + } msg_size =3D QEMU_ALIGN_UP(msg_size, 4); =20 /* clear trRamWrap before writing to SMEM */ dest =3D FIELD_DP64(dest, TR_RAM_WP_LOW, WRAP, 0); =20 /* - * Fill with null bytes if we can't fit the packet in + * Fill with idle bytes if we can't fit the packet in * ramlimit, set wrap and write the packet in ramstart. */ if (dest + msg_size > trencoder->ramsink_ramlimit) { - g_autofree uint8_t *null_packet =3D NULL; - uint8_t null_size =3D trencoder->ramsink_ramlimit - dest; + g_autofree uint8_t *idle_packet =3D NULL; + uint8_t idle_size =3D trencoder->ramsink_ramlimit - dest; =20 - null_packet =3D g_malloc0(null_size); - cpu_physical_memory_write(dest, null_packet, null_size); + idle_packet =3D g_malloc0(idle_size); + if (trencoder->ntrace) { + /* + * RISC-V N-Trace 3.1. MSEO Sequences: + * idle bytes in N-Trace format are filled with 0xff, instead = of zeroes + */ + memset(idle_packet, 0xff, idle_size); + } + cpu_physical_memory_write(dest, idle_packet, idle_size); =20 dest =3D trencoder->ramsink_ramstart; wrapped =3D true; --=20 2.43.0 From nobody Sat Sep 26 21:37:17 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787669316; cv=none; d=zohomail.com; s=zohoarc; b=CLWRK9fCqYl3kCqZLdcHSgLPH+4WGjyw2ZD5WX1/FaDUj3IYElIhhaAhvz2UscFShLsLjK7jIp0FqC/agRpdxC0el8TTLsGNIqNc/akom/tSfjL2KgMv+zn5ICCKPQM4Jj9SGASzcZcCUQAkILG08xfXXCVixrIVrnbbMAdooqY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787669316; h=Content-Type: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=lkUluNV2oBOZMWT8utcTpItrALuOagR0psQYHiKAqsY=; b=lXdHm0EX2ycGUv1gUvvDXzqIeTybbqJoE1NFhK4u6t2ow3ep+ioJAewlpybb36VSve8QTEi3ORLh3ronNCt0cl6B5NRL0VP2QP2MVspema0dCToxpRRzkESSC5PU49qQZFRsTQaR9QJw8VPhw2Pe0/YqWwVrJkAFQDIEljmUl1c= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17876693168211009.1270197249206; Tue, 25 Aug 2026 07:48:36 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wysR2-0000jz-TI; Tue, 25 Aug 2026 10:47:32 -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 1wys2z-0002xM-FL for qemu-devel@nongnu.org; Tue, 25 Aug 2026 10:22:41 -0400 Received: from mail-lj1-x22f.google.com ([2a00:1450:4864:20::22f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wys2x-0002CS-7S for qemu-devel@nongnu.org; Tue, 25 Aug 2026 10:22:41 -0400 Received: by mail-lj1-x22f.google.com with SMTP id 38308e7fff4ca-39da69c5ba3so45438561fa.1 for ; Tue, 25 Aug 2026 07:22:38 -0700 (PDT) Received: from [127.0.1.1] (broadband-90-154-73-22.ip.moscow.rt.ru. [90.154.73.22]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3a1c82f6b02sm22457551fa.41.2026.08.25.07.22.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 07:22:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787667757; x=1788272557; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=lkUluNV2oBOZMWT8utcTpItrALuOagR0psQYHiKAqsY=; b=PtzY+o0IC4CoL2jwO8I1kx2R8s0CKkveAntpBsmKIHAz/TZZZ+PR+C461h+uZPMECl AdE04g9wehlsKh7jbsKCibcg22LciYegyXfuVwUI/IYF7Bw3mfnRhbFn3L14Tjh3AU/Q 1Hzud+WgeufpUtqMqCctTkeKgSWVzS0XCCU+Ob1fX+Xa36xHQdWV+A6L3K/s1XdeaSKi Mi1a1WOmBG5Mhy6qwr++lmmUTrCc2Qs/66D8B1u9RfrtTbpa+OGFIXeAS9sGDEi694EG +cVFp7DjKIOkfuoZL4R+9XIRflF7Qj8r5k1QPEuTKUHR4PWPevYKzAXKM6ClmM83tlkP GAhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787667757; x=1788272557; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=lkUluNV2oBOZMWT8utcTpItrALuOagR0psQYHiKAqsY=; b=HKC5pz95Z+1oLRbPiB2iFj/DPnqfb3S6BX+ZCpzYztxOVXFM8tnYDMh44OWnfzYCJD QGz0exxCDgqmMxxxGveGdFvxxuu4PRzFBHaWh1cxZSY2Xzs9iYmUJSzOqhPe0rYB/hLo CI8Ttwy/pSutPSFU/j1bi7vZXc2Ns+pWVFMkufDbH+YMgNCR80hmu3jc0QV4tEbZOdnJ 7cDgFaCOg0EeBHUADjJ5MTMj6B0YjMo8VKSwEbTSqvRqVuAcLD1Nx+cYh2IEr17eFUVd AVXkLIYUtRAiEW7QbmwGvZdDLd4cVCuyQNJkrP5sxcE1t+8T+f1ryiEvP4TAh0VniYNY FfEw== X-Gm-Message-State: AFuF++lueYNvUsGYgZziQMwCYT3RHUBVXvO5WLcwo/2J7A9OxlXtHWeF axxFIRs3jsI8jyUCWCNkcoRNxD6JJ50GLqihsCkfZO0ltsxhMHTUGb0k X-Gm-Gg: AR+sD10zjtOayIcr+cqfFpGA2j8+VrgakjlrBHAIbxtja2lKEcBcQQuhN0WLwylhS6F RJOtggYjlidR05q23mo7e2BFhh3I8m9yeCTCyjHvQz/qeHHDMLoCMps4bRAXj7PnLz71gCSLBpV q1CXNSFsQ0axwnbyS5iZ/X+NvV50jxgb0OVtLfXvbQu+WbhLfncz2A93IeTFCLJ72A64oLSvjCI 1QkLvUuTSRAzIviwRJjOZXKokMYSi95RFzlnNyqH3ueuhY1tMLOncnemd3LdOA9lYqLMyLN80NT /+f9L0gs4dNtW3rXQAnLUxS/f7xRU1xQIV+nyFnIYbsq0gwfdh3WctKG4WexfDxM/ZkuFshPdhW q1ZxTMIUao0O0TOolW7eErzVv1+N40eGt9JsYj+yxF4HeYN4WH3GYC/ST34n9RQ6Sqjp1cnlik6 GIvcGJr9utekhzJzLUQ/aBf28q0rDX2g1tiwTDdTFoIuyO83K0W6hmzUWSmvfK2B+0a5vOE0iLO cL0N/l5eEm8gLj+m3jMD9K8Jz7eag== X-Received: by 2002:a05:651c:15c2:10b0:39d:4014:12cb with SMTP id 38308e7fff4ca-3a1ef4de3b7mr11342811fa.2.1787667757282; Tue, 25 Aug 2026 07:22:37 -0700 (PDT) From: Konstantin Semichastnov Date: Tue, 25 Aug 2026 17:22:29 +0300 Subject: [PATCH 05/13] hw/riscv/trace_encoder, target/riscv: add trace pc history logic MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260825-upstream-ntrace_core-v1-5-f8be2f40d2fd@gmail.com> References: <20260825-upstream-ntrace_core-v1-0-f8be2f40d2fd@gmail.com> In-Reply-To: <20260825-upstream-ntrace_core-v1-0-f8be2f40d2fd@gmail.com> To: qemu-devel@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , qemu-riscv@nongnu.org, Fabiano Rosas , Laurent Vivier , Paolo Bonzini , Alexei Filippov , Konstantin Semichastnov X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=11565; i=antikostya2@gmail.com; h=from:subject:message-id; bh=tQPLREI/53AKXjUoF3cKDwmMM7hAtSQIl8EUVojg+Jo=; b=owEBbQKS/ZANAwAKAUiKpW6lUN52AcsmYgBqjaUjFxjzaJLBJaYaNbovMEMxElezljNd2yLI1 bSeFJjUNyyJAjMEAAEKAB0WIQRMBWLx2o+linEPEBhIiqVupVDedgUCao2lIwAKCRBIiqVupVDe dj1rD/9ourygV59DQfmyA32svfEgkshSVk+a7yG/6i4MReiG4MbWIHx6K3qP3fCBwH0oW3Hpw0A RXb5DrCtWlpnRCkmH6EQ6H63fd7MjpAFO7hi5rKa159T9Wt6RIEn+vnsWqS+E0zWyUZywcASYHX WUjKAp+OwZM+F6e6XeGwnVmUG9D2q+2CXKHDb6hg6R78gSwyIRSlGC3Lg/chayEz3mIYtzYOUj6 7K49ELh8tSjOqU5434NmYNx3PZp8qtuTZW1FdKD9O1MXyJ3RjPcBBZ0bOmeVqgih2AMYgVM83n3 MQk43kcRn9Y34E1TVPsDS4+zLxGnXaY2rWIXmym9NIcD3mdyPXHe8ZV/p+lhfOLvS+N4rtJSvPw eKhxKD05VeLfh7iddinMURoEvGhmXwBfjCCrdRgkJ4O48g9sTczA6+FQN0bDyEdrgWAnnGaXAYe 6fbxy0GtNaPDTbnySzZM/N4oPoS8PUgiI/DcEFPKCmwhqVf7naCL6rh7MWh6jJx6Ex4fZv5wQ2c vhjfT+E6i2xnAct7wCwLcTw1t5dsOlD/zwaiHRvGXddZh+aYnowl0TJwehfAUGDDfM32tKBM9w+ uALyHfaeI3s+8TZGaS1XBcWp58x6klI19Raf+mss8w/B2kbJR43Py+bwJfSqSiJF3wPZSpx7NF6 V7fblEevsRG+NzA== X-Developer-Key: i=antikostya2@gmail.com; a=openpgp; fpr=4C0562F1DA8FA58A710F1018488AA56EA550DE76 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=2a00:1450:4864:20::22f; envelope-from=antikostya2@gmail.com; helo=mail-lj1-x22f.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Tue, 25 Aug 2026 10:47:29 -0400 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 @gmail.com) X-ZM-MESSAGEID: 1787669318073158500 Add new fields to TraceEncoder struct, to be used when sending messages, that will be added in following commits: - last_addr_reported: a few N-Trace messages have field U-ADDR, that represents diff from last reported full pc address (F-ADDR field). This field tracks last reported full pc address (F-ADDR N-Trace field). - last_icnt_reset, icnt_accumulated: N-Trace requires to send I-CNT field in many messages, and this field represents number of retired instructions from last reported pc. We will track each executed branch and calculate pc-diff between previous branch to track I-CNT value. But there could be multiple branches before I-CNT report, so we will accumulate each pc-diff between consecutive branches in `icnt_accumulated` field. This pc-diff will be calculated as: `pc_before_branch + current_insn_len - last_icnt_reset` and we will update `last_icnt_reset` to `pc_after_branch` Signed-off-by: Konstantin Semichastnov --- hw/riscv/trace-encoder.c | 19 +++++++++++++++++-- hw/riscv/trace-encoder.h | 14 +++++++++++++- target/riscv/helper.h | 4 ++-- target/riscv/insn_trans/trans_privileged.c.inc | 10 +++++----- target/riscv/insn_trans/trans_rvi.c.inc | 15 +++------------ target/riscv/trace_helper.c | 14 +++++++++----- target/riscv/translate.c | 19 +++++++++++++++++-- 7 files changed, 66 insertions(+), 29 deletions(-) diff --git a/hw/riscv/trace-encoder.c b/hw/riscv/trace-encoder.c index 703454c9b7..46501e4f03 100644 --- a/hw/riscv/trace-encoder.c +++ b/hw/riscv/trace-encoder.c @@ -262,6 +262,8 @@ static void trencoder_te_ctrl_postw(RegisterInfo *reg, = uint64_t val) * using te->trace_next_insn */ trencoder_send_prog_trace_sync(OBJECT(te), env->pc); + te->last_icnt_reset =3D env->pc; + te->icnt_accumulated =3D 0; } else { te->trace_next_insn =3D true; } @@ -543,6 +545,7 @@ void trencoder_send_prog_trace_sync(Object *trencoder_o= bj, uint64_t pc) =20 g_assert(trencoder->ntrace); =20 + trencoder->last_addr_reported =3D pc; msg_size =3D rv_ntrace_gen_encoded_prog_trace_sync_msg(msg, faddr); =20 trencoder_send_message_smem(trencoder, msg, msg_size); @@ -593,16 +596,28 @@ static void trencoder_send_branch_map(Object *trencod= er_obj) trencoder_send_message_smem(te, msg, msg_size); } =20 -void trencoder_report_branch(Object *trencoder_obj, uint64_t pc, bool take= n) +void trencoder_report_branch(Object *trencoder_obj, uint64_t pc, + uint64_t insn_len, uint64_t offset, + TraceBranchRes taken) { TraceEncoder *te =3D TRACE_ENCODER(trencoder_obj); =20 + if (te->ntrace && taken !=3D BRANCH_NOT_TAKEN) { + te->icnt_accumulated +=3D (pc + insn_len - te->last_icnt_reset= ) / 2; + te->last_icnt_reset =3D pc + offset; + } + + if (taken =3D=3D BRANCH_TAKEN_UNCONDITIONAL) { + /* do not update branch map if branch is unconditional */ + return; + } + /* * Note: the e-trace spec determines the value '1' for a * branch *not* taken. The helper API is using taken =3D 1 * to be more intuitive when reading TCG code. */ - if (!taken) { + if (taken =3D=3D BRANCH_NOT_TAKEN) { te->branch_map =3D deposit32(te->branch_map, te->branches, 1, 1); } =20 diff --git a/hw/riscv/trace-encoder.h b/hw/riscv/trace-encoder.h index 96324d2b9a..6551ac77f9 100644 --- a/hw/riscv/trace-encoder.h +++ b/hw/riscv/trace-encoder.h @@ -46,8 +46,18 @@ struct TraceEncoder { bool trace_next_insn; =20 bool ntrace; + uint64_t last_addr_reported; + uint64_t last_icnt_reset; + uint64_t icnt_accumulated; }; =20 +typedef enum { + BRANCH_NOT_TAKEN =3D 0, + BRANCH_TAKEN_CONDITIONAL =3D 1, + BRANCH_TAKEN_UNCONDITIONAL =3D 2, +} TraceBranchRes; + + #define TYPE_TRACE_ENCODER "trace-encoder" =20 OBJECT_DECLARE_SIMPLE_TYPE(TraceEncoder, TRACE_ENCODER) @@ -60,6 +70,8 @@ void trencoder_trace_trap_insn(Object *trencoder_obj, uint64_t tval); void trencoder_trace_ppccd(Object *trencoder_obj, uint64_t pc); void trencoder_report_updiscon(Object *trencoder_obj); -void trencoder_report_branch(Object *trencoder_obj, uint64_t pc, bool take= n); +void trencoder_report_branch(Object *trencoder_obj, uint64_t pc, + uint64_t insn_len, uint64_t offset, + TraceBranchRes taken); =20 #endif diff --git a/target/riscv/helper.h b/target/riscv/helper.h index b1de064e17..dcf2b74cb6 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -131,8 +131,8 @@ DEF_HELPER_6(csrrw_i128, tl, env, int, tl, tl, tl, tl) =20 /* Trace helpers (should be put inside ifdef) */ DEF_HELPER_2(trace_insn, void, env, i64) -DEF_HELPER_1(trace_updiscon, void, env) -DEF_HELPER_3(trace_branch, void, env, tl, int) +DEF_HELPER_3(trace_updiscon, void, env, tl, tl) +DEF_HELPER_5(trace_branch, void, env, tl, tl, tl, int) =20 #ifndef CONFIG_USER_ONLY DEF_HELPER_1(sret, tl, env) diff --git a/target/riscv/insn_trans/trans_privileged.c.inc b/target/riscv/= insn_trans/trans_privileged.c.inc index 28089539d5..a3777b42e9 100644 --- a/target/riscv/insn_trans/trans_privileged.c.inc +++ b/target/riscv/insn_trans/trans_privileged.c.inc @@ -26,7 +26,7 @@ =20 static bool trans_ecall(DisasContext *ctx, arg_ecall *a) { - gen_trace_updiscon(); + gen_trace_updiscon(ctx); =20 /* always generates U-level ECALL, fixed in do_interrupt handler */ generate_exception(ctx, RISCV_EXCP_U_ECALL); @@ -42,7 +42,7 @@ static bool trans_ebreak(DisasContext *ctx, arg_ebreak *a) uint32_t ebreak =3D 0; uint32_t post =3D 0; =20 - gen_trace_updiscon(); + gen_trace_updiscon(ctx); =20 /* * The RISC-V semihosting spec specifies the following @@ -99,7 +99,7 @@ static bool trans_sret(DisasContext *ctx, arg_sret *a) { #ifndef CONFIG_USER_ONLY if (has_ext(ctx, RVS)) { - gen_trace_updiscon(); + gen_trace_updiscon(ctx); =20 decode_save_opc(ctx, 0); translator_io_start(&ctx->base); @@ -119,7 +119,7 @@ static bool trans_sret(DisasContext *ctx, arg_sret *a) static bool trans_mret(DisasContext *ctx, arg_mret *a) { #ifndef CONFIG_USER_ONLY - gen_trace_updiscon(); + gen_trace_updiscon(ctx); =20 decode_save_opc(ctx, 0); translator_io_start(&ctx->base); @@ -138,7 +138,7 @@ static bool trans_mnret(DisasContext *ctx, arg_mnret *a) #ifndef CONFIG_USER_ONLY REQUIRE_SMRNMI(ctx); =20 - gen_trace_updiscon(); + gen_trace_updiscon(ctx); =20 decode_save_opc(ctx, 0); gen_helper_mnret(cpu_pc, tcg_env); diff --git a/target/riscv/insn_trans/trans_rvi.c.inc b/target/riscv/insn_tr= ans/trans_rvi.c.inc index ee29adbdeb..06fba108a8 100644 --- a/target/riscv/insn_trans/trans_rvi.c.inc +++ b/target/riscv/insn_trans/trans_rvi.c.inc @@ -183,7 +183,7 @@ static bool trans_jalr(DisasContext *ctx, arg_jalr *a) } } =20 - gen_trace_updiscon(); + gen_trace_updiscon(ctx); =20 lookup_and_goto_ptr(ctx); =20 @@ -268,15 +268,6 @@ static void gen_setcond_i128(TCGv rl, TCGv rh, tcg_gen_movi_tl(rh, 0); } =20 -static void gen_trace_branch(int taken) -{ - TCGLabel *skip =3D gen_new_label(); - - tcg_gen_brcondi_tl(TCG_COND_EQ, cpu_trace_running, 0, skip); - gen_helper_trace_branch(tcg_env, cpu_pc, tcg_constant_i32(taken)); - gen_set_label(skip); -} - static bool gen_branch(DisasContext *ctx, arg_b *a, TCGCond cond) { TCGLabel *l =3D gen_new_label(); @@ -308,14 +299,14 @@ static bool gen_branch(DisasContext *ctx, arg_b *a, T= CGCond cond) } #endif =20 - gen_trace_branch(0); + gen_trace_branch(0, 0, 0); =20 gen_goto_tb(ctx, 1, ctx->cur_insn_len); ctx->pc_save =3D orig_pc_save; =20 gen_set_label(l); /* branch taken */ =20 - gen_trace_branch(1); + gen_trace_branch(1, a->imm, ctx->cur_insn_len); =20 if (!riscv_cpu_allow_16bit_insn(ctx->cfg_ptr, ctx->priv_ver, diff --git a/target/riscv/trace_helper.c b/target/riscv/trace_helper.c index 9b43aeac09..f6201e2fb9 100644 --- a/target/riscv/trace_helper.c +++ b/target/riscv/trace_helper.c @@ -29,7 +29,8 @@ void helper_trace_insn(CPURISCVState *env, uint64_t pc) } } =20 -void helper_trace_updiscon(CPURISCVState *env) +void helper_trace_updiscon(CPURISCVState *env, target_ulong curr_pc, + target_ulong curr_inst_len) { RISCVCPU *cpu =3D env_archcpu(env); TraceEncoder *te =3D TRACE_ENCODER(cpu->trencoder); @@ -42,11 +43,12 @@ void helper_trace_updiscon(CPURISCVState *env) } } =20 -void helper_trace_branch(CPURISCVState *env, target_ulong pc, int taken) +void helper_trace_branch(CPURISCVState *env, target_ulong pc, + target_ulong insn_len, target_ulong offset, int t= aken) { RISCVCPU *cpu =3D env_archcpu(env); =20 - trencoder_report_branch(cpu->trencoder, pc, taken); + trencoder_report_branch(cpu->trencoder, pc, insn_len, offset, taken); } #else /* #ifndef CONFIG_USER_ONLY */ void helper_trace_insn(CPURISCVState *env, uint64_t pc) @@ -54,12 +56,14 @@ void helper_trace_insn(CPURISCVState *env, uint64_t pc) return; } =20 -void helper_trace_updiscon(CPURISCVState *env) +void helper_trace_updiscon(CPURISCVState *env, target_ulong pc, + target_ulong curr_inst_len) { return; } =20 -void helper_trace_branch(CPURISCVState *env, target_ulong pc, int taken) +void helper_trace_branch(CPURISCVState *env, target_ulong pc, + target_ulong insn_len, target_ulong offset, int t= aken) { return; } diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 26c7678cb9..781068ad84 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -617,12 +617,25 @@ static void gen_ctr_jal(DisasContext *ctx, int rd, ta= rget_ulong imm) } #endif =20 -static void gen_trace_updiscon(void) +static void gen_trace_updiscon(DisasContext *ctx) { TCGLabel *skip =3D gen_new_label(); + TCGv curr_pc =3D tcg_constant_tl(ctx->base.pc_next); + TCGv curr_inst_len =3D tcg_constant_tl(ctx->cur_insn_len); =20 tcg_gen_brcondi_tl(TCG_COND_EQ, cpu_trace_running, 0, skip); - gen_helper_trace_updiscon(tcg_env); + gen_helper_trace_updiscon(tcg_env, curr_pc, curr_inst_len); + gen_set_label(skip); +} + +static void gen_trace_branch(int taken, target_ulong imm, target_ulong cur= _insn_len) +{ + TCGLabel *skip =3D gen_new_label(); + TCGv offset =3D tcg_constant_tl(imm); + TCGv insn_len =3D tcg_constant_tl(cur_insn_len); + + tcg_gen_brcondi_tl(TCG_COND_EQ, cpu_trace_running, 0, skip); + gen_helper_trace_branch(tcg_env, cpu_pc, insn_len, offset, tcg_constan= t_i32(taken)); gen_set_label(skip); } =20 @@ -647,6 +660,8 @@ static void gen_jal(DisasContext *ctx, int rd, target_u= long imm) gen_ctr_jal(ctx, rd, imm); } #endif + const int BRANCH_TAKEN_UNCONDITIONAL =3D 2; + gen_trace_branch(BRANCH_TAKEN_UNCONDITIONAL, imm, ctx->cur_insn_len); =20 gen_pc_plus_diff(succ_pc, ctx, ctx->cur_insn_len); gen_set_gpr(ctx, rd, succ_pc); --=20 2.43.0 From nobody Sat Sep 26 21:37:17 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787669285; cv=none; d=zohomail.com; s=zohoarc; b=gBPXtCwUFEFTv6Mro/ViTCY7YxrMNKodS/SdGsVNnSA04YgPW2TWKdjSs74XtgozQwOcM81GcjjqNxsIWRX3YuhFNZCDrLgcEVIDO4LAr28rlnT61g7XLsJJ5gk8FwzXQw7tuT+2y1dtS8i4gEqW5ZUZJYs6XxG5UNIdM3GxU18= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787669285; h=Content-Type: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=+2Mr/ipwE4dzTL4NJo11V6O3s9hJ8jNTodoTedhmPBg=; b=k2+eoQ/cPRIfVPwTb8YI93YpYfrMpRDj6FH8NZ5kyX/DPwbehfIlYC+NDj1Y7hFImu2YClVlrkOSComJb439lbqeb8s3KCYblVY6oD+xH9TXe9fLMZb4bSvKaeJREq3MIgIlYIzxr9tjQ5bdaDg2YSomhFgh3yPKUD2I2fgMK64= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787669285347637.3410043617774; Tue, 25 Aug 2026 07:48:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wysR7-0000l0-6n; Tue, 25 Aug 2026 10:47:37 -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 1wys31-0002xm-5F for qemu-devel@nongnu.org; Tue, 25 Aug 2026 10:22:44 -0400 Received: from mail-lj1-x235.google.com ([2a00:1450:4864:20::235]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wys2y-0002Ch-EG for qemu-devel@nongnu.org; Tue, 25 Aug 2026 10:22:42 -0400 Received: by mail-lj1-x235.google.com with SMTP id 38308e7fff4ca-39c95395230so43290331fa.2 for ; Tue, 25 Aug 2026 07:22:40 -0700 (PDT) Received: from [127.0.1.1] (broadband-90-154-73-22.ip.moscow.rt.ru. [90.154.73.22]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3a1c82f6b02sm22457551fa.41.2026.08.25.07.22.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 07:22:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787667759; x=1788272559; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=+2Mr/ipwE4dzTL4NJo11V6O3s9hJ8jNTodoTedhmPBg=; b=KVbX0sHB9VJ8jiwTS8p3OizFNTY1V+3fQKOJwD+bsMpLE0vzRL02OP41HxuJL00ab8 SMYFucPGjHZl3MpZdCW9TZ9sPsxBUoX8vWtWOHnQHod1HjcyUU3mDH3Hnx/Z8ooBzMsa xehs80kOjQcsG9YsEiJgSUVe3OS6Ih7tjRwcCq8Jhn/gMhqQRcfeB/n4juUwOjMTttO6 Tdmf9NwagM7jZBVBKILAHbTbOfbDam1zpJ/EoL+ZjTvdm6oTVKYH2DUR+3Y2l0Dv6dxM xsshf1FR54/nykrksbhIpQvEK3KeeMyD4EhbFqw0hvVUzPLNgrBWlrdKzOXbq0q/ogMa hkyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787667759; x=1788272559; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=+2Mr/ipwE4dzTL4NJo11V6O3s9hJ8jNTodoTedhmPBg=; b=jSW9mGdFL7N3wthHEYk0FGhov1vCL/e8bL/5tN2NWk4Jrjer1CwiVWY/TxGCFH+mZc 6j73yUHADBSjqkijqUUoqFXQJNnLwBHe1f5VOn2bXSdeTxVZV508m5KwTaRXruA7EJDI uTxT0DXVdGI5p4iA/+rwCzzNpomZQRoLj1nCulPjMKPiEFNRCSTfKi3f4FSObdGU/dow hbCEPwr3s4qU5HJocYDdU5mpyV6o8tkItLgoikx667M2WI91iGHp13ndhsRdSc0jpcv9 a4jJYD05LNJSV/YG41CXiQNnw86V8vh6YC4HFd6pSNSOqrxhEQ7wVjcP+GFwMt0gTSyW MArA== X-Gm-Message-State: AFuF++ll2wMK0JOuie7hepZsk9w+ZB7WMWAg8pkN3I9oo9VRc933AkSi nIOlFx4/RJNVHWjqzGV4CNOIDbxJu8x52YvR80i6zss+TR25d2BuK0gj X-Gm-Gg: AR+sD10LPVq8kHKYV59AhRBt4JAF9FDM7SrCDcBBWKjcbv/z7fdscxQ+xrNbYvMHS1y glIMYkfc0lQ3XGyhFwIS/apIvFwx3uj3Q8xovh81FbagVB3HCx8u+dnfXPjSYmAalbIj3lxjjBg MiT9AyXMqe/j0zlFnAFZoDUcQ/lo1CFD+jMgIRHeuTBzv0pgGFHcddSKpDMLG6NbQRTE2jGJiq/ cSioivwjB1n7oJJwkZGIeWhcYclkyQId5wgXHrWnrlw0vP1tv0WjJpE/JftGA/K9Zzv4dJJKKWD 9hd8dSu+3+0El9T52zZbXt/Kr9BuSsUXYT1WeWxMuTOZQ92OIsiUnbkeb6m6HmzP6mYjXzvjlhJ dCeEbvLQ6dthG/X3b9lnToQ2PHNQY6bXlcbC3XbGekIJqT3YxobbDGTQ4TKtFKk0lLPZfwHhZGw 2AL5G/N863B6c0fHFNasC55UIsteabyA2cwIXSNr+7DsXpJ43N22wVGDKDTPn86vf0TMK1/5JSP eImiOusoVnXAJO01a6OopWhd65dlw== X-Received: by 2002:a05:651c:a209:10b0:399:9436:15c8 with SMTP id 38308e7fff4ca-3a1ef340ca7mr10360901fa.2.1787667758592; Tue, 25 Aug 2026 07:22:38 -0700 (PDT) From: Konstantin Semichastnov Date: Tue, 25 Aug 2026 17:22:30 +0300 Subject: [PATCH 06/13] hw/riscv: add n-trace IndirectBranchHist rv-trace-message MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260825-upstream-ntrace_core-v1-6-f8be2f40d2fd@gmail.com> References: <20260825-upstream-ntrace_core-v1-0-f8be2f40d2fd@gmail.com> In-Reply-To: <20260825-upstream-ntrace_core-v1-0-f8be2f40d2fd@gmail.com> To: qemu-devel@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , qemu-riscv@nongnu.org, Fabiano Rosas , Laurent Vivier , Paolo Bonzini , Alexei Filippov , Konstantin Semichastnov X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=9518; i=antikostya2@gmail.com; h=from:subject:message-id; bh=1hp3usv2luZh19p8uPxK4gCIjXWkwk4HyYib1VZ6GbE=; b=owEBbQKS/ZANAwAKAUiKpW6lUN52AcsmYgBqjaUjlrgvD1XasY8pmiWsdTAQGo+YOK44EaUbL bRX4z+yY8SJAjMEAAEKAB0WIQRMBWLx2o+linEPEBhIiqVupVDedgUCao2lIwAKCRBIiqVupVDe drLzEAC0w+Bxyh5Z7uqAYvdPGHSKLANb/+SzI25qaN4W9aIHHKRmjL9a/7ijv9VNE0RidDXJnzF Ub1+8Urv9zFCXZx+G9jFp4K9xnkeEwygeMDTJYsjeD/WoDiedLkmshF7QdcjOBt87XAu5pXNtpw vPYkGg/fOq5nNPoiwmoxkVu2x9TnQ5xZrhc8vKAgGpsHPp31EndNmujk3XamD6rvE4SbBqAuqts WdV2Z+kskezsAW68P9ijEa9k8/8h+ubDfppeGsEfZG/d9kqeGmA+t6aitynnzrYe4Oquw6a9jP5 oZd9pfYuJuR7/Bety8IdDQmf+X/XegymUlo4UIPy2eSQVY6pVm5j03IA9q9gqO95eDRoQOuyJxK t3tYii7kLekuy5qrzdhQzvEk5yLrjO9L/d4g+FYq3ZlF4tnuiQ29+K03zv0VWtBLjAe5NPBoDZW EHS4//m3W2QVS+aAb7NnZ8RBQJwUS9bi1qsVnpJhF8LMh39Aj7fba3nKAHpQJavbHgseCRnlQI7 lG8YrtOFL5Ckm2jGYhBhDMatAtPVvm/NoNbnM3OMGCELa/zzMV14AAifvm5fOau+Qo+NyoVsp97 rTcxAf74beZ3IDlOoDl3Tw619eoC/Vz+XnbkVufsbPuZxH+9/BU0SB82anYu+7ST05G1Kl6TEfp Yl2sdYoBx67w9CQ== X-Developer-Key: i=antikostya2@gmail.com; a=openpgp; fpr=4C0562F1DA8FA58A710F1018488AA56EA550DE76 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=2a00:1450:4864:20::235; envelope-from=antikostya2@gmail.com; helo=mail-lj1-x235.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Tue, 25 Aug 2026 10:47:29 -0400 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 @gmail.com) X-ZM-MESSAGEID: 1787669288049158500 Add generation, encoding and sending logic for N-Trace IndirectBranchHist message. Signed-off-by: Konstantin Semichastnov Signed-off-by: Alexei Filippov --- hw/riscv/rv-trace-messages.c | 42 +++++++++++++++++++++ hw/riscv/rv-trace-messages.h | 4 ++ hw/riscv/trace-encoder.c | 87 ++++++++++++++++++++++++++++++++++++++++= ++++ hw/riscv/trace-encoder.h | 10 +++++ target/riscv/trace_helper.c | 3 +- 5 files changed, 145 insertions(+), 1 deletion(-) diff --git a/hw/riscv/rv-trace-messages.c b/hw/riscv/rv-trace-messages.c index 0b90d6a437..2ee38c4354 100644 --- a/hw/riscv/rv-trace-messages.c +++ b/hw/riscv/rv-trace-messages.c @@ -354,12 +354,16 @@ typedef enum { typedef enum { WIDTH_TCODE =3D 6, WIDTH_SYNC =3D 4, + WIDTH_BTYPE =3D 2, WIDTH_ICNT =3D 22, WIDTH_FADDR =3D 63, + WIDTH_UADDR =3D 63, + WIDTH_HIST =3D 32, } NTraceFieldWidth; =20 typedef enum { TCODE_PROG_TRACE_SYNC =3D 0x9, + TCODE_INDIRECT_BRANCH_HIST =3D 0x1c, } NTraceTcodeFieldValues; =20 typedef enum { @@ -387,6 +391,13 @@ typedef struct NTraceFieldPayload { .value =3D (val), \ } =20 +#define PAYLOAD_BTYPE(val) \ + { \ + .type =3D FIELD_FIXED, \ + .width =3D WIDTH_BTYPE, \ + .value =3D (val), \ + } + #define PAYLOAD_ICNT(val) \ { \ .type =3D FIELD_VAR, \ @@ -400,6 +411,20 @@ typedef struct NTraceFieldPayload { .width =3D WIDTH_FADDR, \ .value =3D (val), \ } + +#define PAYLOAD_UADDR(val) \ + { \ + .type =3D FIELD_VAR, \ + .width =3D WIDTH_UADDR, \ + .value =3D (val), \ + } + +#define PAYLOAD_HIST(val) \ + { \ + .type =3D FIELD_VAR, \ + .width =3D WIDTH_HIST, \ + .value =3D (val), \ + } #define PAYLOAD_END() \ { \ .type =3D FIELD_END, \ @@ -492,3 +517,20 @@ size_t rv_ntrace_gen_encoded_prog_trace_sync_msg(uint8= _t *buf, uint64_t faddr) return rv_ntrace_gen_encoded_msg(buf, msg_fields); } =20 +size_t rv_ntrace_gen_indirect_branch_hist_msg(uint8_t *buf, uint8_t btype, + uint32_t icnt, uint64_t uadd= r, + uint32_t hist) +{ + const NTraceFieldPayload msg_fields[] =3D { + PAYLOAD_TCODE(TCODE_INDIRECT_BRANCH_HIST), + /* SRC field is not supported for now */ + PAYLOAD_BTYPE(btype), + PAYLOAD_ICNT(icnt), + PAYLOAD_UADDR(uaddr >> 1), + PAYLOAD_HIST(hist), + /* TSTAMP field is not supported for now */ + PAYLOAD_END(), + }; + + return rv_ntrace_gen_encoded_msg(buf, msg_fields); +} diff --git a/hw/riscv/rv-trace-messages.h b/hw/riscv/rv-trace-messages.h index 635e498393..d113129d65 100644 --- a/hw/riscv/rv-trace-messages.h +++ b/hw/riscv/rv-trace-messages.h @@ -38,4 +38,8 @@ size_t rv_etrace_gen_encoded_format1(uint8_t *buf, bool notify, bool updiscon); =20 size_t rv_ntrace_gen_encoded_prog_trace_sync_msg(uint8_t *buf, uint64_t fa= ddr); +size_t rv_ntrace_gen_indirect_branch_hist_msg(uint8_t *buf, uint8_t btype, + uint32_t icnt, uint64_t uadd= r, + uint32_t hist); + #endif diff --git a/hw/riscv/trace-encoder.c b/hw/riscv/trace-encoder.c index 46501e4f03..fafafb7b9b 100644 --- a/hw/riscv/trace-encoder.c +++ b/hw/riscv/trace-encoder.c @@ -31,6 +31,11 @@ =20 #define TRACE_MAX_BRANCHES 31 =20 +static uint64_t rv_ntrace_encode_uaddr(TraceEncoder *trencoder, uint64_t t= arget_pc); +static uint32_t rv_ntrace_encode_and_reset_branch_map(TraceEncoder *trenco= der); +static uint32_t rv_ntrace_get_and_reset_icnt(TraceEncoder *trencoder, + uint64_t pc, uint32_t inst_le= n); + static TracePrivLevel trencoder_get_curr_priv_level(TraceEncoder *te) { CPURISCVState *env =3D &te->cpu->env; @@ -478,6 +483,28 @@ static void trencoder_send_sync_msg(Object *trencoder_= obj, uint64_t pc) trencoder_send_message_smem(trencoder, msg, msg_size); } =20 +void trencoder_send_indirect_branch_hist(TraceEncoder *trencoder, + uint64_t curr_pc, + uint32_t curr_inst_len, + uint64_t target_pc, + TraceBranchType btype) +{ + g_autofree uint8_t *msg =3D g_malloc0(TRACE_MSG_MAX_SIZE); + uint8_t msg_size; + + uint32_t icnt =3D rv_ntrace_get_and_reset_icnt(trencoder, curr_pc, cur= r_inst_len); + uint64_t uaddr =3D rv_ntrace_encode_uaddr(trencoder, target_pc); + uint32_t hist =3D rv_ntrace_encode_and_reset_branch_map(trencoder); + + g_assert(trencoder->ntrace); + + msg_size =3D rv_ntrace_gen_indirect_branch_hist_msg(msg, btype, icnt, = uaddr, hist); + trencoder->last_addr_reported =3D target_pc; + trencoder->last_icnt_reset =3D target_pc; + + trencoder_send_message_smem(trencoder, msg, msg_size); +} + static void trencoder_send_updiscon(TraceEncoder *trencoder, uint64_t pc) { g_autofree uint8_t *format2_msg =3D g_malloc0(TRACE_MSG_MAX_SIZE); @@ -551,6 +578,66 @@ void trencoder_send_prog_trace_sync(Object *trencoder_= obj, uint64_t pc) trencoder_send_message_smem(trencoder, msg, msg_size); } =20 +static uint64_t rv_ntrace_encode_uaddr(TraceEncoder *trencoder, uint64_t t= arget_pc) +{ + return trencoder->last_addr_reported ^ target_pc; +} + +static uint32_t rv_ntrace_encode_and_reset_branch_map(TraceEncoder *trenco= der) +{ + const uint32_t stop_bit =3D 1; + + uint32_t hist =3D trencoder->branch_map; + + if (trencoder->branches =3D=3D 0) { + /* + * if branches =3D=3D 0, we will overflow on bit shift, so just re= turn + * empty history value here (i.e. - only stop bit) + */ + return stop_bit; + } + + /* + * trencoder->branch_map stores bit 1 for NOT taken branches, + * but N-Trace expects to stored bit 1 for TAKEN branches, + * so, we should invert bits + */ + hist =3D ~hist; + + /* + * Also, trencoder->branch_map is implemented in such way, + * that oldest branch is LSB bit, but N-Trace format require + * to HIST values be in shift-left format: the most recent branch + * should be in LSB bit. So we should reverse order + * of valid history bits + */ + hist =3D revbit32(hist) >> (32 - trencoder->branches); + + /* And finally N-Trace expects bit 1 as stop bit at the MSB position */ + hist =3D deposit32(hist, trencoder->branches, 1, stop_bit); + + trencoder->branch_map =3D 0; + trencoder->branches =3D 0; + + return hist; +} + +static uint32_t rv_ntrace_get_and_reset_icnt(TraceEncoder *trencoder, + uint64_t pc, uint32_t inst_le= n) +{ + uint64_t icnt =3D (pc + inst_len - trencoder->last_icnt_reset) / 2 + + trencoder->icnt_accumulated; + + trencoder->last_icnt_reset =3D pc; + trencoder->icnt_accumulated =3D 0; + + if (icnt > MAKE_64BIT_MASK(0, 22)) { + /* I-CNT overflow reporting is not supported for now */ + error_setg(&error_fatal, "N-Trace icnt overflowed"); + } + + return icnt; +} =20 void trencoder_trace_trap_insn(Object *trencoder_obj, uint64_t pc, uint32_t ecause, diff --git a/hw/riscv/trace-encoder.h b/hw/riscv/trace-encoder.h index 6551ac77f9..f8a6a254dc 100644 --- a/hw/riscv/trace-encoder.h +++ b/hw/riscv/trace-encoder.h @@ -57,6 +57,11 @@ typedef enum { BRANCH_TAKEN_UNCONDITIONAL =3D 2, } TraceBranchRes; =20 +typedef enum { + BTYPE_CONTROL_FLOW =3D 0, + BTYPE_EXCEPTION =3D 2, + BTYPE_INTERRUPT =3D 3, +} TraceBranchType; =20 #define TYPE_TRACE_ENCODER "trace-encoder" =20 @@ -64,6 +69,11 @@ OBJECT_DECLARE_SIMPLE_TYPE(TraceEncoder, TRACE_ENCODER) =20 void trencoder_set_first_trace_insn(Object *trencoder_obj, uint64_t pc); void trencoder_send_prog_trace_sync(Object *trencoder_obj, uint64_t pc); +void trencoder_send_indirect_branch_hist(TraceEncoder *trencoder, + uint64_t curr_pc, + uint32_t curr_inst_len, + uint64_t target_pc, + TraceBranchType btype); void trencoder_trace_trap_insn(Object *trencoder_obj, uint64_t pc, uint32_t ecause, bool is_interrupt, diff --git a/target/riscv/trace_helper.c b/target/riscv/trace_helper.c index f6201e2fb9..d7763a998f 100644 --- a/target/riscv/trace_helper.c +++ b/target/riscv/trace_helper.c @@ -36,7 +36,8 @@ void helper_trace_updiscon(CPURISCVState *env, target_ulo= ng curr_pc, TraceEncoder *te =3D TRACE_ENCODER(cpu->trencoder); =20 if (te->ntrace) { - /* send IndirectBranchHist message */ + trencoder_send_indirect_branch_hist(te, curr_pc, curr_inst_len, en= v->pc, + BTYPE_CONTROL_FLOW); } else { te->updiscon_pending =3D true; te->trace_next_insn =3D true; --=20 2.43.0 From nobody Sat Sep 26 21:37:17 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787669360; cv=none; d=zohomail.com; s=zohoarc; b=NXfEapWYWvd7CHfmrPbybkAcao/bk9MDjyfNlfYYGzZr9aeS3LemIoPfBOmPNfbZAcFzHXmo/5wezjqIU8/Q2mMMs87xTeJl6u+KQpiQMKDkyT4YVkH5M/dThIgEuZle4LuItXOCLkfKcWbMRJbdo52/vHiZMtfAV+J/tB9dBIY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787669360; h=Content-Type: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=X1ShuPzo9HjlF0LASxGXhgjJp4my/PBrBzxPZau8+fc=; b=bYuVjMunBGWuhvwu0JDtF44/U0CrLl5wVwEpS8iiRYdK1ZN7t3LDPzJrCoj6MUbGWZjQ9IMIq0+tL2FCCJ0NlVseyR3VZ/nhM+PsF8GPrirJSX5PkRUTldd3iWk9uHBCYPuqCxiquw9d1Iv76ZSUi/15uUWy8W5xEUEjuqhtRA8= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787669360618495.91872570303747; Tue, 25 Aug 2026 07:49:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wysR0-0000he-1r; Tue, 25 Aug 2026 10:47:30 -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 1wys31-0002xp-OX for qemu-devel@nongnu.org; Tue, 25 Aug 2026 10:22:44 -0400 Received: from mail-lj1-x22d.google.com ([2a00:1450:4864:20::22d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wys2z-0002Cv-Qz for qemu-devel@nongnu.org; Tue, 25 Aug 2026 10:22:43 -0400 Received: by mail-lj1-x22d.google.com with SMTP id 38308e7fff4ca-39c8ee87f7eso50341301fa.3 for ; Tue, 25 Aug 2026 07:22:41 -0700 (PDT) Received: from [127.0.1.1] (broadband-90-154-73-22.ip.moscow.rt.ru. [90.154.73.22]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3a1c82f6b02sm22457551fa.41.2026.08.25.07.22.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 07:22:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787667760; x=1788272560; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=X1ShuPzo9HjlF0LASxGXhgjJp4my/PBrBzxPZau8+fc=; b=lH/0Hcdr1ExnGfVNdZ96KH5hU27Ha1MYXqRhTTmpU7A9ff1OpUzPMvKPEtmPQCvf3Z 4SEczx9I4lbkXPMNZnMOhWh1pZHrrPkG8pR5thKf9TIALNuQTo8k3N7HhZch+RIYMAa+ RvpNZmm4Z+Xu53UvQ+y8+J82Y927S7hufCtn8eC8xhXpoqAFKHwyzYr2fZQsJFGGnNfb xrPuCbGs6TtEsIGxok2fGrBMip4syJGa5ZKYDDjyodVreeFFUaBlqsYtfByRP3+6hOwG bUOe61jGztj4eungp6cy5/4kI/veSUqXxUr63WASoB/yO45Rn+O0Hk2cXyhZwzr6pLps UG7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787667760; x=1788272560; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=X1ShuPzo9HjlF0LASxGXhgjJp4my/PBrBzxPZau8+fc=; b=UyKmEakUPNHSe6bQTvLa/JfjvzjDeVaJfmHnduvxkbbxLPRNzEgzZ+YThqZCzgCE7c WJz1K7U3FkkSeJehf8q/tI6enTWHVb42BFYHpBvokI+SPk6GkJHNJlUriRey+/mJ7GZs ggi/ayTylAsbkmwmJIfp1waY5c6IyMZuFspX3Fz3cgRpErjR9alu5aqdOScevCcEDN01 jWcbbD2cVXzcn6WjlxmvF3Ed6Ei0z609E3MYE0Qi4VwQtFyEQio6cgmw2EVZifWEoSzY NHA4b57Hng9YU9LiYnCOHOT/qzOZMypMFj57/BSSt0rAINoFC+uMWbBdLm7RDkvttgxq O2XA== X-Gm-Message-State: AFuF++kljjwLviBmg6bV7ipbSQCrKW3E+QFKGK+BpqSAoT/kZ+n5aG3q Uu2d3FPUb2zWnVT6zqjnjXsb2ub/EP7Q0uzW7s4iheVfdIoyQPVeuxLI0fykJa3k X-Gm-Gg: AR+sD12001ppFtT4hOERyg+pwoTD7ACL1YCA99CZRGmsOHC/SZTdoJcyBfQt9vg/4qf y0+1c9x4oUp1fMKyrjt24EtX4UvGqe2/OOVShHE0HpYOpRqW86mTwR0epRX0dAwghR7jvcvyyZD peN8Y1M/w6c9Kk7+OId+XLJJfjCl8+vAqC5qLCTdfSbAy9qmn1TwJEMaIVTKZMVhM++/jQE/CDk AYcasxB79jziVClyRVvhiEphE0fj2P9pEbpiDOAUUhnSRMim85ZTdT/sksuBXM4cYFBFxhN9Eep s2ZdrMSEYDfOFO7icMSl5fOG+EXQcamGazS/Zd2bl+ku19Rd7Q/oe4kaWIqOm6ulF6OR/ttnyzC U7eYj0CWBOOsUvoIIrdkENzOAXpka2smT5sEQGfog8zw1lIwG+JpvNkksqRl+kGcsbMIlScBVzf xdj30VT+DXPQEN3+0h/P87AxiZINuqhi4T6AnvEsNPyCmUS45cAe+OVEk+D+9xjO9hm2BN30+YP PUq46208XlIPfKHBvMYo/RNLkBrwQ== X-Received: by 2002:a05:651c:a10c:20b0:3a1:476:74b3 with SMTP id 38308e7fff4ca-3a1ef5d54f3mr11709671fa.9.1787667759955; Tue, 25 Aug 2026 07:22:39 -0700 (PDT) From: Konstantin Semichastnov Date: Tue, 25 Aug 2026 17:22:31 +0300 Subject: [PATCH 07/13] hw/riscv/trace-encoder: add interrupt support to N-Trace encoder MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260825-upstream-ntrace_core-v1-7-f8be2f40d2fd@gmail.com> References: <20260825-upstream-ntrace_core-v1-0-f8be2f40d2fd@gmail.com> In-Reply-To: <20260825-upstream-ntrace_core-v1-0-f8be2f40d2fd@gmail.com> To: qemu-devel@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , qemu-riscv@nongnu.org, Fabiano Rosas , Laurent Vivier , Paolo Bonzini , Alexei Filippov , Konstantin Semichastnov X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6840; i=antikostya2@gmail.com; h=from:subject:message-id; bh=Ukz5rO4kftJNVrzk2svX+D1y5ayKYJclAQ/Alkbj5bY=; b=owEBbQKS/ZANAwAKAUiKpW6lUN52AcsmYgBqjaUjnhy1lMxBT9QoVd4Lm8IvUTtTcGNiOIiDb BmwEYqA5bCJAjMEAAEKAB0WIQRMBWLx2o+linEPEBhIiqVupVDedgUCao2lIwAKCRBIiqVupVDe drqED/0ZjAmU/TOK2TRatFw2qkrrpIVjmn/IbERQrSYwzMxEZMPCHPy1C99y0qEzZt1JyGUTP73 wqEi20vmh/2EN1cn1jI4tjIWGBrgvPKRXEj8Q0SkU/ttCucMMrVUl2c7tXgQwpCSejndELnRuee +xb15nS+DCP48ZVJ+LIgi1Uh18YUJNVo7B0R+qM/l8jYtkCkL5wyKrsaebzaT0piLKbLGxxiuBF c6txsYkGf0gy7Ergcc7gweZCOV8X2IsoFUy2BDU95Vehterett96VK9Tpi/Ark4wZM9UsIVZK1J a3EvJc3djwgCjWFHj78L7Gk/WAZaOfndNPYviN1NPmWyrU4RhkDmhikj0wpHFxJFS/Lwv+nTzQK vwPTMBxPNpJPEJvwJApaaGd8U0rfxuIbwKOnKuX6jE9RBSWdKzm0zpbSHda1tP5BonECi9SO/F8 V4+IKVLawNd4bR/nghc9Wr+xJnJX72mOJcGCx+hJtoLAIdkiWi9qJGoNuV2ykAV9+REhJdj9oMm YVLfPpRBF3HitCIMSDx8Ie8FiCGpNYA7E7I7zFh8NxsCy+EDHdRnZXEDJMVuQFr86oc/EU4wFRr LOtJAtk9mbXIH7NtTocrFckuWoiHtjz2sRGQhLUFkqvc92AAdC31BhJCT12MbxfX3g4l9mKq2Hf mHIstLgJCvHCvJw== X-Developer-Key: i=antikostya2@gmail.com; a=openpgp; fpr=4C0562F1DA8FA58A710F1018488AA56EA550DE76 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=2a00:1450:4864:20::22d; envelope-from=antikostya2@gmail.com; helo=mail-lj1-x22d.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Tue, 25 Aug 2026 10:47:29 -0400 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 @gmail.com) X-ZM-MESSAGEID: 1787669362160158500 Now IndirectBranchHist messages sent not only when branch executed, but also when exceptino or trap happen. Signed-off-by: Konstantin Semichastnov --- disas/riscv.c | 2 +- disas/riscv.h | 2 ++ hw/riscv/trace-encoder.c | 36 +++++++++++++++++++++++++++++------- hw/riscv/trace-encoder.h | 7 +++---- target/riscv/cpu_helper.c | 21 ++++++++++++--------- 5 files changed, 47 insertions(+), 21 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index 85cd2a9c2a..541fc93e0a 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -5058,7 +5058,7 @@ static bool check_constraints(rv_decode *dec, const r= vc_constraint *c) =20 /* instruction length */ =20 -static size_t inst_length(rv_inst inst) +size_t inst_length(rv_inst inst) { /* NOTE: supports maximum instruction size of 64-bits */ =20 diff --git a/disas/riscv.h b/disas/riscv.h index d211700cb2..c14c159103 100644 --- a/disas/riscv.h +++ b/disas/riscv.h @@ -306,4 +306,6 @@ enum { #define rv_fmt_rd2_imm "O\t0,2,(1),i" #define rv_fmt_fli "O\t3,h" =20 +size_t inst_length(rv_inst inst); + #endif /* DISAS_RISCV_H */ diff --git a/hw/riscv/trace-encoder.c b/hw/riscv/trace-encoder.c index fafafb7b9b..face6f83b7 100644 --- a/hw/riscv/trace-encoder.c +++ b/hw/riscv/trace-encoder.c @@ -22,6 +22,8 @@ #include "cpu.h" #include "hw/riscv/trace-ram-sink.h" #include "rv-trace-messages.h" +#include "system/dma.h" +#include "disas/riscv.h" =20 /* * Size of header + payload since we're not sending @@ -229,6 +231,23 @@ static uint64_t trencoder_te_ctrl_prew(RegisterInfo *r= eg, uint64_t val) return val; } =20 +static uint32_t get_inst_len_at(uint64_t pc) +{ + bfd_byte packet[2]; + uint16_t opcode; + MemTxResult status; + + status =3D dma_memory_read(&address_space_memory, pc, packet, 2, + MEMTXATTRS_UNSPECIFIED); + if (status !=3D MEMTX_OK) { + error_setg(&error_fatal, "failed to read instruction during trace = operation"); + } + + opcode =3D bfd_getl16(packet); + + return inst_length(opcode); +} + static void trencoder_te_ctrl_postw(RegisterInfo *reg, uint64_t val) { TraceEncoder *te =3D TRACE_ENCODER(reg->opaque); @@ -639,10 +658,9 @@ static uint32_t rv_ntrace_get_and_reset_icnt(TraceEnco= der *trencoder, return icnt; } =20 -void trencoder_trace_trap_insn(Object *trencoder_obj, - uint64_t pc, uint32_t ecause, - bool is_interrupt, - uint64_t tval) +void trencoder_trace_trap_insn(Object *trencoder_obj, uint64_t curr_pc, + uint64_t target_pc, uint32_t ecause, + bool is_interrupt, uint64_t tval) { TraceEncoder *trencoder =3D TRACE_ENCODER(trencoder_obj); TracePrivLevel priv =3D trencoder_get_curr_priv_level(trencoder); @@ -650,15 +668,19 @@ void trencoder_trace_trap_insn(Object *trencoder_obj, uint8_t msg_size; =20 if (trencoder->ntrace) { - /* send IndirectBranchHist message */ + uint32_t curr_inst_len =3D get_inst_len_at(curr_pc); + uint32_t btype =3D is_interrupt ? BTYPE_INTERRUPT : BTYPE_EXCEPTIO= N; + + trencoder_send_indirect_branch_hist(trencoder, curr_pc, curr_inst_= len, + target_pc, btype); return; } =20 if (trencoder->updiscon_pending) { - trencoder_send_updiscon(trencoder, pc); + trencoder_send_updiscon(trencoder, curr_pc); } =20 - msg_size =3D rv_etrace_gen_encoded_trap_msg(msg, pc, priv, + msg_size =3D rv_etrace_gen_encoded_trap_msg(msg, curr_pc, priv, ecause, is_interrupt, tval); =20 diff --git a/hw/riscv/trace-encoder.h b/hw/riscv/trace-encoder.h index f8a6a254dc..d1ff813035 100644 --- a/hw/riscv/trace-encoder.h +++ b/hw/riscv/trace-encoder.h @@ -74,10 +74,9 @@ void trencoder_send_indirect_branch_hist(TraceEncoder *t= rencoder, uint32_t curr_inst_len, uint64_t target_pc, TraceBranchType btype); -void trencoder_trace_trap_insn(Object *trencoder_obj, - uint64_t pc, uint32_t ecause, - bool is_interrupt, - uint64_t tval); +void trencoder_trace_trap_insn(Object *trencoder_obj, uint64_t curr_pc, + uint64_t target_pc, uint32_t ecause, + bool is_interrupt, uint64_t tval); void trencoder_trace_ppccd(Object *trencoder_obj, uint64_t pc); void trencoder_report_updiscon(Object *trencoder_obj); void trencoder_report_branch(Object *trencoder_obj, uint64_t pc, diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 665aad6dea..9b7df4d4fd 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -2300,15 +2300,6 @@ void riscv_cpu_do_interrupt(CPUState *cs) __func__, env->mhartid, async, cause, env->pc, tval, riscv_cpu_get_trap_name(cause, async)); =20 - if (cpu->trencoder) { - TraceEncoder *te =3D TRACE_ENCODER(cpu->trencoder); - - if (te->trace_running) { - trencoder_trace_trap_insn(cpu->trencoder, env->pc, - cause, async, tval); - } - } - mode =3D env->priv <=3D PRV_S && cause < 64 && (((deleg >> cause) & 1) || s_injected || vs_injected) ? PRV_S : PR= V_M; =20 @@ -2391,6 +2382,12 @@ void riscv_cpu_do_interrupt(CPUState *cs) env->htinst =3D tinst; env->pc =3D (env->stvec >> 2 << 2) + ((async && (env->stvec & 3) =3D=3D 1) ? cause * 4 : 0); + + if (cpu->trencoder && TRACE_ENCODER(cpu->trencoder)->trace_running= ) { + trencoder_trace_trap_insn(cpu->trencoder, env->sepc, env->pc, + env->scause, async, env->stval); + } + riscv_cpu_set_mode(env, PRV_S, virt); =20 src =3D env->sepc; @@ -2477,6 +2474,12 @@ void riscv_cpu_do_interrupt(CPUState *cs) env->pc =3D (env->mtvec >> 2 << 2) + ((async && (env->mtvec & 3) =3D=3D 1) ? cause * 4 : = 0); } + + if (cpu->trencoder && TRACE_ENCODER(cpu->trencoder)->trace_running= ) { + trencoder_trace_trap_insn(cpu->trencoder, env->mepc, env->pc, + env->mcause, async, env->mtval); + } + riscv_cpu_set_mode(env, PRV_M, virt); src =3D env->mepc; } --=20 2.43.0 From nobody Sat Sep 26 21:37:17 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787669285; cv=none; d=zohomail.com; s=zohoarc; b=GpvLHhBc++2MTbLv4uozpWje6NVPiFdUFv5q9rHLHb0nhmbXj4emjKdGWQW8FPfJufwIvplyYULruL6R+ZFT4eEzp4PxhZKvLdq9Fi6WoqD80o6lNN4MfE/u6FLIDmV1BOEGCgjnHwTb/EaGlrlXahM8xqz+w3lzkgYdh7AWZTQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787669285; h=Content-Type: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=bolLN9ml9GRYfNtQRCTmpUIa3V/5kd3A2e7/75kEuKk=; b=aYxCmxaqb5iUnZTyFTVrQMBYTvRZ/Iw5grpTUH+BCB0hWUM2pF/mTiFV85uW64FADEsPJuQ4KiYykvThczyPkX5ZmRqjluTPn8VPa958iiyY+VogfPKcR6nKIOC75uZVjjLSn+dEDwlR2PZno73HhO6p0cjHCVEogBoc1POLVYY= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787669285160219.73770333623156; Tue, 25 Aug 2026 07:48:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wysR5-0000kl-7w; Tue, 25 Aug 2026 10:47:35 -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 1wys33-0002xv-La for qemu-devel@nongnu.org; Tue, 25 Aug 2026 10:22:45 -0400 Received: from mail-lj1-x232.google.com ([2a00:1450:4864:20::232]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wys32-0002DX-0F for qemu-devel@nongnu.org; Tue, 25 Aug 2026 10:22:45 -0400 Received: by mail-lj1-x232.google.com with SMTP id 38308e7fff4ca-39c7ef2b1e2so43390041fa.1 for ; Tue, 25 Aug 2026 07:22:43 -0700 (PDT) Received: from [127.0.1.1] (broadband-90-154-73-22.ip.moscow.rt.ru. [90.154.73.22]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3a1c82f6b02sm22457551fa.41.2026.08.25.07.22.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 07:22:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787667762; x=1788272562; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=bolLN9ml9GRYfNtQRCTmpUIa3V/5kd3A2e7/75kEuKk=; b=hHdGcmasliBYnYYLVPF82DJbDDgG6gi0jWQpsUyc0Xom3BwNxlJgvMkuFtfLZHMLND ZYhBSTh9UGgZt9JK6FkLXD958D5hGDykXmOIkUYDrgDFFgTm/PNsqVbYT7r5Vc7DQ1T6 5yQfvSjIZFjcET7nfXXcP6Sli6J1GLSQO00m09Cu/v8jmuzf8QGbtT7Ga3UNrWPPDPAo oXCu1sFZ9KYtZwO1uNTCxlA6HcXBe0Jvh/ykrGYJnotkNSbXZoliK+UQUPLvKaPSmiqb 7cSHg3G5bkvRjxZJDKk6S3D5LOZq/9EHBhaeB0IgJMgy6H58x+WjkLJ4LL37arVK5MVx CzVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787667762; x=1788272562; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=bolLN9ml9GRYfNtQRCTmpUIa3V/5kd3A2e7/75kEuKk=; b=gWaslCYnHKC5YXyQn2CcBl90Uzv7uvJDRf4NN18EeTBGIGkKdgXGj60eF7KQML1/PN Fln6tX/sLBMluOlVoRe8t6DAU/8BVQJfVPoX52bXuu8Izk6vxq5vDmUgnYdNCxco/VL7 SdJT1LECGjkzfflKCUJX5TOLXsmUspRi3XUI9d7lejAQcE9U2I1Y/+KWD8z4Ug2TH+23 ykpi0NSBDdEDC5oeX+p81DxLOOzbNZHoG2Ft6hGujquPcTKaEDfo80XEwGJHLeNLl7a8 BNsP+ew2Zfld4RK19TaJXKFVvaJ7JZKm+TDHs7fAmw96qacEyfqryWZIyXbEQOR2fnh8 w5Nw== X-Gm-Message-State: AFuF++kd+clBp69coojg4ibkms0q30b8mUkHXuzaquktTU5g7dFCL9Zv xaJ7f8PrdIYHqc0UKckj/H6rUcuiUpx8AvHdgEL+vYQ+vRzjfPMGRCN6 X-Gm-Gg: AR+sD10pfWOGK0glBOhswyRkHHBQWy2OaFSFsXFhUyU0+Id0gG3XK1/7cSqPo7vvyc4 gM3Ujk8da8w00VHkeYx9emy/zOXLRQd8Eq46jgEmVTjf+eTOSQG7DIC2nF4g3kW6W7lHmOShrkf mD1jNxYSR6meglLndQDAFAZmCMpRV8LHIXNoBkCyghI9xvS++rn6MeBTh+40ub03NZe6dWyanKw qpHgwrJ6Ep3k87Msa/EA25RUHPPuS2+DoBoM6Yha1EEOmP5UcaMUfr3QfdpUAmiQW5DLR75iizH Qpd5VAIig+2HtIrcmxpAh5oBEYuvAh3P3s9htgX5n2391n+6+o5+Y2RsnYKMxJQxmCSiNBlkR4V AHDYxX4lZch3qlz/zO4NisWclbm4PefpitriHNNlTXhTJEOl/czgGHn2/irJzSWPv+lM/ECNTQy HCQ8Y8jVhJRj1IW+P5nhMW89zBB7QQEkKPJ0+RyaasMPZW9To28mwtPjRGCTTvb5BcQaC+96Fm/ UxUJXpiiACceqXPsUKlnUb2uBWnTmhfWRnNt0ITbw== X-Received: by 2002:a05:651c:a213:20b0:3a1:aab7:9bdf with SMTP id 38308e7fff4ca-3a1aeb949bbmr60505331fa.5.1787667762030; Tue, 25 Aug 2026 07:22:42 -0700 (PDT) From: Konstantin Semichastnov Date: Tue, 25 Aug 2026 17:22:32 +0300 Subject: [PATCH 08/13] hw/riscv: add n-trace ResourceFull rv-trace-message MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260825-upstream-ntrace_core-v1-8-f8be2f40d2fd@gmail.com> References: <20260825-upstream-ntrace_core-v1-0-f8be2f40d2fd@gmail.com> In-Reply-To: <20260825-upstream-ntrace_core-v1-0-f8be2f40d2fd@gmail.com> To: qemu-devel@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , qemu-riscv@nongnu.org, Fabiano Rosas , Laurent Vivier , Paolo Bonzini , Alexei Filippov , Konstantin Semichastnov X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3823; i=antikostya2@gmail.com; h=from:subject:message-id; bh=fMLXbru4mJZ3lHay/UjVh/RTgqazBZ0Gw/xJM8uVpFk=; b=owEBbQKS/ZANAwAKAUiKpW6lUN52AcsmYgBqjaUjK5u9WDpd9z74/7TAZI52FC+VD8frIinD1 isHoAr63ECJAjMEAAEKAB0WIQRMBWLx2o+linEPEBhIiqVupVDedgUCao2lIwAKCRBIiqVupVDe dhu6D/wOtZCAOs/Dq/7bmfeAEKlsq0oevyw+PN0NDcLM1ILh6UKOL7kc6a/W37iQPn65n40Tzgg 2G1Wm1bElEOBYKFT/giMctGlA/ap3wviXYC9cib7MuJ5tIMSG2o3bRNKPQ60Xj8awur+1D9dPvw P9zEibdbdEqVbi6HApWQE6CvWrOnjvE9oO4TYaF4N6YybXn1fmTkkQ9mGJm8+weV16Om7Gm3nMA DjiaILRD43nPBUCdmy7LYZeUsZixKYM2vB/OdZuIUeZTVuzcf5Uoy1j/yAI/kehpehap6FzQbQA jvn5rlquiT2bHYeOEMJK9zUt7Y+wwVx+vH6FkzATZ27G/6h0ZRsOk875YRXS0r2DALpoIWRoRWd KHU/t4yB+vWXmaqw96gGCk+7G8N4k0UbI/8XOLGWO2eUFSI2Hrs9HMok9LlZ8dMgKv43+4Ind9E 0B89Ug3dxaBDMIYTVX7R7t5w8PUjvQ0jiABjfWKQPcd4QcGpsKlaJah5ElWHtmIbexbqngP2zsJ fpzd7eqIetMrs9SZeywy+QiNlVT2BkHkub5XOTP6iQ/JFrPeuvnQbzO6ggdSKAA121Lj7WNhFqV q3GPOerExPD/NPJkT9ipx/mZCdCqBNauGt9kMyxIC23yhSsKaqu69WcRioe5zy/agB1t7EBgPOV A/GylP8bEpz3bhw== X-Developer-Key: i=antikostya2@gmail.com; a=openpgp; fpr=4C0562F1DA8FA58A710F1018488AA56EA550DE76 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=2a00:1450:4864:20::232; envelope-from=antikostya2@gmail.com; helo=mail-lj1-x232.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Tue, 25 Aug 2026 10:47:29 -0400 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 @gmail.com) X-ZM-MESSAGEID: 1787669287992158500 Add generation, encoding and sending logic for N-Trace ResourceFull message. Signed-off-by: Konstantin Semichastnov --- hw/riscv/rv-trace-messages.c | 29 +++++++++++++++++++++++++++++ hw/riscv/rv-trace-messages.h | 1 + hw/riscv/trace-encoder.c | 5 +++-- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/hw/riscv/rv-trace-messages.c b/hw/riscv/rv-trace-messages.c index 2ee38c4354..8a9a3c6955 100644 --- a/hw/riscv/rv-trace-messages.c +++ b/hw/riscv/rv-trace-messages.c @@ -359,10 +359,12 @@ typedef enum { WIDTH_FADDR =3D 63, WIDTH_UADDR =3D 63, WIDTH_HIST =3D 32, + WIDTH_RCODE =3D 4, } NTraceFieldWidth; =20 typedef enum { TCODE_PROG_TRACE_SYNC =3D 0x9, + TCODE_RESOURCE_FULL =3D 0x1b, TCODE_INDIRECT_BRANCH_HIST =3D 0x1c, } NTraceTcodeFieldValues; =20 @@ -371,6 +373,10 @@ typedef enum { SYNC_TRACE_ENABLED =3D 5, } NTraceSyncFieldValues; =20 +typedef enum { + RCODE_HIST_PRESENT =3D 1, +} NTraceRcodeFieldValues; + typedef struct NTraceFieldPayload { NTraceFieldType type; NTraceFieldWidth width; @@ -425,6 +431,14 @@ typedef struct NTraceFieldPayload { .width =3D WIDTH_HIST, \ .value =3D (val), \ } + +#define PAYLOAD_RCODE(val) \ + { \ + .type =3D FIELD_FIXED, \ + .width =3D WIDTH_RCODE, \ + .value =3D (val), \ + } + #define PAYLOAD_END() \ { \ .type =3D FIELD_END, \ @@ -517,6 +531,21 @@ size_t rv_ntrace_gen_encoded_prog_trace_sync_msg(uint8= _t *buf, uint64_t faddr) return rv_ntrace_gen_encoded_msg(buf, msg_fields); } =20 +size_t rv_ntrace_gen_encoded_resource_full_msg(uint8_t *buf, uint32_t hist) +{ + const NTraceFieldPayload msg_fields[] =3D { + PAYLOAD_TCODE(TCODE_RESOURCE_FULL), + /* SRC field is not supported for now */ + PAYLOAD_RCODE(RCODE_HIST_PRESENT), + /* I-CNT overflow is not supported for now */ + PAYLOAD_HIST(hist), + /* TSTAMP field is not supported for now */ + PAYLOAD_END(), + }; + + return rv_ntrace_gen_encoded_msg(buf, msg_fields); +} + size_t rv_ntrace_gen_indirect_branch_hist_msg(uint8_t *buf, uint8_t btype, uint32_t icnt, uint64_t uadd= r, uint32_t hist) diff --git a/hw/riscv/rv-trace-messages.h b/hw/riscv/rv-trace-messages.h index d113129d65..7ed8737d14 100644 --- a/hw/riscv/rv-trace-messages.h +++ b/hw/riscv/rv-trace-messages.h @@ -38,6 +38,7 @@ size_t rv_etrace_gen_encoded_format1(uint8_t *buf, bool notify, bool updiscon); =20 size_t rv_ntrace_gen_encoded_prog_trace_sync_msg(uint8_t *buf, uint64_t fa= ddr); +size_t rv_ntrace_gen_encoded_resource_full_msg(uint8_t *buf, uint32_t hist= ); size_t rv_ntrace_gen_indirect_branch_hist_msg(uint8_t *buf, uint8_t btype, uint32_t icnt, uint64_t uadd= r, uint32_t hist); diff --git a/hw/riscv/trace-encoder.c b/hw/riscv/trace-encoder.c index face6f83b7..302458bfba 100644 --- a/hw/riscv/trace-encoder.c +++ b/hw/riscv/trace-encoder.c @@ -694,8 +694,9 @@ static void trencoder_send_branch_map(Object *trencoder= _obj) uint8_t msg_size; =20 if (te->ntrace) { - /* send ResourceFull message */ - return; + uint32_t hist =3D rv_ntrace_encode_and_reset_branch_map(te); + + msg_size =3D rv_ntrace_gen_encoded_resource_full_msg(msg, hist); } else { msg_size =3D rv_etrace_gen_encoded_format1_noaddr(msg, te->branches, --=20 2.43.0 From nobody Sat Sep 26 21:37:17 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787669325; cv=none; d=zohomail.com; s=zohoarc; b=ndLQiKukZ7+h5EX6W/IsmrRDRkSp0343y7cuKannEZ9bcEscKtvh9cqQ39VLtL8PZJ5qD+wsMCQWZyOpVN5lmjXubl33kwdLTgjZTl/SDzWw7NPViTrcvIaSvpFE5VNSI6/NWW+7zD55DW3U1gF5h0x5mr21noxqF6+p5EXo7B4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787669325; h=Content-Type: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=LLdbykr++5bwM76buDIbQJ6X1nZUyGXveEMjxM/ZTkk=; b=bP3K216xgYq66oXTavA35m4bIB/ySDVLQY0STJUF3xV3K1+HWOH7kly4wR8lJ4TReVjtV8+H6zL5mEG2TeTf1ia3NGg2YjvFJavXxdwVACTuP5cMtUerSCn+wk4exE1OaQqa/eNThkco0ps23vNSOFhNRcQa0ifdPNrD2dTe9hU= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787669325753355.8544040618368; Tue, 25 Aug 2026 07:48:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wysRI-0000sY-S6; Tue, 25 Aug 2026 10:47:48 -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 1wys35-0002z1-FG for qemu-devel@nongnu.org; Tue, 25 Aug 2026 10:22:47 -0400 Received: from mail-lj1-x230.google.com ([2a00:1450:4864:20::230]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wys33-0002E3-Hh for qemu-devel@nongnu.org; Tue, 25 Aug 2026 10:22:47 -0400 Received: by mail-lj1-x230.google.com with SMTP id 38308e7fff4ca-3a1eb6fa0f4so10541771fa.2 for ; Tue, 25 Aug 2026 07:22:45 -0700 (PDT) Received: from [127.0.1.1] (broadband-90-154-73-22.ip.moscow.rt.ru. [90.154.73.22]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3a1c82f6b02sm22457551fa.41.2026.08.25.07.22.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 07:22:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787667764; x=1788272564; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=LLdbykr++5bwM76buDIbQJ6X1nZUyGXveEMjxM/ZTkk=; b=g7sRvpHYzydvyKHRWMVO1F5axg2SrtCbJqp/cQY04r3qxHQwUlUlMz39c3xXoBI8K6 ncehBrAtG2LxRNm6SoiMLErXGJzbrmTllTnsbN1bBTmamZSdSSH+sh89y1fjucEBwTEf ot8JP3k1+82wfjUa7Zhpbz9fHWD1kLtebsapR7TFexc+85CpFrHWDEi277+5/uBOTjAa KI7lvGt83/+xKVFKdwSjCR+psj+jMf/0TltiXsoi5FaWTGDrQDjjCtj//jqJ/2Q2UgFQ ZZ8PMnoclCYWFykG7d+v7BObR55+5Qyf6R7l2tqtL+nfFTJJPgcR04tZvspI2LjwNkLH 37GA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787667764; x=1788272564; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=LLdbykr++5bwM76buDIbQJ6X1nZUyGXveEMjxM/ZTkk=; b=GQzTUr1OqkYOE5ngv4oTKe/SMEgbKVWD6t/p7qRabT2d34trwz91ybeSZUYQ5V4+3s UqJaRgr01T04R6hos0bbu5582FxFNfccs+CGhWP+qtU2ba1+iemyJ6ZglKg+zOChm9W9 2zZ2BJ6ZZQEaBJsWP3NcgVI3/i1Edoh/efxVy8OVciv0dQsfmN27F6lUMzfBRjLx2VIK YqTaw/f0js+K7fHiP7xZP1IsMVMVDMEXJcQ/Gc//e1BT7it03/lE7D6kH5ANm5AQh9Nl ntzDDAAcs6zLcNPrWXckBTmdNbZ6uiX+0cymzWPlhNcC0UnJb87ZGasUzPoD1h9svEWc aeJQ== X-Gm-Message-State: AFuF++nYIF/RbjNXei7RcB0u82OHZESvpWFCkWzPHtUuDGA3ZaQe9uaA VlmWWGv0Ra0PKqTP9sctWTVYbrO3uocX8l184Swp+w/UKAca9F8T0EzO X-Gm-Gg: AR+sD13/d1TTjC+j/z8B0oEn49Vj+GvtpiD7XeBD26MzaS9WVnPZRDrohJv2LxeCD11 N/6pM5eVlq46y3tFjtMbgqhjeXriqw4GYKmi82qEPsIZ9JDBoTZb5ILb4mHPSh0RkVOBClBfI+v rkBUHmSVx4jZK5r/uc6wFi5pVC7QhySoGq7+NiqDM2+2ezHKHs8hMjVD2BtHXNtfxI9BCMwhQYc XdcuPX1CnJ5V2+D0Zo42qzYBsrOqzFCOPsGpzD99l8xLGPMIcgyjVtPYvTYvHneotKIrsT30bae +BHawMb+UKGsPgl1489VOBy32J0kt54Y3du5T+f5G3rCCg4ESUFw8xz4z/P8dQV1RBkanvP46Uw ItSQOBOUitF9PwE6mWDAheRKnG/SdcrwJZLSaH0656oHZ9cBJaRgUVuMaKMfuFOJ6T5qbi6tLip JlawmJbvdOKpr7rtoxPza+0dMnSX9Zdi78tcJTyVVQFL+QGERec5HPoGLV2QDxMkLOAXKvktv55 MSqdMkmERAXDb0QJNXWi+zAiPkmig== X-Received: by 2002:a05:651c:220b:b0:39b:374a:afb8 with SMTP id 38308e7fff4ca-3a1ae863638mr87868301fa.0.1787667763479; Tue, 25 Aug 2026 07:22:43 -0700 (PDT) From: Konstantin Semichastnov Date: Tue, 25 Aug 2026 17:22:33 +0300 Subject: [PATCH 09/13] hw/riscv: add n-trace ProgTraceCorrelation rv-trace-message MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260825-upstream-ntrace_core-v1-9-f8be2f40d2fd@gmail.com> References: <20260825-upstream-ntrace_core-v1-0-f8be2f40d2fd@gmail.com> In-Reply-To: <20260825-upstream-ntrace_core-v1-0-f8be2f40d2fd@gmail.com> To: qemu-devel@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , qemu-riscv@nongnu.org, Fabiano Rosas , Laurent Vivier , Paolo Bonzini , Alexei Filippov , Konstantin Semichastnov X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6795; i=antikostya2@gmail.com; h=from:subject:message-id; bh=1Z8nYN1UHVYzP6GGa1UOZSzuTuIAwQBijSQnx5WMLyM=; b=owEBbQKS/ZANAwAKAUiKpW6lUN52AcsmYgBqjaUjwJNzpwo2SKgYpUOt3oI5a8prZKbeflsVi rDvezupm9aJAjMEAAEKAB0WIQRMBWLx2o+linEPEBhIiqVupVDedgUCao2lIwAKCRBIiqVupVDe dgH7D/9v28OkyiIz9zBsNE26zFjNUpFwhXngCxBuumabnTAjvg3vS9PBqYS+BC2jiS6nFoING/h Poy7INsL+jeZOS4/SbaErEZv7rDsdTI3R8DHRZb0OIZOtL4EpDGN9qT2aCas2YRFWSM64ndcm9s WigG6nE1Fzw+s49UQ251H/fD0BZoo20OjLs7ojB8liXt0htuLDfByNV5ggMDnjm+5fvQoBg5fRy dmXPWGqg81xD68JJofQJzt8g3xUhvTNH+CT6oG7kGAVVqRQ7MnJnHR7XkTuL9SUMr/+NoRbN0cA RsQXlf1hu13odIxdM/S8TpBsQgAtRtZ1fjh7ZRWOnO8OYXcebWbeqoWESBWYmQNPLBV0PvsWFiO VI1EZn8j0Nbow3mr3TJsAyHNvgus7WHqPt9zdgHpM6em/I8kK7kPNvdvnUwNpdfdTun8fPc7ikl TDDpJRMn5/8mkDZOqr08EawZsmIpYLGBGQR4jwUSGPgzvPopQSpUlCGEe0+f/5qOy1Gqql8tvvp mGVU1X0QQihNJUeh+GSnRZpNsRJSvPLvzgzxYitoZp7YfGHW2fiSgMbx+f4cKj2OIU7E96qOKu7 hKpM50Qfa5zc++frSQIU3jUiYiPCWXyhJO4ZSsFNPofL1TpUQvpWv7QsHjq9B4ZiN8VQwvgD3so EPVx7qkYRzKAN8A== X-Developer-Key: i=antikostya2@gmail.com; a=openpgp; fpr=4C0562F1DA8FA58A710F1018488AA56EA550DE76 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=2a00:1450:4864:20::230; envelope-from=antikostya2@gmail.com; helo=mail-lj1-x230.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Tue, 25 Aug 2026 10:47:29 -0400 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 @gmail.com) X-ZM-MESSAGEID: 1787669328262158500 Add generation, encoding and sending logic for N-Trace ProgTraceCorrelation message. Signed-off-by: Konstantin Semichastnov --- hw/riscv/rv-trace-messages.c | 40 ++++++++++++++++++++++++++++++++++++++++ hw/riscv/rv-trace-messages.h | 4 ++++ hw/riscv/trace-encoder.c | 28 ++++++++++++++++++++++++++++ hw/riscv/trace-encoder.h | 8 ++++++++ 4 files changed, 80 insertions(+) diff --git a/hw/riscv/rv-trace-messages.c b/hw/riscv/rv-trace-messages.c index 8a9a3c6955..708e48bbed 100644 --- a/hw/riscv/rv-trace-messages.c +++ b/hw/riscv/rv-trace-messages.c @@ -359,11 +359,14 @@ typedef enum { WIDTH_FADDR =3D 63, WIDTH_UADDR =3D 63, WIDTH_HIST =3D 32, + WIDTH_EVCODE =3D 4, + WIDTH_CDF =3D 2, WIDTH_RCODE =3D 4, } NTraceFieldWidth; =20 typedef enum { TCODE_PROG_TRACE_SYNC =3D 0x9, + TCODE_PROG_TRACE_CORRELATION =3D 0x21, TCODE_RESOURCE_FULL =3D 0x1b, TCODE_INDIRECT_BRANCH_HIST =3D 0x1c, } NTraceTcodeFieldValues; @@ -373,6 +376,10 @@ typedef enum { SYNC_TRACE_ENABLED =3D 5, } NTraceSyncFieldValues; =20 +typedef enum { + CDF_ICNT_AND_HIST_PRESENT =3D 1, +} NTraceCdfFieldValues; + typedef enum { RCODE_HIST_PRESENT =3D 1, } NTraceRcodeFieldValues; @@ -432,6 +439,20 @@ typedef struct NTraceFieldPayload { .value =3D (val), \ } =20 +#define PAYLOAD_EVCODE(val) \ + { \ + .type =3D FIELD_FIXED, \ + .width =3D WIDTH_EVCODE, \ + .value =3D (val), \ + } + +#define PAYLOAD_CDF(val) \ + { \ + .type =3D FIELD_FIXED, \ + .width =3D WIDTH_CDF, \ + .value =3D (val), \ + } + #define PAYLOAD_RCODE(val) \ { \ .type =3D FIELD_FIXED, \ @@ -531,6 +552,25 @@ size_t rv_ntrace_gen_encoded_prog_trace_sync_msg(uint8= _t *buf, uint64_t faddr) return rv_ntrace_gen_encoded_msg(buf, msg_fields); } =20 +size_t rv_ntrace_gen_encoded_prog_trace_correlation_msg(uint8_t *buf, + uint32_t evcode, + uint32_t icnt, + uint32_t hist) +{ + const NTraceFieldPayload msg_fields[] =3D { + PAYLOAD_TCODE(TCODE_PROG_TRACE_CORRELATION), + /* SRC field is not supported for now */ + PAYLOAD_EVCODE(evcode), + PAYLOAD_CDF(CDF_ICNT_AND_HIST_PRESENT), + PAYLOAD_ICNT(icnt), + PAYLOAD_HIST(hist), + /* TSTAMP field is not supported for now */ + PAYLOAD_END(), + }; + + return rv_ntrace_gen_encoded_msg(buf, msg_fields); +} + size_t rv_ntrace_gen_encoded_resource_full_msg(uint8_t *buf, uint32_t hist) { const NTraceFieldPayload msg_fields[] =3D { diff --git a/hw/riscv/rv-trace-messages.h b/hw/riscv/rv-trace-messages.h index 7ed8737d14..a4d14de59a 100644 --- a/hw/riscv/rv-trace-messages.h +++ b/hw/riscv/rv-trace-messages.h @@ -38,6 +38,10 @@ size_t rv_etrace_gen_encoded_format1(uint8_t *buf, bool notify, bool updiscon); =20 size_t rv_ntrace_gen_encoded_prog_trace_sync_msg(uint8_t *buf, uint64_t fa= ddr); +size_t rv_ntrace_gen_encoded_prog_trace_correlation_msg(uint8_t *buf, + uint32_t evcode, + uint32_t icnt, + uint32_t hist); size_t rv_ntrace_gen_encoded_resource_full_msg(uint8_t *buf, uint32_t hist= ); size_t rv_ntrace_gen_indirect_branch_hist_msg(uint8_t *buf, uint8_t btype, uint32_t icnt, uint64_t uadd= r, diff --git a/hw/riscv/trace-encoder.c b/hw/riscv/trace-encoder.c index 302458bfba..c36d205f50 100644 --- a/hw/riscv/trace-encoder.c +++ b/hw/riscv/trace-encoder.c @@ -259,6 +259,16 @@ static void trencoder_te_ctrl_postw(RegisterInfo *reg,= uint64_t val) RISCVCPU *cpu =3D te->cpu; CPURISCVState *env =3D &cpu->env; =20 + + if (te->ntrace && te->enabled) { + if (!trTeActive || !trTeEnable || !trTeInstTracing) { + uint32_t inst_len =3D get_inst_len_at(env->pc); + + trencoder_send_prog_trace_correlation(OBJECT(te), env->pc, ins= t_len, + CORRELATION_TRACE_DISABL= ED); + } + } + if (!trTeActive) { te->enabled =3D false; te->trace_running =3D false; @@ -658,6 +668,24 @@ static uint32_t rv_ntrace_get_and_reset_icnt(TraceEnco= der *trencoder, return icnt; } =20 +void trencoder_send_prog_trace_correlation(Object *trencoder_obj, uint64_t= pc, + uint32_t inst_len, + TraceStopReason evcode) +{ + TraceEncoder *trencoder =3D TRACE_ENCODER(trencoder_obj); + g_autofree uint8_t *msg =3D g_malloc0(TRACE_MSG_MAX_SIZE); + uint32_t icnt =3D rv_ntrace_get_and_reset_icnt(trencoder, pc, inst_len= ); + uint32_t hist =3D rv_ntrace_encode_and_reset_branch_map(trencoder); + uint8_t msg_size; + + g_assert(trencoder->ntrace); + + msg_size =3D rv_ntrace_gen_encoded_prog_trace_correlation_msg(msg, evc= ode, + icnt, hist= ); + + trencoder_send_message_smem(trencoder, msg, msg_size); +} + void trencoder_trace_trap_insn(Object *trencoder_obj, uint64_t curr_pc, uint64_t target_pc, uint32_t ecause, bool is_interrupt, uint64_t tval) diff --git a/hw/riscv/trace-encoder.h b/hw/riscv/trace-encoder.h index d1ff813035..55d53c2582 100644 --- a/hw/riscv/trace-encoder.h +++ b/hw/riscv/trace-encoder.h @@ -63,12 +63,20 @@ typedef enum { BTYPE_INTERRUPT =3D 3, } TraceBranchType; =20 +typedef enum { + CORRELATION_TRACE_DISABLED =3D 4, +} TraceStopReason; + #define TYPE_TRACE_ENCODER "trace-encoder" =20 OBJECT_DECLARE_SIMPLE_TYPE(TraceEncoder, TRACE_ENCODER) =20 void trencoder_set_first_trace_insn(Object *trencoder_obj, uint64_t pc); void trencoder_send_prog_trace_sync(Object *trencoder_obj, uint64_t pc); +void trencoder_send_prog_trace_correlation(Object *trencoder_obj, + uint64_t pc, + uint32_t inst_len, + TraceStopReason evcode); void trencoder_send_indirect_branch_hist(TraceEncoder *trencoder, uint64_t curr_pc, uint32_t curr_inst_len, --=20 2.43.0 From nobody Sat Sep 26 21:37:17 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787669347; cv=none; d=zohomail.com; s=zohoarc; b=WII2YIkgBtOCOOLv7b09IeJaNdLGpUcDNACX/7M9ol09FEyNL20PKYYe1sxuuY1lZdCmc1PAlFWXanmdY/A4ADOL8L+ciKZLT8FpzV7k/n5/9I6OXsmW7qlmX5Jfx/X6tv9VCHETxMqGyZbSHYZ4AQJjxSz70Y7sBPqG0t5X+zU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787669347; h=Content-Type: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=kQWqq7RedaQTszwFuwjLMu+ThgSlnubcEuWTuLU4Ats=; b=USmedluhFtPaurdRAuZiHLkChFiDamiDO0lrdQskSfAHF8VDiaakqM4f+AoqDwJF5aHbfTzJca6SkEXSJDqjgqpAMjZneMag+rF6OR2CQuD8B4iBRZCNq2GrO71k8e9GYP/h7m302O7Inpk5Sv4ctHoT/o9KE8bhQrh5D1ECSLw= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787669347023838.6804249676819; Tue, 25 Aug 2026 07:49:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wysR1-0000ig-0M; Tue, 25 Aug 2026 10:47:31 -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 1wys37-0002zg-BZ for qemu-devel@nongnu.org; Tue, 25 Aug 2026 10:22:49 -0400 Received: from mail-lj1-x229.google.com ([2a00:1450:4864:20::229]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wys35-0002En-LY for qemu-devel@nongnu.org; Tue, 25 Aug 2026 10:22:49 -0400 Received: by mail-lj1-x229.google.com with SMTP id 38308e7fff4ca-3a1f792efd0so2872881fa.0 for ; Tue, 25 Aug 2026 07:22:47 -0700 (PDT) Received: from [127.0.1.1] (broadband-90-154-73-22.ip.moscow.rt.ru. [90.154.73.22]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3a1c82f6b02sm22457551fa.41.2026.08.25.07.22.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 07:22:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787667766; x=1788272566; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=kQWqq7RedaQTszwFuwjLMu+ThgSlnubcEuWTuLU4Ats=; b=XTIeCyqipzlO7YqTgB2AuntRREKJdO+HoLyQgtVJPajbj0eCkz8i0v/o1oONzyqJ3M +s78mkZD1UxN6bqp59wFkJviARRK5YBhb93ZHhEFXoSLwkT704uKlZ/AiNMJOtwNhISU 8/dfvO48AZ4XRhtZB6Vx8Sklx44Q6GPCOMnCwtmzkb4PHLoYATTaoJhawOAr5S4YsMwI GgI+zydPt9mT6AAs31E990LQ3O1CBjCpUZEB0ftjA8nX+uZH5kFAWlZO6bUSBBDQevj5 VkhX4Hd3f8h4tScKAjBxVIPNWBjQ31Tv6NKoGGaEMIpqJmW5V7SMDt0fC+FJLIdsP4v7 qMDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787667766; x=1788272566; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=kQWqq7RedaQTszwFuwjLMu+ThgSlnubcEuWTuLU4Ats=; b=WpGVBLMTaSJUhTPojs1KDjHe/q9q5GwPamKwBmV7/CyqXnAFRfe7BWAkTL7LGqZUJc 18LPUjHkQGstrE1fY9zsYcvO6tNzXGv6i2VLlr7CiG8gOreXxpTMnEpCI8i619+oFJIE 7zfVaFhmmIu5UaQJajmbtjZ4uS9KwJBbNILU5md70qhLk8r0PEQtV5eZHeEBFPlEK8lt PCIkRKrgkZ9sSXltav748yQr3QCATrl8LaKl7odkYd9X8faqr3FvCPBfyFpAelyrjjI3 oyYhgJMXjg/8nYr7vnkqHMXLH0IgKwoMi3KGrMAx771EaFgMnIiCgD6bLqq2A3evyEoI J0Kw== X-Gm-Message-State: AFuF++nCS1EwokbLnirmlFTXAXe6YFcMwxdnriqoACDpB5f7W4BFYpX5 PGHagIhLPvarD4mRZVr6DgMbxoNMUKPbXaJBu/5q66lL8I0qt5i5GyvG X-Gm-Gg: AR+sD10RaWfpNlbhlwSh8F47j3ptlQYXY91+lrWWgau5BOF46l1NhGjqlc2yE1Nu2Ra M9s5jlhx2gZlA2p9Jufr6nTXSnFmB06lLHkFcK0iFBmbzyeXGK409ZH1DOfsa2SV17MpMNqLCHX YFkjH4oDVl/a+r77AQ0H6cpU13nBNhWXuVI+7T+583pXwJmA97xC4SehCyG5yh8I470jIOF9Jxg Rla3Zib5BYfYiH80znLvzQZ9xnlmF/8o+1x92o3atQXIsSVGRkxdEx5nlvmD78/Ud18jO/DOB9s b2x16msxQoRjQbfewNQ19LLiaZdkg4hjSludmcGO9zk7UQ5zoHeI+ru38JzyOcforb1SZpAIjUf uwDCCHXjMmku8v8xaSvhrZYHZPUWxy/qxLSISskCvir17BzluiXA/hKqL+YgUcDlTd23yjCxYHz BmzqPeHzuvKDUazpkM5ROa3lYHC68ckWwYe2Il3lYQNDNAyyESRt8dkeoouTJvyJuWejMdYf9tc DEH+ZieR+/qpLCDFanU5juJPIbMBGngBOnor8ec X-Received: by 2002:a2e:8a86:0:b0:3a1:f911:3d52 with SMTP id 38308e7fff4ca-3a1f91144d4mr2912401fa.1.1787667765578; Tue, 25 Aug 2026 07:22:45 -0700 (PDT) From: Konstantin Semichastnov Date: Tue, 25 Aug 2026 17:22:34 +0300 Subject: [PATCH 10/13] test/qtest/riscv-trace-test: add test-ntrace-simple qtest MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260825-upstream-ntrace_core-v1-10-f8be2f40d2fd@gmail.com> References: <20260825-upstream-ntrace_core-v1-0-f8be2f40d2fd@gmail.com> In-Reply-To: <20260825-upstream-ntrace_core-v1-0-f8be2f40d2fd@gmail.com> To: qemu-devel@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , qemu-riscv@nongnu.org, Fabiano Rosas , Laurent Vivier , Paolo Bonzini , Alexei Filippov , Konstantin Semichastnov X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3245; i=antikostya2@gmail.com; h=from:subject:message-id; bh=u/j6vcQM7k0pTFM2HSNc8/6vg2UaZinTYLqw9EGZH8I=; b=owEBbQKS/ZANAwAKAUiKpW6lUN52AcsmYgBqjaUjO2g5yQ0MsohYMag+dK4GDKF1aXlR/RfnY 2lUKDtNdJGJAjMEAAEKAB0WIQRMBWLx2o+linEPEBhIiqVupVDedgUCao2lIwAKCRBIiqVupVDe dgF2EACcCKhxwO+xhni4novkLXLTm83T4n455Gp//hLAbUQqRDO1M+N+HsFEBf3vl57HBD0KshC sMJL4VmgMsAHGO4JRd4xoRICF97hxQbeAwJhxzbmOBs+Ch5MEFLo8qwLSj6DX9cqpnAMAbns1Hf NNK5sUVTedOLLEDxEcJdhks/3DV63mZwmjBCZpku86nbc1zFRQ8G30e/QmUq5SXeMQV857OfWPg 9I+/f2BOdGoqtCr7Ow4vjL7gC6M+bsVfxC+5Nrvu+bCZ+MvAZBqLBF56xzA0H7gsGYgKNZ9nrLI DMqjXFR1g4RP+O/wGYkieb6TEgUQWh6GYZcKVci3uL8FcDSbrcV7zR9RoJgEVWbB2uCUkGvRBjn 5jglDGfWuxL+kIuHdYKOzd8LqRUcHoXzldiYdJizsjWVnvJoSxs7FZLbEZOt+/aejicqeHqEboX GWa7pJ3ufEFIRLhNVXSG2VY4gcsHs1g7IGYmN36Y1RYhlRVTwkp2/C8crq6S6M1ymQ0mGDef1t6 UXturTrxuN9ZB5+Vl8PTY2N9G6vHPo8nOtTeemflk4dwVCUbjewnpsYqdpIfxCywGyBHr0dNMsi mqWZAwo5Mo+egcjnPsp6HmuJcTFbdQBEH8bdT6wYLKTxdBFDcpstuEI2lKTGHUb7PCwXozVD0qc 1PT0RopBJ0PuLog== X-Developer-Key: i=antikostya2@gmail.com; a=openpgp; fpr=4C0562F1DA8FA58A710F1018488AA56EA550DE76 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=2a00:1450:4864:20::229; envelope-from=antikostya2@gmail.com; helo=mail-lj1-x229.google.com X-Spam_score_int: -7 X-Spam_score: -0.8 X-Spam_bar: / X-Spam_report: (-0.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, FORGED_GMAIL_RCVD=1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Tue, 25 Aug 2026 10:47:29 -0400 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 @gmail.com) X-ZM-MESSAGEID: 1787669348287158501 Add a simple smoke test for the ntrace encoder/trace ram sink integration with the RISC-V 'virt' machine. Signed-off-by: Konstantin Semichastnov --- tests/qtest/riscv-trace-test.c | 59 ++++++++++++++++++++++++++++++++++++++= +++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/tests/qtest/riscv-trace-test.c b/tests/qtest/riscv-trace-test.c index fe1cc85358..66069f7a56 100644 --- a/tests/qtest/riscv-trace-test.c +++ b/tests/qtest/riscv-trace-test.c @@ -21,6 +21,7 @@ REG32(TR_TE_CONTROL, 0x0) FIELD(TR_TE_CONTROL, ACTIVE, 0, 1) FIELD(TR_TE_CONTROL, ENABLE, 1, 1) FIELD(TR_TE_CONTROL, INST_TRACING, 2, 1) + FIELD(TR_TE_CONTROL, FORMAT, 24, 3) =20 REG32(TR_RAM_START_LOW, 0x010) FIELD(TR_RAM_START_LOW, ADDR, 0, 32) @@ -99,7 +100,61 @@ static void test_trace_simple(void) g_assert(1 =3D=3D FIELD_EX32(reg, TR_TE_CONTROL, INST_TRACING)); =20 g_test_timer_start(); - for (;;) { + while (true) { + reg_tram_writep =3D test_read_tram_writep(qts); + if (reg_tram_writep > reg_tram_start) { + break; + } + + g_assert(g_test_timer_elapsed() <=3D timeout_sec); + } + + qtest_quit(qts); +} + +static void test_ntrace_simple(void) +{ + QTestState *qts =3D qtest_init("-machine virt -accel tcg -d in_asm"); + double timeout_sec =3D 0.5; + uint64_t reg_tram_start, reg_tram_writep; + uint32_t reg; + + /* trTeActive :=3D 1 */ + reg =3D test_read_te_control(qts); + reg =3D FIELD_DP32(reg, TR_TE_CONTROL, ACTIVE, 1); + test_write_te_control(qts, reg); + reg =3D test_read_te_control(qts); + g_assert(1 =3D=3D FIELD_EX32(reg, TR_TE_CONTROL, ACTIVE)); + + /* trTeEnable :=3D 1 */ + reg =3D FIELD_DP32(reg, TR_TE_CONTROL, ENABLE, 1); + test_write_te_control(qts, reg); + reg =3D test_read_te_control(qts); + g_assert(1 =3D=3D FIELD_EX32(reg, TR_TE_CONTROL, ENABLE)); + + /* trTeFormat :=3D 1 (ntrace) */ + reg =3D FIELD_DP32(reg, TR_TE_CONTROL, FORMAT, 1); + test_write_te_control(qts, reg); + reg =3D test_read_te_control(qts); + g_assert(1 =3D=3D FIELD_EX32(reg, TR_TE_CONTROL, FORMAT)); + + /* + * Verify if RAM Sink write pointer is equal to + * ramstart before start tracing. + */ + reg_tram_start =3D test_read_tram_ramstart(qts); + g_assert(reg_tram_start > 0); + reg_tram_writep =3D test_read_tram_writep(qts); + g_assert(reg_tram_writep =3D=3D reg_tram_start); + + /* trTeInstTracing :=3D 1 */ + reg =3D FIELD_DP32(reg, TR_TE_CONTROL, INST_TRACING, 1); + test_write_te_control(qts, reg); + reg =3D test_read_te_control(qts); + g_assert(1 =3D=3D FIELD_EX32(reg, TR_TE_CONTROL, INST_TRACING)); + + g_test_timer_start(); + while (true) { reg_tram_writep =3D test_read_tram_writep(qts); if (reg_tram_writep > reg_tram_start) { break; @@ -116,5 +171,7 @@ int main(int argc, char *argv[]) g_test_init(&argc, &argv, NULL); qtest_add_func("/riscv-trace-test/test-trace-simple", test_trace_simple); + qtest_add_func("/riscv-trace-test/test-ntrace-simple", + test_ntrace_simple); return g_test_run(); } --=20 2.43.0 From nobody Sat Sep 26 21:37:17 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787669323; cv=none; d=zohomail.com; s=zohoarc; b=J7Pr4D+Zec6karHWzReD+beXnneZkhPHMXrxWgSjoWe9HocERjWBUY18ZYuCnCn0LAu0vbjqRZX/2DUJ4IZH23BDYap3uVyVMCqLnZDqDwjFA3seHn1DcrIGbyEBOHYuLbdSdizwjPKC7ZZOqKTSZCth2YiAeYMseV7NPatG/Qo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787669323; h=Content-Type: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=VnF+nDQE1Id2poIia8XWf7bAfaVmktTinQp/48+p2s0=; b=BzDIqmDir6SNpZc0rrrTHPXlLPRYa/fJ+mFoJAMZ97W4QO+DdiagH3oQt9DGlBkoJjsiTcTu9QOpHgNX+KC8szhci4uCQhvmO9PUMPuRdp9vdO0i2ckqOIcTnYCjaEUl9gOWxam1wPWGF0o7DjP3HyTJgSqgCUd4lFOlspTqEZ0= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787669323176844.3598990694178; Tue, 25 Aug 2026 07:48:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wysR2-0000ju-T8; Tue, 25 Aug 2026 10:47:32 -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 1wys39-00030g-77 for qemu-devel@nongnu.org; Tue, 25 Aug 2026 10:22:51 -0400 Received: from mail-lf1-x12a.google.com ([2a00:1450:4864:20::12a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wys37-0002FM-1t for qemu-devel@nongnu.org; Tue, 25 Aug 2026 10:22:50 -0400 Received: by mail-lf1-x12a.google.com with SMTP id 2adb3069b0e04-5b0115b9e17so4699816e87.0 for ; Tue, 25 Aug 2026 07:22:48 -0700 (PDT) Received: from [127.0.1.1] (broadband-90-154-73-22.ip.moscow.rt.ru. [90.154.73.22]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3a1c82f6b02sm22457551fa.41.2026.08.25.07.22.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 07:22:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787667767; x=1788272567; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=VnF+nDQE1Id2poIia8XWf7bAfaVmktTinQp/48+p2s0=; b=NAoeYLCW06g+qdcBBcR5j2I3HXRKATHiBhnMJPI/9z+vnJoHPgZGb7jrZgRZe1gSrf cRLZ70pTHvkrZNprd4nVwiHUNaExY5YmcoumzWIH9CoNWAXGha5DWFL4U5oieFCNLqNn BFWgeiSoJJ060TqEtRaHRAqis06EwQq3SoxhNPDArqSkcQ5DLMfuR0LmWQvJmptx8WN/ 4fGXVIl5WYzVdrGZ8MuS5z193k8lXM6CKfwlWV/zijXx/ab0BclhBXH86jESi7L+GwA1 jXHh0P3Z4/WncGe+PTYVUZZtxjP81saIQPbCZQFdfThg7STDNSlEpJTdAllwqG1luNxo Bckg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787667767; x=1788272567; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=VnF+nDQE1Id2poIia8XWf7bAfaVmktTinQp/48+p2s0=; b=m0moT45GXtlxHnvr9lmQPDoeCxEiPt0UnagvWksbWg0kzni5oMaj6AOFW4GtE6kNhM At7H7yy6c/hwz4wha6+F0Hbf6IbHV9CZOkEdz3EmRnaMrHE0FtYDqNqRNNsulag5+9CS PTu4Vw9+7btTVuTN0DAF4nNnJURDC+PGRUzOpzinGDW1x9A3YeirJoST6gA7lx17qbp4 X/ZGnUf1B35uU+YaLO7NT7I3HRSgWuL1P6zcCFsK6IaP8V8YAJK0O3X4kxHixCEcC1ix 5fP8FDyZt6eC8uno8oHKiM4Zsb2oIujHHcNC1YpOSYx188uNbYrYgGMsC7aNqwn1EAkV Gr+A== X-Gm-Message-State: AFuF++mGP2LTTjUZ5ByO7JDL0zec722JX2BzgQiptm+Unv62FRUfN+lF mnYL6ceMjCiEfpGui4u1D4x8TCuXQud9FDZCUgNcCYKF8NLq9ysVH1sE X-Gm-Gg: AR+sD12xUWdoBQQ1yK2NIHMs6ggPeubq2KTd5wmnHw5xJiy4dznZQfbkMXHPUKtHLw2 OD5EnFIIuYJ5EzSnv4Ll4Q/IrWUVR5InwM4YKvb9EOj0Ynn7Yi4l+f59DAYNC7Z/gxoaG3tJ3wc Q/q3U1hB1dNto76Dfy5Kk3rjXxxMgRb5xh+spsHBF3nsCW76dV4qQOxtd/C6jxU69M909sVM+YM GpJrJsf0RNpTflBjI8grUsAhUglUgkx10DRfFm18Fq9NP6pz9l/QHySPDjezbvpKICkQQGtAdh7 SmpZBHeuOHggmJjiE1kk4n1O8qEIkAtQoZjyVZsE48/kk4nV5/6N4o1pMpo+svo0u/fOmGKUtgO YGOslrwqqgaosOULE/oKmqxQJEcsAUFGnjpgviizXysGqFs65HxZph9eEA5yT/E4WFascCENNq3 rgOnbkXTkXxQM94fOIoCZQSM53cRsay5NTu8twkRsxzMjYLJfTnrBly/AK03HnIt/EwInmGbGuY bHMM9JUfRELMkBpLWJIF811lCLCAw== X-Received: by 2002:a2e:a983:0:b0:38e:a12c:418c with SMTP id 38308e7fff4ca-3a1ef5775bdmr16896011fa.11.1787667767095; Tue, 25 Aug 2026 07:22:47 -0700 (PDT) From: Konstantin Semichastnov Date: Tue, 25 Aug 2026 17:22:35 +0300 Subject: [PATCH 11/13] hw/riscv/trace-encoder.c: add remaining fields to trace-encoder MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260825-upstream-ntrace_core-v1-11-f8be2f40d2fd@gmail.com> References: <20260825-upstream-ntrace_core-v1-0-f8be2f40d2fd@gmail.com> In-Reply-To: <20260825-upstream-ntrace_core-v1-0-f8be2f40d2fd@gmail.com> To: qemu-devel@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , qemu-riscv@nongnu.org, Fabiano Rosas , Laurent Vivier , Paolo Bonzini , Alexei Filippov , Konstantin Semichastnov X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1324; i=antikostya2@gmail.com; h=from:subject:message-id; bh=GerEqUwk7lEOA/Gc+A4C2wt0HgXJhrpEEgUdOrF75hg=; b=owEBbQKS/ZANAwAKAUiKpW6lUN52AcsmYgBqjaUjKyMVhhCHB0Ob1a4cDp36m0yTMkFjkXu/D dT7E0x73d6JAjMEAAEKAB0WIQRMBWLx2o+linEPEBhIiqVupVDedgUCao2lIwAKCRBIiqVupVDe dueUD/wLioJCpD63aM4PfhBu02D6bGlCgNeLnTl+BbxPBddpEsrhdL4de0VWJM33v4V/L424A4T 1gc7WxWUcdP2ZVvfDCQ3SmCHwRa8Y0B7fQFc74bbSbWsHsjO4SWhqzKF8oes+LD7/z9Ag6EiBEE 11ErFDYeZNfEDFILJSjyir+iKXWZV9MlVMBwxiz2jvY5K7BOLzrfU0/Gnmlgt2urtGUnrh7ZMRp dxmVqByPwoIFlo/E3Z3rkR7juSU6Pp5b9ozSGlVgEEQTQuqNp6ZxDrM45aJ1zaV2RTw8uyTp80B ORBdNg2qgKdikehD440CQPAyKJoKGbQ/0d2Na9k+CCNeTWuS85mB1PyT3E/X70evmMPDKB4yyPT 07TQb4RXJ3zf3qugkD7uW5tSozDNhyh7UeDDXsGKjbuf5Xdax2jDFE/SRdGmVgpe3w8TqUpe1Rj fnHQQd7hE9q6NSjIWUqqQx0iIB+AV40Tiycte3r2DUP81+0mdPjC7x7/+LoaiSS23lFuyd/l98c l/iUpseBevWZMApBYR5dJBoGs+10NwVAa3gDq9g756vYX2mGBxpXdADTnAuHK6uEgBkgnHgIZHb 220NkqBLfdDWQ0/fYkm23pUV2J38NnkzjNL1oSgMcUR7KKjxBBqj2LqnEyGAoD3hUNAbTuQR5/E gUx5wr55Sr8daYA== X-Developer-Key: i=antikostya2@gmail.com; a=openpgp; fpr=4C0562F1DA8FA58A710F1018488AA56EA550DE76 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=2a00:1450:4864:20::12a; envelope-from=antikostya2@gmail.com; helo=mail-lf1-x12a.google.com X-Spam_score_int: -7 X-Spam_score: -0.8 X-Spam_bar: / X-Spam_report: (-0.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, FORGED_GMAIL_RCVD=1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Tue, 25 Aug 2026 10:47:29 -0400 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 @gmail.com) X-ZM-MESSAGEID: 1787669324030158500 Add remaining unsupported register bits to trace-encoder as read-only zero Signed-off-by: Konstantin Semichastnov --- hw/riscv/trace-encoder.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/hw/riscv/trace-encoder.c b/hw/riscv/trace-encoder.c index c36d205f50..58ed4b2646 100644 --- a/hw/riscv/trace-encoder.c +++ b/hw/riscv/trace-encoder.c @@ -68,6 +68,8 @@ REG32(TR_TE_CONTROL, 0x0) FIELD(TR_TE_CONTROL, EMPTY, 3, 1) FIELD(TR_TE_CONTROL, INST_MODE, 4, 3) FIELD(TR_TE_CONTROL, CONTEXT, 9, 1) + FIELD(TR_TE_CONTROL, INST_TRIG_ENABLE, 11, 1) + FIELD(TR_TE_CONTROL, INST_STALL_OR_OVERFLOW, 12, 1) FIELD(TR_TE_CONTROL, INST_STALL_ENA, 13, 1) FIELD(TR_TE_CONTROL, INHIBIT_SRC, 15, 1) FIELD(TR_TE_CONTROL, INST_SYNC_MODE, 16, 2) @@ -161,6 +163,8 @@ static uint64_t trencoder_te_ctrl_set_hardwire_vals(uin= t64_t input) { input =3D FIELD_DP32(input, TR_TE_CONTROL, INST_MODE, 0x6); input =3D FIELD_DP32(input, TR_TE_CONTROL, CONTEXT, 0); + input =3D FIELD_DP32(input, TR_TE_CONTROL, INST_TRIG_ENABLE, 0); + input =3D FIELD_DP32(input, TR_TE_CONTROL, INST_STALL_OR_OVERFLOW, 0); input =3D FIELD_DP32(input, TR_TE_CONTROL, INST_STALL_ENA, 0); input =3D FIELD_DP32(input, TR_TE_CONTROL, INHIBIT_SRC, 1); =20 --=20 2.43.0 From nobody Sat Sep 26 21:37:17 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787669366; cv=none; d=zohomail.com; s=zohoarc; b=TvXXXy38Ozp+aLdwgkVzAGvH++lvmMCeutGfkOSS+srYte5JGljyoGdetZgrqUk2mVrnWCsM0Gk+kZkv1JBaI+Nk7DagasIt/zztH2uF870WwjWpg7GApomUq4iHAx+4GqDTgJ14kvnL9bbHkotMtVPv9uGUAAHLhvgdnmYzZkQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787669366; h=Content-Type: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=OlODc9nuQVDAW70OI4oGX5kt5O8t1mabSFu826OaUbs=; b=hqwCrrxMSdfI29Xdb5QDdxE7lAM3wKYoo/acXyTcD2/YxTVDwmzI16r2u8U3T8K+yzxWQoFspQrkLECrd7kLMoYdBZ3vsOXyteQJ2gU+LnPGd4usy3GlO/6j/NcF/dvub06B4rvEeN+s6ySX/fTqepQAbCsQJqcdO6dFLIkS9OY= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787669366561885.3315729869237; Tue, 25 Aug 2026 07:49:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wysR1-0000im-OO; Tue, 25 Aug 2026 10:47:31 -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 1wys3I-00039I-Il for qemu-devel@nongnu.org; Tue, 25 Aug 2026 10:23:00 -0400 Received: from mail-lj1-x230.google.com ([2a00:1450:4864:20::230]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wys3G-0002Ho-LM for qemu-devel@nongnu.org; Tue, 25 Aug 2026 10:23:00 -0400 Received: by mail-lj1-x230.google.com with SMTP id 38308e7fff4ca-39c9a3acd40so37102601fa.3 for ; Tue, 25 Aug 2026 07:22:58 -0700 (PDT) Received: from [127.0.1.1] (broadband-90-154-73-22.ip.moscow.rt.ru. [90.154.73.22]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3a1c82f6b02sm22457551fa.41.2026.08.25.07.22.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 07:22:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787667777; x=1788272577; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=OlODc9nuQVDAW70OI4oGX5kt5O8t1mabSFu826OaUbs=; b=KNeH4+mCTiiUUjsQcwlYauWU9p4ow655Q7ATmWIBndgLzZE6f8RWLlCFtbcHyKc2CK OoawDf2thC2gQg3J1v5ew3fB8cLhVgnof37iphFiXvLfLulAdCjja5vmANFeS441WrWd WwjyBHmHx0YAlZL/RYeHCips/7HjOY86Od+uIjgucWmzugqGoCuUWyeZ4cOuiJI9S4DZ vIDkStfvosYDN7IW7KsCvh2dUctdovK5cUAN+D1musAWc20tCMvvBfw+DPTrBTmirRlk E60qL+aQhFECT7VXDOqYMQX5AvMuOv+CiyGyOSApAhD/qXPYx8chfasEVYUV64XS4KTY Hkxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787667777; x=1788272577; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=OlODc9nuQVDAW70OI4oGX5kt5O8t1mabSFu826OaUbs=; b=AQDqxb8K+mWY1rdN3kxWWNoO0PkF+HS6N7QI69OEFFR16Bo3oHigR6+ZizCyAJzMCh TRVhS54p9Be2lPI8NaxMqb52VrjtOpml2idPX1dzwu64+3dgMY2CLv54velFy9hjIjMc 9S/WlJ11PMhFV4UeK8GyMGkSLYP++XpWMOL9BeUBkIAtWbluSS7eVuEbDQBhQowjxIzD TyEb6GHCLqaIG5oB3VarOGzH0PRvNRAF+wFVVJLgr8bNQFAjTxAELDiiW+zqmHVJraeg eCEnTiqwTU3x6XqJ1R46RSr7BfeuFFAgt9PUETWrf3G1QYjSy3MQof1gzURbVLh83ltj lC7g== X-Gm-Message-State: AFuF++kAvQ1KB6uYDOHREW9zQdMvKyL9hxhbyBTkpgz9W0lKF3DZjYcu q3az1ECU6IuOQFdWxZYfwl9lCCoFWTdPvN1wcWUW+EPOH0nX0n3FB2auHMbu6n03 X-Gm-Gg: AR+sD13njW7pyKweJdQVoTZouhG7mUXlpMldTm89hnT89ehYG+5+bCCmOywr9+3R7n/ 8e0LWcci8TuInjkaSwxYZrnThjgKy6oGcA7EdUnVJ8w7iQjGaAjjIvSndh1w57pp9w/f3+7L9mg NpC4cv59tvm1VVTXwMmoxGUvi8ygXhxTHAeuysWpAZgl7t22FpvqKMi+NMZ4Wj9mPP4JTHpvPlM BaYBNtGIsChDQM9UJTfk0OsKO+OA37nXqDd8xqGa1TJ5E7QmPvoBCuZSQR6XWSSowo4soHmmdv8 fdXHuH4wp6lW3edtR3SlAIucAUxEaFjMmpbFgYJJ3hfm6TvdkQDkCrnioMOt1nWATFZOAB/SWug DEX2JktkVPTufyANjWO1ddeIBF+ZDHg483zv8tjcCy+fijNlUoyIjTdOp3D2uskMt2zWD4eQRjV 3rBXFCFsa6WOX2Vi2Xy7y9pkPVZI5iAolltmds6bD3VXFhUz+QLBpIFZ88jf/7lTy2bsGtO4x3Q KmgpDa29gxBAkmptUJEkhS+BVroDA== X-Received: by 2002:a2e:bea8:0:b0:3a1:ba8b:1e03 with SMTP id 38308e7fff4ca-3a1ba8b2167mr75376731fa.13.1787667776786; Tue, 25 Aug 2026 07:22:56 -0700 (PDT) From: Konstantin Semichastnov Date: Tue, 25 Aug 2026 17:22:36 +0300 Subject: [PATCH 12/13] hw/riscv/trace-encoder.c: remaining fields to ram-sink as RO values MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260825-upstream-ntrace_core-v1-12-f8be2f40d2fd@gmail.com> References: <20260825-upstream-ntrace_core-v1-0-f8be2f40d2fd@gmail.com> In-Reply-To: <20260825-upstream-ntrace_core-v1-0-f8be2f40d2fd@gmail.com> To: qemu-devel@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , qemu-riscv@nongnu.org, Fabiano Rosas , Laurent Vivier , Paolo Bonzini , Alexei Filippov , Konstantin Semichastnov X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2587; i=antikostya2@gmail.com; h=from:subject:message-id; bh=nChScbCmlZpsS/dciRJfDHDLa0YqwUCXTFFwrp2ZijI=; b=owEBbQKS/ZANAwAKAUiKpW6lUN52AcsmYgBqjaUj6HcUndJfplk/LTo0FbeXVuCR6RnY5n3LY Kk3f+59+yKJAjMEAAEKAB0WIQRMBWLx2o+linEPEBhIiqVupVDedgUCao2lIwAKCRBIiqVupVDe dhYgEACTt3kqi2YsFVkLO0ZE9FQGRlLHyIVX7a4viLh6UAcYxNboclk/Oc2lhSmWIkz7R1ELUem FpiFaMA0Mbkn6awRoDQQjfkHt/WEzLX2s8DzaMO47OkV1r/7sFetzZZbrgIcv5KU75NDze8rUyc J2MtqGNYkzhUrvyKazlJL3ODTLtzFtTQx3zyzCdRqnKe7702eIXjYvDrwm+5M0GzIeKUUEEgPta /2lNysUQxEdfJwkCZM4UfJAVWHZajTe+o5Ry6mNgJlbVuQi2fPOLo0riFOfPzBD+Nv3ESfZDD68 TB+IsXpD2iP8U6ZPKHudsVo3nUAgAFjZPh8+J/Vfw7y3GsCCeVplXN2pGNW22U64jt7vMc0nJB0 JAyn9adaEd3e0W8xZG3E19Ng5oWzR0us/SP1HxYZkoVZA6QZLLNsMo0/derHaDChSrhCGgbsc4c YEB5LakquEytaQy3PtG15G2Nm4LiWprNgmUJYgsM9jQn0vDz/Q7cat0ky1Ce88jfIsLz/ub7q/y lHJ+HlpaD5Z8iECor83WTO9hIEBNZzxEnuKFVAUjOhutzj9aDkf8RNXZQySi+9BAwMO3msyKKq2 w/dYdwx6P/BwAerQWlUGELWtVvZN4GiP9CcSfkfqNvg5qCFYlA7CgqdT+Fq9JuOlCuXAafja98G GPr/wgWATQSK0tg== X-Developer-Key: i=antikostya2@gmail.com; a=openpgp; fpr=4C0562F1DA8FA58A710F1018488AA56EA550DE76 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=2a00:1450:4864:20::230; envelope-from=antikostya2@gmail.com; helo=mail-lj1-x230.google.com X-Spam_score_int: -7 X-Spam_score: -0.8 X-Spam_bar: / X-Spam_report: (-0.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, FORGED_GMAIL_RCVD=1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Tue, 25 Aug 2026 10:47:29 -0400 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 @gmail.com) X-ZM-MESSAGEID: 1787669368351158500 - set trRamActive RO =3D 1 (always active) - set trRamEnable RO =3D 1 (always enabled) - set trRamMode RO =3D 1 (only SMEM mode) - set trRamStopOnWrap RO =3D 0 (not supported) - set trRamMemFormat RO =3D 0 (memory formatted as plain bytes) - set trRamAsyncFreq RO =3D 0 (alignment synchronization packets disabled) - set trRamHasSMEM =3D 1 (RAM sink supports SMEM) Signed-off-by: Konstantin Semichastnov --- hw/riscv/trace-ram-sink.c | 22 +++++++++++++++++++++- hw/riscv/trace-ram-sink.h | 1 + 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/hw/riscv/trace-ram-sink.c b/hw/riscv/trace-ram-sink.c index c273335fec..03ffa9caae 100644 --- a/hw/riscv/trace-ram-sink.c +++ b/hw/riscv/trace-ram-sink.c @@ -40,13 +40,33 @@ R_TR_RAM_IMPL_HAS_SRAM_MASK | \ R_TR_RAM_IMPL_HAS_SMEM_MASK) =20 -#define R_TR_RAM_IMPL_RESET (BIT(0) | 0x9 << 8) +#define R_TR_RAM_IMPL_RESET (BIT(0) | 0x9 << 8 | R_TR_RAM_IMPL_HAS_SMEM_MA= SK) + +static uint64_t tr_ramsink_ctrl_set_hardwire_vals(uint64_t input) +{ + input =3D FIELD_DP32(input, TR_RAM_CONTROL, ACTIVE, 1); + input =3D FIELD_DP32(input, TR_RAM_CONTROL, ENABLE, 1); + input =3D FIELD_DP32(input, TR_RAM_CONTROL, MODE, 1); + input =3D FIELD_DP32(input, TR_RAM_CONTROL, STOP_ON_WRAP, 0); + input =3D FIELD_DP32(input, TR_RAM_CONTROL, MEM_FORMAT, 0); + input =3D FIELD_DP32(input, TR_RAM_CONTROL, ASYNC_FREQ, 0); + + return input; +} + +static uint64_t tr_ramsink_ctrl_prew(RegisterInfo *reg, uint64_t val) +{ + val =3D tr_ramsink_ctrl_set_hardwire_vals(val); + + return val; +} =20 static RegisterAccessInfo tr_ramsink_regs_info[] =3D { { .name =3D "TR_RAM_CONTROL", .addr =3D A_TR_RAM_CONTROL, .rsvd =3D R_TR_RAM_CONTROL_RSVP_BITS, .reset =3D R_TR_RAM_CONTROL_RESET, .ro =3D R_TR_RAM_CONTROL_RO_BITS, + .pre_write =3D tr_ramsink_ctrl_prew, }, { .name =3D "TR_RAM_IMPL", .addr =3D A_TR_RAM_IMPL, .rsvd =3D R_TR_RAM_IMPL_RSVP_BITS, diff --git a/hw/riscv/trace-ram-sink.h b/hw/riscv/trace-ram-sink.h index 0a7225642c..e516b73e00 100644 --- a/hw/riscv/trace-ram-sink.h +++ b/hw/riscv/trace-ram-sink.h @@ -28,6 +28,7 @@ REG32(TR_RAM_CONTROL, 0x0) FIELD(TR_RAM_CONTROL, MODE, 4, 1) FIELD(TR_RAM_CONTROL, STOP_ON_WRAP, 8, 1) FIELD(TR_RAM_CONTROL, MEM_FORMAT, 9, 2) + FIELD(TR_RAM_CONTROL, ASYNC_FREQ, 12, 3) /* reserved bits */ FIELD(TR_RAM_CONTROL, RSVP1, 2, 1) FIELD(TR_RAM_CONTROL, RSVP2, 5, 3) --=20 2.43.0 From nobody Sat Sep 26 21:37:17 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787679750; cv=none; d=zohomail.com; s=zohoarc; b=FWcHF6HWYzw9O/sV3lMVpJy0/bHso80TuVYuFzR4t+CtYn7j/6yTRL4p++zXDJ51CtiFTHCH+5t+GtTn9ctBaIIxyBr1MV5rYegMm/6iEelnsd1t6jtlWIdTOkNyE8lcPsBQAoN1WRiuBfQ+UwuTY7dhlnw2n03ZE+FNUZK8EpU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787679750; h=Content-Type: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=6hFzhnXZVfwVXKavQF9nMPh7v7vdOVoePn53autvXt4=; b=RtOYzP+ODK0TpQvkOzARWi3be2DT7rRYSqgHBvy5Xsg9RAqm28kRxKPKDYBMXBRYgEoJpOJjk2JYYz+gvGKR6tqoxNGB3TjvB7n5kPFQKUAi6sGt8FybwfbqEgGWNmL6sbSyYDbNTfmxNth5yWLHPiBBKrILP2qA3f2iwQGXsvs= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787679750888377.26252312832094; Tue, 25 Aug 2026 10:42:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyv9L-0002OT-BH; Tue, 25 Aug 2026 13:41:27 -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 1wyv9J-0002Nk-IJ for qemu-devel@nongnu.org; Tue, 25 Aug 2026 13:41:25 -0400 Received: from mail-lf1-x129.google.com ([2a00:1450:4864:20::129]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyv9E-0000gq-DS for qemu-devel@nongnu.org; Tue, 25 Aug 2026 13:41:22 -0400 Received: by mail-lf1-x129.google.com with SMTP id 2adb3069b0e04-5b48ced973dso13235e87.1 for ; Tue, 25 Aug 2026 10:41:20 -0700 (PDT) Received: from localhost (broadband-90-154-73-22.ip.moscow.rt.ru. [90.154.73.22]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5b4a41539a6sm85328e87.3.2026.08.25.10.41.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 10:41:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787679679; x=1788284479; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=6hFzhnXZVfwVXKavQF9nMPh7v7vdOVoePn53autvXt4=; b=c0BjsoUyB9iSEOrEq0fGA2tHMUaXGWD08crPAThLPl5IRx5Z6CgfPUx6jn1F5xQTMF hwXSsCBelQ4aH2JBqkUjZ4cy9W9V/aWmNv2hMvpBcc/a2/hj7CyBfwXuKocF+OihpEkr osh1URz2+MMriWzhRktdXrKYWXjqNU6uzYpkwzUYlsunR8V50Zgw4SIcw2oxXeRuIbu3 CdeehQThX/5cpX5yd0F3XyFkcbo3Fx1oHAgHdGbFADF3LqnnmURuVmzGnVvTcgCHmZ5N Dh8zLrO3d0Vm6q20EqNHJz542Hzln1O19B72oZY4GTDoZ2nW0ZtamOQEd5DWm6VoADXh LpEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787679679; x=1788284479; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=6hFzhnXZVfwVXKavQF9nMPh7v7vdOVoePn53autvXt4=; b=ZdjcMd0ShmYHr1MzoRCWfCyRKIxucF/iIAJJjTmSn0IdvSFQWsYz873sCOg4lgLvZq l9eLsMx5h83EytEhxe75s4ySmEwhF1GnNhnCfKTRll28Wl34yyE6C1UX3o3+D4lhu1Ge keEdRi4b0rt7IRD/2C7Y1PsKwyHCKp8gTMfZ2TylbeZj9d7I60i/64ckPZ/+J6zfdV7n CPJebErnRwVokd3Ete8a1PHhpt62OC4O2qxcDEivxjK+Y4WjSuK8NTYOG/m17qsVDgOx uvOteCMsuLLyZQaSd+JUQqaXOHcNQoUSm31kv+yc/X+g9PPuTPShoQNSdt4asuYMofOO 8J7Q== X-Gm-Message-State: AFuF++lUcWtjJfJvDEsvy3MMAEQh3V06l6V0lemtLeOy0wUZ3saoIoZo cYkq3Blcjo5p38eOQXX6GS2QyT5lCi8YYuegSbD/r84MHDwyt3teQBL08aJrvV7/ X-Gm-Gg: AR+sD10OStkzR8BAsHZsAHwRRFaBvXKBfDa48sUjNt6vMCESG6DoljBUzktNkoUg2rf MzTjD0Ho7czGEfV4Yu4CWZvqt5WK3kFKbs4jfvEhzNh3YPK8+m+NJPLGjX75k0IM9n/XXooYdc2 YG1t9G4Vman7tdgy8pXdtSAiKTX/YAJLayJp4p4Mtg5QsY2WeML8ifoS6Xsbd28Mr/GT565+S0E 5IRBfgGeCxgG6BJHcYGx6mNzhdDyrrlbNVKmztzv0IbpqO1uYmOn2m9tX+/mkGOeoCFdym+6vaQ iZ6TWAuKTsAxDwSzqGh7n2oqZu1mShyYAxS5bqb92TFbIPGOfKqDXs+P21QjVuM+DPlRoOwv/f4 cBpuI1bpMkN2jF2HNZUbbusOs3CxPpMvhbQhYzBdOPo94zSU41gpUkKsrTPoLq/vBHD0BzGzmtb q3HL0TQUSgmZEdhwNuh49aiAQ/nWJZs4d8RG5a8DTBilxSdfeyXW3m2hZpw58dA+tSTWSE549vh JhRv9LQIhiGnmHPCTSBwOnMaDs= X-Received: by 2002:a05:6512:a34e:b0:5b1:59ec:2452 with SMTP id 2adb3069b0e04-5b48421b64cmr7627712e87.9.1787679678283; Tue, 25 Aug 2026 10:41:18 -0700 (PDT) From: Konstantin Semichastnov Date: Tue, 25 Aug 2026 17:31:23 +0300 Subject: [PATCH 13/13] hw/riscv/trace-encoder: refactor register accesses MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260825-upstream-ntrace_core-v1-13-f8be2f40d2fd@gmail.com> References: <20260825-upstream-ntrace_core-v1-0-f8be2f40d2fd@gmail.com> In-Reply-To: <20260825-upstream-ntrace_core-v1-0-f8be2f40d2fd@gmail.com> To: qemu-devel@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , qemu-riscv@nongnu.org, Fabiano Rosas , Laurent Vivier , Paolo Bonzini , Alexei Filippov , Konstantin Semichastnov X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7145; i=antikostya2@gmail.com; h=from:subject:message-id; bh=VPZj6qaybPqAxN2q+RWa/rzihxKphwFDuAjBCpW3N4g=; b=owEBbQKS/ZANAwAKAUiKpW6lUN52AcsmYgBqjacuLTYbIdJTx6pHRQiNYcvPGA/zWhVRT/1tV 5GuMMYYf+CJAjMEAAEKAB0WIQRMBWLx2o+linEPEBhIiqVupVDedgUCao2nLgAKCRBIiqVupVDe dnttEACQwVvAawZyb7wzL/aZKMkYQ0raQAeAM2VnkB5HwBFuKhZrsWfDPfmLSAJJmLZyJ69Gp+x lDMfoKfsvbflh5hUt55b1B/gfUhn3Ic8PGXlTCF83mr5+AJ9JhZLUZ+Emy/yHkoUDbDU1ZMjNem xW8xaLpqL6SSc6SK3C0v5GE5pGIOTpgXqAaL8PWqxlmczna5TtJIpKFQ3RqzqbNgcjyuOIwr58Q DY8pF5WDyAFm1esETdJmY2K0DMkbZAtknS0cSGUg2wO3YK85bHSNuV4I0+tHTxihlceyc4dWL5s 2QNTCgcD3oC+ntV++StyxSrU8WErR4Pw8HHeGnUf7KR+UlroyTWu2dSHQnmt9xux2Hmd3Jr5YZc Dtm+jge83rfVBxB2UN1KblLn9fyGo4JxlLnPXQjzCn12A1pnKFfuXibPNQUvgxAYmLN49h+ZtHo Wc9CRI7Kglcl8zNCnvnPrfmwo89bzT8HyI4Cuil6hSWUdPFrYC1/QzgpJdvUETVaSpE83O3INDQ djdsbXKiM5uIxMc01Umg4igBw3nnnQK01zO04g1DbYMD+goS15A3Hv+n3XqIhnLbdZfm/mc8Kcv VA1wS8DuniDoN6lAEz5Odsf7FZTHUL4xtC0uUPeVA8f+ABBIT5zIIYkz7doCikZVX6tmkUJ5PMe bQzStYKAxF4xJdA== X-Developer-Key: i=antikostya2@gmail.com; a=openpgp; fpr=4C0562F1DA8FA58A710F1018488AA56EA550DE76 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=2a00:1450:4864:20::129; envelope-from=antikostya2@gmail.com; helo=mail-lf1-x129.google.com X-Spam_score_int: -2 X-Spam_score: -0.3 X-Spam_bar: / X-Spam_report: (-0.3 / 5.0 requ) BAYES_00=-1.9, DATE_IN_PAST_03_06=1.592, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1787679755282158500 Refactor pre-write and post-write trace register accesses. Remove unused `enabled` flag. Signed-off-by: Konstantin Semichastnov --- hw/riscv/trace-encoder.c | 79 +++++++++++++++++++++-----------------------= ---- hw/riscv/trace-encoder.h | 9 +++--- 2 files changed, 39 insertions(+), 49 deletions(-) diff --git a/hw/riscv/trace-encoder.c b/hw/riscv/trace-encoder.c index 58ed4b2646..7fd5c3a578 100644 --- a/hw/riscv/trace-encoder.c +++ b/hw/riscv/trace-encoder.c @@ -161,6 +161,7 @@ static hwaddr trencoder_read_ramsink_ramlimit(TraceEnco= der *te) static uint64_t trencoder_te_ctrl_set_hardwire_vals(uint64_t input) { + input =3D FIELD_DP32(input, TR_TE_CONTROL, EMPTY, 1); input =3D FIELD_DP32(input, TR_TE_CONTROL, INST_MODE, 0x6); input =3D FIELD_DP32(input, TR_TE_CONTROL, CONTEXT, 0); input =3D FIELD_DP32(input, TR_TE_CONTROL, INST_TRIG_ENABLE, 0); @@ -179,6 +180,7 @@ static uint64_t trencoder_te_ctrl_prew(RegisterInfo *re= g, uint64_t val) { TraceEncoder *te =3D TRACE_ENCODER(reg->opaque); uint32_t trTeActive =3D ARRAY_FIELD_EX32(te->regs, TR_TE_CONTROL, ACTI= VE); + uint32_t trTeEnable =3D ARRAY_FIELD_EX32(te->regs, TR_TE_CONTROL, ENAB= LE); uint32_t trTeInstTracing =3D ARRAY_FIELD_EX32(te->regs, TR_TE_CONTROL, INST_TRACING); uint32_t trTeFormat =3D ARRAY_FIELD_EX32(te->regs, TR_TE_CONTROL, FORM= AT); @@ -187,40 +189,30 @@ static uint64_t trencoder_te_ctrl_prew(RegisterInfo *= reg, uint64_t val) val =3D trencoder_te_ctrl_set_hardwire_vals(val); if (!trTeActive) { - /* - * 11.2 Reset and discovery, table 58, trTeControl =3D 0x1 - * means "Release from reset and set all defaults." Do - * that only if trTeActive is 0. - */ - if (val =3D=3D 0x1) { - val =3D FIELD_DP32(val, TR_TE_CONTROL, EMPTY, 1); - - return val; - } - /* * 11.3 Enabling and Disabling hints that the device must * be activated first (trTeActive =3D 1), then enabled. * Do not enable the device if it's not active * beforehand. */ - temp =3D FIELD_EX32(val, TR_TE_CONTROL, ENABLE); - if (temp) { + if (FIELD_EX32(val, TR_TE_CONTROL, ENABLE)) { val =3D FIELD_DP32(val, TR_TE_CONTROL, ENABLE, 0); } } - /* - * Do not allow inst tracing to start if the device isn't - * already enabled. Do not allow enabling the devince and - * and enable tracing at the same time. - */ - if (!te->enabled && trTeInstTracing) { - val =3D FIELD_DP32(val, TR_TE_CONTROL, INST_TRACING, 0); + if (FIELD_EX32(val, TR_TE_CONTROL, INST_TRACING)) { + /* + * Do not allow inst tracing to start if the device isn't + * already enabled. Do not allow enabling the device and + * and enable tracing at the same time. + */ + if (!trTeEnable) { + val =3D FIELD_DP32(val, TR_TE_CONTROL, INST_TRACING, 0); + } } temp =3D FIELD_EX32(val, TR_TE_CONTROL, FORMAT); - if (te->trace_running) { + if (trTeInstTracing) { /* Do not allow to change tracing format while tracing is enabled.= */ val =3D FIELD_DP32(val, TR_TE_CONTROL, FORMAT, trTeFormat); } else if (temp !=3D TR_TE_CONTROL_FORMAT_ETRACE && @@ -232,6 +224,15 @@ static uint64_t trencoder_te_ctrl_prew(RegisterInfo *r= eg, uint64_t val) val =3D FIELD_DP32(val, TR_TE_CONTROL, FORMAT, trTeFormat); } + if (!FIELD_EX32(val, TR_TE_CONTROL, ACTIVE)) { + /* Disable trace encoder if it becoming not active */ + val =3D FIELD_DP32(val, TR_TE_CONTROL, ENABLE, 0); + } + if (!FIELD_EX32(val, TR_TE_CONTROL, ENABLE)) { + /* Disable tracing if trace incoder being disabled */ + val =3D FIELD_DP32(val, TR_TE_CONTROL, INST_TRACING, 0); + } + return val; } @@ -263,35 +264,27 @@ static void trencoder_te_ctrl_postw(RegisterInfo *reg= , uint64_t val) RISCVCPU *cpu =3D te->cpu; CPURISCVState *env =3D &cpu->env; + bool trace_disabled =3D !trTeActive || !trTeEnable || !trTeInstTracing; - if (te->ntrace && te->enabled) { - if (!trTeActive || !trTeEnable || !trTeInstTracing) { - uint32_t inst_len =3D get_inst_len_at(env->pc); + if (te->trace_running && trace_disabled) { + /* Stopping trace. */ + /* TODO: this should cause a pending trace data flush. */ + te->trace_next_insn =3D false; + if (te->ntrace) { + uint32_t inst_len =3D get_inst_len_at(env->pc); trencoder_send_prog_trace_correlation(OBJECT(te), env->pc, ins= t_len, CORRELATION_TRACE_DISABL= ED); } } - if (!trTeActive) { - te->enabled =3D false; - te->trace_running =3D false; - te->trace_next_insn =3D false; - - env->trace_running =3D false; - return; - } - - if (te->enabled && !trTeEnable) { - /* TODO: this should cause a pending trace data flush. */ - } - - te->enabled =3D trTeEnable ? true : false; - te->ntrace =3D (trTeFormat =3D=3D TR_TE_CONTROL_FORMAT_NTRACE); if (!te->trace_running && trTeInstTracing) { /* Starting trace. Ask the CPU for the first trace insn */ + te->ramsink_ramstart =3D trencoder_read_ramsink_writep(te); + te->ramsink_ramlimit =3D trencoder_read_ramsink_ramlimit(te); + if (te->ntrace) { /* * N-Trace require to trace from very first instruction, @@ -305,13 +298,10 @@ static void trencoder_te_ctrl_postw(RegisterInfo *reg= , uint64_t val) } else { te->trace_next_insn =3D true; } - - te->ramsink_ramstart =3D trencoder_read_ramsink_writep(te); - te->ramsink_ramlimit =3D trencoder_read_ramsink_ramlimit(te); } - te->trace_running =3D trTeInstTracing ? true : false; - env->trace_running =3D te->trace_running; + te->trace_running =3D trTeInstTracing; + env->trace_running =3D trTeInstTracing; } static RegisterAccessInfo trencoder_regs_info[] =3D { @@ -380,7 +370,6 @@ static void trencoder_reset(DeviceState *dev) register_reset(&te->regs_info[i]); } - te->enabled =3D false; te->trace_running =3D false; te->trace_next_insn =3D false; te->ntrace =3D false; diff --git a/hw/riscv/trace-encoder.h b/hw/riscv/trace-encoder.h index 55d53c2582..b3cdbf9374 100644 --- a/hw/riscv/trace-encoder.h +++ b/hw/riscv/trace-encoder.h @@ -39,13 +39,14 @@ struct TraceEncoder { uint32_t regs[TRACE_R_MAX]; RegisterInfo regs_info[TRACE_R_MAX]; - bool updiscon_pending; - - bool enabled; + bool ntrace; bool trace_running; + + /* etrace specific */ + bool updiscon_pending; bool trace_next_insn; - bool ntrace; + /* ntrace specific */ uint64_t last_addr_reported; uint64_t last_icnt_reset; uint64_t icnt_accumulated; -- 2.43.0