From nobody Wed Jan 7 09:26:24 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1767034143; cv=none; d=zohomail.com; s=zohoarc; b=JlGkfNljaea0O21/J0mX0dO+1Dgpor9VPibYENTW5M5dRJivsiHmfzFFuZf+GtzFAN8B4OhuuzSuQM9Usx9Wjik+9UexCKDkcxJ/bIX9BFRIMFCzL1uQSYTcCeTrMReGF4LmWIB07WdTgf/LTsOY41BOFhWRJ+cXbieetmX/hAI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767034143; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=M6VOV1+WA0NFLt3+OOv0t50IdwgHUgxMFm+1IFeKges=; b=lS5XfsWJlxVnJhQMcfcbe9iz2IDhtiQIaEvj1WEfjFUOtDpNt+B8j5VxHjGoCBycBFXx3tDtcXErdjvYlvvWpIEutiKosv/rWf34uEzIvQn3s+apFGGH9OfInQmgGhPLHkVuEKNv8Yu1kaqoJrNABlB8BWE7q6KG6rOYRbCkevE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 176703414354046.496220035764395; Mon, 29 Dec 2025 10:49:03 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaIIS-0003ta-Sk; Mon, 29 Dec 2025 13:48:48 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIH7-0003eT-Tc for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:47:28 -0500 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIH5-0008CO-Eo for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:47:25 -0500 Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BTA2gWY3289552 for ; Mon, 29 Dec 2025 18:47:20 GMT Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ba4tnwbq5-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 29 Dec 2025 18:47:20 +0000 (GMT) Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2a0d43fcb2fso312893595ad.3 for ; Mon, 29 Dec 2025 10:47:19 -0800 (PST) Received: from grind.dc1.ventanamicro.com ([187.101.184.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a2f3c82aa8sm282198705ad.31.2025.12.29.10.47.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Dec 2025 10:47:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=M6VOV1+WA0N FLt3+OOv0t50IdwgHUgxMFm+1IFeKges=; b=kN5feR1A6XGNY+3wk1wsjvS+eD5 7dS8cqX+fltJNMks2f5pTyEYfynKwGhz8D4fMAwmnMaFLO1fVWMr8QkhIWKqdNbb qM/rvt+Yhxo+nNMvWYBdBMec6jviXS9Xg+fTf7/0ARCszuNA8Y3qIxnTNW3SDg1g 7ABXb3VwWP+XJYwvDVjNgT9anddbG5vL5oI2lXIE7IXabeVWwrGq21VP6waeptyd XuKqGqewrkqa2ONuStQzNKMMiWfdG0UBm0iPKlxkII8iFAh+TohvFG+lQa8HJnPH oY02gzx/uGZWcU0dRYVXcCCyph59nKerRkKXwJLCxFlDN2+Xr5mhJ8p9DlQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767034039; x=1767638839; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=M6VOV1+WA0NFLt3+OOv0t50IdwgHUgxMFm+1IFeKges=; b=gDnqhUR6OO6nXGl+UsUvLh7xjVqYod/if1qxteIsr6KPZb7xqIyPZEaLRmRNhVmLnd 5oJiWVt2gAYP9838i/T0RBVu+eZYKa3JUs64BZP7vuOOiyg6A82yA4wYftevFMYk4oH0 BJfBbxhrNXvTIXc4QRLGGX+tP05BmW1SGkKHoYszFMhixV07aH3Kottj7r0pMUHlvjNM hJxqCA39MFPYeylSkpknU4EheuxCISLIeVKyJeppRGqTEH2bb474TEnQZNG9CegWzcrH is2dcOa5I0/gt2RIKahvFLRX5ciH3ftnvXO5Nx6gQfptsz3CnJOGYSnjdsg0cmLUwYbo bEig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767034039; x=1767638839; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=M6VOV1+WA0NFLt3+OOv0t50IdwgHUgxMFm+1IFeKges=; b=mPvQxxEpjTSGBudrOyhsQh2gvc1cfePIboFF6sgZLzuNRinhrqYzbUOxjUzH1USnlc 4Rf9+H3GySups8isXmA11mb4qgnte4GpPrK7a7ZBjt5ULs8SVZ0RBSqMzAZZqdzvRz7R znhRWZD7nHjDO/5m/rql06Yof9CLBxl9GeJF56U/IV8eXONOyo81GJE0hHOr5rFTzqgI oq5glYHZ87Pq84OhUERo5ZQGzlYFaGN0aoDN4A44dUi3xozbpMGSK6EycV/kcudctI2g nJ1HHiH4rYjLm06HQ8ZmjtCKVTq2CRMrxTFTGu82y9iswFev3C+VHL7HZB5juNudJEw7 NFgA== X-Gm-Message-State: AOJu0YwQPp4QYLaP6HopD54E8qURz70frGsMnGOAO5XsSQx5hD7jIOen 2KnPntqOZ5arsRoyPdJLTcEwFheHQd0mYSPGKrBMcYL4kohMi7eRkySZ4x2d2jLh6KY7DzSHcRm 7CnxdUtYV1x/fRUzyIMrmgI4TPsV68L43cf08ummind5tsQvh2w5pMyVjZkX2OMlmYQ== X-Gm-Gg: AY/fxX5ePYQpe5KL6UhZkSybKMGfShvGMGH7QXiEnjcyvVNpCyB2xqXRdjAATNYmm8V 9RC5HpzaYyJTzkxWo6J3mEw8kKROIL02kTlxNsimdqLqQGfosPaGePdlN55konftCGWHep8j9tQ UG7/j9T6h2Trx3gFueRYIdCPgvvjT3bltwntLfnLWoXl5rEsL4nM8VaJKUiQemcLIpWpL/3PO6C bPagON8cyEsOwatWrK+xIdTHqKKMAscvnhei0s0iCqlqrvO/lhD+MB3HByY5O3ysNxyMFRI2WHb 3RKlzx/TrKApE5Y2ZO42ReqyH0yWYZOWeh0mpgkpWIVvb+q7PGDCxSoX7J/qz4kIOc84HS/7LLz oFAvS9ertjm8GjGCWN9E1Jy4pyLJyl4NqLLiKlNPiESQdRrQ= X-Received: by 2002:a17:902:e5d1:b0:264:70da:7a3b with SMTP id d9443c01a7336-2a2f293d10bmr348023325ad.49.1767034038520; Mon, 29 Dec 2025 10:47:18 -0800 (PST) X-Google-Smtp-Source: AGHT+IGRSWvnJiC8SxdKqVSBSbWIT1QcuLPj0pPz9N/8jzC/oTVvXdzkglN3CX/9g8gJPqSfBjo4hg== X-Received: by 2002:a17:902:e5d1:b0:264:70da:7a3b with SMTP id d9443c01a7336-2a2f293d10bmr348023015ad.49.1767034037950; Mon, 29 Dec 2025 10:47:17 -0800 (PST) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, palmer@dabbelt.com, Daniel Henrique Barboza Subject: [PATCH v3 01/17] hw/riscv: Trace Encoder initial impl Date: Mon, 29 Dec 2025 15:46:40 -0300 Message-ID: <20251229184656.2224369-2-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> References: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=G+YR0tk5 c=1 sm=1 tr=0 ts=6952ccb8 cx=c_pps a=JL+w9abYAAE89/QcEU+0QA==:117 a=cW5wcbexNO3A0Ml9TiDm9w==:17 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=NEAV23lmAAAA:8 a=EUspDBNiAAAA:8 a=G-s4_XRuKYtQtBmkiawA:9 a=324X-CrmTo6CU4MGRt3R:22 X-Proofpoint-GUID: e2vHro2mX607mEV-Tp6VOHNVOvCJamKC X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDE3MiBTYWx0ZWRfXzC+g0TdIQtrZ Uvk220NzkQxwY7lzwoqlAYI8IQEZsCIQVEISwKpVVuWNH6c+4mb12KRxyBN3E6s3Bg9jIIWo5I2 KBvVRulHy8kr0uSxD0LZNCbSW+9809Kw00ufBTclLoWgbofZQ11395NkOWhCOEuOtOg7NXNKxA0 /BCM3lkhUTfnfTJ92tSy8ujm7cwA3WBWFTdNMiJYv91m+3bOtkiDon05pZXDIVNNXxjRMzpbbG/ PSIKUX4gnPi6obCzvQNixduZDGUiyHJhOZHGSpOXgtpiunhwP07wUXrPo64XeCtrYGA1BfPMVSL pvUCObpEGv6IVm5l0TwWaHq+djy1EMTLj8LH4jiqSU+kqDamEJECK1y5QgVWGFbxPrByKRi7MLJ 2ZiORHugYSujl+MyxTSvg0UfGd/d/mxTuRguEagVHadrT14hwD9mZ863I1MY9EK7UE7moQGs15z cGDdfrhE3A8+wUARIgw== X-Proofpoint-ORIG-GUID: e2vHro2mX607mEV-Tp6VOHNVOvCJamKC X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-29_06,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 phishscore=0 bulkscore=0 adultscore=0 spamscore=0 lowpriorityscore=0 suspectscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512290172 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1767034146252158500 Content-Type: text/plain; charset="utf-8" The Trace Encoder is a hardware module that interacts with a CPU, gathering execution information (a.k.a instruction delta trace), and send it downstream to other storage components such as a RAM Sink (a RAM storage). This trace info can then be read via software (e.g. perf) to reproduce the behavior of a given binary that ran in the CPU. This implementation is based on the Efficient Trace for RISC-V [1] and RISC-V Trace Control Interface Specification [2]. It's not intended to implement all spec features: the idea is to provide a base where we can add extra features on demand. We'll get back to the instruction delta trace and how we'll instrument TCG to produce it later. For now we'll set the minimal components to get the basic framework running. This Trace Encoder impl has just the minimal bits specified in [2], section "Minimal Implementation". RO and RSVP bits are taken verbatim from [2] without considering what we're actually going to support. The base impl is heavily inspired by the XLNZ-ZDMA device w.r.t the usage of the RegisterInfo and register.h framework. Discovery of the Trace Encoder will be made via fdt, a single entry per CPU. We'll connect each Trace Encoder to its CPU in the 'virt' board later. [1] https://github.com/riscv-non-isa/riscv-trace-spec/releases/download/v2.= 0-20250616/riscv-trace-spec-asciidoc.pdf [2] https://github.com/riscv-non-isa/tg-nexus-trace/releases/download/1.0_R= atified/RISC-V-Trace-Control-Interface.pdf Signed-off-by: Daniel Henrique Barboza --- hw/riscv/Kconfig | 5 + hw/riscv/meson.build | 1 + hw/riscv/trace-encoder.c | 216 +++++++++++++++++++++++++++++++++++++++ hw/riscv/trace-encoder.h | 42 ++++++++ hw/riscv/trace-events | 4 + 5 files changed, 268 insertions(+) create mode 100644 hw/riscv/trace-encoder.c create mode 100644 hw/riscv/trace-encoder.h diff --git a/hw/riscv/Kconfig b/hw/riscv/Kconfig index fc9c35bd98..2de0892496 100644 --- a/hw/riscv/Kconfig +++ b/hw/riscv/Kconfig @@ -7,6 +7,10 @@ config RISCV_NUMA config IBEX bool =20 +config RISCV_TRACE + bool + select REGISTER + # RISC-V machines in alphabetical order =20 config MICROCHIP_PFSOC @@ -68,6 +72,7 @@ config RISCV_VIRT select PLATFORM_BUS select ACPI select ACPI_PCI + select RISCV_TRACE =20 config SHAKTI_C bool diff --git a/hw/riscv/meson.build b/hw/riscv/meson.build index 2a8d5b136c..b4a9988a62 100644 --- a/hw/riscv/meson.build +++ b/hw/riscv/meson.build @@ -14,5 +14,6 @@ riscv_ss.add(when: 'CONFIG_RISCV_IOMMU', if_true: files( 'riscv-iommu.c', 'riscv-iommu-pci.c', 'riscv-iommu-sys.c', 'riscv-iommu-h= pm.c')) riscv_ss.add(when: 'CONFIG_MICROBLAZE_V', if_true: files('microblaze-v-gen= eric.c')) riscv_ss.add(when: 'CONFIG_XIANGSHAN_KUNMINGHU', if_true: files('xiangshan= _kmh.c')) +riscv_ss.add(when: 'CONFIG_RISCV_TRACE', if_true: files('trace-encoder.c')) =20 hw_arch +=3D {'riscv': riscv_ss} diff --git a/hw/riscv/trace-encoder.c b/hw/riscv/trace-encoder.c new file mode 100644 index 0000000000..6df8ba8e84 --- /dev/null +++ b/hw/riscv/trace-encoder.c @@ -0,0 +1,216 @@ +/* + * Emulation of a RISC-V Trace Encoder + * + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" + +#include "trace-encoder.h" +#include "hw/irq.h" +#include "hw/qdev-properties.h" +#include "migration/vmstate.h" +#include "qemu/bitops.h" +#include "qemu/log.h" +#include "qemu/module.h" +#include "qapi/error.h" +#include "trace.h" +#include "system/device_tree.h" +#include "hw/register.h" +#include "cpu.h" + +/* + * trTeControl register fields + */ +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, EMPTY, 3, 1) + FIELD(TR_TE_CONTROL, INST_MODE, 4, 3) + FIELD(TR_TE_CONTROL, INST_SYNC_MODE, 16, 2) + FIELD(TR_TE_CONTROL, FORMAT, 24, 3) + /* reserved bits */ + FIELD(TR_TE_CONTROL, RSVP1, 7, 2) + FIELD(TR_TE_CONTROL, RSVP2, 10, 1) + FIELD(TR_TE_CONTROL, RSVP3, 14, 1) + FIELD(TR_TE_CONTROL, RSVP4, 18, 2) + FIELD(TR_TE_CONTROL, RSVP5, 27, 5) + +#define R_TR_TE_CONTROL_RSVP_BITS (MAKE_64BIT_MASK(32, 32) | \ + R_TR_TE_CONTROL_RSVP1_MASK | \ + R_TR_TE_CONTROL_RSVP2_MASK | \ + R_TR_TE_CONTROL_RSVP3_MASK | \ + R_TR_TE_CONTROL_RSVP4_MASK | \ + R_TR_TE_CONTROL_RSVP5_MASK) + +/* trTeControlEmpty is the only RO field and reset value */ +#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 + +/* + * trTeImpl register fields + */ +REG32(TR_TE_IMPL, 0x4) + FIELD(TR_TE_IMPL, VER_MAJOR, 0, 4) + FIELD(TR_TE_IMPL, VER_MINOR, 4, 4) + FIELD(TR_TE_IMPL, COMP_TYPE, 8, 4) + FIELD(TR_TE_IMPL, PROTOCOL_MAJOR, 16, 4) + FIELD(TR_TE_IMPL, PROTOCOL_MINOR, 20, 4) + /* reserved bits */ + FIELD(TR_TE_IMPL, RSVP1, 12, 4) + FIELD(TR_TE_IMPL, RSVP2, 24, 8) + +#define R_TR_TE_IMPL_RSVP_BITS (MAKE_64BIT_MASK(32, 32) | \ + R_TR_TE_IMPL_RSVP1_MASK | \ + R_TR_TE_IMPL_RSVP2_MASK) + +#define R_TR_TE_IMPL_RO_BITS (R_TR_TE_IMPL_VER_MAJOR_MASK | \ + R_TR_TE_IMPL_VER_MINOR_MASK | \ + R_TR_TE_IMPL_COMP_TYPE_MASK | \ + R_TR_TE_IMPL_PROTOCOL_MAJOR_MASK | \ + R_TR_TE_IMPL_PROTOCOL_MINOR_MASK) + +#define R_TR_TE_IMPL_RESET (BIT(0) | BIT(8)) + +static RegisterAccessInfo trencoder_regs_info[] =3D { + { .name =3D "TR_TE_CONTROL", .addr =3D A_TR_TE_CONTROL, + .rsvd =3D R_TR_TE_CONTROL_RSVP_BITS, + .reset =3D R_TR_TE_CONTROL_RESET, + .ro =3D R_TR_TE_CONTROL_RO_BITS, + }, + { .name =3D "TR_TE_IMPL", .addr =3D A_TR_TE_IMPL, + .rsvd =3D R_TR_TE_IMPL_RSVP_BITS, + .reset =3D R_TR_TE_IMPL_RESET, + .ro =3D R_TR_TE_IMPL_RO_BITS, + }, +}; + +static uint64_t trencoder_read(void *opaque, hwaddr addr, unsigned size) +{ + TraceEncoder *te =3D TRACE_ENCODER(opaque); + RegisterInfo *r =3D &te->regs_info[addr / 4]; + + if (!r->data) { + trace_trencoder_read_error(addr); + return 0; + } + + return register_read(r, ~0, NULL, false); +} + +static void trencoder_write(void *opaque, hwaddr addr, + uint64_t value, unsigned size) +{ + TraceEncoder *te =3D TRACE_ENCODER(opaque); + RegisterInfo *r =3D &te->regs_info[addr / 4]; + + if (!r->data) { + trace_trencoder_write_error(addr, value); + return; + } + + register_write(r, value, ~0, NULL, false); +} + +static const MemoryRegionOps trencoder_ops =3D { + .read =3D trencoder_read, + .write =3D trencoder_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .valid =3D { + .min_access_size =3D 4, + .max_access_size =3D 4, + }, +}; + +static void trencoder_reset(DeviceState *dev) +{ + TraceEncoder *te =3D TRACE_ENCODER(dev); + + for (int i =3D 0; i < ARRAY_SIZE(te->regs_info); i++) { + register_reset(&te->regs_info[i]); + } +} + +static void trencoder_realize(DeviceState *dev, Error **errp) +{ + TraceEncoder *te =3D TRACE_ENCODER(dev); + + memory_region_init_io(&te->reg_mem, OBJECT(dev), + &trencoder_ops, te, + TYPE_TRACE_ENCODER, + te->reg_mem_size); + sysbus_init_mmio(SYS_BUS_DEVICE(dev), &te->reg_mem); + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, te->baseaddr); + + /* RegisterInfo init taken from hw/dma/xlnx-zdma.c */ + for (int i =3D 0; i < ARRAY_SIZE(trencoder_regs_info); i++) { + uint32_t reg_idx =3D trencoder_regs_info[i].addr / 4; + RegisterInfo *r =3D &te->regs_info[reg_idx]; + + *r =3D (RegisterInfo) { + .data =3D (uint8_t *)&te->regs[reg_idx], + .data_size =3D sizeof(uint32_t), + .access =3D &trencoder_regs_info[i], + .opaque =3D te, + }; + } +} + +static const Property trencoder_props[] =3D { + /* + * We need a link to the associated CPU to + * enable/disable tracing. + */ + DEFINE_PROP_LINK("cpu", TraceEncoder, cpu, TYPE_RISCV_CPU, RISCVCPU *), + DEFINE_PROP_UINT64("baseaddr", TraceEncoder, baseaddr, 0), + DEFINE_PROP_UINT64("dest-baseaddr", TraceEncoder, dest_baseaddr, 0), + DEFINE_PROP_UINT64("ramsink-ramstart", TraceEncoder, + ramsink_ramstart, 0), + DEFINE_PROP_UINT64("ramsink-ramlimit", TraceEncoder, + ramsink_ramlimit, 0), + DEFINE_PROP_UINT32("reg-mem-size", TraceEncoder, + reg_mem_size, TRACE_R_MAX * 4), + DEFINE_PROP_INT32("cpu-id", TraceEncoder, cpu_id, 0), +}; + +static const VMStateDescription vmstate_trencoder =3D { + .name =3D TYPE_TRACE_ENCODER, + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT32_ARRAY(regs, TraceEncoder, TRACE_R_MAX), + VMSTATE_UINT64(baseaddr, TraceEncoder), + VMSTATE_UINT64(dest_baseaddr, TraceEncoder), + VMSTATE_UINT64(ramsink_ramstart, TraceEncoder), + VMSTATE_UINT64(ramsink_ramlimit, TraceEncoder), + VMSTATE_INT32(cpu_id, TraceEncoder), + VMSTATE_END_OF_LIST(), + } +}; + +static void trencoder_class_init(ObjectClass *klass, const void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + + device_class_set_legacy_reset(dc, trencoder_reset); + device_class_set_props(dc, trencoder_props); + dc->realize =3D trencoder_realize; + dc->vmsd =3D &vmstate_trencoder; +} + +static const TypeInfo trencoder_info =3D { + .name =3D TYPE_TRACE_ENCODER, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(TraceEncoder), + .class_init =3D trencoder_class_init, +}; + +static void trencoder_register_types(void) +{ + type_register_static(&trencoder_info); +} + +type_init(trencoder_register_types) diff --git a/hw/riscv/trace-encoder.h b/hw/riscv/trace-encoder.h new file mode 100644 index 0000000000..8f2b9ceb04 --- /dev/null +++ b/hw/riscv/trace-encoder.h @@ -0,0 +1,42 @@ +/* + * Emulation of a RISC-V Trace Encoder + * + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef RISCV_TRACE_ENCODER_H +#define RISCV_TRACE_ENCODER_H + +#include "hw/sysbus.h" +#include "hw/register.h" +#include "system/dma.h" +#include "qom/object.h" +#include "cpu.h" + +#define TRACE_R_MAX (0xFFF / 4) + +struct TraceEncoder { + /*< private >*/ + SysBusDevice parent_obj; + + RISCVCPU *cpu; + int cpu_id; + + MemoryRegion reg_mem; + uint32_t reg_mem_size; + + hwaddr baseaddr; + hwaddr dest_baseaddr; + hwaddr ramsink_ramstart; + hwaddr ramsink_ramlimit; + uint32_t regs[TRACE_R_MAX]; + RegisterInfo regs_info[TRACE_R_MAX]; +}; + +#define TYPE_TRACE_ENCODER "trace-encoder" + +OBJECT_DECLARE_SIMPLE_TYPE(TraceEncoder, TRACE_ENCODER) + +#endif diff --git a/hw/riscv/trace-events b/hw/riscv/trace-events index b50b14a654..0cbf6ffcb6 100644 --- a/hw/riscv/trace-events +++ b/hw/riscv/trace-events @@ -24,3 +24,7 @@ riscv_iommu_hpm_incr_ctr(uint64_t cntr_val) "cntr_val 0x%= "PRIx64 riscv_iommu_hpm_iocntinh_cy(bool prev_cy_inh) "prev_cy_inh %d" riscv_iommu_hpm_cycle_write(uint32_t ovf, uint64_t val) "ovf 0x%x val 0x%"= PRIx64 riscv_iommu_hpm_evt_write(uint32_t ctr_idx, uint32_t ovf, uint64_t val) "c= tr_idx 0x%x ovf 0x%x val 0x%"PRIx64 + +# trace-encoder.c +trencoder_read_error(uint64_t addr) "addr 0x%" PRIx64 +trencoder_write_error(uint64_t addr, uint64_t value) "addr 0x%" PRIx64 " v= alue 0x%" PRIx64 --=20 2.51.1 From nobody Wed Jan 7 09:26:24 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1767034108; cv=none; d=zohomail.com; s=zohoarc; b=bM/2bnrQY2ZbhUI3Ivm712O45nhshJeuAZ9Xrx/X9nv2cshEItTYuTReWFcvl4OpaFBORKZdcjXrsCVb/+gI94IvUU2Uona6FOoWWrs0BWm1fSxe4bris1XvnVoRlxZRQi0UijnTBawYP2AFSaZqSPUR8/m086wDP8EbcMuM9w4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767034108; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=u360LagNFk7FUB5x9rrpwVC1ofS1vEeWw6IFHLbKpj4=; b=SqSUcjZryKmNiF5hYPf1hQpmKVskBpfCqBLBH+sfc+GjE+Zpt8PW01+pHeg4qFKFrzZaJ1Y47iKGiMIWXcsQre3qGmc+HktRAwhzzkMUlNShk1Fhax/47LJwbrxVw/yFxMJyHmN6AZCkpVzQqYiBbrCQjDiPXed2qw3GLAXfLhM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1767034108708297.1421272064854; Mon, 29 Dec 2025 10:48:28 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaIHp-0003jc-2y; Mon, 29 Dec 2025 13:48:11 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIH9-0003eW-84 for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:47:30 -0500 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIH5-0008Ci-Og for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:47:26 -0500 Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BT9jZbi4132692 for ; Mon, 29 Dec 2025 18:47:23 GMT Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ba71ww4np-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 29 Dec 2025 18:47:22 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2a090819ed1so77252925ad.2 for ; Mon, 29 Dec 2025 10:47:22 -0800 (PST) Received: from grind.dc1.ventanamicro.com ([187.101.184.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a2f3c82aa8sm282198705ad.31.2025.12.29.10.47.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Dec 2025 10:47:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=u360LagNFk7 FUB5x9rrpwVC1ofS1vEeWw6IFHLbKpj4=; b=cOtCGejUlf+43Vfdm53k9wz5PLm nyReUguHZNf8GYcXVmHsdY0IC6xOObfQoxpXoVd7YBYuyajLysuuVLWwu7Bbdhoa HSQbMphZXgjYg+Rx5Fwi7SF6KvzSeYz8QcprY8Sea6VlFStE5KShJDybOzYfGH/9 LwY+xBwoJJsu9fHkeR7q0LXi5QIGAcRUAYDZ+CQU8jUERHyoErpD6YRlbEZmJiHo +6hbGJ8v3DHGBgrz07ilF4ViALa4bbGIytpchDa4h8/QBY1g9foYqMzbqTxiZFIC RgB6Tmt69Be3mJ6uRZ/lUI9fFk/oKIM09Krop+4KGRiOo1i4Z/3UnMvxAIQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767034041; x=1767638841; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=u360LagNFk7FUB5x9rrpwVC1ofS1vEeWw6IFHLbKpj4=; b=bs3VSPG1ytROI3OS3VrmsjEzH/sIMFqDj9BKZUeoxN92+sagVI8Z0SUajw6MEX3Mgj YwolvIz7DXVuebA/fhu87m+buQ51uXKd59kM6R7MzoE/D6AqT/O0OSMjoA07lu2TeXNS oY2V5Yv9I/1Kam2IiotvkXnHLEYMX32sdGYtyAKc6s2Blcwtm8+FwQBu1gvr473vvOBO YpZauaYs+/U66KYoY9oDBFU1t2Ppt4GGcD+57BQT4hlJSD4f3SxCnpbxaVZDIVKi4vSJ gxP3pJcJt9e74n4lsZAAI09lc6MTp8cKPC3aFgdOjVMwGXgDgy4SIjo71XC/dV9/BQIJ c9DA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767034041; x=1767638841; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=u360LagNFk7FUB5x9rrpwVC1ofS1vEeWw6IFHLbKpj4=; b=EBDVqIsN0SyVulAnLXwsX6dPaZWDKLve9FoDZ0jylDllzafvUPBsdwk4GU6zpLmdyW kHTMRcZL+7XXGoQa/HvYJqN3qYnQOUEZOdFTD7brsSfHcgRYp3lpwXwy4y4vG6Q3PF2b LOw/j6fnTFtw0QAKZQKZ0jqKSqFboBywRrpgBKAQjOkGdd0p9rggcq/qB5m7j/T820Ty Adi/3S6H+FxrLDefnC35aoP1FTtxi2iNH4ZXJSGgDDhJ71xZU+zVOnrsLXAvIZc9edsw YWBgH+cSvZ+RjAz0PJDGVRfUjrjze2lK1Mdt0+Mu9jQweCwKjHB7dobtLVo0+GR4kdSN 9Qyw== X-Gm-Message-State: AOJu0YylAMU/7i4Bn8EoAzpB3Xp/fRwQ73SzXTKu6RTg+wj6Cy06bkby vhXm1UjYmO79+VkQebxk/yTpkG/CZz/uR1mA1Ql2MUSnGeki+sWQJrMwYyuApICei7Lw3i+dbXH po5XPhbOPwYhRmGJPfjRC+GrTACIHuvqPecer5HW+CO3QXNBhmT4UKIyb0m/TO4il8w== X-Gm-Gg: AY/fxX5jNZ+DrPyi6RUP73RoZ0KqK3FRQOjcMA1MjthM7pKqRoUGdEr0GaaCNzar18E gepN7fJlaudM0R8UOvbVEnifX+i3i3ryE885vND3nvy1Z6szG5EbzVBa6VDZhbPt9ZDmOeXXdkA lx93+fLfhCVxO0ebnsW//BQQ8PlUUyfnwUC9VMBbmI9Ercp/F71JArSCpU5rx8NQHBETZQTeMox LI61moIjohPtybHyTOTiydRhMkP/2KQtoqGAfo2FnWTTTv4uaIZNHCPWDBSDlQpBLpyFsUny/EO f5Id050ZR4zMLzcMymhODVvo+PO3UJ6xErjwbG/VsZw30NySuBzfZfCGHSo8IO2JhES7CqauOWX bhPyjQtrUNfb75nmj+YosuYdugHgZUToB7hK2DvaJBz9UgyA= X-Received: by 2002:a17:902:ea10:b0:295:5da6:6011 with SMTP id d9443c01a7336-2a2f2202e57mr308426065ad.11.1767034041312; Mon, 29 Dec 2025 10:47:21 -0800 (PST) X-Google-Smtp-Source: AGHT+IGsanv2ROBUGYDhEbQ+YR7+LDguWU+4ipw3ZypT0cYNSLiuvyGxi1FVASQ0kRHY5+HBZNyUBA== X-Received: by 2002:a17:902:ea10:b0:295:5da6:6011 with SMTP id d9443c01a7336-2a2f2202e57mr308425795ad.11.1767034040689; Mon, 29 Dec 2025 10:47:20 -0800 (PST) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, palmer@dabbelt.com, Daniel Henrique Barboza Subject: [PATCH v3 02/17] hw/riscv: Trace RAM Sink initial impl Date: Mon, 29 Dec 2025 15:46:41 -0300 Message-ID: <20251229184656.2224369-3-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> References: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDE3MiBTYWx0ZWRfX1mbKN/mpm+v7 q2DHJ6AfKNDkxTyu9bcp4NnsrQgnLHDnoFrBXbtwM/QVXnfCt7g68OBYPwhXvWNP+JiNHsgw5HA lU1g/fBVjGM/Y+lcyp64EVIJRU35gTQX81tPdumxFeDgQ7YzLbfUYYMyuX9kPOdjgprUl8rDIne JG0RIsAb5WuXQG1cDQwfVBy+AJXJe5ISBxJLOPkOcXR4tqhI/CnwWBdoN1Vj1IbLRsjr8oD2B0E lXjSYbJ3/aQavo9rqht67Y/a9nK/qdI8kq9ANdRtXxO09WCbkzVRfHG1x+lX3ndIXMfEi3x9HRR KFte7dt5juXjEPnW8Qr9cpicCPJMFIBD+cRADad8pJeSPcE2RbX4xtKbiJHNAp9kZ7SfyZ1FsSN +8/Tvs6d4XkYkovchqFqxhBI4xLHA0AxsHjubmpujyH50l0c9IOvLQnLpejHLhgmwWjDtOvPa1G 8wleukqrnC6IMkuZ8ZQ== X-Proofpoint-ORIG-GUID: _wpOjFn02xmiBYwxuD4PbJOLj-tbtAvo X-Proofpoint-GUID: _wpOjFn02xmiBYwxuD4PbJOLj-tbtAvo X-Authority-Analysis: v=2.4 cv=CK4nnBrD c=1 sm=1 tr=0 ts=6952ccba cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=cW5wcbexNO3A0Ml9TiDm9w==:17 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=NEAV23lmAAAA:8 a=EUspDBNiAAAA:8 a=aqjgF2fw9fj3PC3FA9IA:9 a=1OuFwYUASf3TG4hYMiVC:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-29_06,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 impostorscore=0 lowpriorityscore=0 clxscore=1015 spamscore=0 adultscore=0 suspectscore=0 priorityscore=1501 phishscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512290172 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1767034110413158500 Content-Type: text/plain; charset="utf-8" Following the effort to implement the basic support for Efficient Trace (e-trace) in QEMU we'll add a Trace RAM Sink implementation. Similar to the Trace Encoder, this is inspired in both the Efficient Trace for RISC-V [1] and RISC-V Trace Control Interface Specification [2] specs. It implements a minimal set of features to get started - only SMEM will be supported for now. We'll implement the RAM sink logic in the next patches, although most of the work will be done by the trace encoder. [1] https://github.com/riscv-non-isa/riscv-trace-spec/releases/download/v2.= 0-20250616/riscv-trace-spec-asciidoc.pdf [2] https://github.com/riscv-non-isa/tg-nexus-trace/releases/download/1.0_R= atified/RISC-V-Trace-Control-Interface.pdf Signed-off-by: Daniel Henrique Barboza --- hw/riscv/meson.build | 2 +- hw/riscv/trace-events | 4 + hw/riscv/trace-ram-sink.c | 263 ++++++++++++++++++++++++++++++++++++++ hw/riscv/trace-ram-sink.h | 83 ++++++++++++ 4 files changed, 351 insertions(+), 1 deletion(-) create mode 100644 hw/riscv/trace-ram-sink.c create mode 100644 hw/riscv/trace-ram-sink.h diff --git a/hw/riscv/meson.build b/hw/riscv/meson.build index b4a9988a62..2aadbe1e50 100644 --- a/hw/riscv/meson.build +++ b/hw/riscv/meson.build @@ -14,6 +14,6 @@ riscv_ss.add(when: 'CONFIG_RISCV_IOMMU', if_true: files( 'riscv-iommu.c', 'riscv-iommu-pci.c', 'riscv-iommu-sys.c', 'riscv-iommu-h= pm.c')) riscv_ss.add(when: 'CONFIG_MICROBLAZE_V', if_true: files('microblaze-v-gen= eric.c')) riscv_ss.add(when: 'CONFIG_XIANGSHAN_KUNMINGHU', if_true: files('xiangshan= _kmh.c')) -riscv_ss.add(when: 'CONFIG_RISCV_TRACE', if_true: files('trace-encoder.c')) +riscv_ss.add(when: 'CONFIG_RISCV_TRACE', if_true: files('trace-encoder.c',= 'trace-ram-sink.c')) =20 hw_arch +=3D {'riscv': riscv_ss} diff --git a/hw/riscv/trace-events b/hw/riscv/trace-events index 0cbf6ffcb6..14e333fd9e 100644 --- a/hw/riscv/trace-events +++ b/hw/riscv/trace-events @@ -28,3 +28,7 @@ riscv_iommu_hpm_evt_write(uint32_t ctr_idx, uint32_t ovf,= uint64_t val) "ctr_idx # trace-encoder.c trencoder_read_error(uint64_t addr) "addr 0x%" PRIx64 trencoder_write_error(uint64_t addr, uint64_t value) "addr 0x%" PRIx64 " v= alue 0x%" PRIx64 + +# trace-ram-sink.c +tr_ramsink_read_error(uint64_t addr) "addr 0x%" PRIx64 +tr_ramsink_write_error(uint64_t addr, uint64_t value) "addr 0x%" PRIx64 " = value 0x%" PRIx64 diff --git a/hw/riscv/trace-ram-sink.c b/hw/riscv/trace-ram-sink.c new file mode 100644 index 0000000000..c273335fec --- /dev/null +++ b/hw/riscv/trace-ram-sink.c @@ -0,0 +1,263 @@ +/* + * Emulation of a RISC-V Trace RAM Sink + * + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" + +#include "trace-ram-sink.h" +#include "hw/irq.h" +#include "hw/qdev-properties.h" +#include "migration/vmstate.h" +#include "qemu/bitops.h" +#include "qemu/log.h" +#include "qemu/module.h" +#include "qapi/error.h" +#include "trace.h" +#include "system/device_tree.h" +#include "hw/sysbus.h" +#include "hw/register.h" + +#define R_TR_RAM_CONTROL_RSVP_BITS (MAKE_64BIT_MASK(32, 32) | \ + R_TR_RAM_CONTROL_RSVP1_MASK | \ + R_TR_RAM_CONTROL_RSVP2_MASK | \ + R_TR_RAM_CONTROL_RSVP3_MASK | \ + R_TR_RAM_CONTROL_RSVP4_MASK) + +/* trRamEmpty is the only RO field and reset value */ +#define R_TR_RAM_CONTROL_RESET R_TR_RAM_CONTROL_EMPTY_MASK +#define R_TR_RAM_CONTROL_RO_BITS R_TR_RAM_CONTROL_EMPTY_MASK + +#define R_TR_RAM_IMPL_RSVP_BITS (MAKE_64BIT_MASK(32, 32) | \ + R_TR_RAM_IMPL_RSVP1_MASK) + +#define R_TR_RAM_IMPL_RO_BITS (R_TR_RAM_IMPL_VER_MAJOR_MASK | \ + R_TR_RAM_IMPL_VER_MINOR_MASK | \ + R_TR_RAM_IMPL_COMP_TYPE_MASK | \ + R_TR_RAM_IMPL_HAS_SRAM_MASK | \ + R_TR_RAM_IMPL_HAS_SMEM_MASK) + +#define R_TR_RAM_IMPL_RESET (BIT(0) | 0x9 << 8) + +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, + }, + { .name =3D "TR_RAM_IMPL", .addr =3D A_TR_RAM_IMPL, + .rsvd =3D R_TR_RAM_IMPL_RSVP_BITS, + .reset =3D R_TR_RAM_IMPL_RESET, + .ro =3D R_TR_RAM_IMPL_RO_BITS, + }, + { .name =3D "TR_RAM_START_LOW", .addr =3D A_TR_RAM_START_LOW, + }, + { .name =3D "TR_RAM_START_HIGH", .addr =3D A_TR_RAM_START_HIGH, + }, + { .name =3D "TR_RAM_LIMIT_LOW", .addr =3D A_TR_RAM_LIMIT_LOW, + }, + { .name =3D "TR_RAM_LIMIT_HIGH", .addr =3D A_TR_RAM_LIMIT_HIGH, + }, + { .name =3D "TR_RAM_WP_LOW", .addr =3D A_TR_RAM_WP_LOW, + }, + { .name =3D "TR_RAM_WP_HIGH", .addr =3D A_TR_RAM_WP_HIGH, + }, +}; + +static uint64_t tr_ramsink_regread(void *opaque, hwaddr addr, unsigned siz= e) +{ + TraceRamSink *tram =3D TRACE_RAM_SINK(opaque); + RegisterInfo *r =3D &tram->regs_info[addr / 4]; + + if (!r->data) { + trace_tr_ramsink_read_error(addr); + return 0; + } + + return register_read(r, ~0, NULL, false); +} + +static void tr_ramsink_regwrite(void *opaque, hwaddr addr, + uint64_t value, unsigned size) +{ + TraceRamSink *tram =3D TRACE_RAM_SINK(opaque); + RegisterInfo *r =3D &tram->regs_info[addr / 4]; + + if (!r->data) { + trace_tr_ramsink_write_error(addr, value); + return; + } + + register_write(r, value, ~0, NULL, false); +} + +static const MemoryRegionOps tr_ramsink_regops =3D { + .read =3D tr_ramsink_regread, + .write =3D tr_ramsink_regwrite, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .valid =3D { + .min_access_size =3D 4, + .max_access_size =3D 4, + }, +}; + +static uint64_t tr_ramsink_msgread(void *opaque, hwaddr addr, unsigned siz= e) +{ + TraceRamSink *tram =3D TRACE_RAM_SINK(opaque); + + switch (size) { + case 1: + return tram->msgs[addr]; + case 2: + return (uint16_t)tram->msgs[addr]; + case 4: + return (uint32_t)tram->msgs[addr]; + default: + g_assert_not_reached(); + } +} + +static void tr_ramsink_msgwrite(void *opaque, hwaddr addr, + uint64_t value, unsigned size) +{ + TraceRamSink *tram =3D TRACE_RAM_SINK(opaque); + + switch (size) { + case 1: + tram->msgs[addr] =3D value; + break; + case 2: + tram->msgs[addr] =3D extract16(value, 0, 8); + tram->msgs[addr + 1] =3D extract16(value, 8, 8); + break; + case 4: + tram->msgs[addr] =3D extract32(value, 0, 8); + tram->msgs[addr + 1] =3D extract32(value, 8, 8); + tram->msgs[addr + 2] =3D extract32(value, 16, 8); + tram->msgs[addr + 3] =3D extract32(value, 24, 8); + break; + default: + g_assert_not_reached(); + } +} + +static const MemoryRegionOps tr_ramsink_smemops =3D { + .read =3D tr_ramsink_msgread, + .write =3D tr_ramsink_msgwrite, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .valid =3D { + .min_access_size =3D 1, + .max_access_size =3D 4, + }, +}; + +static void tr_ramsink_setup_regs(TraceRamSink *tram) +{ + hwaddr ramlimit =3D tram->smemaddr + tram->smemsize; + + ARRAY_FIELD_DP32(tram->regs, TR_RAM_START_LOW, ADDR, + extract64(tram->smemaddr, 2, 30)); + ARRAY_FIELD_DP32(tram->regs, TR_RAM_START_HIGH, ADDR, + extract64(tram->smemaddr, 32, 32)); + + ARRAY_FIELD_DP32(tram->regs, TR_RAM_WP_LOW, ADDR, + extract64(tram->smemaddr, 2, 30)); + ARRAY_FIELD_DP32(tram->regs, TR_RAM_WP_HIGH, ADDR, + extract64(tram->smemaddr, 32, 32)); + + ARRAY_FIELD_DP32(tram->regs, TR_RAM_LIMIT_LOW, ADDR, + extract64(ramlimit, 2, 30)); + ARRAY_FIELD_DP32(tram->regs, TR_RAM_LIMIT_HIGH, ADDR, + extract64(ramlimit, 32, 32)); +} + +static void tr_ramsink_reset(DeviceState *dev) +{ + TraceRamSink *tram =3D TRACE_RAM_SINK(dev); + + for (int i =3D 0; i < ARRAY_SIZE(tram->regs_info); i++) { + register_reset(&tram->regs_info[i]); + } + + tr_ramsink_setup_regs(tram); +} + +static void tr_ramsink_realize(DeviceState *dev, Error **errp) +{ + TraceRamSink *tram =3D TRACE_RAM_SINK(dev); + + memory_region_init_io(&tram->reg_mem, OBJECT(dev), + &tr_ramsink_regops, tram, + "trace-ram-sink-regs", + tram->reg_mem_size); + sysbus_init_mmio(SYS_BUS_DEVICE(tram), &tram->reg_mem); + sysbus_mmio_map(SYS_BUS_DEVICE(tram), 0, tram->baseaddr); + + g_assert(tram->smemsize > 0); + tram->msgs =3D g_malloc0(tram->smemsize); + + memory_region_init_io(&tram->smem, OBJECT(dev), + &tr_ramsink_smemops, tram, + "trace-ram-sink-smem", + tram->smemsize); + sysbus_init_mmio(SYS_BUS_DEVICE(dev), &tram->smem); + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 1, tram->smemaddr); + + /* RegisterInfo init taken from hw/dma/xlnx-zdma.c */ + for (int i =3D 0; i < ARRAY_SIZE(tr_ramsink_regs_info); i++) { + uint32_t reg_idx =3D tr_ramsink_regs_info[i].addr / 4; + RegisterInfo *r =3D &tram->regs_info[reg_idx]; + + *r =3D (RegisterInfo) { + .data =3D (uint8_t *)&tram->regs[reg_idx], + .data_size =3D sizeof(uint32_t), + .access =3D &tr_ramsink_regs_info[i], + .opaque =3D tram, + }; + } +} + +static const Property tr_ramsink_props[] =3D { + DEFINE_PROP_UINT64("baseaddr", TraceRamSink, baseaddr, 0), + DEFINE_PROP_UINT64("smemaddr", TraceRamSink, smemaddr, 0), + DEFINE_PROP_UINT32("smemsize", TraceRamSink, smemsize, 0), + DEFINE_PROP_UINT32("reg-mem-size", TraceRamSink, + reg_mem_size, TR_DEV_REGMAP_SIZE), +}; + +static const VMStateDescription vmstate_tr_ramsink =3D { + .name =3D TYPE_TRACE_RAM_SINK, + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT32_ARRAY(regs, TraceRamSink, TRACE_R_MAX), + VMSTATE_END_OF_LIST(), + } +}; + +static void tr_ramsink_class_init(ObjectClass *klass, const void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + + device_class_set_legacy_reset(dc, tr_ramsink_reset); + device_class_set_props(dc, tr_ramsink_props); + dc->realize =3D tr_ramsink_realize; + dc->vmsd =3D &vmstate_tr_ramsink; +} + +static const TypeInfo tr_ramsink_info =3D { + .name =3D TYPE_TRACE_RAM_SINK, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(TraceRamSink), + .class_init =3D tr_ramsink_class_init, +}; + +static void tr_ramsink_register_types(void) +{ + type_register_static(&tr_ramsink_info); +} + +type_init(tr_ramsink_register_types) diff --git a/hw/riscv/trace-ram-sink.h b/hw/riscv/trace-ram-sink.h new file mode 100644 index 0000000000..0a7225642c --- /dev/null +++ b/hw/riscv/trace-ram-sink.h @@ -0,0 +1,83 @@ +/* + * Emulation of a RISC-V Trace RAM Sink + * + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef RISCV_TRACE_RAM_SINK_H +#define RISCV_TRACE_RAM_SINK_H + +#include "hw/register.h" +#include "hw/sysbus.h" +#include "system/dma.h" +#include "qom/object.h" + +#define TRACE_R_MAX (0xFFF / 4) +#define TR_DEV_REGMAP_SIZE 0x1000 + +/* + * The Trace Encoder will read/write those regs so put their + * declaration in this header. + */ +REG32(TR_RAM_CONTROL, 0x0) + FIELD(TR_RAM_CONTROL, ACTIVE, 0, 1) + FIELD(TR_RAM_CONTROL, ENABLE, 1, 1) + FIELD(TR_RAM_CONTROL, EMPTY, 3, 1) + FIELD(TR_RAM_CONTROL, MODE, 4, 1) + FIELD(TR_RAM_CONTROL, STOP_ON_WRAP, 8, 1) + FIELD(TR_RAM_CONTROL, MEM_FORMAT, 9, 2) + /* reserved bits */ + FIELD(TR_RAM_CONTROL, RSVP1, 2, 1) + FIELD(TR_RAM_CONTROL, RSVP2, 5, 3) + FIELD(TR_RAM_CONTROL, RSVP3, 11, 1) + FIELD(TR_RAM_CONTROL, RSVP4, 15, 17) + +REG32(TR_RAM_IMPL, 0x4) + FIELD(TR_RAM_IMPL, VER_MAJOR, 0, 4) + FIELD(TR_RAM_IMPL, VER_MINOR, 4, 4) + FIELD(TR_RAM_IMPL, COMP_TYPE, 8, 4) + FIELD(TR_RAM_IMPL, HAS_SRAM, 12, 1) + FIELD(TR_RAM_IMPL, HAS_SMEM, 13, 1) + /* reserved bits */ + FIELD(TR_RAM_IMPL, RSVP1, 14, 18) + +REG32(TR_RAM_START_LOW, 0x010) + FIELD(TR_RAM_START_LOW, ADDR, 2, 30) +REG32(TR_RAM_START_HIGH, 0x014) + FIELD(TR_RAM_START_HIGH, ADDR, 0, 32) + +REG32(TR_RAM_LIMIT_LOW, 0x018) + FIELD(TR_RAM_LIMIT_LOW, ADDR, 2, 30) +REG32(TR_RAM_LIMIT_HIGH, 0x01C) + FIELD(TR_RAM_LIMIT_HIGH, ADDR, 0, 32) + +REG32(TR_RAM_WP_LOW, 0x020) + FIELD(TR_RAM_WP_LOW, WRAP, 0, 1) + FIELD(TR_RAM_WP_LOW, ADDR, 2, 30) +REG32(TR_RAM_WP_HIGH, 0x024) + FIELD(TR_RAM_WP_HIGH, ADDR, 0, 32) + +struct TraceRamSink { + /*< private >*/ + SysBusDevice parent_obj; + + MemoryRegion reg_mem; + uint32_t reg_mem_size; + + hwaddr baseaddr; + uint32_t regs[TRACE_R_MAX]; + RegisterInfo regs_info[TRACE_R_MAX]; + + hwaddr smemaddr; + MemoryRegion smem; + uint32_t smemsize; + uint8_t *msgs; +}; + +#define TYPE_TRACE_RAM_SINK "trace-ram-sink" + +OBJECT_DECLARE_SIMPLE_TYPE(TraceRamSink, TRACE_RAM_SINK) + +#endif --=20 2.51.1 From nobody Wed Jan 7 09:26:24 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1767034165; cv=none; d=zohomail.com; s=zohoarc; b=H8ounW/zvxOJwRZoAtel8lP8Sw8T/884gyvveUCGGG7ulRwc359Bh82sx0ncECIQPT+4CIzAYie8K7+H4o5lYQNg2SscPYM9IgzfOlmJXGu3i2Jjfx+O9//DwDJ86i4uVUP+bmKee0FmR7yXukfkDXDjeOORZ2oMRBiPzso4edQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767034165; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ggJVaGHm96R1ROzP2B67gvQsc8GKAoWI3tbwNz96GRI=; b=n4A521P7nh6ZHRZturNw4vqWqv/v6sZFk067MhUgRFq2XPTMg1GeaImWTopsDDGXqjN18lBQD5A1rYmuIhtsCsXqjZ/26LC6Tlz38AlX4yE5fCFWw3c+Qs9TRpdizNvwdvQIDSItXU4/LW0MNOFSIKMrLOmEDIb9uEukBtGHZIQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1767034165311790.8301629232635; Mon, 29 Dec 2025 10:49:25 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaIId-00041v-9M; Mon, 29 Dec 2025 13:49:00 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIHA-0003ep-9g for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:47:30 -0500 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIH8-0008DO-HF for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:47:28 -0500 Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BTB3roa3815374 for ; Mon, 29 Dec 2025 18:47:25 GMT Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bbc8ytdpm-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 29 Dec 2025 18:47:25 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2a377e15716so62814725ad.3 for ; Mon, 29 Dec 2025 10:47:25 -0800 (PST) Received: from grind.dc1.ventanamicro.com ([187.101.184.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a2f3c82aa8sm282198705ad.31.2025.12.29.10.47.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Dec 2025 10:47:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=ggJVaGHm96R 1ROzP2B67gvQsc8GKAoWI3tbwNz96GRI=; b=nwptZdsKklXki4zKRM0mgIbhiWk +k46AliNAtFmQb30mAug9l054oI2ZeAcKXMEmfkYfhKuay0eIOl4PZpnXZb06/wl 6Gul1FgNJpX0kmXolkSfFTc6+DPpKNY7/NkcBZO47AnqQl7qoZB2GJieqPWZL3cE +e7xWGdchz3St3qJngc3L0TZz8txupe/cahZS6VPKSZhuETA8p8IuU2raZ0zP/oP br117KEDFGFd/Y9yfcufNxVAial6/Fo5i4cJBrITMGNgULrIranueF2cKF4PARjU B/JN/va51wyqA0f0XgR5BnXyha5aejkcE3pXyBcnMwCCXgh6z2/hw5Mcnsw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767034044; x=1767638844; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ggJVaGHm96R1ROzP2B67gvQsc8GKAoWI3tbwNz96GRI=; b=TTLBtPW09VXTeVoaE88EnYHrKBhO0Z2F/mHIJsYSWFEWep0HHiK8lPIphq0UhUIf+P fOjKvOHiBCgK2IWPqkm3GPIC6S6bL+QhZtJ2hpoS8Esmuo20K1ecAlNWzHER902m1yg/ msTB+iGnkCQSTc5Yfl2n8yvozq1l7WsZ44w0dle8SO9SqzaigU7NTjtlQwAFcNHixDkJ jsstxb7galMVyjmZWv5jF0v0NFzS8nizNGm3pKhbyJ0Bh34vBOmLRlmMlfkSbHo7n557 q8P5brD0t9S/JaGSKP1k8NAHrtFDOJoOBA2xhwOVFO8H0P1ZDVoDL7DMYFHgAU2JNSWU 7KOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767034044; x=1767638844; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=ggJVaGHm96R1ROzP2B67gvQsc8GKAoWI3tbwNz96GRI=; b=V6m5ZpajNiBB6cAx8bhAKlkV7zcj0afTagOiw6ma68AE47z+KIiGn1fjT37wNCkpoZ g9jifoNruiaaQd/AzynBCPhxcE3a0ycqV0Z3QVaaRHpVW+PNSO8kqIT2DI5IKYtS4uuI c64b/9cVbB7e+cLxqk/eQXHahjaj12IciR9EJBhD/gFEuaMnLCnYBm7FDCzpESzgISBz SBPG+AT2XLvr1gl1/MYcqTroERqQ/8RFBcJGHjXZSssc7PqA9nN7bI77PSqrJHWK/ae6 cUS8DDR0CDiBfs9ANAUc5tqs/LFpGTVwn1LtGAskHZRYht0MvoicGkOfFpGpxQ8b/00p tsMg== X-Gm-Message-State: AOJu0Yw/J/g/7ANUT+Kxns4Dcmcdgcrqynk1Mh0rrbVJEaQxvHKVMRP/ yomWxyIpNwZx89Z0vsGzYIJs7mir3kb7DX01wmRNAuUgL2AgEsU56L+UWrz/XJBmoFg73V5h4BD IPcZY4SWXq6E+kqUdQnfP30xpEpvLChU6yps7pi9SG2dWiHH5g6eLdIn9uHy4jc0x1A== X-Gm-Gg: AY/fxX5ToIoYApB41A2BSmpjjM/9hq1a9cvN3wBACTRIBqxHOkq/vnCSxv2Bho5AMNr 50ZwFY+uhxCYcX7+o1cWkrbX0aIgSyxW/YDDc/dP2QrE/VmH9VoNGk1aYATY9MmLymG9oXiO7JG PXMfZu6sxH4jUVubJ42bu9hBZVgvfbUUIi1j9z8ienHC+WWwGc76fMCsrw8VljRPXaQNg86M6PE r3AnPAmqrBGKElAKhG/y9cV/Ty0CfDV7HGm4aCKfJKhA1vAOyea4xdZ0cwRMTXsQt9lP1cpwXHK WhEIPBFbQ+1fUNF8DnibVuMqZCT5Cy33fZ8O2PHibP0WLApQGgJeRGXfZZI+cLIXE2PnTlYxnqd 1b7XqvSVdK/lQ8HEwNgiBRMQZNDvn661Qs4dSf0DsgtK71WE= X-Received: by 2002:a17:902:f710:b0:2a2:f1d4:3b64 with SMTP id d9443c01a7336-2a2f232c5ddmr296740145ad.21.1767034044151; Mon, 29 Dec 2025 10:47:24 -0800 (PST) X-Google-Smtp-Source: AGHT+IFmO3dKYgv39motkPncgVyGLMNMynK/pDqYoB84DlXlhmvecWXviJ40lqxqTt3WxouqtSoIHg== X-Received: by 2002:a17:902:f710:b0:2a2:f1d4:3b64 with SMTP id d9443c01a7336-2a2f232c5ddmr296739905ad.21.1767034043584; Mon, 29 Dec 2025 10:47:23 -0800 (PST) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, palmer@dabbelt.com, Daniel Henrique Barboza Subject: [PATCH v3 03/17] hw/riscv/trace-encoder: add trace start/stop logic Date: Mon, 29 Dec 2025 15:46:42 -0300 Message-ID: <20251229184656.2224369-4-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> References: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDE3MiBTYWx0ZWRfX5azB/+uNC+TQ JkC5xAJBK/ABa8dkZ34Jurz0Ng93gR68fK/T7kz3dORPcx84MN5CX3mx0M6NQxyS0zA5l+7+qV5 Of4Bihw/fS8W+52vzpgNbSxmFgGQUvE0nzL6gxUADS/3jfsBsgkSzvcC54bl/baRzFVYhkGoiIj SwHFVFnMxXOo8z6Y2VVjFFm1ASQRIf2zbsh8KEJVdZYbOAWsWU1QnqEdc9vpQgsBoecZf0IFU8z 2syEnnow9n4qtVimJBdodi4wGBNVQ9I6/acXnoNTuP7bulitHmukYLicNpqhp0VWq3pzLdyogbu RGLef/7TuC6ks42pU7nFRLcNu+bBcdXVNvfHQ3Ib3VwmQwF2bIgJLRNFC/yXUQ8lG7ehi1/OPna ukZbNrmbaOAPAAHi9Ti6ZBpmTXROb2fCBE3e71lp+837WBqww7XgvvbAJLi719RhDwZ20BFMCJV b8nER/l3ZIKUiKmd4xw== X-Authority-Analysis: v=2.4 cv=cP7tc1eN c=1 sm=1 tr=0 ts=6952ccbd cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==:117 a=cW5wcbexNO3A0Ml9TiDm9w==:17 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=Zvy5nz_Gwx3CY_hQl98A:9 a=uG9DUKGECoFWVXl0Dc02:22 X-Proofpoint-ORIG-GUID: Hy0uFi5gzxO_DVo6wB6g-SrGgysKDoWG X-Proofpoint-GUID: Hy0uFi5gzxO_DVo6wB6g-SrGgysKDoWG X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-29_06,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 malwarescore=0 lowpriorityscore=0 impostorscore=0 adultscore=0 bulkscore=0 suspectscore=0 spamscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512290172 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1767034166215158500 Content-Type: text/plain; charset="utf-8" Starting/stopping a trace session will rely on two flags: - trace_next_insn: this flag will be used to signal the translation that the encoder wants to know the PC of the current insn. The translation helper (to be added) will clear this flag after sending the current insn to the encoder; - trace_running: shows that we're running a trace session and certain insns classes (traps, certain jumps and branches) need to report to the trace encoder. These flags are controlled by the trTeInstTracing bit. This bit requires other two bits to be set beforehand (ACTIVE and ENABLE). We'll revisit these bits in the future as more features are implemented. While we're at it, add hardwire bits to indicate which features we're (not) implementing at this time. Signed-off-by: Daniel Henrique Barboza --- hw/riscv/trace-encoder.c | 107 +++++++++++++++++++++++++++++++++++++++ hw/riscv/trace-encoder.h | 4 ++ 2 files changed, 111 insertions(+) diff --git a/hw/riscv/trace-encoder.c b/hw/riscv/trace-encoder.c index 6df8ba8e84..37d882f66c 100644 --- a/hw/riscv/trace-encoder.c +++ b/hw/riscv/trace-encoder.c @@ -30,7 +30,11 @@ REG32(TR_TE_CONTROL, 0x0) FIELD(TR_TE_CONTROL, INST_TRACING, 2, 1) 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_STALL_ENA, 13, 1) + FIELD(TR_TE_CONTROL, INHIBIT_SRC, 15, 1) FIELD(TR_TE_CONTROL, INST_SYNC_MODE, 16, 2) + FIELD(TR_TE_CONTROL, INST_SYNC_MAX, 20, 4) FIELD(TR_TE_CONTROL, FORMAT, 24, 3) /* reserved bits */ FIELD(TR_TE_CONTROL, RSVP1, 7, 2) @@ -75,17 +79,116 @@ REG32(TR_TE_IMPL, 0x4) =20 #define R_TR_TE_IMPL_RESET (BIT(0) | BIT(8)) =20 +REG32(TR_TE_INST_FEATURES, 0x8) + FIELD(TR_TE_INST_FEATURES, NO_ADDR_DIFF, 0, 1) + +static uint64_t trencoder_te_ctrl_set_hardwire_vals(uint64_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_STALL_ENA, 0); + input =3D FIELD_DP32(input, TR_TE_CONTROL, INHIBIT_SRC, 1); + input =3D FIELD_DP32(input, TR_TE_CONTROL, FORMAT, 0); + + /* SYNC_MODE and SYNC_MAX will be revisited */ + input =3D FIELD_DP32(input, TR_TE_CONTROL, INST_SYNC_MODE, 0); + input =3D FIELD_DP32(input, TR_TE_CONTROL, INST_SYNC_MAX, 0); + + return input; +} + +static uint64_t trencoder_te_ctrl_prew(RegisterInfo *reg, 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 trTeInstTracing =3D ARRAY_FIELD_EX32(te->regs, TR_TE_CONTROL, + INST_TRACING); + uint32_t temp; + + 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) { + 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); + } + + return val; +} + +static void trencoder_te_ctrl_postw(RegisterInfo *reg, 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); + + if (!trTeActive) { + te->enabled =3D false; + te->trace_running =3D false; + te->trace_next_insn =3D false; + return; + } + + if (te->enabled && !trTeEnable) { + /* TODO: this should cause a pending trace data flush. */ + } + + te->enabled =3D trTeEnable ? true : false; + + if (!te->trace_running && trTeInstTracing) { + /* Starting trace. Ask the CPU for the first trace insn */ + te->trace_next_insn =3D true; + } + + te->trace_running =3D trTeInstTracing ? true : false; +} + static RegisterAccessInfo trencoder_regs_info[] =3D { { .name =3D "TR_TE_CONTROL", .addr =3D A_TR_TE_CONTROL, .rsvd =3D R_TR_TE_CONTROL_RSVP_BITS, .reset =3D R_TR_TE_CONTROL_RESET, .ro =3D R_TR_TE_CONTROL_RO_BITS, + .pre_write =3D &trencoder_te_ctrl_prew, + .post_write =3D &trencoder_te_ctrl_postw, }, { .name =3D "TR_TE_IMPL", .addr =3D A_TR_TE_IMPL, .rsvd =3D R_TR_TE_IMPL_RSVP_BITS, .reset =3D R_TR_TE_IMPL_RESET, .ro =3D R_TR_TE_IMPL_RO_BITS, }, + { .name =3D "TR_TE_INST_FEATURES", .addr =3D A_TR_TE_INST_FEATURES, + .reset =3D R_TR_TE_INST_FEATURES_NO_ADDR_DIFF_MASK, + .ro =3D ~0, + }, }; =20 static uint64_t trencoder_read(void *opaque, hwaddr addr, unsigned size) @@ -132,6 +235,10 @@ static void trencoder_reset(DeviceState *dev) for (int i =3D 0; i < ARRAY_SIZE(te->regs_info); i++) { register_reset(&te->regs_info[i]); } + + te->enabled =3D false; + te->trace_running =3D false; + te->trace_next_insn =3D false; } =20 static void trencoder_realize(DeviceState *dev, Error **errp) diff --git a/hw/riscv/trace-encoder.h b/hw/riscv/trace-encoder.h index 8f2b9ceb04..517675d062 100644 --- a/hw/riscv/trace-encoder.h +++ b/hw/riscv/trace-encoder.h @@ -33,6 +33,10 @@ struct TraceEncoder { hwaddr ramsink_ramlimit; uint32_t regs[TRACE_R_MAX]; RegisterInfo regs_info[TRACE_R_MAX]; + + bool enabled; + bool trace_running; + bool trace_next_insn; }; =20 #define TYPE_TRACE_ENCODER "trace-encoder" --=20 2.51.1 From nobody Wed Jan 7 09:26:24 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1767034173; cv=none; d=zohomail.com; s=zohoarc; b=i43OPGic3TPzVqjCrdbJieVBmKsq8xsmyxULuoHevDQn37t2ml1CVpprHkWQu2Sjw3tr1DsWdjP/D359Dr/raRtK6oZ48yOdYlc3nQ68jZLgYM1vShjmEup/edChFf9m6DWJ0mJPC1XiH7PKhoLUSCJgM6R4JEX9wnSFBbAyVR4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767034173; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=oAJGVkzFfOQIiDXh0qMlqrI8SbjU24rOP1b1tZiWHA8=; b=lb2NGO5nzqT4bxUWGIQtBre0+oJzGj/FEXA2oG2uvg3yg61TA4lcoxwz0SLW0ESX7NEqNLrh3K3mWEGBfyeAmv7W5o3vwZbC5N0uwLgsJwKpx3JppXBWHruVKNQCfLTmwrpN/RB4AkGcGnzRUBdN9csz1+tZazSAyjT19rs1n+8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1767034173032584.6865039135704; Mon, 29 Dec 2025 10:49:33 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaIIh-0004Bf-1Z; Mon, 29 Dec 2025 13:49:04 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIHE-0003fS-4S for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:47:35 -0500 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIHB-0008E1-Gf for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:47:31 -0500 Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BTAlwQk1461913 for ; Mon, 29 Dec 2025 18:47:28 GMT Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bavrj3mfu-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 29 Dec 2025 18:47:27 +0000 (GMT) Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2a08cbeb87eso155586135ad.3 for ; Mon, 29 Dec 2025 10:47:27 -0800 (PST) Received: from grind.dc1.ventanamicro.com ([187.101.184.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a2f3c82aa8sm282198705ad.31.2025.12.29.10.47.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Dec 2025 10:47:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=oAJGVkzFfOQ IiDXh0qMlqrI8SbjU24rOP1b1tZiWHA8=; b=A7mG5xgj2wNjzV8rFy58wE+MF1t 5k7g3U7MMgzTKzc0UYq78POmsEpmoKVVQgOS7Bv1QHe7goKTLU+76HeGXgoAdR+K 6F3Gl9sO7+b0ItGmqhIYm+M/dJUeGej1TFgDCss5XJkYXL87q/4hhO72EnrY9JO8 /8ipE4wZqZKE29s0MC5QPlZi25GG8QQgFD85et3JLHZ+kScjgNiET1kNnq5xlkLR dUTocdhTsd2eycTZejlFYYWCxOSThupUv7XSUqQIN1d4pABVNLQyDEZd6Mqa/98E cHfbVQMKl/gsEfr1Vxm/1LzuwbNEWSbwC2qk0qkMOXP3hiFqXJAHP/nP2VA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767034047; x=1767638847; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=oAJGVkzFfOQIiDXh0qMlqrI8SbjU24rOP1b1tZiWHA8=; b=S3jDO6G53V5tF+PUikefqrdo0qZSkaXtKApFxuhxQf/uUvaLeRCZIlZEkreTP/qlRq nNXZQ3uGaxhiUBo9O/E6pHgqcy+VKnA5tAhqSOinGDf6pyLf6SFdXY6+zu8RE6x03j6D wI/PMFy7jYnu3YZJ2pM0oja8AxgJaOTo8rbR34Zzur0aVEGssiv8FMSHVlPNhWuMW+Vk FS39E5PGtt6qpxRAOtODr8HFvMhgl9rAU0wKDdJoMElo1X34qUZDxmdY6gArtQf/5S/u R4gFAM6bEB+cQYBTiuZtZg1bZsiTGtSFz6uIozUwhp/S4Akyij+CM/wfUWkytpcNMN4R lsyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767034047; x=1767638847; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=oAJGVkzFfOQIiDXh0qMlqrI8SbjU24rOP1b1tZiWHA8=; b=qrLFIMhtBVnjuapcHdZxw5tgXEKKveP0f3tBahETxEgYyb4L6DxvTSZCb/UhSlikI9 RphtHedbUnXe3Fhpo662oi0O7uTcO6LlU3Wdx7EmFBFil8vkwfSbpLm1ZLqPF0/5j6ey FH+d3cF0Etp1g/GF9P5pbIWGMLmbYQFJrGI16gSTl8YgqjlFEQFsxZIxmhuz4nhods0B QIIN7JFr+H5oZz80JN4EX1yYxRolLvl+QDvl8aBlm35pp1NHxm8WYXbpX+mzWBCqoR9W zXkec0vxocAGMC0MIo6UvZevTd2PulOGyDjCY4KRI6Dir2GWvtbwE0vhyUZMfmTmFycb ohiA== X-Gm-Message-State: AOJu0Yws2C5QkjeKeomNh4PfHy1SoZKEsSrGmeCmmz6G6IAZuYpNqg+h cO62Vgkq3XNzYv66Cih61ZFPCD/8GbhV2dlz5ZPH4Dy5eJ25HmeetfPV6Q23m8b3S0/Fe8Hynas IxHeXp5UyN4gCa/dCZyb9nwGtUEiUzZAsl2pOljV4Mw0nEgiqZoPzCnbg87K3/et3vA== X-Gm-Gg: AY/fxX5wkkuZUTHg2q9QZXSliEBF8yw/Duq0oz+y46WHLq2z6X/thfWtd4XhxIFB23B T8pgPmvk4ySk7ePYx0n3z/D2JpVeF4KlyBf4Vhd0IkTFoKaJ3nGvU0zNR9ErDopkVQ2kU5KWkPI Uv9wYC4qJFp9Ijy1M8tD68K0eyQ1DB5UW1nrpEADZwvWH9lq5/p/ClvBObDIvvdHryveB1q5MX8 VwhBmzazwr05fvFfHss5U/EzALoiZehcBB/mRAIGKydVQ25Iy+a8kR3AhLOiLulqDN3lKwC8wGj SMmlEX8Ugx9/iuWHPh9mzyJmTT6XQ8qLSyriPkEZMTq7PzWAOLxrmp0Uuz0LchsBC0yzmN3dMa3 HcVe8+bctbMaEfLd+cIKvAI+WCJ8G+krbxWe8JMXi1EqG1sQ= X-Received: by 2002:a17:902:cf0b:b0:29e:c2dd:85ea with SMTP id d9443c01a7336-2a2f22049b9mr336303875ad.11.1767034046986; Mon, 29 Dec 2025 10:47:26 -0800 (PST) X-Google-Smtp-Source: AGHT+IGyd1Z5D2V0kG5oiJrXgVDBpPInn69qoMITF6nXP9hsVieTAYDAM1A5VQ1yvyivVgUTLo8dVA== X-Received: by 2002:a17:902:cf0b:b0:29e:c2dd:85ea with SMTP id d9443c01a7336-2a2f22049b9mr336303725ad.11.1767034046409; Mon, 29 Dec 2025 10:47:26 -0800 (PST) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, palmer@dabbelt.com, Daniel Henrique Barboza Subject: [PATCH v3 04/17] hw/riscv/virt.c: add trace encoders and trace ram sinks Date: Mon, 29 Dec 2025 15:46:43 -0300 Message-ID: <20251229184656.2224369-5-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> References: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: LzxkbRwi0q4tHk9sRpP97xW72NeRxpNH X-Proofpoint-GUID: LzxkbRwi0q4tHk9sRpP97xW72NeRxpNH X-Authority-Analysis: v=2.4 cv=coiWUl4i c=1 sm=1 tr=0 ts=6952ccbf cx=c_pps a=JL+w9abYAAE89/QcEU+0QA==:117 a=cW5wcbexNO3A0Ml9TiDm9w==:17 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=MVOyIR3Nq1xdiiQTEeAA:9 a=324X-CrmTo6CU4MGRt3R:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDE3MiBTYWx0ZWRfX5F+B/ueforMx QavBnN1ts1QdTSHZ+udO5ChaML8yLvCLTMU6dLNiLl7oPSticVodoUW5ZAPQtR8o42gUtXijrtH rmyTFbRveq7JjO2cuplowJDxuFs03lNIvKoGI3FIKHUiyV2PjGVaztEGjDlCxvg2UieDz/SZkuo HDEeJOxgrA3HHML5KFDFAlM3lj8cwlRocuH4XFCwj/DKLYXlWL5CNyRrj7hBaQBaGtl1pkU0/tn YlFOqnt50UxcKUTUEqN/jKKLI5f102QodDowWl8q9H9giMl6NXbCcDFt6qUQXE1/a9404FSZdHH dt9bqMGk/iQ5P1R7gL0AhwS2fC3mpGb/HU1IuQRG/GTiKeoLUn9eCbk4WGlXIu3x0jvY0JHIBwp G+P+PViQIkUxI3+RjXh7dKs5PEGF7kLeL+DASeKYZwFofDgCV16pQDEudVJHAUm6pfGSWEmvGOf zuipujBpSmxuqlD6M+g== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-29_06,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 spamscore=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 malwarescore=0 phishscore=0 adultscore=0 priorityscore=1501 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512290172 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1767034174393158500 Content-Type: text/plain; charset="utf-8" Add the minimal topology required for e-trace support in the virt machine, e.g. each CPU will have a single trace encoder, and each trace encoder will communicate to a single associated trace ram sink. At this moment we're not going to support more complex topologies with trace funnels and so on. Signed-off-by: Daniel Henrique Barboza --- hw/riscv/virt.c | 77 ++++++++++++++++++++++++++++++++++++++ include/hw/riscv/virt.h | 2 + target/riscv/cpu.h | 9 +++++ target/riscv/tcg/tcg-cpu.c | 5 +++ 4 files changed, 93 insertions(+) diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index 17909206c7..b1a4d63efd 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -58,6 +58,8 @@ #include "qapi/qapi-visit-common.h" #include "hw/virtio/virtio-iommu.h" #include "hw/uefi/var-service-api.h" +#include "hw/riscv/trace-encoder.h" +#include "hw/riscv/trace-ram-sink.h" =20 /* KVM AIA only supports APLIC MSI. APLIC Wired is always emulated by QEMU= . */ static bool virt_use_kvm_aia_aplic_imsic(RISCVVirtAIAType aia_type) @@ -79,6 +81,17 @@ static bool virt_aclint_allowed(void) return tcg_enabled() || qtest_enabled(); } =20 +#define TR_DEV_REGMAP_SIZE 0x1000 +/* For VIRT_CPUS_MAX =3D 512: TRACE_DEV_REG_MAX =3D 0x200000 */ +#define TRACE_DEV_REG_MAX (TR_DEV_REGMAP_SIZE * VIRT_CPUS_MAX) + +/* + * 64k for the RAM Sink that includes the 4k (0x1000) + * for regs, for each possible CPU. For 512 max CPUs, + * total size =3D 0x2000000. + */ +#define TRACE_RAM_SINK_SIZE (1UL << 16) + static const MemMapEntry virt_memmap[] =3D { [VIRT_DEBUG] =3D { 0x0, 0x100 }, [VIRT_MROM] =3D { 0x1000, 0xf000 }, @@ -88,7 +101,9 @@ static const MemMapEntry virt_memmap[] =3D { [VIRT_ACLINT_SSWI] =3D { 0x2F00000, 0x4000 }, [VIRT_PCIE_PIO] =3D { 0x3000000, 0x10000 }, [VIRT_IOMMU_SYS] =3D { 0x3010000, 0x1000 }, + [VIRT_TR_ENCODERS] =3D { 0x3020000, TRACE_DEV_REG_MAX }, [VIRT_PLATFORM_BUS] =3D { 0x4000000, 0x2000000 }, + [VIRT_TR_RAM_SINKS] =3D { 0x6000000, TRACE_RAM_SINK_SIZE * VIRT_CPUS_= MAX }, [VIRT_PLIC] =3D { 0xc000000, VIRT_PLIC_SIZE(VIRT_CPUS_MAX * 2= ) }, [VIRT_APLIC_M] =3D { 0xc000000, APLIC_SIZE(VIRT_CPUS_MAX) }, [VIRT_APLIC_S] =3D { 0xd000000, APLIC_SIZE(VIRT_CPUS_MAX) }, @@ -1525,6 +1540,64 @@ static void virt_machine_done(Notifier *notifier, vo= id *data) } } =20 +/* + * Must be called after 'soc' realize since it + * uses CPU objs. + */ +static void virt_init_socket_trace_hw(RISCVVirtState *s, int socket_num) +{ + for (int cpu =3D 0; cpu < s->soc[socket_num].num_harts; cpu++) { + RISCVCPU *cpu_ptr =3D &s->soc[socket_num].harts[cpu]; + DeviceState *trencoder, *ram_sink; + uint64_t trencoder_addr, ram_sink_addr, smem_addr; + uint32_t smem_size =3D TRACE_RAM_SINK_SIZE - TR_DEV_REGMAP_SIZE; + + ram_sink =3D qdev_new(TYPE_TRACE_RAM_SINK); + + ram_sink_addr =3D virt_memmap[VIRT_TR_RAM_SINKS].base + + TRACE_RAM_SINK_SIZE * cpu; + /* smem is located right after ram sink base */ + smem_addr =3D ram_sink_addr + TR_DEV_REGMAP_SIZE; + + object_property_set_uint(OBJECT(ram_sink), "baseaddr", + ram_sink_addr, &error_fatal); + object_property_set_uint(OBJECT(ram_sink), "smemaddr", + smem_addr, &error_fatal); + object_property_set_uint(OBJECT(ram_sink), "smemsize", + smem_size, &error_fatal); + sysbus_realize_and_unref(SYS_BUS_DEVICE(ram_sink), &error_fatal); + + /* + * We can't do object_property_set_link() because we're + * coming after cpu.realize() (the riscv_hart obj creates + * the CPU objs in its realize() since it has no init). + * We need changes in how riscv_hart works to use + * set_link() and to not manually realize the trace + * encoder. + * + * For now do everything manually. + */ + trencoder =3D qdev_new(TYPE_TRACE_ENCODER); + cpu_ptr->trencoder =3D OBJECT(trencoder); + + trencoder_addr =3D virt_memmap[VIRT_TR_ENCODERS].base + + TR_DEV_REGMAP_SIZE * cpu; + + object_property_set_link(OBJECT(trencoder), "cpu", + OBJECT(cpu_ptr), &error_fatal); + object_property_set_int(OBJECT(trencoder), "cpu-id", cpu, &error_f= atal); + object_property_set_uint(OBJECT(trencoder), "baseaddr", + trencoder_addr, &error_fatal); + object_property_set_uint(OBJECT(trencoder), "dest-baseaddr", + ram_sink_addr, &error_fatal); + object_property_set_uint(OBJECT(trencoder), "ramsink-ramstart", + smem_addr, &error_fatal); + object_property_set_uint(OBJECT(trencoder), "ramsink-ramlimit", + smem_addr + smem_size, &error_fatal); + sysbus_realize_and_unref(SYS_BUS_DEVICE(trencoder), &error_fatal); + } +} + static void virt_machine_init(MachineState *machine) { RISCVVirtState *s =3D RISCV_VIRT_MACHINE(machine); @@ -1580,6 +1653,10 @@ static void virt_machine_init(MachineState *machine) hart_count, &error_abort); sysbus_realize(SYS_BUS_DEVICE(&s->soc[i]), &error_fatal); =20 + if (tcg_enabled()) { + virt_init_socket_trace_hw(s, i); + } + if (virt_aclint_allowed() && s->have_aclint) { if (s->aia_type =3D=3D VIRT_AIA_TYPE_APLIC_IMSIC) { /* Per-socket ACLINT MTIMER */ diff --git a/include/hw/riscv/virt.h b/include/hw/riscv/virt.h index 7b4c2c8b7d..e2aa6fbbcd 100644 --- a/include/hw/riscv/virt.h +++ b/include/hw/riscv/virt.h @@ -88,6 +88,8 @@ enum { VIRT_PLATFORM_BUS, VIRT_PCIE_ECAM, VIRT_IOMMU_SYS, + VIRT_TR_ENCODERS, + VIRT_TR_RAM_SINKS, }; =20 enum { diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 8899bf7667..5ebf7f663e 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -547,6 +547,15 @@ struct ArchCPU { /* Mapping of events to counters */ GHashTable *pmu_event_ctr_map; const GPtrArray *decoders; + +#ifndef CONFIG_USER_ONLY + /* + * Associated Trace Encoder. It will not be NULL if + * we're running with TCG and initialized manually by + * the board. + */ + Object *trencoder; +#endif }; =20 typedef struct RISCVCSR RISCVCSR; diff --git a/target/riscv/tcg/tcg-cpu.c b/target/riscv/tcg/tcg-cpu.c index 440626ddfa..265b460487 100644 --- a/target/riscv/tcg/tcg-cpu.c +++ b/target/riscv/tcg/tcg-cpu.c @@ -37,6 +37,7 @@ #include "hw/boards.h" #include "system/tcg.h" #include "exec/icount.h" +#include "hw/riscv/trace-encoder.h" #endif =20 /* Hash that stores user set extensions */ @@ -1327,6 +1328,10 @@ static bool riscv_tcg_cpu_realize(CPUState *cs, Erro= r **errp) if (riscv_has_ext(env, RVH)) { env->mideleg =3D MIP_VSSIP | MIP_VSTIP | MIP_VSEIP | MIP_SGEIP; } + + if (cpu->trencoder) { + qdev_realize(DEVICE(cpu->trencoder), NULL, &error_fatal); + } #endif =20 return true; --=20 2.51.1 From nobody Wed Jan 7 09:26:24 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1767034379; cv=none; d=zohomail.com; s=zohoarc; b=c7X01RMAfBFioZMY0/9Z+H1XQ0b28unJ38iZukOJ1WLmXLLQJ/KbzZTA8HmToItPCoDfnDkOCUNKpik1C0LomTgbLEAAYJix2R3LWvuQeKqqoS7aMtbD70axy40E/8g/zLeUqbtZjTunOKiurYGZZzF/vlxpH8ZvUiQBcgcBQI0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767034379; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Usd8KjL1nKaUnlu6+YZAiUOALwzrj0rfFjwHgLC0dHs=; b=H7SeNzplsLiRBmyMTRhv02x9hBQsW5nVEQP6MMPtud0fWbL4k5JccVQjuNTBR0KHbZgwHFKSk7XMdgff82B3ytM3HgAJBAvRL+/b34RTIYrhv3ozqCzjsJVIF3mmomvBAtHxzUOnb5pUdeeB2z7Xv2gBu8m1lx4NDQMWHoezcPs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1767034379071850.1214194367886; Mon, 29 Dec 2025 10:52:59 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaIIy-0004sa-Op; Mon, 29 Dec 2025 13:49:20 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIHG-0003fu-0i for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:47:37 -0500 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIHE-0008EK-Ao for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:47:33 -0500 Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BTAQIET2990007 for ; Mon, 29 Dec 2025 18:47:30 GMT Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ba8r6d38d-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 29 Dec 2025 18:47:30 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2a08cbeb87eso155586905ad.3 for ; Mon, 29 Dec 2025 10:47:30 -0800 (PST) Received: from grind.dc1.ventanamicro.com ([187.101.184.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a2f3c82aa8sm282198705ad.31.2025.12.29.10.47.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Dec 2025 10:47:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=Usd8KjL1nKa Unlu6+YZAiUOALwzrj0rfFjwHgLC0dHs=; b=nmJNaE4+EYB4v2yMNv6+Op2MPBI C+ypI9PXNzKeEdZADJteoQyFSbVKMK7p0R4MrpnR2PE8CdkScVRRNF4GZ9AD3w1u nzaLvgkqSgQRpjAzR6HUKgk0lEaVmZDqJ46VkHCP9BC/etAmNeDpFqc/q0LCHMz8 hLz4BsIqMUD0tt3hH0chDxP/KqYe/ZdoBVm7ldDeipZkbSOKedvZRlH+x3MKvlgd xaLk59I8s+oYcSAaDC3VdK8O47EZ8/BYcbH8aGBl65p+t6nPN9qLTGCrDuCSz2lF N742g/+sjZPMpdBFJ3SwFoPYtAUuUPg5FBxqO4N0o8o1UD8Cce2vOcB/6Xg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767034050; x=1767638850; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Usd8KjL1nKaUnlu6+YZAiUOALwzrj0rfFjwHgLC0dHs=; b=LzbnDTwsN6EgQDS4twlvzlqB8QXWmavJiQY8kIOzYYSetBOLMP9CMnIN5KIqJ6L01I PEnrJPwToPTDd03RLXzDPo0LmPjihcO523E/w0q2l+msQR6qIm5hzBIOyEN7Vn3nY+AZ kx4eTUMXtP6EvldWapoDip3Ogv6tKZS8mh6TnkPPF2Z2Rzwsh2CUAf8ER1dP/bV72m6A Q9O3JmP/uhHr+qaeF2AugwTP2A81wbqqhaTe5XKJjLpW85l5+JxcxzaYkMWIWEh7I+f7 VYxxwa+xtfourH2qWFQ2I74dQ1Qc3WlH6a9SRkuZ45At4gGcNgrwOkvKz9CwYKFXtliR j5Ww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767034050; x=1767638850; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Usd8KjL1nKaUnlu6+YZAiUOALwzrj0rfFjwHgLC0dHs=; b=Ho9Jyz25ucZsxbZeu84JjE+J66MCS5rQ+hqwWi0wAxD8+qENU1y8I/N33rTPSjEQBw 4zxoDogiqdxnBnnu54iyOmhYt1QSxqINkPZlwLMxE+CVUooAFXoFMMpfKdnncJ7M7fUA GeXHE8DpK0uekNYGbehwVlKmFJw0w3GnV6X7pQbsWC9PeRPc8Aj3Fi5HNq7Lt32k2GWB 3ubZ/eXtDp90RpQTcoTwbCfNQNVE57UMUvKDnfMi7yQ+d8X7X5A9uvpJAaujuyMRRp5o tYRFE2LHUQl6UCdCO2uuRg+qsfQeb4w1cbdhtyoWCOQiFPsD6fT91/crs1fPkd9gryZz 0BlA== X-Gm-Message-State: AOJu0YxASsk3SviLJWEl7VDKGDfUZewqpBS3cphLVFfsW54LFNt66PA5 G9ZUuePBOkKsojIPKldWWx+Q5vuRW3d+xlDtwwRHq+/YIqGDABOlK7WPmytnnqsVqXtee63GM6j 0t5eyYkOuPV1OoScfldwYTQJM9xEPgR69GhrEabmke/QX/o5KTiPNpvXOuErjEdGRsw== X-Gm-Gg: AY/fxX4paH4+1XwyTPX7+UNBlD6FOL10C9wE4/gAVMfShXYIloq69O79/wPeOJAzkOq 929Iy3+sPQWkPJo6P3Gr4SL4oYD02dgMvVgf8adWTFhM5LhzhzH09kZIJXizc4j/l5oDU39GfNK fUynSCm2Qt+5vziG2CfrTPdU10ytFKJo4mpEkv7p2f2mEMiBpiNgdHJohOT/iFFb7m+ck5NcAsb PJ6L68tMw2jURAffMlvX31yj6h4jXKMDnGksyvxCPqUqI4sX1+5FMjpDMUlrGLyxodCU9V5wWam IcE6gdHQclNWlOtyNfbQdazBAod44XQ/8RqSRUNKYKMvqRCAENskHmLNVzfg25b7uuFSIuHfyxo Rvi7+J1niK3UESPlK2RYoVZXiGDBGfVln2kxtLLnzX7JFvZA= X-Received: by 2002:a17:903:228b:b0:2a0:f0e2:94b7 with SMTP id d9443c01a7336-2a2f2735298mr284160505ad.30.1767034049885; Mon, 29 Dec 2025 10:47:29 -0800 (PST) X-Google-Smtp-Source: AGHT+IFmmmLWZQ4QsqVeZMMTsA9Rpdzc3glu04ipr2sb5OYIFJp6gjk3TXl1CnQkvPnULteHNmQR7Q== X-Received: by 2002:a17:903:228b:b0:2a0:f0e2:94b7 with SMTP id d9443c01a7336-2a2f2735298mr284160365ad.30.1767034049369; Mon, 29 Dec 2025 10:47:29 -0800 (PST) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, palmer@dabbelt.com, Mayuresh Chitale , Daniel Henrique Barboza Subject: [PATCH v3 05/17] hw/riscv/virt.c add trace encoder and ramsink fdt nodes Date: Mon, 29 Dec 2025 15:46:44 -0300 Message-ID: <20251229184656.2224369-6-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> References: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=Raidyltv c=1 sm=1 tr=0 ts=6952ccc2 cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=cW5wcbexNO3A0Ml9TiDm9w==:17 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=WNqyVGXcZDAH5E2kEWIA:9 a=GvdueXVYPmCkWapjIL-Q:22 X-Proofpoint-ORIG-GUID: fR4R4EvhzrmtYOi_TweNCC-WPP9wVKnI X-Proofpoint-GUID: fR4R4EvhzrmtYOi_TweNCC-WPP9wVKnI X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDE3MiBTYWx0ZWRfXw4JV2dLRyhek itjPo1uLR/DrMGyWXUVEQtvrlUfKlru5V2iBnmyGrA2EXtKun7jcavYRQP3JIHhFT5NvGmsuIef fOpZcUFSez+/8LizVNNSahwBBmH9eVn0w3+HkcR9J/aipdhQ8//8sIzSJOGZ7zXDzw18OrPDnXk /MNsX8MhftXErNUE4lFLLwwpL6dPIWsjakXVMonuRMaoPDtZOVIZBXcMDllxSxWFDYSidarUOxg 6bVE0x89olU2DFZ89PZAEeOLi9kOb8gLx7zWTYGfD9iqmSqiwCH3KxeL45ZW3TDhVh8rL3d7THs WSvB4kO+LtrMf/CYi/ytM2q8vf51LrgUwLf6ojzmc6/w5gM7EGhtP/84KURZUbOobQOW/22HEkl fYsICdrjKibgNMvE62CL8ZHif0d8UETfrldv7skWSpdAW02Vt1A+GZHyqFeimnOmFe+eHqwxCQU OmOCEX6A7n6Yk8hGySg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-29_06,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 clxscore=1015 phishscore=0 impostorscore=0 suspectscore=0 lowpriorityscore=0 bulkscore=0 malwarescore=0 spamscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512290172 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1767034381018158500 Content-Type: text/plain; charset="utf-8" From: Mayuresh Chitale The trace encoder and trace ramsink nodes should confirm to the bindings described in "riscv,trace-component.yaml" in the Linux kernel. That way, encoder and ramsink devices get populated on the rvtrace bus and perf record is able to capture the trace data in the auxtrace section as expected. Signed-off-by: Mayuresh Chitale Signed-off-by: Daniel Henrique Barboza --- hw/riscv/virt.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index b1a4d63efd..30e89a6c5a 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -1142,6 +1142,62 @@ static void create_fdt_iommu(RISCVVirtState *s, uint= 16_t bdf) s->pci_iommu_bdf =3D bdf; } =20 +static void create_fdt_rvtrace(RISCVVirtState *s) +{ + static const char * const tr_compat[2] =3D { "qemu,trace-component", + "riscv,trace-component" }; + g_autofree char *cpu_name =3D NULL, *ram_sink_name =3D NULL, + *trencoder_name =3D NULL, *ep =3D NULL; + MachineState *ms =3D MACHINE(s); + int socket_count =3D riscv_socket_count(ms), i; + uint64_t addr, size =3D 0x100; + uint32_t rs_phandle; + RISCVCPU *cpu_ptr; + + + for (i =3D 0; i < socket_count; i++) { + for (int cpu =3D 0; cpu < s->soc[i].num_harts; cpu++) { + cpu_ptr =3D &s->soc[i].harts[cpu]; + if (!cpu_ptr->trencoder) { + continue; + } + cpu_name =3D g_strdup_printf("/cpus/cpu@%d", + s->soc[i].hartid_base + cpu); + ram_sink_name =3D g_strdup_printf("/soc/ramsink@%d", + s->soc[i].hartid_base + cpu); + qemu_fdt_add_subnode(ms->fdt, ram_sink_name); + addr =3D object_property_get_uint(cpu_ptr->trencoder, "dest-ba= seaddr", + &error_abort); + qemu_fdt_setprop_sized_cells(ms->fdt, ram_sink_name, "reg", 2,= addr, + 2, size); + qemu_fdt_setprop_string_array(ms->fdt, ram_sink_name, "compati= ble", + (char **)&tr_compat, + ARRAY_SIZE(tr_compat)); + qemu_fdt_setprop_phandle(ms->fdt, ram_sink_name, "cpu", cpu_na= me); + ep =3D g_strdup_printf("%s/in-ports/port/endpoint", ram_sink_n= ame); + qemu_fdt_add_path(ms->fdt, ep); + rs_phandle =3D qemu_fdt_alloc_phandle(ms->fdt); + qemu_fdt_setprop_cell(ms->fdt, ep, "phandle", rs_phandle); + + + trencoder_name =3D g_strdup_printf("/soc/encoder@%d", + s->soc[i].hartid_base + cpu); + qemu_fdt_add_subnode(ms->fdt, trencoder_name); + addr =3D object_property_get_uint(cpu_ptr->trencoder, "baseadd= r", + &error_abort); + qemu_fdt_setprop_sized_cells(ms->fdt, trencoder_name, "reg", 2, + addr, 2, size); + qemu_fdt_setprop_string_array(ms->fdt, trencoder_name, "compat= ible", + (char **)&tr_compat, + ARRAY_SIZE(tr_compat)); + qemu_fdt_setprop_phandle(ms->fdt, trencoder_name, "cpus", cpu_= name); + ep =3D g_strdup_printf("%s/out-ports/port/endpoint", trencoder= _name); + qemu_fdt_add_path(ms->fdt, ep); + qemu_fdt_setprop_cell(ms->fdt, ep, "remote-endpoint", rs_phand= le); + } + } +} + static void finalize_fdt(RISCVVirtState *s) { uint32_t phandle =3D 1, irq_mmio_phandle =3D 1, msi_pcie_phandle =3D 1; @@ -1166,6 +1222,8 @@ static void finalize_fdt(RISCVVirtState *s) create_fdt_uart(s, irq_mmio_phandle); =20 create_fdt_rtc(s, irq_mmio_phandle); + + create_fdt_rvtrace(s); } =20 static void create_fdt(RISCVVirtState *s) --=20 2.51.1 From nobody Wed Jan 7 09:26:24 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1767034415; cv=none; d=zohomail.com; s=zohoarc; b=M+DKBxq2uw42D0OGBbNp4S82qG6Xpdupv9weY4MX9sYxo3CRFuKTptkn2k9svx2eCKaVdqlRSQ0mVtgZASQelg6ZOTgzdPSv8WqejbZpQdaVXdTye6LVRLDHhR+3qYRsyFJdENh4/B+T58M8qilh3P98kVNBlALLEbfTD5xczW4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767034415; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=oQUTf/Hs/VRgHFLbCzhs/8sL2iD0zPZI5dImKNlBqZM=; b=GQVFHU2AtkPXPqLCMrCZOefcGal6OLCvSMtCaRTqcJ7vmF8oGr03bsZ9uep9rwMHqAxviHyRBOSLv+R+VK/O+UJgV8TOnyEJtlLNdRas0JNg5eQ+FO762FwFUZz7QLKka0ue2H4VWQ51WSCCQNr11GICTyvChUsRjKqwYAQH1og= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1767034415591867.8098702525954; Mon, 29 Dec 2025 10:53:35 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaIIv-0004cQ-F7; Mon, 29 Dec 2025 13:49:17 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIHL-0003h9-Dk for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:47:41 -0500 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIHH-0008Ez-3n for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:47:37 -0500 Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BTAlCpe3850328 for ; Mon, 29 Dec 2025 18:47:33 GMT Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ba6dr591b-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 29 Dec 2025 18:47:33 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2a377e15716so62817095ad.3 for ; Mon, 29 Dec 2025 10:47:33 -0800 (PST) Received: from grind.dc1.ventanamicro.com ([187.101.184.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a2f3c82aa8sm282198705ad.31.2025.12.29.10.47.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Dec 2025 10:47:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=oQUTf/Hs/VR gHFLbCzhs/8sL2iD0zPZI5dImKNlBqZM=; b=Dr/I2Cg+jQKtHsXZ0txzgkWogeU 0q1YtlJXWx+uLBpNJKqn4u6BjpVlYJry5fTWMYRfnhmlAQWe2fNTzCY6NwuoFrBV bMDtfLNWCeM/PIHu4Jk4x785zGqgHLpF1xhqyFo68YR4FiOWKYu0/CHGpGbuZyf5 CThW1GyPNyB0vtNl4gSjJikzxbW8taSC6qS+/veSiq5Ac0GwhkeVMJMbLMpTJvdg CcGsrfOK1+WdGPPNPs4hrw5/Nz/drWhY36nmfTXSOImAd/7PmcRlmOeu8oz/WfyJ lYSF4vGZXlmvdZvUJ6YgvcGkMluqaDESFXQxzW/FA85ZACGr/BlhqvM8kJw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767034053; x=1767638853; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=oQUTf/Hs/VRgHFLbCzhs/8sL2iD0zPZI5dImKNlBqZM=; b=R29aqzKKi7ACSr3GmkOMIA9Ypt3jlUA2QbE+bLMxVz6SriJG8XqS058k4+dlZEOebx JUs/D6sT03F2sIbmFUbgBrMocIQTb4AauUvBglYtjZLykKbylGSbVjDxukUY9SW7XCoW JpdIWEEgTTtD1w/rLF7ufFaiT+ZwmXyxLpX61V/enLUcvhDvDQvum/SHStIcUHLIujC/ bRG19dLIT/SkhJyY/80SaCXpXrn6emv7u0KiKhZ0mGa+lSKA5IYW1GlZeHtRCfvboRR1 FDgE10NnXJw/gLKilBhKK4hDZW0X5o4fdS5X+Gc5iUeydnTUo69KVTonXo3FZA20CGBH TIhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767034053; x=1767638853; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=oQUTf/Hs/VRgHFLbCzhs/8sL2iD0zPZI5dImKNlBqZM=; b=JbwRJOmTYaG3m142rCUl2bYIU7oxKezBimzCRs7ngTQQqqFErEUhE6/fLwoLZiGZlC mTG9UPlh0V+D5BCHsWOG2VAy2hMf0JdM2QQ+j1uDtdUfxb/IDAGNmizsMj/kzhsLJbRt AflySQxwOh218uWj6o6CnsaycEgItirKBf3winXoa6ATOly1Mb5L7iHNwGy41S/93VLh 0Wk3aNEYKNXya/WkNvqY3R3/JCuFfL/aDv9E2LvotVCPh+N2K4rRcDX/UCgjsSaOnw+Y SIM+M2LbksNPDXGu/tbCf7ldYSEvUrhRd6NyQmK+CnWzzgY/kFioYrKuzEpuWsdiinkj /tow== X-Gm-Message-State: AOJu0Yx7BAQ1LMNXYtITWZEohNTwsAr9I40kvIi8lKAqcrR4N9LcPLw5 V/KrjNOZdeGXqIPklTaQ841Jd0CKNqSgX7eJnH8/5Lj1MmnC5dnuUWIVmQW+dtghncecEUx8q2D 0e8wGSCOulGUtUsF36g/faMsAoNFa4Tr1MoVtMDMEmzoKpTfAtbhzXkd87FJp/oB/ew== X-Gm-Gg: AY/fxX7w12HEmclCNwO4ZiqGlmdZA8Q4ynk0H4fWjMREEV0eEIEIy/dH8f/60IlSYFi ARNUpbRLKgRTeRXwcVhXfeJ2fYjVOtw4MOWuCuSmyTqpgrAhBRHlilxU8PzqM8xpYoNNZ9ixb6p lNYugqQbQPq+jEO8jygEr21KT/FZm2Gfhh8N+aJqz9N1Qjp7xBGc8QpZT+fQ+VkRyw2lroyiEMr PziuQuqjbVpgHXQ5kp7ws252CbdlKeOYsrKgpUSpjFx5IqVyRoxBbZHO7wZ7LdFVIXHmhb4Qvty P60gCv9ru1dHgF07pltqzaRf6ZyFCKzQkLTOr+V5qyzdo/KL67bDE5h3KIz4tQFsdVHejsJsQge vukmR5b4yLHwQfIt5lzMTgV9ByaF4aDphl1gMTphO24RO45g= X-Received: by 2002:a17:903:24d:b0:29b:5c78:8bea with SMTP id d9443c01a7336-2a2f2836c2fmr301113385ad.33.1767034052724; Mon, 29 Dec 2025 10:47:32 -0800 (PST) X-Google-Smtp-Source: AGHT+IHy0CzSnOgDStZW+3Rg3+uJTcI4Lf5H0S+wcQdKu6x+q+dSrNTM8T2hLYFhAjDf7/5i6up59Q== X-Received: by 2002:a17:903:24d:b0:29b:5c78:8bea with SMTP id d9443c01a7336-2a2f2836c2fmr301113225ad.33.1767034052195; Mon, 29 Dec 2025 10:47:32 -0800 (PST) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, palmer@dabbelt.com, Daniel Henrique Barboza Subject: [PATCH v3 06/17] hw/riscv: add e-trace message helpers Date: Mon, 29 Dec 2025 15:46:45 -0300 Message-ID: <20251229184656.2224369-7-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> References: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDE3MiBTYWx0ZWRfXxvSwINdKw1nQ KBEBXfEL46pXJ34e+CxaOUReTRcINJHkcuPbARZauK/lKuZDelGiaQz2ii5bcPWvt57i2+brga1 SMiZfn7ad4m2Gwcd3NGi5O2OFMoeVVq2FsSORdS3SXxReDKYIdLBYgwQLrnhYQb0ToNvwe01iQs 6dgdTYtBhDZwDJEL0j/+wAPeXMEtTTDl69TEa/REK2xE2MsQLrcZZ0yTzzUCSoq8yF4ozo9plJy 2a5Go1PAylv3aReWfcLBYBfjCcT2IM3hwOyGu/dVgGBQB73W/s4IbIJd18r6S0uz0AndwXaoTy1 b9QF+W6kPzfmtkFou6UcTpS6ayztVOw5a9AR7Dq2X8ykfuszoMbObFsekx5IcRwgiXjsmX2XsLL wdOt67N8GViFGmiRcAVBQNn7v0o8se6xWmm/rSBZCLh0U1kBCGJI6+v16u8vGStHBj5ZQBaGnN3 re23QdxzEUuXwbaQfwQ== X-Authority-Analysis: v=2.4 cv=VdP6/Vp9 c=1 sm=1 tr=0 ts=6952ccc5 cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=cW5wcbexNO3A0Ml9TiDm9w==:17 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=XcTmqS6Bu3Dxs0I95lkA:9 a=GvdueXVYPmCkWapjIL-Q:22 X-Proofpoint-GUID: MYGm7efHUhxvTBvFqw0FKtwGKzuqKLHy X-Proofpoint-ORIG-GUID: MYGm7efHUhxvTBvFqw0FKtwGKzuqKLHy X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-29_06,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 spamscore=0 phishscore=0 lowpriorityscore=0 bulkscore=0 adultscore=0 clxscore=1015 malwarescore=0 suspectscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512290172 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1767034417236158500 Content-Type: text/plain; charset="utf-8" Before making the trace encoder writing into the RAM sink we need a way to encode the messages/packets. The encoding is LSB (least significant bit) based. The doc "Efficient Trace for RISC-V", Chapter 7, mentions: "The remainder of this section describes the contents of the payload portion which should be independent of the infrastructure. In each table, the fields are listed in transmission order: first field in the table is transmitted first, and multi-bit fields are transmitted LSB first." The "RISC-V Trace Control Interface Specification" docs, Chapter 7, states when talking about the Trace RAM Sink: "Trace data is placed in memory in LSB order (first byte of trace packet/data is placed on LSB)." This means that the LSB encoding must be used to write into the RAM Sink memory, which is our goal. The design we're going for is to have all these encoder helpers, along with the message formats, in a separated file. The trace encoder will make use of these helpers to blindly write a byte array with the packet desired, and then write it as is in the RAM Sink. We'll start by modeling the synchronisation packet first, adding more formats as we increment the Trace Encoder capabilities. Signed-off-by: Daniel Henrique Barboza --- hw/riscv/meson.build | 3 +- hw/riscv/rv-trace-messages.c | 97 ++++++++++++++++++++++++++++++++++++ hw/riscv/rv-trace-messages.h | 25 ++++++++++ 3 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 hw/riscv/rv-trace-messages.c create mode 100644 hw/riscv/rv-trace-messages.h diff --git a/hw/riscv/meson.build b/hw/riscv/meson.build index 2aadbe1e50..7d3576fcdf 100644 --- a/hw/riscv/meson.build +++ b/hw/riscv/meson.build @@ -14,6 +14,7 @@ riscv_ss.add(when: 'CONFIG_RISCV_IOMMU', if_true: files( 'riscv-iommu.c', 'riscv-iommu-pci.c', 'riscv-iommu-sys.c', 'riscv-iommu-h= pm.c')) riscv_ss.add(when: 'CONFIG_MICROBLAZE_V', if_true: files('microblaze-v-gen= eric.c')) riscv_ss.add(when: 'CONFIG_XIANGSHAN_KUNMINGHU', if_true: files('xiangshan= _kmh.c')) -riscv_ss.add(when: 'CONFIG_RISCV_TRACE', if_true: files('trace-encoder.c',= 'trace-ram-sink.c')) +riscv_ss.add(when: 'CONFIG_RISCV_TRACE', if_true: files('trace-encoder.c', + 'trace-ram-sink.c', 'rv-trace-messages.c')) =20 hw_arch +=3D {'riscv': riscv_ss} diff --git a/hw/riscv/rv-trace-messages.c b/hw/riscv/rv-trace-messages.c new file mode 100644 index 0000000000..668db0c772 --- /dev/null +++ b/hw/riscv/rv-trace-messages.c @@ -0,0 +1,97 @@ +/* + * Helpers for RISC-V Trace Messages + * + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" + +#include "rv-trace-messages.h" +#include "qemu/bitops.h" +#include "qemu/log.h" +#include "qemu/module.h" +#include "qapi/error.h" +#include "trace.h" + +typedef enum { + HEADER_SIZE =3D 1, + SYNC_PAYLOAD_SIZE_64BITS =3D 9, +} RVTraceMessagePayloadSize; + +typedef struct RVTraceMessageHeader { + uint8_t length:5; + uint8_t flow:2; + uint8_t extend:1; +} RVTraceMessageHeader; + +/* + * Format 3 subformat 0 without 'time' and 'context' fields + */ +typedef struct RVTraceSyncPayload { + uint8_t format:2; + uint8_t subformat:2; + uint8_t branch:1; + uint8_t privilege:3; + uint32_t addressLow; + uint32_t addressHigh; +} RVTraceSyncPayload; + +static uint8_t rv_etrace_write_bits(uint8_t *bytes, uint32_t bit_pos, + uint32_t num_bits, uint32_t val) +{ + uint32_t pos, byte_index, byte_pos, byte_bits =3D 0; + uint8_t chunk; + + if (!num_bits || 32 < num_bits) { + return 0; + } + + for (pos =3D 0; pos < num_bits; pos +=3D byte_bits) { + byte_index =3D (bit_pos + pos) / 8; + byte_pos =3D (bit_pos + pos) % 8; + byte_bits =3D MIN(8 - byte_pos, num_bits - pos); + + chunk =3D extract32(val, pos, byte_bits); + bytes[byte_index] =3D deposit32(bytes[byte_index], byte_pos, + byte_bits, chunk); + } + + return num_bits; +} + +static uint8_t rv_etrace_write_header(uint8_t *buf, RVTraceMessageHeader h= eader) +{ + uint8_t bit_pos =3D 0; + + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 5, header.length); + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 2, header.flow); + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 1, header.extend); + + return bit_pos; +} + +size_t rv_etrace_gen_encoded_sync_msg(uint8_t *buf, uint64_t pc, + TracePrivLevel priv_level) +{ + RVTraceSyncPayload payload =3D {.format =3D 0b11, + .subformat =3D 0b00, + .branch =3D 1, + .privilege =3D priv_level, + .addressLow =3D extract64(pc, 0, 32), + .addressHigh =3D extract64(pc, 32, 32)}; + RVTraceMessageHeader header =3D {.flow =3D 0, .extend =3D 0, + .length =3D SYNC_PAYLOAD_SIZE_64BITS}; + uint8_t bit_pos =3D 0; + + bit_pos +=3D rv_etrace_write_header(buf, header); + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 2, payload.format); + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 2, payload.subformat); + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 1, payload.branch); + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 3, payload.privilege); + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 32, payload.addressLow= ); + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 32, payload.addressHig= h); + + return HEADER_SIZE + SYNC_PAYLOAD_SIZE_64BITS; +} diff --git a/hw/riscv/rv-trace-messages.h b/hw/riscv/rv-trace-messages.h new file mode 100644 index 0000000000..c7226b50a9 --- /dev/null +++ b/hw/riscv/rv-trace-messages.h @@ -0,0 +1,25 @@ +/* + * Helpers for RISC-V Trace Messages + * + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef RISCV_RV_TRACE_MESSAGES_H +#define RISCV_RV_TRACE_MESSAGES_H + +typedef enum { + U =3D 0, + S_HS =3D 1, + RESERVED =3D 2, + M =3D 3, + D =3D 4, + VU =3D 5, + VS =3D 6, +} TracePrivLevel; + +size_t rv_etrace_gen_encoded_sync_msg(uint8_t *buf, uint64_t pc, + TracePrivLevel priv_level); + +#endif --=20 2.51.1 From nobody Wed Jan 7 09:26:24 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1767034172; cv=none; d=zohomail.com; s=zohoarc; b=EA2gfDzt8QPOtdT8KR+2Y/w2CIxkI82uT5LR+60GhTFM4Ma6dOUiYy/zKZ8tpmmTxH2XdbehoK+pCBp4oD8vbC9WOfB/eqlfii1ddowYhGPUoXWsdZlUtAksQKE7XbESyLmaHSWal191X9DuyCnGL5J0IRS9nKKx86ukaGLqzOs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767034172; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=R/GWoUy7LJEVVqvZX97tTx8AeIjr/zUMQuH53icANjM=; b=a6dCdkiwvDu1AThEqg6bf3p+9FF3d5OnZx7LoukRviO8blI9PoNBPDTci2LbmpQmXdDb9+OyYAPYVkSavZC6fAdHnALheiqlwuZBWDH4gMombZDRKSFOptZEjGaVVKczHcmay58T5OOGxSkSIMKA/m/ZqqHf7NOnGMK5nUnrO6g= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1767034172523229.29518021212505; Mon, 29 Dec 2025 10:49:32 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaIIx-0004hF-1F; Mon, 29 Dec 2025 13:49:19 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIHO-0003i2-5d for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:47:49 -0500 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIHL-0008FY-8G for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:47:41 -0500 Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BTId0eO3797792 for ; Mon, 29 Dec 2025 18:47:37 GMT Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bavrj3mg4-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 29 Dec 2025 18:47:36 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-29f8e6a5de4so127693155ad.2 for ; Mon, 29 Dec 2025 10:47:36 -0800 (PST) Received: from grind.dc1.ventanamicro.com ([187.101.184.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a2f3c82aa8sm282198705ad.31.2025.12.29.10.47.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Dec 2025 10:47:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=R/GWoUy7LJE VVqvZX97tTx8AeIjr/zUMQuH53icANjM=; b=jtrrl8NVDiu+BW76E1AhNpEW2KN /Aw1heyYouLHooB9onmOt36HZf3o3EmOfXuxH+JdYlA5cTc63qV7rGcix1k616HA dqQc8zFZjnZinxztpDk6odVr8W1FKIsaCYY4El/sL9ixWUu0PxFX8Y2QVvGZ0rEn qBwewxwhqqa9okAVJJyuN52idxJTuV8OraaR0nfEN6GO83yenx3Ee1JfPbJ3L5Lf 2i05w9NYO4n16+Ce7HXhWtVQ8v8KI2105FdoL9/rS+p2GidV8lss408uBrrwS+/R xQYWrU8UbMsiKtuZTexyxmgw+Dj8J2T/kr5laXAMS2O8ZC3fkVAkpzDcuXQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767034056; x=1767638856; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=R/GWoUy7LJEVVqvZX97tTx8AeIjr/zUMQuH53icANjM=; b=K+XIqZev3majGN9OLppddxlQ7Q69eZbqLEpTJq0TfjJWxVgtEqxAgADyeY8loF6Qbd vAJlqzTD4sAJycFxLOiS3p/yTmOlYdFSim2IKYHJyliKJQSVEHd8KXucBE37/zfuzXIw Q980BVsRP1hbCdgPfPd/ZmYCkxhthS0zdtpANfPJ41pKrKXRmSLw6B3rx0HMJ/CRB3nk ZMY1e3vWf8+GJGp3goKgEC1saWQ11Op+XDOf6GyFqfFLVoxpbVzvMePBglkg5nJkMCjE taL++LQP58G6xkex76aCqytc69VJ5IJNbXKjxB/vRrxobHQnw17YXRSE+OwrET+s5umz 5sow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767034056; x=1767638856; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=R/GWoUy7LJEVVqvZX97tTx8AeIjr/zUMQuH53icANjM=; b=hWD+7DhlnXgbUDQ9tINZxO/nqgewy7sRRIgJl7Ci4cJ0QbQjbovfd4J8/vTaKMtnO3 fT2Y374n85FBqzD4LCnDWgaX35iVmS+evlWGFYncBRenatytatSG63PziuMxjHTWQIRG LzLV6c6I+PDtpD1S5ar5Z1sE2ZoWT4/nAN3itnnPyrV3aU7LuDZU4pFjhAqffSx5czvE WFhGMxE4+rROVqX7lMjHRV+iTDh1rf6OVnPiJ8uR849XLttYaX2UJUcv/LDgjyLqMiOt /uJB4VEFvQphPdcxLhu9qCegO49vf2Y6WtpDt5Ntnss2EK19E7kBoScBXuFwb1Qp77SF jMbw== X-Gm-Message-State: AOJu0Yy3b7CdHx1ttKob/ihQbZZPldT0w6yExoxfiPf+5zqHjpkT4cSN Lz+9+AYNCO0AEzpZOJRvAK8fCmDJlOYL5RCnFIXG7NTyrhBuCjhoPIztBgfhhTGGHiae/v0KibZ pHx1/y85+1X7ancfFObk0SRVKXkFwZ8fmviJLayacFOr0SyFQv40GrvFKsjIw3GkBpg== X-Gm-Gg: AY/fxX4fffVOaT1BE28mvRcagAEyg3a3+kD+Pe6+wtYA9BJYTjBPFK1LwvyhSOIQjes cfIvm/dqb9N/uY7ci9F85Vcdlq7gzuamSCgdnbxheT7wsybmbB75vUY8Hk3WYd71/SIV7DtzwjG aRvV4fX/IHSduaTjnvtYOEt0kuwNs0knSvd6pHKv8quArVxoruziJ/7yO2QPduGcg6zC8JZ67gr e0PGlJwfflXNpi9k7YiwaF1ujYVWb1QViMkpbqB5eaVQHT9oXk9HS5TUOXXlaUeP9aat+bmL42U DjqxKXQj7C5zr7AaDnO9MlE6bf+edaMxW1Z8fHACojNY/16T9GVv3h4+I689K6m7BzURBD4iXdm JqwSA0qY5JP8LnBUd++Fwyq3J7Lhp1e2fRnOU5vzkpz+47GE= X-Received: by 2002:a17:902:ced0:b0:2a3:1b33:ae30 with SMTP id d9443c01a7336-2a31b33af21mr207308475ad.51.1767034055483; Mon, 29 Dec 2025 10:47:35 -0800 (PST) X-Google-Smtp-Source: AGHT+IEpjBSQ45DO9xo7N18Kt8HnyR1+KUvgtTi3W7GcPzmZBfA1hf21k9a+6iqYBm3wwoswtKDRog== X-Received: by 2002:a17:902:ced0:b0:2a3:1b33:ae30 with SMTP id d9443c01a7336-2a31b33af21mr207308335ad.51.1767034054950; Mon, 29 Dec 2025 10:47:34 -0800 (PST) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, palmer@dabbelt.com, Daniel Henrique Barboza Subject: [PATCH v3 07/17] target/riscv: add initial trace instrumentation Date: Mon, 29 Dec 2025 15:46:46 -0300 Message-ID: <20251229184656.2224369-8-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> References: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: qiq4DLWVCErnGbK-SxtEmmYnUtm_tNAO X-Proofpoint-GUID: qiq4DLWVCErnGbK-SxtEmmYnUtm_tNAO X-Authority-Analysis: v=2.4 cv=coiWUl4i c=1 sm=1 tr=0 ts=6952ccc8 cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=cW5wcbexNO3A0Ml9TiDm9w==:17 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=ZZQmujYLDWRuECq2q14A:9 a=1OuFwYUASf3TG4hYMiVC:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDE3MiBTYWx0ZWRfXzzGIiZLlO9m9 RZ8yn+v5p6j1VMdcMSjCg1b4Yp24wUM1w0rEo1D25Vmn6L1h2PJn9L04iZmUybOzVCvL2GROp0u nZRu+5H/6WSVJ9vfaoaLVxkOvwoRPBrZPKDvyxnom/dmBY1NgbUCvdrBxs9gg1GoNYuocsEShYq KwlJ2CVGRbPNWL8ioEFZPZFXX1cGbVLRvgETysHRAxhFaAwVbc9XjVSBj7DTpW8kU8DhGuT9f0e 15u14nG3SrQ8ZH1pB9wKbS3EYTKuUFyBkqlPqQoYhynx0UFbdgn5cH26sZRjS3zgquUCKHbfQSb Ld8HKwaVMMNoaP57mxuBl2llCfusJBGPeANqwmPJ2JfcL88WYerb/FviESWzzTGTGkI29iqUci6 vB+GGPqoQqLQFI52ttg3hotG4EtgY3DA/4GZ9Buk2k9xfRenZJzvmc5KdoOXbVSMNJuVkeG0a0C C1WN9nemBPCGtCK5gpg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-29_06,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 spamscore=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 malwarescore=0 phishscore=0 adultscore=0 priorityscore=1501 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512290172 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1767034174452158500 Content-Type: text/plain; charset="utf-8" We'll have to instrument some RISC-V translations, as well as the start of a translation block, communicating with the associated trace encoder in case we're running a trace session. The trace encoder needs to report the first insn of the session so we'll start with that. Unfortunately we've run out of bits in tb_flags, meaning we can't use riscv_tr_init_disas_context() and riscv_get_tb_cpu_state() to communicate whether we're running a trace session. One alternative would be to fold the "trace is running" logic in each trace helper. That would make all code paths, regardless of even having a trace encoder associated with the CPU, to check for trace encoder existence. Another alternative, which is implemented here, is to add an additional mirror flag 'trace_running' in CPURISCVState and turn it into a TCG global 'cpu_trace_running'. Each trace helper call is gated via this global, allowing us to skip calling trace helpers when we're not running a trace session. In case we end up increasing the size of tb_flags in the future we should revisit this code and use tb_flags instead. Signed-off-by: Daniel Henrique Barboza --- hw/riscv/trace-encoder.c | 17 +++++++++++++++++ hw/riscv/trace-encoder.h | 4 ++++ hw/riscv/trace-events | 1 + target/riscv/cpu.h | 2 ++ target/riscv/helper.h | 4 ++++ target/riscv/meson.build | 3 ++- target/riscv/trace_helper.c | 36 ++++++++++++++++++++++++++++++++++++ target/riscv/translate.c | 10 ++++++++++ 8 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 target/riscv/trace_helper.c diff --git a/hw/riscv/trace-encoder.c b/hw/riscv/trace-encoder.c index 37d882f66c..b6f0fc7e13 100644 --- a/hw/riscv/trace-encoder.c +++ b/hw/riscv/trace-encoder.c @@ -150,11 +150,15 @@ 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); + RISCVCPU *cpu =3D te->cpu; + CPURISCVState *env =3D &cpu->env; =20 if (!trTeActive) { te->enabled =3D false; te->trace_running =3D false; te->trace_next_insn =3D false; + + env->trace_running =3D false; return; } =20 @@ -170,6 +174,7 @@ static void trencoder_te_ctrl_postw(RegisterInfo *reg, = uint64_t val) } =20 te->trace_running =3D trTeInstTracing ? true : false; + env->trace_running =3D te->trace_running; } =20 static RegisterAccessInfo trencoder_regs_info[] =3D { @@ -231,6 +236,8 @@ static const MemoryRegionOps trencoder_ops =3D { static void trencoder_reset(DeviceState *dev) { TraceEncoder *te =3D TRACE_ENCODER(dev); + RISCVCPU *cpu =3D te->cpu; + CPURISCVState *env =3D &cpu->env; =20 for (int i =3D 0; i < ARRAY_SIZE(te->regs_info); i++) { register_reset(&te->regs_info[i]); @@ -239,6 +246,7 @@ static void trencoder_reset(DeviceState *dev) te->enabled =3D false; te->trace_running =3D false; te->trace_next_insn =3D false; + env->trace_running =3D false; } =20 static void trencoder_realize(DeviceState *dev, Error **errp) @@ -266,6 +274,14 @@ static void trencoder_realize(DeviceState *dev, Error = **errp) } } =20 +void trencoder_set_first_trace_insn(Object *trencoder_obj, uint64_t pc) +{ + TraceEncoder *trencoder =3D TRACE_ENCODER(trencoder_obj); + + trencoder->first_pc =3D pc; + trace_trencoder_first_trace_insn(pc); +} + static const Property trencoder_props[] =3D { /* * We need a link to the associated CPU to @@ -294,6 +310,7 @@ static const VMStateDescription vmstate_trencoder =3D { VMSTATE_UINT64(ramsink_ramstart, TraceEncoder), VMSTATE_UINT64(ramsink_ramlimit, TraceEncoder), VMSTATE_INT32(cpu_id, TraceEncoder), + VMSTATE_UINT64(first_pc, TraceEncoder), VMSTATE_END_OF_LIST(), } }; diff --git a/hw/riscv/trace-encoder.h b/hw/riscv/trace-encoder.h index 517675d062..2b3d9437ec 100644 --- a/hw/riscv/trace-encoder.h +++ b/hw/riscv/trace-encoder.h @@ -27,6 +27,8 @@ struct TraceEncoder { MemoryRegion reg_mem; uint32_t reg_mem_size; =20 + uint64_t first_pc; + hwaddr baseaddr; hwaddr dest_baseaddr; hwaddr ramsink_ramstart; @@ -43,4 +45,6 @@ struct TraceEncoder { =20 OBJECT_DECLARE_SIMPLE_TYPE(TraceEncoder, TRACE_ENCODER) =20 +void trencoder_set_first_trace_insn(Object *trencoder_obj, uint64_t pc); + #endif diff --git a/hw/riscv/trace-events b/hw/riscv/trace-events index 14e333fd9e..dc25377acf 100644 --- a/hw/riscv/trace-events +++ b/hw/riscv/trace-events @@ -28,6 +28,7 @@ riscv_iommu_hpm_evt_write(uint32_t ctr_idx, uint32_t ovf,= uint64_t val) "ctr_idx # trace-encoder.c trencoder_read_error(uint64_t addr) "addr 0x%" PRIx64 trencoder_write_error(uint64_t addr, uint64_t value) "addr 0x%" PRIx64 " v= alue 0x%" PRIx64 +trencoder_first_trace_insn(uint64_t pc) "pc 0x%" PRIx64 =20 # trace-ram-sink.c tr_ramsink_read_error(uint64_t addr) "addr 0x%" PRIx64 diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 5ebf7f663e..372292f71f 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -508,6 +508,8 @@ struct CPUArchState { uint64_t rnmip; uint64_t rnmi_irqvec; uint64_t rnmi_excpvec; + + bool trace_running; }; =20 /* diff --git a/target/riscv/helper.h b/target/riscv/helper.h index b785456ee0..e80320ad16 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -128,6 +128,10 @@ DEF_HELPER_4(csrrw, tl, env, int, tl, tl) DEF_HELPER_2(csrr_i128, tl, env, int) DEF_HELPER_4(csrw_i128, void, env, int, tl, tl) DEF_HELPER_6(csrrw_i128, tl, env, int, tl, tl, tl, tl) + +/* Trace helpers (should be put inside ifdef) */ +DEF_HELPER_2(trace_insn, void, env, i64) + #ifndef CONFIG_USER_ONLY DEF_HELPER_1(sret, tl, env) DEF_HELPER_1(mret, tl, env) diff --git a/target/riscv/meson.build b/target/riscv/meson.build index fdefe88ccd..564e2da5f2 100644 --- a/target/riscv/meson.build +++ b/target/riscv/meson.build @@ -26,7 +26,8 @@ riscv_ss.add(files( 'm128_helper.c', 'crypto_helper.c', 'zce_helper.c', - 'vcrypto_helper.c' + 'vcrypto_helper.c', + 'trace_helper.c' )) =20 riscv_system_ss =3D ss.source_set() diff --git a/target/riscv/trace_helper.c b/target/riscv/trace_helper.c new file mode 100644 index 0000000000..5a6d725f56 --- /dev/null +++ b/target/riscv/trace_helper.c @@ -0,0 +1,36 @@ +/* + * RISC-V Trace Support TCG helpers + * + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "qemu/log.h" +#include "qapi/error.h" +#include "cpu.h" +#include "trace.h" +#include "exec/helper-proto.h" + +#ifndef CONFIG_USER_ONLY +#include "hw/riscv/trace-encoder.h" +#endif + +#ifndef CONFIG_USER_ONLY +void helper_trace_insn(CPURISCVState *env, uint64_t pc) +{ + RISCVCPU *cpu =3D env_archcpu(env); + TraceEncoder *te =3D TRACE_ENCODER(cpu->trencoder); + + if (te->trace_next_insn) { + trencoder_set_first_trace_insn(cpu->trencoder, pc); + te->trace_next_insn =3D false; + } +} +#else /* #ifndef CONFIG_USER_ONLY */ +void helper_trace_insn(CPURISCVState *env, uint64_t pc) +{ + return; +} +#endif /* #ifndef CONFIG_USER_ONLY*/ diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 280ce48a1e..9dbc8649f0 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -43,6 +43,9 @@ static TCGv_i64 cpu_fpr[32]; /* assume F and D extensions= */ static TCGv load_res; static TCGv load_val; =20 +/* TODO: this should be a tb_flag instead of a global */ +static TCGv cpu_trace_running; + /* * If an operation is being performed on less than TARGET_LONG_BITS, * it may require the inputs to be sign- or zero-extended; which will @@ -1341,6 +1344,11 @@ static void riscv_tr_init_disas_context(DisasContext= Base *dcbase, CPUState *cs) =20 static void riscv_tr_tb_start(DisasContextBase *db, CPUState *cpu) { + TCGLabel *skip =3D gen_new_label(); + + tcg_gen_brcondi_tl(TCG_COND_EQ, cpu_trace_running, 0, skip); + gen_helper_trace_insn(tcg_env, tcg_constant_i64(db->pc_first)); + gen_set_label(skip); } =20 static void riscv_tr_insn_start(DisasContextBase *dcbase, CPUState *cpu) @@ -1465,4 +1473,6 @@ void riscv_translate_init(void) "load_res"); load_val =3D tcg_global_mem_new(tcg_env, offsetof(CPURISCVState, load_= val), "load_val"); + cpu_trace_running =3D tcg_global_mem_new(tcg_env, + offsetof(CPURISCVState, trace_running), "trace_running"); } --=20 2.51.1 From nobody Wed Jan 7 09:26:24 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1767034160; cv=none; d=zohomail.com; s=zohoarc; b=la7ya3pxRCHYqSDKVx+uxJWi2e1T5deX6bG95+aECaiLRBryvhcpgfwqTOa/0SyibTfvRgD13B2iKwyeG8V1YMLSCLsh/WB8pb640Ko+pW/Ek6Vv2Fx3K9JpK7YWlrQRS/ATPI6fB6bCkkQno2GUHHZqKFVuh4mDdanVYtWwgUs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767034160; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=0SfJ/yrK7FM0cvB/DgDChYJxB5rSfnncLQR9ksHFvOg=; b=jv57a6Stercal2srCX2sbj9w2zBSiNLl+ycSw0YnlQP3yipIK62Ggsdg/YNDLGq52G6yPNdkqz3PI6lgKR1aopxP/GLcZ0wMgRuTxhYnv+ycBGNKl6TCHrDCVzAc9JUKio5qTP5Tjm/D6z/36IKLLuQ5d/4FqEkpGjuU+1UXh3w= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 176703416045576.53895070463193; Mon, 29 Dec 2025 10:49:20 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaIIh-0004Bx-57; Mon, 29 Dec 2025 13:49:05 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIHO-0003i3-BD for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:47:49 -0500 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIHM-0008Fu-Dr for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:47:42 -0500 Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BTA97S43642171 for ; Mon, 29 Dec 2025 18:47:39 GMT Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ba6sg552u-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 29 Dec 2025 18:47:39 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2a0d43fcb2fso312899965ad.3 for ; Mon, 29 Dec 2025 10:47:39 -0800 (PST) Received: from grind.dc1.ventanamicro.com ([187.101.184.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a2f3c82aa8sm282198705ad.31.2025.12.29.10.47.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Dec 2025 10:47:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=0SfJ/yrK7FM 0cvB/DgDChYJxB5rSfnncLQR9ksHFvOg=; b=FYBcjTTQNxN1MkiWpYWxIp2sxra Ty3QKqkIE6f4XB3k9ZknuDmtSDBryzoczup4O3GbWt6F7k1JBJ73sM8DQOp+lXFp EEV5zjPd+aEaLlq4JsmtAEC9YffSTFByievIzs6wh2MIYVpGuR1Bec+unI3QiNOl yybg7y4fryIB9+RGb5n0fHDtuewzcB2omq9MasyaVu7dR6WMhsUhMqdO3QPfX2rQ QYHspEbJH8rlglrcmyvLl2bhrhBxfP1f5wxq9uZASdOq3EPZ64/z8rW3Vzbnd6hD niZXW7l/7dG4w1jsTdddLYb4RvejKH7/y1DoM6ad409mS4WR+LnfrQPn3+Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767034058; x=1767638858; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=0SfJ/yrK7FM0cvB/DgDChYJxB5rSfnncLQR9ksHFvOg=; b=dJLjlvgEcsnV2uDGfP0VScfivI0ss/WafOyLqYT1V9etex7W5MUHw0MzGFR2ztF6DM fMdF1KcCrvvAirRApgsoWEGuiUEm86MUv81J//1tdD3NCOVOFzFO5Psg05RZL8klLZHC sqxYOm0GUw/KQgTVU1vx62IVgRP8MgkL98TWGUjkRL4bHzuVy9K08qqUQVYC50060JHb j1bgIvaxm/hl8J+108qLPUC/4sWkC7Uv8gVxG8W7Akk9eN3ylGJGsyRrZUyVnbaw4W33 d8/MLLzl7OKHhAt1VaXDTou53ffLWqN5EgkQ3ChGnzkXvrGznEUPaFkjHZcBB+Bk+7xs rhzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767034058; x=1767638858; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=0SfJ/yrK7FM0cvB/DgDChYJxB5rSfnncLQR9ksHFvOg=; b=V77eG761jNGii5RARFd97QWMkWCmtoUAyvbM4LlCtIVlaaNyzRthbINs3tYAmywk0F pq62TKPfduf5wBMCVKsy/QoDe5EhL4qImal+ng+BhpAHbM6ttE5U941K7ow1IGCjcmFY 2uGA+txgsgEAVQKsvwbtHBxOY9vpXWRhBCy006OAy4V+h3vX1jFP3eowVjdnTH+SLXE8 7a73C+2/khWqsljJv48eotyPlc+mGP1dHtOomX4QzBO+unbGDYU6PDPgHKy2a0awQP0+ CEDoRBK2dpNVp52RVc7QsvrBZHMpr60gl3PjQweO845ZhD5HWJBJrGfFEfJpRO2Uu6E1 iMRA== X-Gm-Message-State: AOJu0YwjngV08pZVaJrwGOrI2IgrdY10V52nToHU/CC2URaunOPkII7z KfuX1lprY9NixBtG9itohPfFxtaZkPusVqKTPdCQt9XlRDvAD0EBdGQym6gWEXjnuZwhwM15c/r XoDwjn0bReOkWXaF56g0wfeZTGPfTUBw1DqHzLuFRyPIGty+Cw47sQERKS6MSwqopEA== X-Gm-Gg: AY/fxX6thgMEf0I3gcgoFjxk0iH71Gn8vSthWn4krqQGPFqy2Bwp+/W9KueZUA3ioCs l6sRwFRpTSaiLaMRQCcVkVZD39nP15N0YKJ2dDWot4lCc0HDoLH0vSITIeoUXy9Ll+DapGitK23 ishR9/3p98IneRVi94BKGorHLB7Ua0MkTtHJDTZaS7nAFWROLUaiPwwUiU3TxWN+WicL5CWOxq0 IlLPkXdA7KXiv8m7IvBKyYg6P8A7PU0NisqzCv4Te6n3ncqARzEKkeCMpM+9hKYgZXY/n2GRcCz ElKErcEeHz5izYpRAadZMtQyjuaw3nQI2zDd2D38JP+v7csa5xlX0xIZhZODhq7eh0Ud+F0dazi WQBRM0o50NYZSoFKrDcaJPLcZ3WKPjJSniBChaSGinQDrRmA= X-Received: by 2002:a17:902:e747:b0:2a0:b02b:2114 with SMTP id d9443c01a7336-2a2f220697cmr307093015ad.11.1767034058179; Mon, 29 Dec 2025 10:47:38 -0800 (PST) X-Google-Smtp-Source: AGHT+IHGxFPgFbZIcP8g2AqN/0ZC/0QlJdoERnhzHIOleGTAd1X2a6Icv02zGQb3L7pIfzIPJB07qA== X-Received: by 2002:a17:902:e747:b0:2a0:b02b:2114 with SMTP id d9443c01a7336-2a2f220697cmr307092835ad.11.1767034057697; Mon, 29 Dec 2025 10:47:37 -0800 (PST) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, palmer@dabbelt.com, Daniel Henrique Barboza Subject: [PATCH v3 08/17] hw/riscv/trace-encoder: write e-trace packets to RAM sink Date: Mon, 29 Dec 2025 15:46:47 -0300 Message-ID: <20251229184656.2224369-9-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> References: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: SWDALwAizKSOJ42WDtYGaMXvOGgvbPId X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDE3MiBTYWx0ZWRfX18DV/xF8kCLo PAM5gO7kisMjLqCZMUjJqoyey/XjtWoGWQlGvjfYWybizrRh6R9+T0Vo6vo+FKQqSAC6ZanJCEZ I7TIvP6gJvcj217gjWeWUydUx7eA2uW9eq14ICl7SjwhL3tEICcSiK3Vp3w5cNCCskBhyXt7WJ+ RXPusnzOOXK7HR0QmADwAeUoHHOujBwJwgoe6HL6M2gS9HgzcrFAUEcMTzG2xRy3rBzt0xZAt+I Nr7K3487uistH7HmTbzkL7ttguQpwpHlNzSsjSJ//zv3cAq9RspVqolELWoeFrd3N49rCokZ6nl WFui9vUFnQUW1SO2CiCW4xaXh5ZdJDhuwz5TkHilyydXd8xq/Jv9SzeV+W/rD3XQAwlsjXQi4T5 WzNsrzPK7x2tmN3Cw8w55LgOR0looxYVkwJXJ3QYHcIvKWpoMGaPsqK5c3gENVsSkSP7mq5qNpK QrgrjyTe/bbd6H/psUA== X-Proofpoint-ORIG-GUID: SWDALwAizKSOJ42WDtYGaMXvOGgvbPId X-Authority-Analysis: v=2.4 cv=Y+L1cxeN c=1 sm=1 tr=0 ts=6952cccb cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=cW5wcbexNO3A0Ml9TiDm9w==:17 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=R6bvkyUyvnGTYty0lT0A:9 a=GvdueXVYPmCkWapjIL-Q:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-29_06,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 spamscore=0 malwarescore=0 clxscore=1015 phishscore=0 lowpriorityscore=0 priorityscore=1501 suspectscore=0 bulkscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512290172 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1767034162183158500 Content-Type: text/plain; charset="utf-8" We have the needed pieces to make the trace encoder write messages (or packets, in e-trace lingo) in its associated RAM sink. We'll start by writing a sync message that we're already able to fetch from the TCG instruction train. The trace encoder must be able to read/write TR_RAM_WP RAM sink regs to know where it is supposed to write packets, thus a handful of helpers are added to manipulate both the ram sink SMEM memory and relevant registers. The bulk of the work is done in trencoder_send_message_smem() where the trace encoder writes each trace packet. The 'wrap' mechanism is implemented to keep writing the RAM sink memory even after a SMEM workflow. If we can't fit a full packet in the end of the ring buffer we're filling with NULLs and writing a new packet back to ramstart. In an overflow event we'll wrap the TR_RAM_WP_LOW WRAP bit and userspace is supposed to clear it after the wrapping was handled (i.e. userspace read the whole ring buffer back to the start). We're also allowing userspace to freely set ramsink and ramstart before the trace session begins, allowing for more freedom w.r.t where the SMEM will be written by the encoder. Note that this also means that userspace is responsible for setting at least TR_RAM_WP_LOW and TR_RAM_WP_HIGH before starting a trace session. Signed-off-by: Daniel Henrique Barboza --- hw/riscv/trace-encoder.c | 121 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) diff --git a/hw/riscv/trace-encoder.c b/hw/riscv/trace-encoder.c index b6f0fc7e13..3ffe4dfe61 100644 --- a/hw/riscv/trace-encoder.c +++ b/hw/riscv/trace-encoder.c @@ -20,6 +20,34 @@ #include "system/device_tree.h" #include "hw/register.h" #include "cpu.h" +#include "hw/riscv/trace-ram-sink.h" +#include "rv-trace-messages.h" + +/* + * Size of header + payload since we're not sending + * srcID and timestamp. + */ +#define TRACE_MSG_MAX_SIZE 32 + +static TracePrivLevel trencoder_get_curr_priv_level(TraceEncoder *te) +{ + CPURISCVState *env =3D &te->cpu->env; + + switch (env->priv) { + case PRV_U: + return env->virt_enabled ? VU : U; + case PRV_S: + return env->virt_enabled ? VS : S_HS; + case PRV_M: + return M; + } + + /* + * Return a reserved value to signal an error. + * TODO: handle Debug (D). + */ + return RESERVED; +} =20 /* * trTeControl register fields @@ -82,6 +110,41 @@ REG32(TR_TE_IMPL, 0x4) REG32(TR_TE_INST_FEATURES, 0x8) FIELD(TR_TE_INST_FEATURES, NO_ADDR_DIFF, 0, 1) =20 +static uint32_t trencoder_read_reg(TraceEncoder *te, uint32_t reg_addr) +{ + hwaddr addr =3D te->dest_baseaddr + reg_addr; + uint32_t val; + + cpu_physical_memory_read(addr, &val, sizeof(uint32_t)); + return val; +} + +static void trencoder_write_reg(TraceEncoder *te, uint32_t reg_addr, + uint32_t val) +{ + hwaddr addr =3D te->dest_baseaddr + reg_addr; + + cpu_physical_memory_write(addr, &val, sizeof(uint32_t)); +} + +static hwaddr trencoder_read_ramsink_writep(TraceEncoder *te) +{ + hwaddr ret =3D trencoder_read_reg(te, A_TR_RAM_WP_HIGH); + ret <<=3D 32; + ret +=3D trencoder_read_reg(te, A_TR_RAM_WP_LOW); + + return ret; +} + +static hwaddr trencoder_read_ramsink_ramlimit(TraceEncoder *te) +{ + hwaddr ret =3D trencoder_read_reg(te, A_TR_RAM_LIMIT_HIGH); + ret <<=3D 32; + ret +=3D trencoder_read_reg(te, A_TR_RAM_LIMIT_LOW); + + return ret; +} + static uint64_t trencoder_te_ctrl_set_hardwire_vals(uint64_t input) { input =3D FIELD_DP32(input, TR_TE_CONTROL, INST_MODE, 0x6); @@ -171,6 +234,9 @@ 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 */ te->trace_next_insn =3D true; + + te->ramsink_ramstart =3D trencoder_read_ramsink_writep(te); + te->ramsink_ramlimit =3D trencoder_read_ramsink_ramlimit(te); } =20 te->trace_running =3D trTeInstTracing ? true : false; @@ -274,12 +340,67 @@ static void trencoder_realize(DeviceState *dev, Error= **errp) } } =20 +static void trencoder_update_ramsink_writep(TraceEncoder *te, + hwaddr wp_val, + bool wrapped) +{ + uint32_t wp_low =3D trencoder_read_reg(te, A_TR_RAM_WP_LOW); + + wp_low =3D FIELD_DP32(wp_low, TR_RAM_WP_LOW, ADDR, + extract64(wp_val, 2, 30)); + + if (wrapped) { + wp_low =3D FIELD_DP32(wp_low, TR_RAM_WP_LOW, WRAP, 1); + } + + trencoder_write_reg(te, A_TR_RAM_WP_LOW, wp_low); + trencoder_write_reg(te, A_TR_RAM_WP_HIGH, extract64(wp_val, 32, 32)); +} + +static void trencoder_send_message_smem(TraceEncoder *trencoder, + uint8_t *msg, uint8_t msg_size) +{ + hwaddr dest =3D trencoder_read_ramsink_writep(trencoder); + bool wrapped =3D false; + + msg_size =3D QEMU_ALIGN_UP(msg_size, 4); + + /* clear trRamWrap before writing to SMEM */ + dest =3D FIELD_DP64(dest, TR_RAM_WP_LOW, WRAP, 0); + + /* + * Fill with null 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; + + null_packet =3D g_malloc0(null_size); + cpu_physical_memory_write(dest, null_packet, null_size); + + dest =3D trencoder->ramsink_ramstart; + wrapped =3D true; + } + + cpu_physical_memory_write(dest, msg, msg_size); + dest +=3D msg_size; + + trencoder_update_ramsink_writep(trencoder, dest, wrapped); +} + void trencoder_set_first_trace_insn(Object *trencoder_obj, uint64_t pc) { TraceEncoder *trencoder =3D TRACE_ENCODER(trencoder_obj); + TracePrivLevel priv =3D trencoder_get_curr_priv_level(trencoder); + g_autofree uint8_t *msg =3D g_malloc0(TRACE_MSG_MAX_SIZE); + uint8_t msg_size; =20 trencoder->first_pc =3D pc; trace_trencoder_first_trace_insn(pc); + msg_size =3D rv_etrace_gen_encoded_sync_msg(msg, pc, priv); + + trencoder_send_message_smem(trencoder, msg, msg_size); } =20 static const Property trencoder_props[] =3D { --=20 2.51.1 From nobody Wed Jan 7 09:26:24 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1767034348; cv=none; d=zohomail.com; s=zohoarc; b=lFTE35UKrQ8txrndya4R3haiE4QnG5XEZWA4BDGlCLC+3u5kc6qMZWv2kfVhgoHx62t++ZSwRYuTojp7eksEO/en1NIWwthYgVZJsLc3Q7/JwWbgxccy2ild6c4cxmAddyRA16aR0Xk3LSBWE+SJf61YvVtTPylKeJI4UDqEbsk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767034348; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=jB7s287ImVQmlj6vQ16omhmtdA6siCilAT9/Kg/k5fQ=; b=ezeRedzzXXIAJ3DizHxhmVM9wjOteV9WUZ6yIh14Jb90gZGnygmfHZIg9fnJlxpvNOEo65S+gPLmJM9eo9yCPqF+YQrIDxTDW+M7FScBfq+HSfm0dSp/bhPOBLq4q5zpYjiEnob6mNve0XLo5QsQkhv33puvqrce0QHHZWxvSzw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1767034348168798.4969976273094; Mon, 29 Dec 2025 10:52:28 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaIIy-0004p5-CD; Mon, 29 Dec 2025 13:49:20 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIHR-0003ir-VI for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:47:53 -0500 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIHO-0008Go-VO for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:47:45 -0500 Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BTAaeTY3707398 for ; Mon, 29 Dec 2025 18:47:42 GMT Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ba6sg552v-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 29 Dec 2025 18:47:42 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-29f13989cd3so282592805ad.1 for ; Mon, 29 Dec 2025 10:47:41 -0800 (PST) Received: from grind.dc1.ventanamicro.com ([187.101.184.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a2f3c82aa8sm282198705ad.31.2025.12.29.10.47.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Dec 2025 10:47:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=jB7s287ImVQ mlj6vQ16omhmtdA6siCilAT9/Kg/k5fQ=; b=VLtH81F7BmBUEb0lXrP0bnHkXw9 aYAfI+O/tUt4kTeltNqS9n99qkFrsysj5ETqyKTL073kQHpvsVQLixmWk9Tgalog YixPmSD69Fkml0OFRjDaIoiLeYZpihOl5+HrkcLJZsn6jHaIGpfx6GjCZvd3YboH JGVfpNt6L7k8j16XNbgMXTaHop9WGibdwODEf02QpmmE5w600ZcXLrtZ6xP6dmhC AVoc/OzuzdccRBCHG1cFK50NoYFP6CumzVxi5ex2RMykeNhl1Fxbhp2Vg3oXk9GQ juvUXpJVqrn2jcLn9uCGuaFeNtVg+2/Fkp6179FpG7aYFQwmt5lK5ubTv0w== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767034061; x=1767638861; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=jB7s287ImVQmlj6vQ16omhmtdA6siCilAT9/Kg/k5fQ=; b=RDK+df537Dgc6XVOm91UydirSyKAEVhoPM9jgo1vnwqdoD/uei2oU239qPs46ny1Zc pUFVy6xPXycOV3NfjGuV8ejnp9BfavHfj54SEORHxcUmih9phm8Jd7pCSz6XpC1uwfq4 BKkETvUlYDtcBqhMiboFzM2rwbB60sEjGn5X5pQMmXrpVhloWaP0HT+6Pbg6GLczVXrx tN5hZ6BoeXI5SiqWH3GDYZWsW2lLbPMOINsYtPeAvdDrygUlgW8vTvT7Ng2YKIu3K4u8 21wbQVUSi2OjkZmTO6VBfAIBqSnAYv0jvNHcW4cKxwG7zikFnIYbqDUq7bNKXBG1+4im KwRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767034061; x=1767638861; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=jB7s287ImVQmlj6vQ16omhmtdA6siCilAT9/Kg/k5fQ=; b=f6h4eWYH/j0fbbwQcZVXmqcGWqoAsaFux8cocVtpc6ZKBXossEusKcKI690xhrrMq9 JbX+8ueGACbL8oBfaphTqU6/d3m7rTiOPZm5EAganif/RUvUHGiBPm5FOMANFPEhDjxj 6QATeLhlfTyQ98Qk/KSY/vA87sGgUF/y6s31roJRhsF3GxAEoeamUFGzoFoaQ9bArhPN watG3BwKuqjjBm83HafH/G2ubHQFEJT9YeW3v1+1/Wod0IbUef0/Lr+M7wwN0CWqEbxb jciFWoiMFo+l1SoKDN5CwKpua7gDjL+8NEeQWBV9lHUIC2U3JzMLETHaGlRy+WFmwHh6 M+3A== X-Gm-Message-State: AOJu0YzQIrWiUftVZX7lfQ/YJkSruvRT1/BJ96iJPo41ePcNPiRNGKcC gZg69JAsMryYspnTha5ofUUDCd6ZUQOhP54Ita8F0bgLV7LjqhOVDydBqCvYchlgbX1ZZ53YcWE u8jgwLhYXbC6vKaI+EBYeBcW0FDjjrhiDLzsZpwtp28bSEJHno+RHbGluWsoEv2GvEg== X-Gm-Gg: AY/fxX5f8SNox/cu0VPf2t3ZJYcxChRMHswPRAPyAiBerTZvtj9V6/Ioh7DARkO++u7 xINAj/4BfHWQZZjEXaW0D5k9plrmfL6X9GXWbTlZBbmncobCbxSe7HP3oH/aKau+TKXFRjoGfT/ aiyIMwfr4r8H5brhp3FzKL8CHe62hb+tcx6dHr4tJifdlwC3tVQMAkDFD3A1e/VySHjImnqZ7GE 1QDntss/f9aHAmJCiDT0+Qkffm+LPfvOEWcMrqX4KNSPSubh7IsQs3466wk4NKXp4BCAvhsGuP4 27BLp4ycmkpnmukFUsMaA/4xduvh1vRSq0DPhv4zoeninhvXBSPQJfeBLfmWdZvnZQz7J2qnT6b NUEDNh30voD169iyMPCx4KasQgAeOs9sGodZXx3l0AzzMzTE= X-Received: by 2002:a17:903:1a2b:b0:295:592f:94a3 with SMTP id d9443c01a7336-2a2f2936a66mr293042965ad.48.1767034060851; Mon, 29 Dec 2025 10:47:40 -0800 (PST) X-Google-Smtp-Source: AGHT+IGG4PGjIDKZvISzv0K0Km/vcEOLU4R/VajQi0ba4hrtm6yR57YMPgHkWNtUaJOnw6VP5s4nag== X-Received: by 2002:a17:903:1a2b:b0:295:592f:94a3 with SMTP id d9443c01a7336-2a2f2936a66mr293042755ad.48.1767034060332; Mon, 29 Dec 2025 10:47:40 -0800 (PST) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, palmer@dabbelt.com, Daniel Henrique Barboza Subject: [PATCH v3 09/17] test/qtest: add riscv-trace-test.c Date: Mon, 29 Dec 2025 15:46:48 -0300 Message-ID: <20251229184656.2224369-10-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> References: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: XO6ygFyfLIIlN4QADxui6Zj7x2rGT9m6 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDE3MiBTYWx0ZWRfX+YA4WliISv2d i3HDO4mL0qjsjiyYHSDNINim5O3a4eENJiQqJG4n73+EoPe3FsSC15PNR1bePaMiUCMQKHxXYPZ S5cBqAHOqfgpge0ZMwad5VQwUJ9l1SYiuWCL7ikiJ/sKl4nAbUSKK5ocF+idut5MwkLNuymFN+Y FVY2JD8XiPBpkzAAKwux/pn8zfe5B0GW/r3dOjE/+fOwSmrqXzBfULuJRcEnFPFwbSeO7PHEU+6 q2jS8lNwouU+3hEYWixfbb6++8s/sRlHQd3zdjEYHu2NyaTe6n7fzyrXvuragjV1PO+ndkIEkpr a0BV2s/l/TDxU5QvQOtVJWtVVBz2Y/f9i7hWgKIqKYjdX9aDsEiNPBLwx+oXmJN5DUQNRIHnjOf vpXW27gAFaeBRdgAzlcHirCgbTcaDxf8ZRPLBycQU2q0ro7x+molzQ+9/GIRWeKPVVwCf4zxmTh OM6MY8JulCOolD6IfPw== X-Proofpoint-ORIG-GUID: XO6ygFyfLIIlN4QADxui6Zj7x2rGT9m6 X-Authority-Analysis: v=2.4 cv=Y+L1cxeN c=1 sm=1 tr=0 ts=6952ccce cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=cW5wcbexNO3A0Ml9TiDm9w==:17 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=cHopOgYuk8M715C2ZhYA:9 a=1OuFwYUASf3TG4hYMiVC:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-29_06,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 spamscore=0 malwarescore=0 clxscore=1015 phishscore=0 lowpriorityscore=0 priorityscore=1501 suspectscore=0 bulkscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512290172 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1767034348938158500 Content-Type: text/plain; charset="utf-8" Add a simple smoke test for the trace encoder/trace ram sink integration with the RISC-V 'virt' machine. Signed-off-by: Daniel Henrique Barboza --- hw/riscv/virt.c | 2 +- tests/qtest/meson.build | 2 +- tests/qtest/riscv-trace-test.c | 120 +++++++++++++++++++++++++++++++++ 3 files changed, 122 insertions(+), 2 deletions(-) create mode 100644 tests/qtest/riscv-trace-test.c diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index 30e89a6c5a..fe49b1eda2 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -1711,7 +1711,7 @@ static void virt_machine_init(MachineState *machine) hart_count, &error_abort); sysbus_realize(SYS_BUS_DEVICE(&s->soc[i]), &error_fatal); =20 - if (tcg_enabled()) { + if (tcg_enabled() || qtest_enabled()) { virt_init_socket_trace_hw(s, i); } =20 diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build index 669d07c06b..07663c4836 100644 --- a/tests/qtest/meson.build +++ b/tests/qtest/meson.build @@ -281,7 +281,7 @@ qtests_s390x =3D \ qtests_riscv32 =3D \ (config_all_devices.has_key('CONFIG_SIFIVE_E_AON') ? ['sifive-e-aon-watc= hdog-test'] : []) =20 -qtests_riscv64 =3D ['riscv-csr-test'] + \ +qtests_riscv64 =3D ['riscv-csr-test', 'riscv-trace-test'] + \ (unpack_edk2_blobs ? ['bios-tables-test'] : []) =20 qos_test_ss =3D ss.source_set() diff --git a/tests/qtest/riscv-trace-test.c b/tests/qtest/riscv-trace-test.c new file mode 100644 index 0000000000..fe1cc85358 --- /dev/null +++ b/tests/qtest/riscv-trace-test.c @@ -0,0 +1,120 @@ +/* + * Testcase for RISC-V Trace framework + * + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" + +#include "qemu/timer.h" +#include "qemu/bitops.h" +#include "libqtest.h" +#include "hw/registerfields.h" + +/* taken from virt machine memmap */ +#define TE_BASE 0x3020000 +#define TRAM_BASE 0x6000000 + +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) + +REG32(TR_RAM_START_LOW, 0x010) + FIELD(TR_RAM_START_LOW, ADDR, 0, 32) +REG32(TR_RAM_START_HIGH, 0x014) + FIELD(TR_RAM_START_HIGH, ADDR, 0, 32) + +REG32(TR_RAM_LIMIT_LOW, 0x018) + FIELD(TR_RAM_LIMIT_LOW, ADDR, 0, 32) +REG32(TR_RAM_LIMIT_HIGH, 0x01C) + FIELD(TR_RAM_LIMIT_HIGH, ADDR, 0, 32) + +REG32(TR_RAM_WP_LOW, 0x020) + FIELD(TR_RAM_WP_LOW, WRAP, 0, 1) + FIELD(TR_RAM_WP_LOW, ADDR, 0, 32) +REG32(TR_RAM_WP_HIGH, 0x024) + FIELD(TR_RAM_WP_HIGH, ADDR, 0, 32) + +static uint32_t test_read_te_control(QTestState *qts) +{ + return qtest_readl(qts, TE_BASE + A_TR_TE_CONTROL); +} + +static void test_write_te_control(QTestState *qts, uint32_t val) +{ + qtest_writel(qts, TE_BASE + A_TR_TE_CONTROL, val); +} + +static uint64_t test_read_tram_ramstart(QTestState *qts) +{ + uint64_t reg =3D qtest_readl(qts, TRAM_BASE + A_TR_RAM_START_HIGH); + + reg <<=3D 32; + reg +=3D qtest_readl(qts, TRAM_BASE + A_TR_RAM_START_LOW); + return reg; +} + +static uint64_t test_read_tram_writep(QTestState *qts) +{ + uint64_t reg =3D qtest_readl(qts, TRAM_BASE + A_TR_RAM_WP_HIGH); + + reg <<=3D 32; + reg +=3D qtest_readl(qts, TRAM_BASE + A_TR_RAM_WP_LOW); + return reg; +} + +static void test_trace_simple(void) +{ + QTestState *qts =3D qtest_init("-machine virt -accel tcg"); + double timeout_sec =3D 0.5; + uint64_t reg_tram_start, reg_tram_writep; + uint32_t reg; + + 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)); + + 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)); + + /* + * 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); + + 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(); + for (;;) { + 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); +} + +int main(int argc, char *argv[]) +{ + g_test_init(&argc, &argv, NULL); + qtest_add_func("/riscv-trace-test/test-trace-simple", + test_trace_simple); + return g_test_run(); +} --=20 2.51.1 From nobody Wed Jan 7 09:26:24 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1767034159; cv=none; d=zohomail.com; s=zohoarc; b=X+YUbzaQo65zeJH41B5IQzefk1dIDi/TQwqQHacbRQu69eKftGDL6NuOCjTuwahqBNaEqENZmVMnVur8vX3/QFcU9Ql4ZZO34vZykRJFGIPl5dMAKaOGg1ZrRVGMgaOIGkwVTDYA5QL2+mbNmbMIvKbZiapR6czg429Pbk1L6O8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767034159; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=tp0xAKCIsiOyuDIYPNhKM0ElkMTXFmF7zzzBe8OdL2w=; b=gLUBGC4r6M3SiZlCNn2LKbYjAw2ZyE7Ne62xMDENSOBx+398Kg80eXzFdiBgz9Ause6h+wj1PVVieiFJgnz22skbCeGcOIvGpxIXtJ5BabAKpmVP/xiJ+sQI2TbDuIJcIBLhiLJ6tD4rTY/UAZNk+L1fk/rngYzUFLdQHbyNlas= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1767034159792589.9839471880576; Mon, 29 Dec 2025 10:49:19 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaIIr-0004Nd-5V; Mon, 29 Dec 2025 13:49:13 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIHj-0003kk-2X for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:48:08 -0500 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIHR-0008HC-VF for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:47:47 -0500 Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BTADLpr3528353 for ; Mon, 29 Dec 2025 18:47:44 GMT Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bbc8ytdq4-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 29 Dec 2025 18:47:44 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-29f2b45ecffso152678015ad.2 for ; Mon, 29 Dec 2025 10:47:44 -0800 (PST) Received: from grind.dc1.ventanamicro.com ([187.101.184.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a2f3c82aa8sm282198705ad.31.2025.12.29.10.47.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Dec 2025 10:47:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=tp0xAKCIsiO yuDIYPNhKM0ElkMTXFmF7zzzBe8OdL2w=; b=WGCV1IDa3OLOZZunzrHGAWwrJIR /eRKC6FjFV/7R++KutAwMLDMyIWKWt9dWtLFki55MOvxNkstxov0kVWz3Nw1DVqJ CKZm4pnHz9N/7rXhoIZRv6/Ik/iw7Zm+kuIQC7zfKNgPZN0OY6vquRb1oNOEKO13 FHkmw/GIsKRadpgr44Pef4i4T+LxWHytzez1Pm3oUrdVKJazSaVPpjfKwxLutLrM 9MKRt7Symgg3DEChfwD+3ZAS80qYcI3bQKj3h/v97Kkyk1hQL+eGg8RIVjEyA5YI Lu9nqeQ9ZxlQWXW5ZaBFNt4UJGYOzr8xYSR7F/Em7662XT00E1EIOpqhCcQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767034064; x=1767638864; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=tp0xAKCIsiOyuDIYPNhKM0ElkMTXFmF7zzzBe8OdL2w=; b=AMkjPWJvVzDpeFbDEFpfxCqEtpABSpROIZLfjhBVxVDV/3HfOV+HMY4xS6Ym2IzmrH fn4tpWZ22vzvkWLj8vxdkYGvem45r9iHDQ7abXU1jaBo6o2UJQbEVDaygKQAvkwu64Qv 1XgTKaHpguqhbgAYDVdXkezP1rcp1ChYd7QWI1zUkY6ryDJ/IW+zb+3DkZz/kOH4Vi0+ Ouqvrm/f9OpxdsQ9S7uCz2E8bM0IXhsVxBuuNm2wqp7I3y/oaSG+0b/hmCoKv9Z5uQQ9 QuiNgN6DfkPH0cClceH9FypFsTVAnyGppqBHrTtDs2McXBlMa+HRX6FKhbczntz9R5/N ZI7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767034064; x=1767638864; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=tp0xAKCIsiOyuDIYPNhKM0ElkMTXFmF7zzzBe8OdL2w=; b=oRfkmhIqy4yWwUPzK0pU9H8D1m6iXoITs5bMCTxomuLxWb2He3mHzwh0Wg9hC4ZCd+ 7ILBywaNIr7l7su2hNeqUqjjI14CxgLUtu9bCUDP7Xkbw8//NGM1bEMCG6O22XmNIECg cxH26wUbzhskSTy+YlZXq40kBPraCGJ/AGYNz6xUEMIjgao+V0YMhHMXN54oEIQZ2n9c wKrHsAZfhSOJq1rDAXhjkYr2cTNxtw4MaEoSMo1SADUR6saWYtdXeVvJG02ySdhtfpSj V1IDcvNEKoAJNieOkYN+Y4W6V+RZHAF2Gg9YNsZ9KTsFMnvdXDfIQqsdGJG/8AQ3D/uF 6MaA== X-Gm-Message-State: AOJu0Yxb35k5xp6mzaSP/p8RvoloP9mJsMPbS0P52wcDGbmfsI8k3V/5 GwlTqw8130ODbS3Y+Tw64XOOZPPxn0NXVzqBC8pfTaNXTWzOdtCDoqTaHRZZlWYYLDIUl7khHmF PZeNNlAesl80pXvu12wfstcNijcjz8gM7WLATYnwTQ1pf9SCVUZD6IX2LEvFoyWZ2xQ== X-Gm-Gg: AY/fxX7PbzElrpKcRZAy4XuenR/t2ilgevE5SkG2old0PUF6H+jFhK4dD2onZtu3xGa Nh7CkD7WVG7jsssDrORj9lZyEtOBjWUPKGwYSYrgEu22Jy1fV5RicOnbUXQjg0gPDhGUURnoNfv DoPkos1mRdIDeSrrQ5oyvWvhhoXAkYWwb6oXcruhjpjOHck+kq2aIk01XL0lPDM7oT7Mgve9LIa 2KrWuDVjgPn0yIswidxC4P2N3xAqq8ntU/517xVjZvN0nUiECgM4Lpj0T+7ePihW+oct5PhJ05a PITX8uCjuH9EPK2zRhNNyTFKZsf/WWeDiVPRwAgp8AtBajy0b+/xIlJQvqikCUhGDK/PF4UWfwR 6L3LewL+I//kaZglPSBJtMyH59Bxhe1zsxvgMtPmDvRZfJt4= X-Received: by 2002:a17:903:190d:b0:2a0:a09b:7b0 with SMTP id d9443c01a7336-2a2f2c5f2d3mr319451835ad.61.1767034063575; Mon, 29 Dec 2025 10:47:43 -0800 (PST) X-Google-Smtp-Source: AGHT+IHoapqbFrJEBYDko95Ed7uWx+m1yoswfpfA3czAhhpo1bSxP34F1GgSYblWmf7sA00sjYYJrA== X-Received: by 2002:a17:903:190d:b0:2a0:a09b:7b0 with SMTP id d9443c01a7336-2a2f2c5f2d3mr319451635ad.61.1767034063029; Mon, 29 Dec 2025 10:47:43 -0800 (PST) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, palmer@dabbelt.com, Daniel Henrique Barboza Subject: [PATCH v3 10/17] hw/riscv/rv-trace-messages.c: add encoded trap message Date: Mon, 29 Dec 2025 15:46:49 -0300 Message-ID: <20251229184656.2224369-11-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> References: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDE3MiBTYWx0ZWRfX9a2vBc5O1TBy D3Adn04UesNP6Jo+rZhylEL65/2tWrm/50V06vA67JnII8+9WOZjAd3/OJjIR3uZxAvgnkRjcwB EeOvudnMzhUiXMkFxW5UiGNR611x/9V6OECNy/KmR/KAzzzVws7rsbKoTjbYfmN4nSR4tKj5/NN fl7cT3MhJiNM73lp10tD76BKOwNFT/sWe88iqPpNJHqzsqnu3QsmvJG9Fo+6EuBp2f90h7R5ahx +lwo0nxsK4KiSxmZRAuyl6LeZwgkqXjs+2YQIki33t2IZndUuWi4ORkp2aMJpWgNC4pKHiXjzi6 uSeGB0qt24iYDbeRY0Y50zR8f7LKq2ScxcULt4B5bCLgjDziUvAudXQuRfQAt2KRfMxxGjDytGk qkaDfAW4LhVGBE4PXcFvODeV9F7P0kari/mgC0FBou5sXvtH5eJVekY9njX7SY6v5z4J8V19leK dVNX9gaIs8Aeg5qDtxQ== X-Authority-Analysis: v=2.4 cv=cP7tc1eN c=1 sm=1 tr=0 ts=6952ccd0 cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=cW5wcbexNO3A0Ml9TiDm9w==:17 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=3vbdxVTLcZzJT87cJXQA:9 a=1OuFwYUASf3TG4hYMiVC:22 X-Proofpoint-ORIG-GUID: ggsiEi9DaR5SzWtkx9Thmc_V9_0LDXww X-Proofpoint-GUID: ggsiEi9DaR5SzWtkx9Thmc_V9_0LDXww X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-29_06,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 malwarescore=0 lowpriorityscore=0 impostorscore=0 adultscore=0 bulkscore=0 suspectscore=0 spamscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512290172 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1767034162263158500 Content-Type: text/plain; charset="utf-8" The trap message consists of a Format 3 Subformat 1 e-trace message. According to the Efficient Trace for RISC-V spec, section "Format 3 thaddr, address and privilege fields", the 'thaddr' will be zero if: - we can't infer the EPC after an uninferable PC discontinuity (like traps). This doesn't happen in our current TCG backend - we'll always know the trap EPC in riscv_cpu_do_interrupt(); - a second interrupt/exception happens while the handler of the first trap hasn't exited. This also doesn't happen in TCG given that we do not emulate a multi-insn pipeline model, i.e. we'll only retire one insns at a time. This means that we'll always send trap packets with 'thaddr' set to 1, thus we're hardcoding it in the message helper. Signed-off-by: Daniel Henrique Barboza --- hw/riscv/rv-trace-messages.c | 82 ++++++++++++++++++++++++++++++++++++ hw/riscv/rv-trace-messages.h | 5 +++ 2 files changed, 87 insertions(+) diff --git a/hw/riscv/rv-trace-messages.c b/hw/riscv/rv-trace-messages.c index 668db0c772..db5f7c2d26 100644 --- a/hw/riscv/rv-trace-messages.c +++ b/hw/riscv/rv-trace-messages.c @@ -18,6 +18,7 @@ typedef enum { HEADER_SIZE =3D 1, SYNC_PAYLOAD_SIZE_64BITS =3D 9, + TRAP_PAYLOAD_SIZE_64BITS =3D 18, } RVTraceMessagePayloadSize; =20 typedef struct RVTraceMessageHeader { @@ -38,6 +39,23 @@ typedef struct RVTraceSyncPayload { uint32_t addressHigh; } RVTraceSyncPayload; =20 +/* + * Format 3 subformat 1 without 'time' and 'context' fields + */ +typedef struct RVTraceTrapPayload { + uint8_t format:2; + uint8_t subformat:2; + uint8_t branch:1; + uint8_t privilege:3; + uint8_t ecause:6; + uint8_t interrupt:1; + uint8_t thaddr:1; + uint32_t addressLow; + uint32_t addressHigh; + uint32_t tvalLow; + uint32_t tvalHigh; +} RVTraceTrapPayload; + static uint8_t rv_etrace_write_bits(uint8_t *bytes, uint32_t bit_pos, uint32_t num_bits, uint32_t val) { @@ -95,3 +113,67 @@ size_t rv_etrace_gen_encoded_sync_msg(uint8_t *buf, uin= t64_t pc, =20 return HEADER_SIZE + SYNC_PAYLOAD_SIZE_64BITS; } + +/* + * Note: this function assumes thaddr =3D 1. + */ +size_t rv_etrace_gen_encoded_trap_msg(uint8_t *buf, uint64_t trap_addr, + TracePrivLevel priv_level, + uint8_t ecause, + bool is_interrupt, + uint64_t tval) +{ + RVTraceTrapPayload payload =3D {.format =3D 0b11, + .subformat =3D 0b01, + .branch =3D 1, + .privilege =3D priv_level, + .ecause =3D ecause, + .addressLow =3D extract64(trap_addr, 0, = 32), + .addressHigh =3D extract64(trap_addr, 32= , 32)}; + RVTraceMessageHeader header =3D {.flow =3D 0, .extend =3D 0, + .length =3D TRAP_PAYLOAD_SIZE_64BITS}; + uint8_t bit_pos =3D 0; + + /* + * When interrupt =3D 1 'tval' is ommited. Take 8 bytes + * from the final size. + */ + if (is_interrupt) { + header.length =3D TRAP_PAYLOAD_SIZE_64BITS - 8; + } + + bit_pos +=3D rv_etrace_write_header(buf, header); + + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 2, payload.format); + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 2, payload.subformat); + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 1, payload.branch); + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 3, payload.privilege); + + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 6, payload.ecause); + + if (is_interrupt) { + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 1, 1); + } else { + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 1, 0); + } + + /* thaddr is hardcoded to 1 for now */ + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 1, 1); + + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 32, payload.addressLow= ); + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 32, payload.addressHig= h); + + /* Skip trap_addr if is_interrupt */ + if (is_interrupt) { + goto out; + } + + payload.tvalLow =3D extract64(trap_addr, 0, 32); + payload.tvalHigh =3D extract64(trap_addr, 32, 32); + + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 32, payload.tvalLow); + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 32, payload.tvalHigh); + +out: + return HEADER_SIZE + header.length; +} diff --git a/hw/riscv/rv-trace-messages.h b/hw/riscv/rv-trace-messages.h index c7226b50a9..f210e048dd 100644 --- a/hw/riscv/rv-trace-messages.h +++ b/hw/riscv/rv-trace-messages.h @@ -21,5 +21,10 @@ typedef enum { =20 size_t rv_etrace_gen_encoded_sync_msg(uint8_t *buf, uint64_t pc, TracePrivLevel priv_level); +size_t rv_etrace_gen_encoded_trap_msg(uint8_t *buf, uint64_t trap_addr, + TracePrivLevel priv_level, + uint8_t ecause, + bool is_interrupt, + uint64_t tval); =20 #endif --=20 2.51.1 From nobody Wed Jan 7 09:26:24 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1767034418; cv=none; d=zohomail.com; s=zohoarc; b=U+lL2i4nLjJE1GYkLDJ9jK70YunSXsY16T6tNnXwrTnwhserGxcdzEbtqaJ3Pwf9495k0r5ySZpr6qjRWs3JbVYeHmUcBVNv0zWx+6f7n0GCQ5zgTM7DwSxpe5x2omAXiGf1f7F5QvWniR20gtV1C1uDpnX7BOWrEnGPqucfmDk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767034418; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=XvzfCWFDr4abzbb1M6NUv7XtQBTAszALPHGV9cVQx8I=; b=CiNHDaGGiyd/eu4PJzZ59ZNt2P4UaZOm3OAJbNR193dC+JUSpe8jXd0ufRqztrueN4+AbJcXM3lid0S8A1N10KBQHjDrBIIdKU22I+Xftu8QkvYWiTUpC7RDpXhhu5dz/ZS5SgHDeKHrEvLYsKNzRIYeBdxPcbsoe1VTEOpDk9c= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1767034418386305.5522605413588; Mon, 29 Dec 2025 10:53:38 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaIJ2-0005DZ-MX; Mon, 29 Dec 2025 13:49:24 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaII4-0003oP-BS for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:48:29 -0500 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIHt-0008HV-71 for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:48:22 -0500 Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BTARcR03647987 for ; Mon, 29 Dec 2025 18:47:47 GMT Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ba6sg5532-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 29 Dec 2025 18:47:47 +0000 (GMT) Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-29f2381ea85so199806215ad.0 for ; Mon, 29 Dec 2025 10:47:47 -0800 (PST) Received: from grind.dc1.ventanamicro.com ([187.101.184.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a2f3c82aa8sm282198705ad.31.2025.12.29.10.47.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Dec 2025 10:47:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=XvzfCWFDr4a bzbb1M6NUv7XtQBTAszALPHGV9cVQx8I=; b=b+Thsjqg1F4gb2NAp4WU3ZrFUXP t4nVtAr+8tYeZPZFz8lvFS/M/i0gQlFdOS1U7a8bu9VD183vnN3Qlucq4P1z2pet thTTLXNPk2Vs8xGz+SIkbj50GVBnKLq0bqFGi3YP4k3FSNyu7+DLHqq655w321aW 5zZjh2Vr3AhiANS0IINfEPWHMivbVwr9UR1JXQAiVrDGvTZGtHXzkLeka6YAI1St x8nrYHV478bEnKmQGFaJ+7T4zRS2xv+RS8Hz5btnVJlfhKpJaN47eJNr/LZ2hgSh bYYS4tNKx6N8syuWYakhLuSJ9+bD7WkDXX1AZe6CicGdMIUqWvJZkii6eWw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767034066; x=1767638866; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=XvzfCWFDr4abzbb1M6NUv7XtQBTAszALPHGV9cVQx8I=; b=MwMTGxEik//CBCjDLvieBEIbwjP6FVfcOFBjDmTev6f839PO0R9qB4JqQ89vo4f7b+ 9YQC5xsDW+Vm8jnWH3Q3CuGt5tz8aGSMmVRc7Ecenb6vGihDlP2hWfMl6iQH28f3nqC/ N8PH1IgZZt4WZvmBznonxtliFe6XQTjQ3wgcJRw+1WbS4BUjO5rFmzwHHJr/sp+3VPkP d7wzRnlC9I0+KslpisUi0L2X3jqMtOQr0+qEbX+6e87CUhxk7LCWaoSGTjz6TvkhOUMc Mt8tXjqzgCyC+JI0FawwGYniDmamU5xBuDJAxxZVnhbZepUllqF5W9CfqpD889pUmLih Q9Fw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767034066; x=1767638866; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=XvzfCWFDr4abzbb1M6NUv7XtQBTAszALPHGV9cVQx8I=; b=BNQ2QTFnQxyYRiNR2mDCpYDzQR94e5XDWnZAwDx05GtPSJjQuChFv+w9vALwn24hy0 4iIQTl/mQRy+0uYTUe4JYOS0V0YdsOlKsnV84YcVwLWt1x/Bo4hxKdtItm36Ody687SG 8xrSlyZWDJ98TBZu6HN/ZX9goB9ZWxeCZjiNGVmCNR4YjyKygaHs/uG8y++j2R71qwMq GtrOCjiclpXzrowdBf4IOJnxBmcnUQAYJ9zRDUKl9sJSvyyNdwnCrWQ+3tUUeLxBdo0t kd/r5TGR6sO6vrmsUivReBzJW49FXt34H+6htpHSNr1Wt+0WLkIRYxSv4zKemNoK0bmw A7bg== X-Gm-Message-State: AOJu0YwhJRq03+J1/eTwBMks5QcDXTtzKEJD76XbBGm1hO35W1OhIvZv ZjzuOOQp1hFbRlyjQ3BU6fSIRf5JLUECaPRrPnuGmO/1s8fbQmbFmzWYOPQ4xpBZrr0gyowCtkC GLzfdSB7kl4uJA9SWVoxHvRi9qyqa3IHA01IwPKwKkdqrUbY+sP22o7wFg5fOclQsrw== X-Gm-Gg: AY/fxX5/Zms3B66DqprUcq+J9wZ6ttyeIBRT0XdBz5AauZGxHTNiQ9PLm43Um52MMfr tSgLTFC7hX+5i/4SCPo6tSbYBOw+lUnstaDqYPLmAY9UAjEYo+ack7Pj7YL6yAqa061xGR0uuYW kC+/5zzg/ED974aiwGWJ9mqgdZDheIteypjXDEBENVOoVO5+1bkInAFHIhp4prd0SjJUN/YOPXF ZW3jFaCTo01rkSeF23bokx8x6pPTuL0XhEyICA148IHRapmzCE19+Ezy/XoBZ24aFOdoSA4z4vW 3vrGWXtr0XxolSQ0Twe+WnLMI3lzpAvMi2i/PseQkMcBzcFvNhrHblw3XlHLdbNWt5Q7VT9ilAX bvcFZXmNQjoAop71mdu0dvRJ+BlMSO+dNn56vEbwnmUkGBZc= X-Received: by 2002:a17:902:ce91:b0:2a3:1b33:ae11 with SMTP id d9443c01a7336-2a31b33aeaamr276091295ad.53.1767034066255; Mon, 29 Dec 2025 10:47:46 -0800 (PST) X-Google-Smtp-Source: AGHT+IE73OasfYPoRd5/zsBgjpmOTFGNOicU32dm4FF1WkwmNSSKQVNewMoCaNAqsh7lZSGBc8THzw== X-Received: by 2002:a17:902:ce91:b0:2a3:1b33:ae11 with SMTP id d9443c01a7336-2a31b33aeaamr276091095ad.53.1767034065787; Mon, 29 Dec 2025 10:47:45 -0800 (PST) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, palmer@dabbelt.com, Daniel Henrique Barboza Subject: [PATCH v3 11/17] hw/riscv, target/riscv: send trace trap messages Date: Mon, 29 Dec 2025 15:46:50 -0300 Message-ID: <20251229184656.2224369-12-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> References: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: s3bfIKV9Gm0bwpqSYeUqsOFY4SRSaR-T X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDE3MiBTYWx0ZWRfX8h/D6FeZpTMS 2V28XU8Ib+2+OOsqb2Px8fiX8UnxWQ3NRa4ADF10UCO2+zcoBEHiOrd6YOSCKLW1iod8iIui2wr K+LnJjNoF2ElznPO0QrFRtQH+zHUb9W4BCDjYbAUxN8/7IQ83a4x/4W17r2HwgJ+8uMl7S/OWgb vpN6ItVsOrwUPEFb5aRDrYQZbHKBMNVMonhH2ovvz6MhiJC5pcU0PqfAq+jqVah8Qro3mx44qGl Pu9JBxzd8ddLs+oGDv49KepMFu3VPOGV3HZjatdw3ncqZeT9WajchWriYmxoyBncPSg7zhu4zdy 3C7IyBXuZdVVEa9kWC0l9O/s+Kz1nLVsS5ESppQ+crqF9RxHxm4lKkej/AqZnXKlfrmrnBE6O2g WBKanrfEYW37u76JPenRI7m4Da4JSUWL1ar4ApNyLguKAp+DN25I0qBUaxLH/5Qlha7KyVjNqMD uijxwr/5RgTRsvAvk8A== X-Proofpoint-ORIG-GUID: s3bfIKV9Gm0bwpqSYeUqsOFY4SRSaR-T X-Authority-Analysis: v=2.4 cv=Y+L1cxeN c=1 sm=1 tr=0 ts=6952ccd3 cx=c_pps a=JL+w9abYAAE89/QcEU+0QA==:117 a=cW5wcbexNO3A0Ml9TiDm9w==:17 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=1gIMccR7lhx1aHGv9TMA:9 a=324X-CrmTo6CU4MGRt3R:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-29_06,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 spamscore=0 malwarescore=0 clxscore=1015 phishscore=0 lowpriorityscore=0 priorityscore=1501 suspectscore=0 bulkscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512290172 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1767034419170158500 Content-Type: text/plain; charset="utf-8" Use the rv_etrace_gen_encoded_trap_msg() helper we added in the previous patch to encode trap packets to be written in the RAM sink SMEM. Signed-off-by: Daniel Henrique Barboza --- hw/riscv/trace-encoder.c | 17 +++++++++++++++++ hw/riscv/trace-encoder.h | 4 ++++ target/riscv/cpu_helper.c | 13 +++++++++++++ 3 files changed, 34 insertions(+) diff --git a/hw/riscv/trace-encoder.c b/hw/riscv/trace-encoder.c index 3ffe4dfe61..28d7b88b5c 100644 --- a/hw/riscv/trace-encoder.c +++ b/hw/riscv/trace-encoder.c @@ -403,6 +403,23 @@ void trencoder_set_first_trace_insn(Object *trencoder_= obj, uint64_t pc) trencoder_send_message_smem(trencoder, msg, msg_size); } =20 +void trencoder_trace_trap_insn(Object *trencoder_obj, + uint64_t 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); + g_autofree uint8_t *msg =3D g_malloc0(TRACE_MSG_MAX_SIZE); + uint8_t msg_size; + + msg_size =3D rv_etrace_gen_encoded_trap_msg(msg, pc, priv, + ecause, is_interrupt, + tval); + + trencoder_send_message_smem(trencoder, msg, msg_size); +} + static const Property trencoder_props[] =3D { /* * We need a link to the associated CPU to diff --git a/hw/riscv/trace-encoder.h b/hw/riscv/trace-encoder.h index 2b3d9437ec..c478332dc7 100644 --- a/hw/riscv/trace-encoder.h +++ b/hw/riscv/trace-encoder.h @@ -46,5 +46,9 @@ struct TraceEncoder { OBJECT_DECLARE_SIMPLE_TYPE(TraceEncoder, TRACE_ENCODER) =20 void trencoder_set_first_trace_insn(Object *trencoder_obj, uint64_t pc); +void trencoder_trace_trap_insn(Object *trencoder_obj, + uint64_t pc, uint32_t ecause, + bool is_interrupt, + uint64_t tval); =20 #endif diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index dd6c861a90..baf89ad5d1 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -38,6 +38,10 @@ #include "pmp.h" #include "qemu/plugin.h" =20 +#ifndef CONFIG_USER_ONLY +#include "hw/riscv/trace-encoder.h" +#endif + int riscv_env_mmu_index(CPURISCVState *env, bool ifetch) { #ifdef CONFIG_USER_ONLY @@ -2285,6 +2289,15 @@ 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 --=20 2.51.1 From nobody Wed Jan 7 09:26:24 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1767034392; cv=none; d=zohomail.com; s=zohoarc; b=QvDRrJ7xtiICg/+m2PXQ8nZfRl+r5zFOb5ElmF/wX9fgclMfJwGSUMNR22bdrojqPRc+338x58F27gXTlov3kbfZQsfpm698WBBNYQvuLvKMPYwO3BQvKri82dexPzlOumb4nv5vb4Zt8nT0lEgXbXrmIxBZTBWYEEEXx0YPCrM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767034392; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=FcXm0ZjJwGx2dKNn1tOaUJwDPxAY8YVzpdc4n0KpkrQ=; b=dXMxcAlXUg17E5nvLBvz4CrHU69OdksXzjK92OUhv2ylOKh2z4OMH6VjU/1dzUjeZsIZ+9Ie6wVU9AjQ+I0t4oWEqMGL1P0+Fnn6o4wZizo/2bBSZto0jM7+stxpQSKKZ/CtTdGBTiXm8b5kHXbsuS0yNDJh6vgjBe0ZJGLKMPU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1767034392672616.1591434655955; Mon, 29 Dec 2025 10:53:12 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaIIz-0004ye-Rw; Mon, 29 Dec 2025 13:49:21 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIHm-0003lA-1F for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:48:09 -0500 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIHi-0008Hj-S4 for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:48:05 -0500 Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BTA51SX956323 for ; Mon, 29 Dec 2025 18:47:50 GMT Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bbqk193yn-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 29 Dec 2025 18:47:49 +0000 (GMT) Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-29f8e6a5de4so127694755ad.2 for ; Mon, 29 Dec 2025 10:47:49 -0800 (PST) Received: from grind.dc1.ventanamicro.com ([187.101.184.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a2f3c82aa8sm282198705ad.31.2025.12.29.10.47.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Dec 2025 10:47:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=FcXm0ZjJwGx 2dKNn1tOaUJwDPxAY8YVzpdc4n0KpkrQ=; b=TBQHB470vLYeL6sg6xsoWpjR6SR MGoIO/1LHCHhdmlRWqAQNctkYbiAWBjrEdMLGk0eAgREXDyFSqeBYJi0NcFWLqAE y6TwCRxlvNiYJtK4NxthttaAgNFGnxEAPqwYSj9XxJzKU2hBG6XgcPaWFvwoL8OC zLRx8fQA1Eo7A5bXoEQpSIIIChSixD6FRVgJWBJhI2iwEA3t8Nfco3SuuZ6ejy/5 fionwkyiZ67CObO9QqpJ3NQ2BdraS/1Hf/Hz77N6fprrMmkNagIAhL72FL7+MTaT gsOhpd4PqrTJpkQptt65mDWUAm2ZYnVkJf/itiUeNhCmsdprN374FdSRtPw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767034069; x=1767638869; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=FcXm0ZjJwGx2dKNn1tOaUJwDPxAY8YVzpdc4n0KpkrQ=; b=VUNfvHdw6qk4QfvHsKBYE6k+W1AbtvoGoYpjE2YioWwPatJa+OJUdzE7L1ecSYZ+OM Su14gOctl1a8YuQbdg8V+dx8BxzDohrA51pQIWpi2KkdLyENTREFpbLHMlnFNueE4bjU ssaf11u+0LZaIaI/T+BbQn4+/7wQLOc6S914DtnBleNxaMegnBHrjWa4pAxgeMiK2DSB 5Qo5IYjFGe1gg+z+sEF/rdpQ578WrYBjCHydoc2CabblIe7d7uZrtx3+B1j1RFV7OhqU dntQ3eBT48ksFU4Wt7L6fbTlyKUrfJB8cF2pmmkMCQwHzvFvwWMr9+sLg14J21uiTdr3 BsMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767034069; x=1767638869; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=FcXm0ZjJwGx2dKNn1tOaUJwDPxAY8YVzpdc4n0KpkrQ=; b=OvAC/d7w1qVepRS6L/Z6q+KCR3/WwQfG315y+jWuLxoIoehppTKakSDnAKCla1HCPZ i6hHzlKTlal8tEIRhCntzzg0pp79kjfHrQlrtMLG5eT/LVRUx9ZlPXZ1wOe648U227Bf ssStOlZhA0zfzpsJRCs5miSdT16gSQRxC3HS1v7U1tJzeusKhCZK+2porg5x9vzDQiYy wXBvlbrtDwb/0Cuydut5OOcHRImRWHTVMZSjGDGQ5NU2e10SFSNu825Euun32CBa+SAI l/B5hNoaj9lKXuuuZbvQD/rHLauVwGERPYmvMaVYkMA1GE/NUCSAYBFvBUOenXzkbqXi 3NKA== X-Gm-Message-State: AOJu0YwgfrebCBI3N0ktZXAus2CRc4I4fLk7lApSLBsKyPTVsFARFTAm UHLcfIX3Xpq6qdVWlCrpGUEYSe7OV7jYQjmYdcfInIOIk1n8TIEZNCFa44YsctWEW0Qa2L59mMs otjwmHMCMuV4xMRc8J9iQ2zjqY8NT7ji6yD08MZ8UsmVlJTjuVGhayZMKqeUc80/gaA== X-Gm-Gg: AY/fxX54NwjwpDOylPsNp3dtKlIM3lPCtF+SZ81zShbKI2ZCoV4TzdAyPJngIWCmq6T K7FbeVY8X6DH2aR7y2tRVaSNNAo5OVGdIelhVRcQwar+dB0vkqJEs7bRpZHuZeNCIWaIC29HGe/ QiOKzv9/tHePEE4CEkOuHht3cLaow7zROXUKI4Q7O30ZKb8eMVpBxrjF1oIDdLeCYs6+12qTxBn 4KywbIJM+mV6pvIctws+D5dbJWQx/ldFyivwOV/CyuDqn58/azIFLrYgOu8HurZjVl2L+C8S+XU gdmFWs4Os7/O2nCNbX2ej7s29qUz7t0iAcImPMed+h+nIBtjRNLbpfKEpcBxweoy21apuqS9Ztx Z1Svmt+xYGEP8yOnX4TjV8n6RQSwcJQzrtq2Kme/wJv7ZtTQ= X-Received: by 2002:a17:903:3b8b:b0:2a0:b461:c883 with SMTP id d9443c01a7336-2a2f2a354ebmr303729725ad.45.1767034069043; Mon, 29 Dec 2025 10:47:49 -0800 (PST) X-Google-Smtp-Source: AGHT+IGBcyWdRRDzPErAZCSJPGqJwBOD5csBzeGOJjFiBK6pYPxQHRbJJEG/1zwB7tB13Dk74KrhEQ== X-Received: by 2002:a17:903:3b8b:b0:2a0:b461:c883 with SMTP id d9443c01a7336-2a2f2a354ebmr303729455ad.45.1767034068490; Mon, 29 Dec 2025 10:47:48 -0800 (PST) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, palmer@dabbelt.com, Daniel Henrique Barboza Subject: [PATCH v3 12/17] target/riscv, hw/riscv: send trace ppccd packets Date: Mon, 29 Dec 2025 15:46:51 -0300 Message-ID: <20251229184656.2224369-13-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> References: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: taxvo1Hpv2vqM_rFN1WmTJxcx9_v1ZGP X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDE3MiBTYWx0ZWRfXxTdZ+TFf5hDT guhuplXDDK7UNHXCLTLMt3DkU1UngYzqrtWtt1Y7bES6x1LbR7EhRAMlileMtzWbO8/zIvbwdHe qmewUQNcLio0HGBvx3BPaL9Cjq0Q56erYTq49Mkn18fZXP0gK9Tn8AOuZHum/NoupXNXm/eE/xd xD+siUnKMq0onrY96EB/Cgvs3Gv7rF8iGi5vzas0YbhfQ5hWHhsnR+2eALJZEHf/APhodrCqPi0 9AXkmKTTCsVfUoMq3MNxgaE4GQVYhxOBHFHuvLVLMjdeHGMOzK7xt6tUj+vBUct9hhIgXsi6aWY oGyW2ibikJ51tpzpU0tcmd6bl0MZHpRLRco8Sd9YFsKu9j3QYs5MNePr7mCXMCAnVNWNAHjvZ1C M7zEbjINcPuwF+bSGyQbkSTKtZ4oTN+YvbzhvbrVTZ/If0wPIf2peJ7a4t7expV1QDNhJnbGs4s LLBapZ+EzjlZ0EEtK7A== X-Authority-Analysis: v=2.4 cv=Tf6bdBQh c=1 sm=1 tr=0 ts=6952ccd5 cx=c_pps a=JL+w9abYAAE89/QcEU+0QA==:117 a=cW5wcbexNO3A0Ml9TiDm9w==:17 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=AAlH0JvuWwwlC_hcYokA:9 a=324X-CrmTo6CU4MGRt3R:22 X-Proofpoint-GUID: taxvo1Hpv2vqM_rFN1WmTJxcx9_v1ZGP X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-29_06,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 clxscore=1015 impostorscore=0 suspectscore=0 malwarescore=0 spamscore=0 lowpriorityscore=0 phishscore=0 priorityscore=1501 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512290172 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1767034393061158500 Content-Type: text/plain; charset="utf-8" The ppccd (privilege change) trace packets consists of sync packets like we already sent during trace start and resyncs. The privilege change is being fetched via riscv_cpu_set_mode(). Signed-off-by: Daniel Henrique Barboza --- hw/riscv/trace-encoder.c | 18 ++++++++++++++++++ hw/riscv/trace-encoder.h | 1 + target/riscv/cpu_helper.c | 13 ++++++++++++- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/hw/riscv/trace-encoder.c b/hw/riscv/trace-encoder.c index 28d7b88b5c..7f130198a0 100644 --- a/hw/riscv/trace-encoder.c +++ b/hw/riscv/trace-encoder.c @@ -389,6 +389,19 @@ static void trencoder_send_message_smem(TraceEncoder *= trencoder, trencoder_update_ramsink_writep(trencoder, dest, wrapped); } =20 +static void trencoder_send_sync_msg(Object *trencoder_obj, uint64_t pc) +{ + TraceEncoder *trencoder =3D TRACE_ENCODER(trencoder_obj); + TracePrivLevel priv =3D trencoder_get_curr_priv_level(trencoder); + g_autofree uint8_t *msg =3D g_malloc0(TRACE_MSG_MAX_SIZE); + uint8_t msg_size; + + trencoder->first_pc =3D pc; + msg_size =3D rv_etrace_gen_encoded_sync_msg(msg, pc, priv); + + trencoder_send_message_smem(trencoder, msg, msg_size); +} + void trencoder_set_first_trace_insn(Object *trencoder_obj, uint64_t pc) { TraceEncoder *trencoder =3D TRACE_ENCODER(trencoder_obj); @@ -420,6 +433,11 @@ void trencoder_trace_trap_insn(Object *trencoder_obj, trencoder_send_message_smem(trencoder, msg, msg_size); } =20 +void trencoder_trace_ppccd(Object *trencoder_obj, uint64_t pc) +{ + trencoder_send_sync_msg(trencoder_obj, pc); +} + static const Property trencoder_props[] =3D { /* * We need a link to the associated CPU to diff --git a/hw/riscv/trace-encoder.h b/hw/riscv/trace-encoder.h index c478332dc7..13252f92b6 100644 --- a/hw/riscv/trace-encoder.h +++ b/hw/riscv/trace-encoder.h @@ -50,5 +50,6 @@ void trencoder_trace_trap_insn(Object *trencoder_obj, uint64_t pc, uint32_t ecause, bool is_interrupt, uint64_t tval); +void trencoder_trace_ppccd(Object *trencoder_obj, uint64_t pc); =20 #endif diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index baf89ad5d1..3f246c388b 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -1034,6 +1034,8 @@ void riscv_ctr_add_entry(CPURISCVState *env, target_l= ong src, target_long dst, =20 void riscv_cpu_set_mode(CPURISCVState *env, target_ulong newpriv, bool vir= t_en) { + CPUState *cs =3D env_cpu(env); + g_assert(newpriv <=3D PRV_M && newpriv !=3D PRV_RESERVED); =20 if (newpriv !=3D env->priv || env->virt_enabled !=3D virt_en) { @@ -1041,6 +1043,15 @@ void riscv_cpu_set_mode(CPURISCVState *env, target_u= long newpriv, bool virt_en) riscv_itrigger_update_priv(env); } =20 + if (newpriv !=3D env->priv) { + RISCVCPU *cpu =3D RISCV_CPU(cs); + + if (cpu->trencoder && + TRACE_ENCODER(cpu->trencoder)->trace_running) { + trencoder_trace_ppccd(cpu->trencoder, env->pc); + } + } + riscv_pmu_update_fixed_ctrs(env, newpriv, virt_en); } =20 @@ -1061,7 +1072,7 @@ void riscv_cpu_set_mode(CPURISCVState *env, target_ul= ong newpriv, bool virt_en) if (riscv_has_ext(env, RVH)) { /* Flush the TLB on all virt mode changes. */ if (env->virt_enabled !=3D virt_en) { - tlb_flush(env_cpu(env)); + tlb_flush(cs); } =20 env->virt_enabled =3D virt_en; --=20 2.51.1 From nobody Wed Jan 7 09:26:24 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1767034424; cv=none; d=zohomail.com; s=zohoarc; b=VOlNLmfLnyUJTDovUJBladdlc1/q/7k09mOchSBOcwuAh4vWqSUyd7gy2s6xLJGhg9aO6bMaIIye/l2rE+IyXHwNqMNaQLjYSiYVGof962eWL12aBaaArndBLK+RxMgYpb4yOrWVmeVIFMwq8cz72jou1cr+7QnUOXbfSLFqtr0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767034424; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=clGoi7Z2TK6idM7ZzPi9LsVrS6OQOKiMecxLbKuFC7Q=; b=QEmI0jbVkV6Pu/06Ao5nza57+HQE9TWEh9Unrz4CarnmegoFX1EwChFSAj0gPbSth7/cWSRyNr9+KuQJdoNaISAu6cX9NQMg5odoxfmWRO/P0fWUhKJLUY8u/aIKniW4vIgU5kDRTxaGeXBAokHYZmh0qfA/8HsinlXcXtaqbqA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1767034424605522.3654344034933; Mon, 29 Dec 2025 10:53:44 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaIJ0-0004zm-3o; Mon, 29 Dec 2025 13:49:22 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIHp-0003lX-9U for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:48:11 -0500 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIHj-0008Hs-0S for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:48:06 -0500 Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BTAPw0S3328630 for ; Mon, 29 Dec 2025 18:47:52 GMT Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ba8r6d395-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 29 Dec 2025 18:47:52 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2a08cbeb87eso155591105ad.3 for ; Mon, 29 Dec 2025 10:47:52 -0800 (PST) Received: from grind.dc1.ventanamicro.com ([187.101.184.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a2f3c82aa8sm282198705ad.31.2025.12.29.10.47.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Dec 2025 10:47:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=clGoi7Z2TK6 idM7ZzPi9LsVrS6OQOKiMecxLbKuFC7Q=; b=pZFIXXpbNQJk6sIRoW6+nzZNR16 krBE4E2jqmQhaVi9DNsb7W4irQe1eKLloL292JgsE2/uNmIvA9ip68bK/IYyMp1S AX51bGSJVZ6Q8IgHkHVOpPFN9Uy4uRf+EWcpoO4JNUDHl7iXS5VKyLUg4sky549V XtgtYtFqeZlBK743heDQtEBfcThjFC+WudNeK1og2KQreguSkgVLq8pdgIgpCHuP IAkafcLKbc8d4C7FbEHJf60jvOQnrQALABQYmTvvStrXPkuBtvfwakiomO9LBJoG RGfYDkjYOWHgIRBtmPX3LxoOIgg2cCZmpA1DgdQJWLDLSX9I/Dn4en4gK8Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767034072; x=1767638872; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=clGoi7Z2TK6idM7ZzPi9LsVrS6OQOKiMecxLbKuFC7Q=; b=j4MlrY2zYIS2hSyC2697CuLdyVEZIiGsKJJ+POre0N9xA/O8Jw1PmjX7NsqTBHA3GD f538GKqzA4w09j3VxjJms0n5vR1rxXXPUWSo8DP7qroL6lrEMN9b1H+T4q4PwmaOrLTj S7Tv5oo4/bAFWtyJcEaUWIz1FSs0bLfD0fUYEyqrWt1hdNI1gup77GJcYOdE2nbpVDy5 hjOK1vzXmQrQ4RDjIXUkD6BMq1oQQz7kXk7ecIMUEcGnNFYsXOfLVgEzL39ozMcIPnS1 44c4ePysHrLWsTWDdUXkfuyXY/jgvd+o1CAohLqmQOyIWTqEpDkRcEfmMid9ZEP1hu3w e7bQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767034072; x=1767638872; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=clGoi7Z2TK6idM7ZzPi9LsVrS6OQOKiMecxLbKuFC7Q=; b=k3pz30oQv3J52vjV54RoLS8dK/URG9Q7diKG/A61n2cRU1mMJnNQm7Ez/lol7TSbqD 6G+aKcq9W0ZZTyLjdign3cOw1URPziJ+a7+w5l9bcEwmf5dBS8tsbsxYxcSLkgBzgZTb pp3H2+AxKKAG7FOvfd0DQrtJevC87+QHNcZmsziDFQvcaesKshpiel82GZjp9WamaHyY DN6x2u/ZJgl4LYTc9YmmeqA4ZeFYw9tJFVUy2c35BME9GM0d+w1q+XUBdJP8sQJ0Kuvf DpHfZ4AHpJmiB+x5z3s1rX3OwzqhZREEe15ugCbcmeWOzcXXSdBvQk4E8pwcnBWoG+Zc ku5w== X-Gm-Message-State: AOJu0YzXgfpp5/XNo9eeoQEbDPMuDiRKjwVbihkctKNLT2sf30xKpepx cFf7RPmqZ11fj6BLmViKsIOnQrsq/26O6MkMEw1/Xq96Op+c8OGQ0+CrfxyWv8Vy/tvtnE+Krt8 RCrbll2vE3SbkC7yXMW8P7SyHKZcVu/D3pNiq2Nc8a1QS8EkFAIZxOViojUcw63ydcg== X-Gm-Gg: AY/fxX6TjN7Nh9geLIAIy+rxz8SrCGbaTWifJDoj/fq/szLM6QGRNOx0C8HklqQuLtr FtX5Id1P7t84DKbxJuQgRIRFYOAe10EvvQaKWp65AuAyM6ZPRwtQujk3dlxZhtjFXHc1EiDWTSM yW2bqM4zfOvDofQEtdxZfjVkP9ET707nfWEYuPVvZJ7JbcpBXXTED2QA2cbJfmiadV2X/+ZkBrq Ald9Lo5VQTp/zeg+ZaYw8bCer4GfzOpCDmhs6rDXb5+BQ1v6eexGfB0paWsPqtCg4DqJijejl0/ aTaGhh9blQjhJr47LTcHYiULktHbvtoc4yVlqcoA1a5+HpMIXaRiCDMUWffdGE2ZAGF46HsSXt6 CiMktEKzJwmYJqeVELC4JkaFt/wpUgay9X7/vp6/l1CXCQyA= X-Received: by 2002:a17:902:e950:b0:298:2879:fdf5 with SMTP id d9443c01a7336-2a2f2a52b73mr342808875ad.61.1767034071727; Mon, 29 Dec 2025 10:47:51 -0800 (PST) X-Google-Smtp-Source: AGHT+IGOBgg3mR2zybWUaqOnjQ82VzBr/okLpfzYlPN1Dm8axUq6cFYwtbiu1a+6mLW8jQZBjtIeZg== X-Received: by 2002:a17:902:e950:b0:298:2879:fdf5 with SMTP id d9443c01a7336-2a2f2a52b73mr342808675ad.61.1767034071286; Mon, 29 Dec 2025 10:47:51 -0800 (PST) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, palmer@dabbelt.com, Daniel Henrique Barboza Subject: [PATCH v3 13/17] hw/riscv/trace: add format2 msg helper Date: Mon, 29 Dec 2025 15:46:52 -0300 Message-ID: <20251229184656.2224369-14-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> References: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=Raidyltv c=1 sm=1 tr=0 ts=6952ccd8 cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=cW5wcbexNO3A0Ml9TiDm9w==:17 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=NEAV23lmAAAA:8 a=EUspDBNiAAAA:8 a=7Y-KOW0DsKw0bwanU4kA:9 a=GvdueXVYPmCkWapjIL-Q:22 X-Proofpoint-ORIG-GUID: YAh3a-9f9qs0qWYmGUTWkI6g38x_zHOb X-Proofpoint-GUID: YAh3a-9f9qs0qWYmGUTWkI6g38x_zHOb X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDE3MiBTYWx0ZWRfXxXV/7edVncmN z9zWKdkIEptADJcbQQ3O7AgeZbP+0DLeVuPMDGVz+7ZssNcqFjrTpZ3g2G/4YuX7kQ+KG5sqBV4 SdNT+CpFOY9VNnSFyKQNz7zT42Z2mARXx22z4/SNZGKqvYuE67emqZh7DHxYImAgOCx0yi7HjXH qKBj8itUeN74WUWiZBlPjpUvKUuUae/h7Cs4VL+VY54ptQGpUekULYA+35/KJXLlrz3LGKXT8VN UIlQXgkVcC939QAWd9TD6IBesMnteRZijF4uYLeNlVYOX3ol2LczDl2m3hDrbAHKZLMSSEynBM2 DKIJVlpF/jkEXqs/5dn4VXwvk9/XJW65EOjZ6qUy94yJD09rTnTemeNdqZFbpUV1vF/qq8w3Lbs 8Yth+0UIjsjM3cLHc3iy87UxzYPQUwkhe470CmM3JWqvtLmcDCyeUx1oBZ2bzxgPMhBYaSjjLjt aw4lQ0FbhckIiAhzIBA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-29_06,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 clxscore=1015 phishscore=0 impostorscore=0 suspectscore=0 lowpriorityscore=0 bulkscore=0 malwarescore=0 spamscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512290172 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1767034425194158500 Content-Type: text/plain; charset="utf-8" Before handling updiscon (uninferable PC discontinuity) cases add the encoded message we're going to use, format 2. Format 1 will be added when we add the branch map. There are design decisions worth documenting in this patch. For irreport, the e-trace-encap spec [1] in section 7.6. "Format 2 packets", says that we should make this bit !updiscon if we're either: "following a return because its address differs from the predicted return address at the top of the implicit_return return address stack, or the last retired before an exception, interrupt, privilege change or resync because it is necessary to report the current address stack depth or nested call count." We do not implement any form of call/return prediction in the encoder, and TCG will always retire a single insn per cycle. This means that we'll never set irreport, i.e. irreport will always be equal to updiscon. If this interpretation turns out to be wrong we'll revisit this helper. Likewise, irdepth is also not implemented since we'll always return a package where irreport =3D=3D updiscon. The size of the field is arbitrarily set to '3' to avoid adding padding in the end of the msg to complete an extra byte. [1] https://github.com/riscv-non-isa/e-trace-encap/releases/tag/v1.0 Signed-off-by: Daniel Henrique Barboza --- hw/riscv/rv-trace-messages.c | 51 ++++++++++++++++++++++++++++++++++++ hw/riscv/rv-trace-messages.h | 2 ++ 2 files changed, 53 insertions(+) diff --git a/hw/riscv/rv-trace-messages.c b/hw/riscv/rv-trace-messages.c index db5f7c2d26..2f041aa639 100644 --- a/hw/riscv/rv-trace-messages.c +++ b/hw/riscv/rv-trace-messages.c @@ -19,6 +19,7 @@ typedef enum { HEADER_SIZE =3D 1, SYNC_PAYLOAD_SIZE_64BITS =3D 9, TRAP_PAYLOAD_SIZE_64BITS =3D 18, + FORMAT2_PAYLOAD_SIZE_64BITS =3D 9, } RVTraceMessagePayloadSize; =20 typedef struct RVTraceMessageHeader { @@ -56,6 +57,16 @@ typedef struct RVTraceTrapPayload { uint32_t tvalHigh; } RVTraceTrapPayload; =20 +typedef struct RVTraceFormat2Payload { + uint8_t format:2; + uint32_t addressLow; + uint32_t addressHigh; + uint8_t notify:1; + uint8_t updiscon:1; + uint8_t irreport:1; + uint8_t irdepth:3; +} RVTraceFormat2Payload; + static uint8_t rv_etrace_write_bits(uint8_t *bytes, uint32_t bit_pos, uint32_t num_bits, uint32_t val) { @@ -177,3 +188,43 @@ size_t rv_etrace_gen_encoded_trap_msg(uint8_t *buf, ui= nt64_t trap_addr, out: return HEADER_SIZE + header.length; } + +/* + * Note: irreport and irdepth is always =3D=3D updiscon. + * + * return_stack_size_p + call_counter_size_p is hardcoded + * to 3 since we don't implement neither ATM. + */ +size_t rv_etrace_gen_encoded_format2_msg(uint8_t *buf, uint64_t addr, + bool notify, bool updiscon) +{ + RVTraceFormat2Payload payload =3D {.format =3D 0b11, + .notify =3D notify, + .updiscon =3D updiscon, + .addressLow =3D extract64(addr, 0, 32= ), + .addressHigh =3D extract64(addr, 32, = 32)}; + RVTraceMessageHeader header =3D {.flow =3D 0, .extend =3D 0, + .length =3D FORMAT2_PAYLOAD_SIZE_64BITS= }; + uint8_t bit_pos =3D 0; + + payload.irreport =3D updiscon; + if (updiscon) { + payload.irdepth =3D 0b111; + } else { + payload.irdepth =3D 0; + } + + bit_pos +=3D rv_etrace_write_header(buf, header); + + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 2, payload.format); + + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 32, payload.addressLow= ); + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 32, payload.addressHig= h); + + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 1, payload.notify); + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 1, payload.updiscon); + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 1, payload.irreport); + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 3, payload.irdepth); + + return HEADER_SIZE + header.length; +} diff --git a/hw/riscv/rv-trace-messages.h b/hw/riscv/rv-trace-messages.h index f210e048dd..89f30e7d36 100644 --- a/hw/riscv/rv-trace-messages.h +++ b/hw/riscv/rv-trace-messages.h @@ -26,5 +26,7 @@ size_t rv_etrace_gen_encoded_trap_msg(uint8_t *buf, uint6= 4_t trap_addr, uint8_t ecause, bool is_interrupt, uint64_t tval); +size_t rv_etrace_gen_encoded_format2_msg(uint8_t *buf, uint64_t addr, + bool notify, bool updiscon); =20 #endif --=20 2.51.1 From nobody Wed Jan 7 09:26:24 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1767034417; cv=none; d=zohomail.com; s=zohoarc; b=TtZx2XIMyUnWAnVwLSJ2yE+dkOBeWdUcqvyW3Y3CM3KSi8I1OxaVnulxS/BnCnDS9c8DeUqtfzOsIR8XQs/mcxV4yg9HqtEymhmy+b1PpzD5ugUyqJoHHkYMNF3kqAW09yykyQGABrBKmvkEs4qJtSOLX5De2lPcFfznw7Ppq6k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767034417; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=d5x/aRRoY4OSgJd7MMecvrFmsj+bS5CZjYL4v9PUqkg=; b=GtgUzWrVVdsR47rS1SYklOrOxTImAr9Gu0gthlkEGZjMvTpM9P4K1MOvPVcwGvid0zWmrg24rzeSca8YcZ72KBjr7SvWZd8RhshiHyjaWzJFjfhbIU8Smr7SUeYjZH4ldfZgwRxVUy4tp42/Qo2VDkuOY+3DoFzOYHrvdJnb8To= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1767034417274956.0138010071013; Mon, 29 Dec 2025 10:53:37 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaIJ5-0005X6-L9; Mon, 29 Dec 2025 13:49:27 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIHm-0003lC-9l for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:48:09 -0500 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIHi-0008ID-TP for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:48:05 -0500 Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BT9jZbk4132692 for ; Mon, 29 Dec 2025 18:47:56 GMT Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ba71ww4pp-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 29 Dec 2025 18:47:55 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2a0bb1192cbso188370565ad.1 for ; Mon, 29 Dec 2025 10:47:55 -0800 (PST) Received: from grind.dc1.ventanamicro.com ([187.101.184.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a2f3c82aa8sm282198705ad.31.2025.12.29.10.47.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Dec 2025 10:47:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=d5x/aRRoY4O SgJd7MMecvrFmsj+bS5CZjYL4v9PUqkg=; b=Q5MEkkulUlK5CvH+2YelPLA+fAo sWFkN3e6tiUQUVXkmsFdOoOvzjqtdc1TTnZxvbDLYxB0tJM9AMrPgW9Uy2fCOAH8 FONl3/7nS+1shaENjJqKaYP+9k/Btoi3kyg90m/ZLzGXEF1JBkhLISrbUeJU+RMn TeOTkBDUW2WRMI+lJ/Benx+aFFCVN1cCNur5N4gS8y9dwwFRUhfVgfTT469AIjzn w+qN5pEY8vWHi7mu0PnaUcn32vfpz/5eXinU8wUT67YrzcaXzpArx2nnVAFYxsdX ue1kaGMB0YCgOaQyPnZMHEKIydLkCtzWOBh+H/Qaex/MNbaxv+6StTgQjMg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767034075; x=1767638875; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=d5x/aRRoY4OSgJd7MMecvrFmsj+bS5CZjYL4v9PUqkg=; b=cPqinRp3KzNSo/HdsTbODAJep2TY+gNJ+xob0rBL7Dj0SgLhijBAP3nGK+cOy2YKf6 SXxlAaVdiiP9ZMDlhZtlA9MwqNYIigM0KM14aiKOuWtvqPpuG3piVvpEtfI37pIhtTIY KAVcx3RNpzloSG9DnswSpUkmFP5WghZmp+Z3JLefNQFNrBo8tHigne4a18cl/oBWkFlK V7XsYCddytC/h4LiuxtL7GC/yrYVo3O78xsLL7rQ38op9Yq0AdqfCi4GBI5T3NsdQpZc ga9AYmo17vBDMvQ+T56IOSpR3TwDD7d1C2QSd9ogkXGR9Si/9Z28uljtDprkEnQG2D0y /YsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767034075; x=1767638875; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=d5x/aRRoY4OSgJd7MMecvrFmsj+bS5CZjYL4v9PUqkg=; b=IY5yxUkqvkCPn0SaOJga5nX0dHRInil7AEIRVvgG0GmUUW0tWr5sUdskDlpWyqv5eS zXH1j9WjZJ+WU3EfEFpJIeagyVIOFUqsAWW04olJUacYCarVfhRHH7HU2ykCHShx+aJG XH8YtnypVtPoH5UQkwdLbsXnpLhRMIIp9aCc9jYjTZjUc/atWLZ5yY1b/nxKHRKPO8X4 gzQXx91K9t0yQLzwK12b1zjSboxJRgsiTzV9l2EFuCiVHvnMjSkLMJ1TeyF/2p96jv7Y I3K0/DO+fbWRX0vBCVvdHfDv176EaG2Jo39GJ3tiBBXU45ZHKtvWGnw//a7DvDKdtMTr XfSQ== X-Gm-Message-State: AOJu0YyVm4cM1DljFAgAWOZVXBLtp+szedw69MO+mxG1R44oTookPUIH mUvKrf4Ed6GjtUsi96jCbL+OG9XBDu6AicbFGTLX/1tWdwBCjSJlAVQpejnm2v6pxwvx5PlQipp 37DaaICC+RJ/wjcNKgOs0RLe3u+ZajlnJAXKjeabUvVIGNoRx9DWPJyxtnZ46Ml7GOg== X-Gm-Gg: AY/fxX4SuICy7deZzPYTGpD+oM1x8AetZqejiT3uzKJCeFAG5j9nFIzozjCSjxExkr3 YN9We86kTuYsc4fQ0RG5EFQy2Xm0Wk2/onN9SN886AXl/3C/SOsBNuO+W2NEVcvwAAekWjESbxG b4Db6lnVt3vqRDFTI49LMIETLr6a4yUbPMwdmqjfQ9/eS0teYtZ6xBpZMSzlNPkiz1ZLidDOOd1 FBoLhgXZwjTTm7uf8Eqhg6gOjSiJXV78XZyQA06jUcn9+nvuDehDd/vdBr2pWBqZofVXj9fPHig aKHki5zBWvgl3ebN56kwCDLIMW/xGpKdAOGb+4os3NXWndkFK+xHaVb3gcvK0GntFITxC1pqRW9 0ErUyGfW1P/IbZm2P5fsohcIm1mGMIg4pL4/aJ/5BfQw0tr4= X-Received: by 2002:a17:903:41c8:b0:2a0:ba6d:d101 with SMTP id d9443c01a7336-2a2f24248b5mr323279955ad.21.1767034074574; Mon, 29 Dec 2025 10:47:54 -0800 (PST) X-Google-Smtp-Source: AGHT+IE4GbaIakhnlu/CgdkJHAEeYDCFJzm7p7KC0IT2IDCZdl/ZIiYvz/BrblS3A55aRpnVIzyqKw== X-Received: by 2002:a17:903:41c8:b0:2a0:ba6d:d101 with SMTP id d9443c01a7336-2a2f24248b5mr323279835ad.21.1767034074035; Mon, 29 Dec 2025 10:47:54 -0800 (PST) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, palmer@dabbelt.com, Daniel Henrique Barboza Subject: [PATCH v3 14/17] hw/riscv, target/riscv: send resync updiscon trace packets Date: Mon, 29 Dec 2025 15:46:53 -0300 Message-ID: <20251229184656.2224369-15-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> References: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDE3MiBTYWx0ZWRfXxOozRqHgZUKm aTbm0doyi4n3OSMqoq/I2a5vqJGieCaTRf79eW5bOwKSJ0MEbfaovJbI4/xW5UuPxWaS4qsNIa3 mDbQgCwhrn5w24zSxwg67bYWzU1G5vNMOmgBw+my+gs/wVvcjlDNUW0k+3jz5NwhAwq+yA78Tk+ tN/7jBXDoDFDY+g6h3uMDMyENaRkvHDOrDbqfKAhZeVsOkG41z15nwHAj430Bd9rWp9LVzw5LwJ qqz4x6alicDHwEj4GpufiHVzyWHxVj+KBIgZHsu4UbBWeBl+Fa5drvmpa96QMWv5+fZ4gjxNKr0 JMXnhaOBsme6AMT+0FUNvA7bjr92yu/WkgOojZDEoK5PmokR0RhNdswZUOdz57z/H4lEqoHXTGf XPSUHGgcTCSmS16YWdKBguvWwf2Y9ZDkyyKwo9XnInHUoYHpsI/ukRtloT/NJVivfpSRhssHHKs f0IMY9A795qh1UBUzyQ== X-Proofpoint-ORIG-GUID: 7V-LlEuS7pBb1xjl6h_uc_McGm5FSaj6 X-Proofpoint-GUID: 7V-LlEuS7pBb1xjl6h_uc_McGm5FSaj6 X-Authority-Analysis: v=2.4 cv=CK4nnBrD c=1 sm=1 tr=0 ts=6952ccdb cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=cW5wcbexNO3A0Ml9TiDm9w==:17 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=v6o39jtdX7kFEx2kGjIA:9 a=GvdueXVYPmCkWapjIL-Q:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-29_06,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 impostorscore=0 lowpriorityscore=0 clxscore=1015 spamscore=0 adultscore=0 suspectscore=0 priorityscore=1501 phishscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512290172 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1767034419245158500 Content-Type: text/plain; charset="utf-8" Send updiscon packets based on the constraints already discussed in the previous patch: - We do not implement any form of call/return prediction in the encoder, and TCG will always retire a single insn per cycle, e.g. irreport will always be equal to updiscon; - irdepth is not implemented since we'll always return a package where irreport =3D=3D updiscon. Note that we're sending an updiscon packet if the 'updiscon_pending' flag is set when we're about the send a resync or a trap packet. The TCG helper in this case is just setting the trace encoder flags instead of actually triggering a RAM sink SMEM write. Signed-off-by: Daniel Henrique Barboza --- hw/riscv/trace-encoder.c | 37 +++++++++++++++++++ hw/riscv/trace-encoder.h | 3 ++ target/riscv/helper.h | 1 + .../riscv/insn_trans/trans_privileged.c.inc | 11 ++++++ target/riscv/insn_trans/trans_rvi.c.inc | 2 + target/riscv/trace_helper.c | 14 +++++++ target/riscv/translate.c | 9 +++++ 7 files changed, 77 insertions(+) diff --git a/hw/riscv/trace-encoder.c b/hw/riscv/trace-encoder.c index 7f130198a0..8b16ce6fa0 100644 --- a/hw/riscv/trace-encoder.c +++ b/hw/riscv/trace-encoder.c @@ -402,6 +402,22 @@ static void trencoder_send_sync_msg(Object *trencoder_= obj, uint64_t pc) trencoder_send_message_smem(trencoder, msg, msg_size); } =20 +static void trencoder_send_updiscon(TraceEncoder *trencoder, uint64_t pc) +{ + g_autofree uint8_t *format2_msg =3D g_malloc0(TRACE_MSG_MAX_SIZE); + uint8_t addr_msb =3D extract64(pc, 31, 1); + bool notify =3D addr_msb; + bool updiscon =3D !notify; + uint8_t msg_size; + + msg_size =3D rv_etrace_gen_encoded_format2_msg(format2_msg, pc, + notify, + updiscon); + trencoder_send_message_smem(trencoder, format2_msg, msg_size); + + trencoder->updiscon_pending =3D false; +} + void trencoder_set_first_trace_insn(Object *trencoder_obj, uint64_t pc) { TraceEncoder *trencoder =3D TRACE_ENCODER(trencoder_obj); @@ -409,6 +425,10 @@ void trencoder_set_first_trace_insn(Object *trencoder_= obj, uint64_t pc) g_autofree uint8_t *msg =3D g_malloc0(TRACE_MSG_MAX_SIZE); uint8_t msg_size; =20 + if (trencoder->updiscon_pending) { + trencoder_send_updiscon(trencoder, pc); + } + trencoder->first_pc =3D pc; trace_trencoder_first_trace_insn(pc); msg_size =3D rv_etrace_gen_encoded_sync_msg(msg, pc, priv); @@ -426,6 +446,10 @@ 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->updiscon_pending) { + trencoder_send_updiscon(trencoder, pc); + } + msg_size =3D rv_etrace_gen_encoded_trap_msg(msg, pc, priv, ecause, is_interrupt, tval); @@ -435,9 +459,22 @@ void trencoder_trace_trap_insn(Object *trencoder_obj, =20 void trencoder_trace_ppccd(Object *trencoder_obj, uint64_t pc) { + TraceEncoder *trencoder =3D TRACE_ENCODER(trencoder_obj); + + if (trencoder->updiscon_pending) { + trencoder_send_updiscon(trencoder, pc); + } + trencoder_send_sync_msg(trencoder_obj, pc); } =20 +void trencoder_report_updiscon(Object *trencoder_obj) +{ + TraceEncoder *trencoder =3D TRACE_ENCODER(trencoder_obj); + + trencoder->updiscon_pending =3D true; +} + static const Property trencoder_props[] =3D { /* * We need a link to the associated CPU to diff --git a/hw/riscv/trace-encoder.h b/hw/riscv/trace-encoder.h index 13252f92b6..050406b531 100644 --- a/hw/riscv/trace-encoder.h +++ b/hw/riscv/trace-encoder.h @@ -36,6 +36,8 @@ struct TraceEncoder { uint32_t regs[TRACE_R_MAX]; RegisterInfo regs_info[TRACE_R_MAX]; =20 + bool updiscon_pending; + bool enabled; bool trace_running; bool trace_next_insn; @@ -51,5 +53,6 @@ void trencoder_trace_trap_insn(Object *trencoder_obj, bool is_interrupt, uint64_t tval); void trencoder_trace_ppccd(Object *trencoder_obj, uint64_t pc); +void trencoder_report_updiscon(Object *trencoder_obj); =20 #endif diff --git a/target/riscv/helper.h b/target/riscv/helper.h index e80320ad16..f27ff319e9 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -131,6 +131,7 @@ 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) =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 8a62b4cfcd..28089539d5 100644 --- a/target/riscv/insn_trans/trans_privileged.c.inc +++ b/target/riscv/insn_trans/trans_privileged.c.inc @@ -26,6 +26,8 @@ =20 static bool trans_ecall(DisasContext *ctx, arg_ecall *a) { + gen_trace_updiscon(); + /* always generates U-level ECALL, fixed in do_interrupt handler */ generate_exception(ctx, RISCV_EXCP_U_ECALL); return true; @@ -40,6 +42,8 @@ static bool trans_ebreak(DisasContext *ctx, arg_ebreak *a) uint32_t ebreak =3D 0; uint32_t post =3D 0; =20 + gen_trace_updiscon(); + /* * The RISC-V semihosting spec specifies the following * three-instruction sequence to flag a semihosting call: @@ -95,6 +99,8 @@ static bool trans_sret(DisasContext *ctx, arg_sret *a) { #ifndef CONFIG_USER_ONLY if (has_ext(ctx, RVS)) { + gen_trace_updiscon(); + decode_save_opc(ctx, 0); translator_io_start(&ctx->base); gen_update_pc(ctx, 0); @@ -113,6 +119,8 @@ 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(); + decode_save_opc(ctx, 0); translator_io_start(&ctx->base); gen_update_pc(ctx, 0); @@ -129,6 +137,9 @@ static bool trans_mnret(DisasContext *ctx, arg_mnret *a) { #ifndef CONFIG_USER_ONLY REQUIRE_SMRNMI(ctx); + + gen_trace_updiscon(); + decode_save_opc(ctx, 0); gen_helper_mnret(cpu_pc, tcg_env); tcg_gen_exit_tb(NULL, 0); /* no chaining */ diff --git a/target/riscv/insn_trans/trans_rvi.c.inc b/target/riscv/insn_tr= ans/trans_rvi.c.inc index 54b9b4f241..ac00cbc802 100644 --- a/target/riscv/insn_trans/trans_rvi.c.inc +++ b/target/riscv/insn_trans/trans_rvi.c.inc @@ -183,6 +183,8 @@ static bool trans_jalr(DisasContext *ctx, arg_jalr *a) } } =20 + gen_trace_updiscon(); + lookup_and_goto_ptr(ctx); =20 if (misaligned) { diff --git a/target/riscv/trace_helper.c b/target/riscv/trace_helper.c index 5a6d725f56..a4c5720a65 100644 --- a/target/riscv/trace_helper.c +++ b/target/riscv/trace_helper.c @@ -28,9 +28,23 @@ void helper_trace_insn(CPURISCVState *env, uint64_t pc) te->trace_next_insn =3D false; } } + +void helper_trace_updiscon(CPURISCVState *env) +{ + RISCVCPU *cpu =3D env_archcpu(env); + TraceEncoder *te =3D TRACE_ENCODER(cpu->trencoder); + + te->updiscon_pending =3D true; + te->trace_next_insn =3D true; +} #else /* #ifndef CONFIG_USER_ONLY */ void helper_trace_insn(CPURISCVState *env, uint64_t pc) { return; } + +void helper_trace_updiscon(CPURISCVState *env) +{ + return; +} #endif /* #ifndef CONFIG_USER_ONLY*/ diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 9dbc8649f0..e46b5e0c53 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -617,6 +617,15 @@ static void gen_ctr_jal(DisasContext *ctx, int rd, tar= get_ulong imm) } #endif =20 +static void gen_trace_updiscon(void) +{ + TCGLabel *skip =3D gen_new_label(); + + tcg_gen_brcondi_tl(TCG_COND_EQ, cpu_trace_running, 0, skip); + gen_helper_trace_updiscon(tcg_env); + gen_set_label(skip); +} + static void gen_jal(DisasContext *ctx, int rd, target_ulong imm) { TCGv succ_pc =3D dest_gpr(ctx, rd); --=20 2.51.1 From nobody Wed Jan 7 09:26:24 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1767034257; cv=none; d=zohomail.com; s=zohoarc; b=hL/iyR2f8uqHfU4x+6wLfJ65KGh6sF8sphH3tNDCVtsBCKJEOtaY5EPm+jCEgHlmNGPpNRFTR41WT/TpMexjW0AnymwE3pC8Xta54GLhtKb0tQ9iKPsL93XwrpZNIUOueRueRH5oCr3k2juJyZZ9S50E0GiJG6qkMTreJP3Mk68= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767034257; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=KWutLemSumCGaG76d6tajCvKjv69ATtigQPvk/IKg7o=; b=jbo/jUx2Bk+ofcD90AgYL3xKZt/gPs7cMEyeqXfb3WYyjXi4Zhc4/tPCLJYxwQRiIln0xyMXoYADxImLEd5lWlQAPcsexrwe1sA4jYoarSXvi6mLw4K+Nj6oXvjVLAClCHqxxAHe/KBmOL6ajTmix3fdWOdjlWM55r/JCKoTNhM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1767034257797985.4289281209875; Mon, 29 Dec 2025 10:50:57 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaIJ1-000574-NN; Mon, 29 Dec 2025 13:49:23 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaII4-0003oN-BD for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:48:28 -0500 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIHt-0008IN-79 for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:48:23 -0500 Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BT9xi9G211639 for ; Mon, 29 Dec 2025 18:47:58 GMT Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bbc9v2d8f-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 29 Dec 2025 18:47:58 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-29f25a008dbso84098355ad.1 for ; Mon, 29 Dec 2025 10:47:58 -0800 (PST) Received: from grind.dc1.ventanamicro.com ([187.101.184.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a2f3c82aa8sm282198705ad.31.2025.12.29.10.47.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Dec 2025 10:47:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=KWutLemSumC GaG76d6tajCvKjv69ATtigQPvk/IKg7o=; b=HlBYvyN5WHO1Oz2ShT2Q7vc8JGv Xe6noph6tI4xejAwy68thF/PNzw2Si960Ci9N4SEpJZRgvbQfd2VPXwOsNeiAbDx j/kcieC7U2CVsXlUJb3jVD9uh1u7w1y2z1IzDVGKBXJpBJebxPuXWBFej1KPcS7j OM8h1bmiiw3gaq3yKIba00qJhRmoUoEbX02fBo+XFkZcIJT1wsnn4kNCM4rA5A/9 9472pAWh0vH75Yn485X2wh0gQ9EY/QzdxHHE1c83NS258IKqbLOj3LJVHC4d3I4i FyYOnPrObsBj6F2g/pwPHUxY6ieGGIU6LmnO1Tn48in/8FGhVeOfBdZLqJQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767034077; x=1767638877; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KWutLemSumCGaG76d6tajCvKjv69ATtigQPvk/IKg7o=; b=JrdJyCqgXKxcaWA7dVCN75YV4cTO6SQnrOIdlERJgZZQP9wwPuPN8CqrnIyh+cofN/ QwTkgMFRwbxhEsOnRDGw+Pe0knH0nao95nY05VP+qRzu6tqh2lP752KyW3X5ZJDYSGtq rElmRUgXaosCNKBLyGy3ZL1zBHxWlzPvznCXbZ4Xzy8/6QkntPwGQ21i/ftOW7fj/0kY 95g0GuqHlkwTPpQ8XE3UkKAiNKoZHYVVR+wU8Hx+SNLj3BOnSf7RhWxFdaj41s087loQ HzNUjZoevh/mbausB+Qh5t3lMmtwXImxwa0QRshozyo6asd/18Rj3SsAg7BbXBTCcIDH znxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767034077; x=1767638877; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=KWutLemSumCGaG76d6tajCvKjv69ATtigQPvk/IKg7o=; b=lSzkK/3T11rD/gzjNwVUvvzfEqOJasjJKeNMf4M+6xngOaRlf8Bv/7vOs2JT11nWJO yBt6V8A26ygfYEK9INa+8DMX8grkz8rzqIhbE6q0a/feKHoinNggoFGA0K5oTOLJmI56 XgqxcKiWJpJjqFx6bZQSd66+0utQ1fqcpPbJ3Im2o35IX0Ql8qIpDutoJAbTVN/5mBZN TE2C5cx/izTZ8S1D91x3d+GAoOFQAAt23IW8CbJ/J2o7aVy06Chz3wYHud8gEbegBpAO BTWbU3GiAM0QUJuwwx/c6Wx7V1yY+W+I8h7sGXUAd3HA49gOxF/QTFvSS2+SYMt3zwDq AXLw== X-Gm-Message-State: AOJu0YwRk2WEv8KiC9ghh/5rCDutlwAjGddisrFTDjjF31OeaphDbTDX 9IeXiR4lDnhlQyhkuZviLlMPhKUIRUYxv4NJNibah2loZDeSJ5P3ZgFqC6+ymXTAZS84eS0j8JX Jiq8KHwkkAH9RUebbQKtqP6lQbWsP8uPWNz5FCU2//vzZWueoQTU5M+JGkdiG+GoRVA== X-Gm-Gg: AY/fxX7h+5cGgS3HPt7Y+nw+cgLfWYVGoKqV/O2+Pfnx0gGrxO3xZICh/DnDKyBTrCE YlevEw+D3mkTcirgyExczJCE5k+iNeqtZjtj6umXr+F/L9IOyTkP3pQs+UqB/frGq5YwfPHi4+3 db+0GVV7Cl+SeAiGSt+94A4WrzcdAGbce074XjMEYY+Q9z97vD5+pUAve+psNsK2TAazIE4V0oT BIDM4jbMV56oh18EPOZ2ljCMI13vmFXZUnHrCLlyHNt3wbNkhZtXZusOmlbFZWt2Wh/6kXwtzY5 GXxOWsKT9PBNs5eCF5ZnUvUxKddH6dFuGBhmDBD4dhLSj0NknwEODrCiXvQrcD/msyUhSbjELVH G06GQI2CrmGC13srxnvPQZDVdL3PoALEROHjrS5UZfwQ8d+c= X-Received: by 2002:a17:903:228b:b0:2a0:f0e2:94b7 with SMTP id d9443c01a7336-2a2f2735298mr284167485ad.30.1767034077312; Mon, 29 Dec 2025 10:47:57 -0800 (PST) X-Google-Smtp-Source: AGHT+IFxqZqGsbgodfEiMsFIf9fqy+72fBxsXBTi9z1FvKXiXpPk/dx9V+UNtHcLhGVNHHi84/mCKg== X-Received: by 2002:a17:903:228b:b0:2a0:f0e2:94b7 with SMTP id d9443c01a7336-2a2f2735298mr284167305ad.30.1767034076821; Mon, 29 Dec 2025 10:47:56 -0800 (PST) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, palmer@dabbelt.com, Daniel Henrique Barboza Subject: [PATCH v3 15/17] hw/riscv/rv-trace-messages: add format 1 msgs with branch info Date: Mon, 29 Dec 2025 15:46:54 -0300 Message-ID: <20251229184656.2224369-16-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> References: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: ZGdaNzzUQpJ5it_KRK0wGJvhEZzttzRV X-Authority-Analysis: v=2.4 cv=R/sO2NRX c=1 sm=1 tr=0 ts=6952ccde cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==:117 a=cW5wcbexNO3A0Ml9TiDm9w==:17 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=3vbdxVTLcZzJT87cJXQA:9 a=uG9DUKGECoFWVXl0Dc02:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDE3MiBTYWx0ZWRfX/Wt4PyQ5F+9n wUQ3GDPs852G7ig7HhZBZ3FwTaZsgYo/zE+nKK1KDTggkVUKjFYDd8uGB/ghVnqbKwQDgmXTvHG w4H8pRnHPJs1bJHVdzg+sEr7ZPRNzERa3Xypfuwpwy6/qJtbqpqdLrrWawGWQgjCVPdyWGysxo8 oshmIFMGO77Pakwl595kzm0WYOy4n6zZ2jiqNbJfCa2myAB/f+8A6z9DGbyPMdNb7OUTujouZqW IbMnpfTGwK4SHTFOU6YWdGgpPU973AAVbAIUoVJoZClOepbRpZjnJ0Se0bRzt6YLTCur2bsbYXh WySRZZ+iroCesqJayqjCdCZMvPw1gDaAzc2zU2r1qBGElOhogBSpEt614iMjIwRepL6ROPHolR7 ppwiB27pk1LkoAPjVqcMALUMUgtmQkp4zCiTs0TVkSAU0kH+yo/syMHuB7yXd3G02jNnjohes2g 8VlRQJuGfPP3h9hPVuw== X-Proofpoint-ORIG-GUID: ZGdaNzzUQpJ5it_KRK0wGJvhEZzttzRV X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-29_06,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 malwarescore=0 bulkscore=0 suspectscore=0 phishscore=0 spamscore=0 adultscore=0 clxscore=1015 impostorscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512290172 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1767034258564158500 Content-Type: text/plain; charset="utf-8" Add encoded message helpers to send branch information trace packets. Signed-off-by: Daniel Henrique Barboza --- hw/riscv/rv-trace-messages.c | 110 +++++++++++++++++++++++++++++++++++ hw/riscv/rv-trace-messages.h | 7 +++ 2 files changed, 117 insertions(+) diff --git a/hw/riscv/rv-trace-messages.c b/hw/riscv/rv-trace-messages.c index 2f041aa639..7deaf25060 100644 --- a/hw/riscv/rv-trace-messages.c +++ b/hw/riscv/rv-trace-messages.c @@ -20,6 +20,8 @@ typedef enum { SYNC_PAYLOAD_SIZE_64BITS =3D 9, TRAP_PAYLOAD_SIZE_64BITS =3D 18, FORMAT2_PAYLOAD_SIZE_64BITS =3D 9, + FORMAT1_BASE_PAYLOAD_SIZE_64BITS =3D 5, + FORMAT1_PAYLOAD_MIN_SIZE_64BITS =3D 10, } RVTraceMessagePayloadSize; =20 typedef struct RVTraceMessageHeader { @@ -67,6 +69,28 @@ typedef struct RVTraceFormat2Payload { uint8_t irdepth:3; } RVTraceFormat2Payload; =20 +typedef struct RVTraceFormat1BasePayload { + uint8_t format:2; + uint8_t branches:5; + uint32_t branch_map:31; +} RVTraceFormat1BasePayload; + +/* + * FORMAT2_PAYLOAD_SIZE_64BITS =3D 9 plus 5 bits of 'branches', + * plus minimal 3 bits of 'branch_map' =3D 10 bytes. + */ +typedef struct RVTraceFormat1Payload { + uint8_t format:2; + uint8_t branches:5; + uint32_t branch_map; + uint32_t addressLow; + uint32_t addressHigh; + uint8_t notify:1; + uint8_t updiscon:1; + uint8_t irreport:1; + uint8_t irdepth:3; +} RVTraceFormat1Payload; + static uint8_t rv_etrace_write_bits(uint8_t *bytes, uint32_t bit_pos, uint32_t num_bits, uint32_t val) { @@ -228,3 +252,89 @@ size_t rv_etrace_gen_encoded_format2_msg(uint8_t *buf,= uint64_t addr, =20 return HEADER_SIZE + header.length; } + +size_t rv_etrace_gen_encoded_format1_noaddr(uint8_t *buf, + uint8_t branches, + uint32_t branch_map) +{ + RVTraceMessageHeader header =3D {.flow =3D 0, .extend =3D 0, + .length =3D FORMAT1_BASE_PAYLOAD_SIZE_64BITS}; + RVTraceFormat1BasePayload payload =3D {.format =3D 0b01, + .branches =3D branches, .branch_map =3D branch_map}; + uint8_t bit_pos =3D 0; + + bit_pos +=3D rv_etrace_write_header(buf, header); + + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 2, payload.format); + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 5, payload.branches); + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 31, payload.branch_map= ); + + return HEADER_SIZE + header.length; +} + +/* + * Same reservations made in the format 2 helper: + * + * - irreport and irdepth is always =3D=3D updiscon; + * + * - return_stack_size_p + call_counter_size_p is hardcoded + * to 3 since we don't implement neither ATM. + */ +size_t rv_etrace_gen_encoded_format1(uint8_t *buf, + uint8_t branches, uint32_t branch_map, + uint64_t addr, + bool notify, bool updiscon) +{ + RVTraceMessageHeader header =3D {.flow =3D 0, .extend =3D 0}; + RVTraceFormat1Payload payload =3D {.format =3D 0b01, + .branches =3D branches, + .notify =3D notify, + .updiscon =3D updiscon, + .addressLow =3D extract64(addr, 0, 32= ), + .addressHigh =3D extract64(addr, 32, = 32)}; + uint8_t payload_size =3D FORMAT1_PAYLOAD_MIN_SIZE_64BITS; + uint8_t branch_map_size =3D 0; + uint8_t bit_pos =3D 0; + + g_assert(branches < 32); + + if (branches <=3D 3) { + branch_map_size =3D 3; + } else if (branches <=3D 7) { + branch_map_size =3D 7; + payload_size++; + } else if (branches <=3D 15) { + branch_map_size =3D 15; + payload_size +=3D 2; + } else { + branch_map_size =3D 31; + payload_size +=3D 4; + } + + header.length =3D payload_size; + + bit_pos +=3D rv_etrace_write_header(buf, header); + + payload.irreport =3D updiscon; + if (updiscon) { + payload.irdepth =3D 0b111; + } else { + payload.irdepth =3D 0; + } + + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 2, payload.format); + + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 5, payload.branches); + + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, branch_map_size, paylo= ad.branch_map); + + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 32, payload.addressLow= ); + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 32, payload.addressHig= h); + + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 1, payload.notify); + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 1, payload.updiscon); + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 1, payload.irreport); + bit_pos +=3D rv_etrace_write_bits(buf, bit_pos, 3, payload.irdepth); + + return HEADER_SIZE + header.length; +} diff --git a/hw/riscv/rv-trace-messages.h b/hw/riscv/rv-trace-messages.h index 89f30e7d36..f8f1830852 100644 --- a/hw/riscv/rv-trace-messages.h +++ b/hw/riscv/rv-trace-messages.h @@ -28,5 +28,12 @@ size_t rv_etrace_gen_encoded_trap_msg(uint8_t *buf, uint= 64_t trap_addr, uint64_t tval); size_t rv_etrace_gen_encoded_format2_msg(uint8_t *buf, uint64_t addr, bool notify, bool updiscon); +size_t rv_etrace_gen_encoded_format1_noaddr(uint8_t *buf, + uint8_t branches, + uint32_t branch_map); +size_t rv_etrace_gen_encoded_format1(uint8_t *buf, + uint8_t branches, uint32_t branch_map, + uint64_t addr, + bool notify, bool updiscon); =20 #endif --=20 2.51.1 From nobody Wed Jan 7 09:26:24 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1767034274; cv=none; d=zohomail.com; s=zohoarc; b=g7RaS4Visu588KmJ7zp6HI8P+6EHRaQSyeC07gdMzhj1jxxhwyeTdoy2xSUzIkuuVVlqoF22uPwQSkc+pSdEHqDJIh3ElrZ1h6OzzNVn3kqhpE032hBNLvAGKa7+nONq+zAzKam+zgG/P1JIQHYm3tSRSGGa74W2XGbGMLduxiA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767034274; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=6akNvojVUeMjZYffEyBhFsnCpgVYGhubCOr0EvXTmtA=; b=m8gquKjcDtcQbHAoarju/DoiASsrs1kwgAwu3ltFPG8fAGmMxxmkoGDkq1sRQqvWrde/3ctJK9vf6MjWWwjicc2NYWy8SF9aUrxxjgLzqf4BPyP/3xGjSR31lCHivIIRyT5K/P9JlizQjFAiwiQsEnT2NbmY/xqa12JM2Rlcfco= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1767034274751773.5056752869148; Mon, 29 Dec 2025 10:51:14 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaIIu-0004V3-Km; Mon, 29 Dec 2025 13:49:16 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaII4-0003oO-Ao for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:48:28 -0500 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaIHt-0008IX-3V for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:48:23 -0500 Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BTARDx63834922 for ; Mon, 29 Dec 2025 18:48:01 GMT Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ba6sg553d-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 29 Dec 2025 18:48:01 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-29f27176aa7so199014815ad.2 for ; Mon, 29 Dec 2025 10:48:01 -0800 (PST) Received: from grind.dc1.ventanamicro.com ([187.101.184.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a2f3c82aa8sm282198705ad.31.2025.12.29.10.47.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Dec 2025 10:47:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=6akNvojVUeM jZYffEyBhFsnCpgVYGhubCOr0EvXTmtA=; b=kXUAut+uYCMSnSyRFuy/wXfV2ps HnZP7sxB0CjK5OY8VZbjlVBAmP+An4ZG9wDI4E0KKIi4uJy9CfyBNnR3NWtoo2yb H5LtzOQ4rlACedK+wUt23Q1s/Z5zSWedJJudVYpmlqmt5JvP2jpMKyBbAeI0Tylp jj4BHSEWCRvRidFdwUnAFlV+6mh0d+Vs9szOlJ7NVnzdB+3M5DomKlWjhH4nBSer k8bItb17OTcT0ue2Ii1VeH4hw/6a+McpHxdLmABBLkAfm4ZHAhcUYozwwRFPLuyN ZKuVEC58vBL3jnRaHhUHnoNSPRuwWCZiZnAgcDgTWNv6Hayr2RqVw8xN4UA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767034080; x=1767638880; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=6akNvojVUeMjZYffEyBhFsnCpgVYGhubCOr0EvXTmtA=; b=fP1sFuTyWJDnoedknfV2nExex158cRjslLe1mm0PHILvkKBt9rEjReC7Io2laYlYF7 teaVBvU4SKVZ+AAzq+fJqQ/CnCwtMDn1/qexM/wt53VcnLRxJfL+NTZpkpNmY9qAcgK/ rxX1jt1yi56K98kZEaVOZmkCGZ/KfuqmToSDpnH6U40owRIMutgv4ftKlRf0LXcrOFKM c45ELhURJ1SSMx7LtNj02AxqQLRtYeDUjtysV9C7QA1DGWSzrosaqeW+gk8ZnM4pq/OJ 15vHNGeylOVlQr6o3SisyJtkHawNeWKj29agLNuF74cgR08kr49oxAdCF34vP2MLLg43 /NJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767034080; x=1767638880; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=6akNvojVUeMjZYffEyBhFsnCpgVYGhubCOr0EvXTmtA=; b=AUUlx2gNxI1VCBMc/xOzdZp4HkBJZ3W2lxmij6ydFIpQetDS0zXn7bPIOTSOmYgCdY a8axeqi4HfDaatsaunDUaPkuuHs1qdhdsaQzJx4cogBHRkz3PFBDmCRBL/ps/c3m2v8I wKUwq+zQ4bMUdWNSzJRWRWLAoNSDokogPjGD16e/cRl5e/yrJ8yobkIU+PLD18A0GTrX O3L3s0Ejunz8/EnagygkznDllMQwRV7oCwGCeIsAltHPodXnvDUAZLW1nFzcPkTbCdKs evcuvcb3JtsoksUvcrAmX5Yr56FIZ5sUhCylbcQiMUzJF7fM0KPO6FTYSzrVjB7FAaPg Pb/w== X-Gm-Message-State: AOJu0Yze1PmUMbFTa5p5WNfNBugLBCzOxzgEJz4mJXijHZD0vgm+bqNJ iy1/OTsg5ia/dnTPAk64eDVLK62IGGcboATXy1MHoz17epLlgwS2R1jNnuKr8yLZbtRNHMstQZ9 uKt6kvqRvDfY8oQhyNs6deodLVYYhEEBvGjA40vlI+4Vfd/0MPJwEEwe6T7ACszhsKA== X-Gm-Gg: AY/fxX5PGeByfIVS5YSuSVDAnGvAIF6MZ+P8cBkctNUq//Ve6MGlCJAHXIpJWVB2JJz uiVh1vQ/KfqIqj54h+z/YV5DbeDgVwdPPaXllAd8kY0xxc9dm7eadjunMt2WVm1QrwcLF+g/GxN 3mQARENWXoXLdfPjsUAbZfq+Kxy/EHpikUeWby3D4IJjKJG4FtpFbCdnF5CB4tgffYcZDXjgNCF wKrOQ8BrUevXpvpGizeYfdm9dXZtj5bFQf58fAOiYwYrLdBNEctvBFnfWMFLQQ+TDB/Lg17O+86 5GelgmmeYutgiFTj/Vg7JbNAZ3l4LPMuSYrlpbQzjusUymiTA9mAnkZ58O+JLYpxWll7FqzwuWe 9zHvempMN9tui3rgNIsqYBL7+WXPItovAaL0bP02MMfzyQKA= X-Received: by 2002:a17:902:f60a:b0:269:b6c8:4a4b with SMTP id d9443c01a7336-2a2f2208e80mr338296435ad.6.1767034079949; Mon, 29 Dec 2025 10:47:59 -0800 (PST) X-Google-Smtp-Source: AGHT+IEJReSgPtBOdTrvbocueDidAqdrdQRKQD/b1jDx5IVTNFcsteybYLK8Avt5Y6USi/5ZMSEdTg== X-Received: by 2002:a17:902:f60a:b0:269:b6c8:4a4b with SMTP id d9443c01a7336-2a2f2208e80mr338296165ad.6.1767034079458; Mon, 29 Dec 2025 10:47:59 -0800 (PST) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, palmer@dabbelt.com, Daniel Henrique Barboza Subject: [PATCH v3 16/17] hw/riscv/trace-encoder: send branches info Date: Mon, 29 Dec 2025 15:46:55 -0300 Message-ID: <20251229184656.2224369-17-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> References: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: p3_-8MuUN7hKLmSeWA7Tahd88BB56e8Y X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDE3MiBTYWx0ZWRfX2Qua0+eRPB8W YoGJc6LSEdwDG7sio/Uf166+T4Ta7jFwk1WLnxPNKSobdiMM8Lehg1EpNjfaKRExSpDW7fMszmM r0SrNCSHus9fmfhC183mapzS+Gkql5Mu0KqYXji9wYthBubhyPdDG/zarixvYGqTRW1N9DAbw+8 ErH05Ed/FsCr/LMh+4HuZ7QqRlHWf6Au8jQqL9/7sJni2ZNmdvAPwTdhPw8Rm+yzA2ksNxb/H0+ Z8TKOCkAooyh/hsL209BSsRgekEC0t9/PxsbNsFuq0Ac9rFp1zwPb8BUBx86vHeBIOhw3PhMAuY XFbU1c1UZIpEEj3k9ILf0vh1wgzx6zHvxsX3z2+d3mqV1thSLaiuMfGMEd6uOs8ouFBHtPuNiux kmfx6th1022kZw/Xmciu3VdcJ89TQPHdd6pGweHyjDMfXwH/7TvBk+K5w2zE/IJJeY5rioy4sL3 Ae1mzO+v3JpUgMZzyRA== X-Proofpoint-ORIG-GUID: p3_-8MuUN7hKLmSeWA7Tahd88BB56e8Y X-Authority-Analysis: v=2.4 cv=Y+L1cxeN c=1 sm=1 tr=0 ts=6952cce1 cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=cW5wcbexNO3A0Ml9TiDm9w==:17 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=GSE619UI_DCnt5MBBt8A:9 a=GvdueXVYPmCkWapjIL-Q:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-29_06,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 spamscore=0 malwarescore=0 clxscore=1015 phishscore=0 lowpriorityscore=0 priorityscore=1501 suspectscore=0 bulkscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512290172 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1767034276637158500 Content-Type: text/plain; charset="utf-8" Branch info is reported via the TCG helpers, updating the trace encoder internal branch map. Branch packets are sent in two circunstances: - when the branch map is full; - when an updiscon packet is about to be sent and the branch map isn't empty. The former will trigger a Format 1 no-addr packet, the latter a Format 1 with the updiscon address. Signed-off-by: Daniel Henrique Barboza --- hw/riscv/trace-encoder.c | 52 ++++++++++++++++++++++++- hw/riscv/trace-encoder.h | 4 ++ target/riscv/helper.h | 1 + target/riscv/insn_trans/trans_rvi.c.inc | 13 +++++++ target/riscv/trace_helper.c | 12 ++++++ 5 files changed, 81 insertions(+), 1 deletion(-) diff --git a/hw/riscv/trace-encoder.c b/hw/riscv/trace-encoder.c index 8b16ce6fa0..c0f74887cf 100644 --- a/hw/riscv/trace-encoder.c +++ b/hw/riscv/trace-encoder.c @@ -29,6 +29,8 @@ */ #define TRACE_MSG_MAX_SIZE 32 =20 +#define TRACE_MAX_BRANCHES 31 + static TracePrivLevel trencoder_get_curr_priv_level(TraceEncoder *te) { CPURISCVState *env =3D &te->cpu->env; @@ -313,6 +315,9 @@ static void trencoder_reset(DeviceState *dev) te->trace_running =3D false; te->trace_next_insn =3D false; env->trace_running =3D false; + + te->branch_map =3D 0; + te->branches =3D 0; } =20 static void trencoder_realize(DeviceState *dev, Error **errp) @@ -410,9 +415,20 @@ static void trencoder_send_updiscon(TraceEncoder *tren= coder, uint64_t pc) bool updiscon =3D !notify; uint8_t msg_size; =20 - msg_size =3D rv_etrace_gen_encoded_format2_msg(format2_msg, pc, + if (trencoder->branches > 0) { + msg_size =3D rv_etrace_gen_encoded_format1(format2_msg, + trencoder->branches, + trencoder->branch_map, + pc, notify, updiscon); + trencoder->branches =3D 0; + } else { + msg_size =3D rv_etrace_gen_encoded_format2_msg(format2_msg, pc, + notify, + updiscon); + } + trencoder_send_message_smem(trencoder, format2_msg, msg_size); =20 trencoder->updiscon_pending =3D false; @@ -457,6 +473,40 @@ void trencoder_trace_trap_insn(Object *trencoder_obj, trencoder_send_message_smem(trencoder, msg, msg_size); } =20 +static void trencoder_send_branch_map(Object *trencoder_obj) +{ + TraceEncoder *te =3D TRACE_ENCODER(trencoder_obj); + g_autofree uint8_t *msg =3D g_malloc0(TRACE_MSG_MAX_SIZE); + uint8_t msg_size; + + msg_size =3D rv_etrace_gen_encoded_format1_noaddr(msg, + te->branches, + te->branch_map); + trencoder_send_message_smem(te, msg, msg_size); +} + +void trencoder_report_branch(Object *trencoder_obj, uint64_t pc, bool take= n) +{ + TraceEncoder *te =3D TRACE_ENCODER(trencoder_obj); + + /* + * 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) { + te->branch_map =3D deposit32(te->branch_map, te->branches, 1, 1); + } + + te->last_branch_pc =3D pc; + te->branches++; + + if (te->branches =3D=3D TRACE_MAX_BRANCHES) { + trencoder_send_branch_map(trencoder_obj); + te->branches =3D 0; + } +} + void trencoder_trace_ppccd(Object *trencoder_obj, uint64_t pc) { TraceEncoder *trencoder =3D TRACE_ENCODER(trencoder_obj); diff --git a/hw/riscv/trace-encoder.h b/hw/riscv/trace-encoder.h index 050406b531..48cf8366ee 100644 --- a/hw/riscv/trace-encoder.h +++ b/hw/riscv/trace-encoder.h @@ -28,6 +28,9 @@ struct TraceEncoder { uint32_t reg_mem_size; =20 uint64_t first_pc; + uint64_t last_branch_pc; + uint32_t branch_map; + uint8_t branches; =20 hwaddr baseaddr; hwaddr dest_baseaddr; @@ -54,5 +57,6 @@ 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); =20 #endif diff --git a/target/riscv/helper.h b/target/riscv/helper.h index f27ff319e9..b1de064e17 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -132,6 +132,7 @@ DEF_HELPER_6(csrrw_i128, tl, env, int, tl, tl, tl, tl) /* 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) =20 #ifndef CONFIG_USER_ONLY DEF_HELPER_1(sret, tl, env) diff --git a/target/riscv/insn_trans/trans_rvi.c.inc b/target/riscv/insn_tr= ans/trans_rvi.c.inc index ac00cbc802..ee29adbdeb 100644 --- a/target/riscv/insn_trans/trans_rvi.c.inc +++ b/target/riscv/insn_trans/trans_rvi.c.inc @@ -268,6 +268,15 @@ 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(); @@ -299,11 +308,15 @@ static bool gen_branch(DisasContext *ctx, arg_b *a, T= CGCond cond) } #endif =20 + gen_trace_branch(0); + 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); + if (!riscv_cpu_allow_16bit_insn(ctx->cfg_ptr, ctx->priv_ver, ctx->misa_ext) && diff --git a/target/riscv/trace_helper.c b/target/riscv/trace_helper.c index a4c5720a65..cd57641d9b 100644 --- a/target/riscv/trace_helper.c +++ b/target/riscv/trace_helper.c @@ -37,6 +37,13 @@ void helper_trace_updiscon(CPURISCVState *env) te->updiscon_pending =3D true; te->trace_next_insn =3D true; } + +void helper_trace_branch(CPURISCVState *env, target_ulong pc, int taken) +{ + RISCVCPU *cpu =3D env_archcpu(env); + + trencoder_report_branch(cpu->trencoder, pc, taken); +} #else /* #ifndef CONFIG_USER_ONLY */ void helper_trace_insn(CPURISCVState *env, uint64_t pc) { @@ -47,4 +54,9 @@ void helper_trace_updiscon(CPURISCVState *env) { return; } + +void helper_trace_branch(CPURISCVState *env, target_ulong pc, int taken) +{ + return; +} #endif /* #ifndef CONFIG_USER_ONLY*/ --=20 2.51.1 From nobody Wed Jan 7 09:26:24 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1767034201; cv=none; d=zohomail.com; s=zohoarc; b=e7425vhSzoX8LOSuSlc3z3s/2EnI9Q+b99vU4NE4SY6xwHYUgsTf/g5LyWB5XCdV4p7TxfsMzg9gUx+qHA+53qSJn5+5lcXAEL7408u8om7fMAQ9Fkt8AqsV+TtiooPRZpYSZdvlU5aL0/mF7KbETAeGi6bevyD0LC/UEni2R+s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767034201; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=iBQKhcie6XcQkgkKwPbzsyYJiHSU8CdbCPTyhDneiPc=; b=RcRJij+LDtfQjIM6IInu3q4UfJ2sOjjan90hSaE5k3ClsFqEurauZkD2TyNOmyEFXKx1nv9QdVL20H2iWW0Pi3fgPM2U44rVvIer19h2DEz37Jb7dIdvKWqHh6NhwMgLu2jLTzUKCLtiH5mU+XJcofEmEM545sbjq7W4dHZAXZ8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1767034201793454.26763972842025; Mon, 29 Dec 2025 10:50:01 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaIJ1-00055J-Dk; Mon, 29 Dec 2025 13:49:23 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaII4-0003oL-An for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:48:28 -0500 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaII0-0008J4-7i for qemu-devel@nongnu.org; Mon, 29 Dec 2025 13:48:23 -0500 Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BT9TwBp3686954 for ; Mon, 29 Dec 2025 18:48:03 GMT Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ba7hsd5tu-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 29 Dec 2025 18:48:03 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2a0c495fc7aso136180605ad.3 for ; Mon, 29 Dec 2025 10:48:03 -0800 (PST) Received: from grind.dc1.ventanamicro.com ([187.101.184.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a2f3c82aa8sm282198705ad.31.2025.12.29.10.47.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Dec 2025 10:48:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=iBQKhcie6Xc QkgkKwPbzsyYJiHSU8CdbCPTyhDneiPc=; b=O6fP6lnUp2fYVJHnB5smdi2za68 XgDZN2XW7g27QetuNN2ia8Cf4S+g6iFzqJvb5Am/hT04P7f2Yx3s7y++lBXCSeQm b+iL4GcNHEdZmWRWAwplCDNP/8BcII+XxSFCZ2ahbNL8iRIUaByGIJKyCedtE7qI 6So1qPXplRSJvvs3iPDvguG+pgKo9AAlD3nZTRSgPePLBJSjY8bckjRE2dntxpRv MJ0qyiw2aq6kw3qOI5kLC9YsfjCpelpUWnVGlUqrTnRZ3eLeTa1gQ1cJQhuWC0E4 yZe5JM5TYwwHfL4ReFLWuCWKCpxhtRcIyJQ+RXraGuqbSNXC7xKt1lnZntA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767034082; x=1767638882; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=iBQKhcie6XcQkgkKwPbzsyYJiHSU8CdbCPTyhDneiPc=; b=EvAOgaPwKbGqyRKIyELk8Bhb5damrKGRFIky5Wuk4Dv4CIqlR5ksRomZw4WJ7GY+Ic d3e9DiAJU6SZVjH6usATki+2FwF7HJW9eDz2IBENbqOs1VnAlWFWdJ+kMMXUB/UNeH1o lPqZJvzd4LIhUpAr1gQZrw+sjq5Hhp0ox02ONCjjTrPQOV+CQ+YsllzoAcGVwiPBh45g n9R4e2sxmB/X5o2UjCBtmsYcsjaDKvaE+rmnHikAg49GdssSeyZJ5w/b5ZDsaYKUfWWu Pa5uH5c0I+JljRz4z+2WkInwPi2MXzgqE16D9VGwy0rsKKz8YtgU7LfpWra/hhzw2sEY LK9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767034082; x=1767638882; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=iBQKhcie6XcQkgkKwPbzsyYJiHSU8CdbCPTyhDneiPc=; b=IFcKTB1qX0JvJ7ETSZtuS3C9TfWZqNevC55ttdeiD/Z1g5aTqjRo0iuG6gMXzG4xFx Dvcu5XnPLkkp7YmH0u/7zCHPmgk6XGGN1AVIgU2Tbcu7xMcD6EExtxG/zsLPORSQM1Bo O4/StPDp5x0paSvMpIESzlqNnV6cqM8X0hs7YXEHWTRVgdX4HdmMrvwvHagbkj/D1GMD nHYN3lLYFt9bshDg6w1e9YnZtRN+XtEc9LQI5KKlhNWj9eeIFeotTb372JAXL8zJ23am 2qvkHeg/wgtuew4ShGCxQc2jnmHMep10NBhKTPo65JUumfyK9WxLp4arPZcVXEcZcwfR Lqrg== X-Gm-Message-State: AOJu0YyFxEeymlBe3YZyDWVTA4pZbcbmN4mQ5ykcZfylGrQmT4Yau1Fb jrAxLdyKFyOeTVZL6RyqDnsfDOKyw4OzzggDT4iNIs4LvE2j9W3/d2Hk5W82MCpXtixaK3GkWHw TVuJebI2+e5FEjivgTBPPdvpUGkEBLPZ8tvOIxbRW1GkqO/ZOpiaEMP7z/bFrC3anrA== X-Gm-Gg: AY/fxX7o7Q6P1hCdq9XH8FpAqPFLB2D1KL4r/usGKL/qh0U/nRP7xgCCHTC9zhRq1dr swsNaaeuc7a0trA2FFzyBHi1h9YZSqVuDlUwrPTMZnETpMHNjmV5JVskuZLfjFGgPyt8lr0Pvem FLgNewrqus3Lrx9MQ3Q85UaYQbIvxTBhnea4E5/tQQVR7oGbAf+Gg/vLd1Jq7DSjzUYqK72b8Tb p99+NIzeSWU9pfYxy8kumP0+OA2bMfm4Y02yJrTXUGnwXIcB8y2tCs6RPS5u3p3HM17Pm4u0HRU +yEmVU01Oiq5FcIPJ6vRswCee1gsDO7kGLYN1D7HrHjjTEqwDUiKYgaqtt7SV4Yx3Mtu9c2aS6r 2JzYXtPF7c2M3h30zAm91FTf6YUgyNLJmLPnQ+pG+ACKjSvE= X-Received: by 2002:a17:903:41c6:b0:2a1:360c:3659 with SMTP id d9443c01a7336-2a2f2a3d1f4mr264340665ad.58.1767034082484; Mon, 29 Dec 2025 10:48:02 -0800 (PST) X-Google-Smtp-Source: AGHT+IFlLqj/xiI3/7508ZcOTRotsYxKvUNFXJJTdbO14H8F/vlMq3zw82izabfxwMoHnIec74AyVw== X-Received: by 2002:a17:903:41c6:b0:2a1:360c:3659 with SMTP id d9443c01a7336-2a2f2a3d1f4mr264340475ad.58.1767034082000; Mon, 29 Dec 2025 10:48:02 -0800 (PST) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, palmer@dabbelt.com, Daniel Henrique Barboza Subject: [PATCH v3 17/17] hw/riscv/trace: update branch bit in sync messages Date: Mon, 29 Dec 2025 15:46:56 -0300 Message-ID: <20251229184656.2224369-18-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> References: <20251229184656.2224369-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: Xg8LaK6a8kk_ok5d4h_VwRCkXdsImcn_ X-Authority-Analysis: v=2.4 cv=O4o0fR9W c=1 sm=1 tr=0 ts=6952cce3 cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==:117 a=cW5wcbexNO3A0Ml9TiDm9w==:17 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=l-bS85s7JyIff80a6EEA:9 a=uG9DUKGECoFWVXl0Dc02:22 X-Proofpoint-ORIG-GUID: Xg8LaK6a8kk_ok5d4h_VwRCkXdsImcn_ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDE3MiBTYWx0ZWRfX8Lh0kNegHd2o yNPala3S30rlB5koWGRwCfl28MgHnVNOR29dg32RYA42dNYUIiGE4L90HWNqeKkFuS+H4SzsIGv e6sQj5bZjYCH/mr2ry2t0qDRU0xqgh0m35xo2pxS7fNbQU90+FivyiYeTbJ68Mb3Ua0mpUE4GWs ApeMeUF6nqHot6oX/1UU3R8+sTRD1dRuXH6tT1FYWqtbF/D8ifkk6Hg1KKZxS3YjnZZaa/K7Vww sC4YRKPa6kn7m50l+MK91y3GrIV6uD0mVoff2OHfvJxVZWtNsjCA89ROLv4jEbk24lPui/HhnL+ Eaw/UWOtM9y/PkOxz1YlbZzklYOd6C1QsC2VsVGjmaKdd7/ZuMIcUS3iIqtj+7r9EvVmkfjQmum n7rQofjfWLZTvpxfvc0h/A7KmhYhheK3XmPH1NbYU7ZLC4U6smruOYZ9MNJxvgqu0FoBPGaXKcR 4yUR+Sk6NRE0XBOkuBA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-29_06,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 impostorscore=0 spamscore=0 suspectscore=0 lowpriorityscore=0 phishscore=0 bulkscore=0 clxscore=1015 adultscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512290172 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1767034204356158500 Content-Type: text/plain; charset="utf-8" Now that we have a working branch map update the branch bit in sync messages by checking if the sync address is a branch address that was taken (or not). Signed-off-by: Daniel Henrique Barboza --- hw/riscv/rv-trace-messages.c | 6 +++--- hw/riscv/rv-trace-messages.h | 3 ++- hw/riscv/trace-encoder.c | 30 ++++++++++++++++++++++++++++-- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/hw/riscv/rv-trace-messages.c b/hw/riscv/rv-trace-messages.c index 7deaf25060..932f3ae499 100644 --- a/hw/riscv/rv-trace-messages.c +++ b/hw/riscv/rv-trace-messages.c @@ -126,11 +126,12 @@ static uint8_t rv_etrace_write_header(uint8_t *buf, R= VTraceMessageHeader header) } =20 size_t rv_etrace_gen_encoded_sync_msg(uint8_t *buf, uint64_t pc, - TracePrivLevel priv_level) + TracePrivLevel priv_level, + bool pc_is_branch) { RVTraceSyncPayload payload =3D {.format =3D 0b11, .subformat =3D 0b00, - .branch =3D 1, + .branch =3D pc_is_branch, .privilege =3D priv_level, .addressLow =3D extract64(pc, 0, 32), .addressHigh =3D extract64(pc, 32, 32)}; @@ -160,7 +161,6 @@ size_t rv_etrace_gen_encoded_trap_msg(uint8_t *buf, uin= t64_t trap_addr, { RVTraceTrapPayload payload =3D {.format =3D 0b11, .subformat =3D 0b01, - .branch =3D 1, .privilege =3D priv_level, .ecause =3D ecause, .addressLow =3D extract64(trap_addr, 0, = 32), diff --git a/hw/riscv/rv-trace-messages.h b/hw/riscv/rv-trace-messages.h index f8f1830852..6f700eac8e 100644 --- a/hw/riscv/rv-trace-messages.h +++ b/hw/riscv/rv-trace-messages.h @@ -20,7 +20,8 @@ typedef enum { } TracePrivLevel; =20 size_t rv_etrace_gen_encoded_sync_msg(uint8_t *buf, uint64_t pc, - TracePrivLevel priv_level); + TracePrivLevel priv_level, + bool pc_is_branch); size_t rv_etrace_gen_encoded_trap_msg(uint8_t *buf, uint64_t trap_addr, TracePrivLevel priv_level, uint8_t ecause, diff --git a/hw/riscv/trace-encoder.c b/hw/riscv/trace-encoder.c index c0f74887cf..55acb1f2ae 100644 --- a/hw/riscv/trace-encoder.c +++ b/hw/riscv/trace-encoder.c @@ -394,15 +394,38 @@ static void trencoder_send_message_smem(TraceEncoder = *trencoder, trencoder_update_ramsink_writep(trencoder, dest, wrapped); } =20 +static bool trencoder_addr_is_branch_taken(TraceEncoder *te, uint64_t addr) +{ + uint8_t last_branch; + + if (te->branches =3D=3D 0) { + return false; + } + + if (te->last_branch_pc =3D=3D addr) { + last_branch =3D extract32(te->branches, te->branches - 1, 1); + + /* 0: branch taken, 1: not taken*/ + if (last_branch =3D=3D 0) { + return true; + } + } + + return false; +} + static void trencoder_send_sync_msg(Object *trencoder_obj, uint64_t pc) { TraceEncoder *trencoder =3D TRACE_ENCODER(trencoder_obj); TracePrivLevel priv =3D trencoder_get_curr_priv_level(trencoder); g_autofree uint8_t *msg =3D g_malloc0(TRACE_MSG_MAX_SIZE); uint8_t msg_size; + bool is_branch_taken; =20 trencoder->first_pc =3D pc; - msg_size =3D rv_etrace_gen_encoded_sync_msg(msg, pc, priv); + is_branch_taken =3D trencoder_addr_is_branch_taken(trencoder, pc); + msg_size =3D rv_etrace_gen_encoded_sync_msg(msg, pc, priv, + is_branch_taken); =20 trencoder_send_message_smem(trencoder, msg, msg_size); } @@ -440,6 +463,7 @@ void trencoder_set_first_trace_insn(Object *trencoder_o= bj, uint64_t pc) TracePrivLevel priv =3D trencoder_get_curr_priv_level(trencoder); g_autofree uint8_t *msg =3D g_malloc0(TRACE_MSG_MAX_SIZE); uint8_t msg_size; + bool is_branch_taken; =20 if (trencoder->updiscon_pending) { trencoder_send_updiscon(trencoder, pc); @@ -447,7 +471,9 @@ void trencoder_set_first_trace_insn(Object *trencoder_o= bj, uint64_t pc) =20 trencoder->first_pc =3D pc; trace_trencoder_first_trace_insn(pc); - msg_size =3D rv_etrace_gen_encoded_sync_msg(msg, pc, priv); + is_branch_taken =3D trencoder_addr_is_branch_taken(trencoder, pc); + msg_size =3D rv_etrace_gen_encoded_sync_msg(msg, pc, priv, + is_branch_taken); =20 trencoder_send_message_smem(trencoder, msg, msg_size); } --=20 2.51.1