Re: [PATCH v4 00/12] Linux RISC-V trace framework and drivers

From: Greg KH

Date: Thu May 21 2026 - 04:37:17 EST


On Tue, May 19, 2026 at 01:51:43PM +0530, Anup Patel wrote:
> Hi Greg,
>
> On Wed, Apr 29, 2026 at 6:21 PM Anup Patel <anup.patel@xxxxxxxxxxxxxxxx> wrote:
> >
> > This series adds initial support for RISC-V trace framework and drivers.
> > The RISC-V trace v1.0 specification is already ratified and can be found at:
> > https://github.com/riscv-non-isa/e-trace-encap/releases/tag/v1.0.0-ratified
> > https://github.com/riscv-non-isa/tg-nexus-trace/releases/tag/1.0_Ratified
> >
> > The RISC-V trace framework and drivers are designed to be agnostic to the
> > underlying trace protocol hence both RISC-V E-trace and RISC-V N-trace should
> > work fine. The discovery of trace protocl parameters are left to user-space
> > trace decoder.
> >
> > In ther future, there will be subsequent series adding:
> > 1) Sysfs support
> > 2) ACPI support
> > 3) More trace drivers (such as funnel, ATB, etc)
> > 4) Support for upcoming self-hosted trace specification
> > 5) ... and more ...
> >
> > These patches can also be found in the riscv_trace_support_v3 branch at:
> > https://github.com/avpatel/linux.git
> >
> > To test the patches, we need QEMU virt machine with RISC-V trace support
> > which can be found in rv-etrace branch at:
> > https://gitlab.com/danielhb/qemu.git
> >
> > To capture rvtrace data using perf on QEMU virt machine do the following:
> > 1) Launch QEMU virt machine
> > $ qemu-system-riscv64 -nographic -M virt -smp 2 -bios fw_dynamic.bin \
> > -kernel Image -append "root=/dev/vda rw console=ttyS0 earlycon=sbi" \
> > -drive file=/path/to/rootfs.img,id=disk1,if=none,format=raw \
> > -device virtio-blk-device,drive=disk1
> > 2) Run perf record to capture rvtrace data
> > $ perf record --all-cpus -e rvtrace/event=0x1/ <command>
> > 3) The step2 would create a perf.data file which has the rvtrace data.
> > Now run perf report -D and look for PERF_RECORD_AUXTRACE event
> > section(s) which point(s) to the actual rvtrace data offset.
> >
> > Changes since v3:
> > - Rebased on Linux-7.1-rc1
> > - Use kzalloc_obj() in-place of kzalloc() in PATCH2, PATCH3 and PATCH9
> > - Improved PATCH7 to save the previous WP value
> >
> > Changes since v2:
> > - Rebased on Linux-7.0-rc1
> > - Addressed Rob's comments on DT bindings in PATCH1
> > - Addressed ref-count related issues in rvtrace_of_parse_outconns()
> > of PATCH2
> > - Made RVtrace framework more generic by avoiding implicit access
> > to component registers in PATCH2
> > - More improvements in trRamStart/Limit/WP programming and other
> > improvments in PATCH7
> > - Removed RVTRACE_BUF_LEN from PATCH9
> > - Removed redundant page_size from PATCH10
> > - Renamed found_etm in PATCH10
> > - Removed rvtrace_recording_init() declaration from header in PATCH11
> >
> > Changes since v1:
> > - Rebased on Linux-6.18-rc3
> > - Addressed Rob's comments in dt-bindings added by PATCH1
> > - Get reference of conn->dest_fwnode and add missing break in
> > rvtrace_of_parse_outconns() of rvtrace-platform drivers added
> > by PATCH2
> > - Added new inline function rvtrace_comp_is_empty() in PATCH2
> > and used it in rvtrace_encoder_stop() added by PATCH5
> > - Fixed trRamWPLow usage in PATCH7
> > - Determine RAM sink buffer size based on component implementation
> > ID and reduce default RAM sink buffer size to 1MB
> > - Add new PATCH8 to enable DMA_RESTRICTED_POOL in RISC-V defconfig
> > so that implementations with RAM sink address restrictions can
> > be handled.
> >
> > Anup Patel (6):
> > dt-bindings: Add RISC-V trace component bindings
> > rvtrace: Initial implementation of driver framework
> > rvtrace: Add functions to create/destroy a trace component path
> > rvtrace: Add function to copy into perf AUX buffer
> > riscv: Enable DMA_RESTRICTED_POOL in defconfig
> > MAINTAINERS: Add entry for RISC-V trace framework
> >
> > Mayuresh Chitale (6):
> > rvtrace: Add functions to start/stop tracing on a component path
> > rvtrace: Add trace encoder driver
> > rvtrace: Add trace ramsink driver
> > rvtrace: Add perf driver for tracing using perf tool
> > perf tools: Add RISC-V trace PMU record capabilities
> > perf tools: Initial support for RISC-V trace decoder
> >
> > .../bindings/riscv/riscv,trace-component.yaml | 120 +++
> > MAINTAINERS | 11 +
> > arch/riscv/configs/defconfig | 1 +
> > drivers/Makefile | 1 +
> > drivers/hwtracing/Kconfig | 2 +
> > drivers/hwtracing/rvtrace/Kconfig | 33 +
> > drivers/hwtracing/rvtrace/Makefile | 6 +
> > drivers/hwtracing/rvtrace/rvtrace-core.c | 787 ++++++++++++++++++
> > drivers/hwtracing/rvtrace/rvtrace-encoder.c | 130 +++
> > drivers/hwtracing/rvtrace/rvtrace-perf.c | 345 ++++++++
> > drivers/hwtracing/rvtrace/rvtrace-platform.c | 209 +++++
> > drivers/hwtracing/rvtrace/rvtrace-ramsink.c | 338 ++++++++
> > include/linux/rvtrace.h | 352 ++++++++
> > tools/perf/arch/riscv/util/Build | 1 +
> > tools/perf/arch/riscv/util/auxtrace.c | 219 +++++
> > tools/perf/util/Build | 1 +
> > tools/perf/util/auxtrace.c | 4 +
> > tools/perf/util/auxtrace.h | 1 +
> > tools/perf/util/rvtrace-decoder.c | 91 ++
> > tools/perf/util/rvtrace.h | 19 +
> > 20 files changed, 2671 insertions(+)
> > create mode 100644 Documentation/devicetree/bindings/riscv/riscv,trace-component.yaml
> > create mode 100644 drivers/hwtracing/rvtrace/Kconfig
> > create mode 100644 drivers/hwtracing/rvtrace/Makefile
> > create mode 100644 drivers/hwtracing/rvtrace/rvtrace-core.c
> > create mode 100644 drivers/hwtracing/rvtrace/rvtrace-encoder.c
> > create mode 100644 drivers/hwtracing/rvtrace/rvtrace-perf.c
> > create mode 100644 drivers/hwtracing/rvtrace/rvtrace-platform.c
> > create mode 100644 drivers/hwtracing/rvtrace/rvtrace-ramsink.c
> > create mode 100644 include/linux/rvtrace.h
> > create mode 100644 tools/perf/arch/riscv/util/auxtrace.c
> > create mode 100644 tools/perf/util/rvtrace-decoder.c
> > create mode 100644 tools/perf/util/rvtrace.h
> >
> > --
> > 2.43.0
> >
>
> Friendly ping ?
>
> If this series looks good to you then I can send first PR for rvtrace ?

They should be as patches, not a pull request, after you get everyone to
agree that the user api is ok.

thanks,

greg k-h