Skip to content

Linux RISC-V trace framework and drivers

Anup Patel linux-devicetree linux-riscv lkml 2 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v2 Latest12 patches 16 repliesIn review
  2. v111 patches 24 repliesSuperseded

Changes in v2 from the cover letter

- 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.

Patches in v2 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/12dt-bindings: Add RISC-V trace component bindingsDocumentation/devicetree/bindings/riscv/riscv,trace-component.yaml+112 -02 replies
2/12rvtrace: Initial implementation of driver frameworkdrivers/Makefile drivers/hwtracing/Kconfig drivers/hwtracing/rvtrace/Kconfig +4 more+996 -02 replies
3/12rvtrace: Add functions to create/destroy a trace component pathdrivers/hwtracing/rvtrace/rvtrace-core.c include/linux/rvtrace.h+264 -20 replies
4/12rvtrace: Add functions to start/stop tracing on a component pathdrivers/hwtracing/rvtrace/rvtrace-core.c include/linux/rvtrace.h+50 -00 replies
5/12rvtrace: Add trace encoder driverdrivers/hwtracing/rvtrace/Kconfig drivers/hwtracing/rvtrace/Makefile drivers/hwtracing/rvtrace/rvtrace-encoder.c+115 -00 replies
6/12rvtrace: Add function to copy into perf AUX bufferdrivers/hwtracing/rvtrace/rvtrace-core.c include/linux/rvtrace.h+43 -00 replies
7/12rvtrace: Add trace ramsink driverdrivers/hwtracing/rvtrace/Kconfig drivers/hwtracing/rvtrace/Makefile drivers/hwtracing/rvtrace/rvtrace-ramsink.c+272 -04 replies
8/12riscv: Enable DMA_RESTRICTED_POOL in defconfigarch/riscv/configs/defconfig+1 -00 replies
9/12rvtrace: Add perf driver for tracing using perf tooldrivers/hwtracing/rvtrace/Kconfig drivers/hwtracing/rvtrace/Makefile drivers/hwtracing/rvtrace/rvtrace-core.c +2 more+356 -12 replies
10/12perf tools: Add RISC-V trace PMU record capabilitiestools/perf/arch/riscv/util/Build tools/perf/arch/riscv/util/auxtrace.c tools/perf/util/auxtrace.c +2 more+239 -04 replies
11/12perf tools: Initial support for RISC-V trace decodertools/perf/util/Build tools/perf/util/auxtrace.c tools/perf/util/rvtrace-decoder.c +1 more+97 -02 replies
12/12MAINTAINERS: Add entry for RISC-V trace framework and driversMAINTAINERS+11 -00 replies

Reviews trailers per patch

2 of 12 patches have a Reviewed-by or Acked-by.

PatchNutty Liu
1/12
2/12R-b
3/12
4/12
5/12
6/12
7/12
8/12
9/12
10/12R-b
11/12
12/12

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v2 thread

Cover letter [PATCH v2 00/12] Linux RISC-V trace framework and drivers

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_v2 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 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 and drivers

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 | 112 +++
 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      | 798 ++++++++++++++++++
 drivers/hwtracing/rvtrace/rvtrace-encoder.c   | 107 +++
 drivers/hwtracing/rvtrace/rvtrace-perf.c      | 343 ++++++++
 drivers/hwtracing/rvtrace/rvtrace-platform.c  | 192 +++++
 drivers/hwtracing/rvtrace/rvtrace-ramsink.c   | 262 ++++++
 include/linux/rvtrace.h                       | 349 ++++++++
 tools/perf/arch/riscv/util/Build              |   1 +
 tools/perf/arch/riscv/util/auxtrace.c         | 218 +++++
 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                     |  20 +
 20 files changed, 2553 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
Signature · 1 line
2.43.0