Linux RISC-V trace framework and drivers
Get series with b4
b4 am [email protected]Versions newest first · linked by author and title
- v2 Latest12 patches 16 repliesIn review
- 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 files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/12 | dt-bindings: Add RISC-V trace component bindingsDocumentation/ | +112 | 2 replies | |
| 2/12 | rvtrace: Initial implementation of driver frameworkdrivers/ drivers/ drivers/ +4 more | +996 | 2 replies | |
| 3/12 | rvtrace: Add functions to create/destroy a trace component pathdrivers/ include/ | +264 | 0 replies | |
| 4/12 | rvtrace: Add functions to start/stop tracing on a component pathdrivers/ include/ | +50 | 0 replies | |
| 5/12 | rvtrace: Add trace encoder driverdrivers/ drivers/ drivers/ | +115 | 0 replies | |
| 6/12 | rvtrace: Add function to copy into perf AUX bufferdrivers/ include/ | +43 | 0 replies | |
| 7/12 | rvtrace: Add trace ramsink driverdrivers/ drivers/ drivers/ | +272 | 4 replies | |
| 8/12 | riscv: Enable DMA_RESTRICTED_POOL in defconfigarch/ | +1 | 0 replies | |
| 9/12 | rvtrace: Add perf driver for tracing using perf tooldrivers/ drivers/ drivers/ +2 more | +356 | 2 replies | |
| 10/12 | perf tools: Add RISC-V trace PMU record capabilitiestools/ tools/ tools/ +2 more | +239 | 4 replies | |
| 11/12 | perf tools: Initial support for RISC-V trace decodertools/ tools/ tools/ +1 more | +97 | 2 replies | |
| 12/12 | MAINTAINERS: Add entry for RISC-V trace framework and driversMAINTAINERS | +11 | 0 replies |
Reviews trailers per patch
2 of 12 patches have a Reviewed-by or Acked-by.
| Patch | Nutty Liu |
|---|---|
| 1/12 | |
| 2/12 | R-b |
| 3/12 | |
| 4/12 | |
| 5/12 | |
| 6/12 | |
| 7/12 | |
| 8/12 | |
| 9/12 | |
| 10/12 | R-b |
| 11/12 | |
| 12/12 |
Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.
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