Coresight - HW Assisted Tracing on ARM
Overview
Coresight is an umbrella of technologies allowing for the debugging of ARM based SoC. It includes solutions for JTAG and HW assisted tracing. This document is concerned with the latter.
HW assisted tracing is becoming increasingly useful when dealing with systems that have many SoCs and other components like GPU and DMA engines. Developers can monitor the behavior of their software as it runs on the device, view real-time data about its execution, and identify and debug issues quickly.
Coresight omponents are generally categorised as source, link and sinks. The source devices generats a compressed stream representing the processor instruction path based on tracing scenarios. The link devices are responsible for transferring the stream from the source device to the sink device. The sink devices serve as as endpoints to the coresight implementation, either storing the compressed stream in a memory buffer or creating an interface to the outside world where data can be transferred to a host without fear of filling up the onboard coresight memory buffer.
refer to the following document for more details: https://developer.arm.com/documentation/102520/latest/
Acronyms and Classification
Acronyms:
- PTM:
Program Trace Macrocell
- ETM:
Embedded Trace Macrocell
- STM:
System trace Macrocell
- ETB:
Embedded Trace Buffer
- ITM:
Instrumentation Trace Macrocell
- TPIU:
Trace Port Interface Unit
- TMC-ETR:
Trace Memory Controller, configured as Embedded Trace Router
- TMC-ETF:
Trace Memory Controller, configured as Embedded Trace FIFO
Classification:
- Source:
ETM, STM, ITM
- Link:
Funnel, replicator, TMC-ETF
- Sinks:
ETB, TPIU, TMC-ETR
Framework and implementation
The coresight framework provides a central point to represent, configure and manage coresight devices on a platform. Any coresight compliant device can register with the framework for as long as they use the right APIs:
-
int coresight_register(FAR struct coresight_dev_s *csdev, FAR const struct coresight_desc_s *desc);
-
void coresight_unregister(FAR struct coresight_dev_s *csdev);
struct coresight_desc *desc
describes the type of current coresight device
and where it connects to. When all the coresight devices are registered,
devices throught the tracing stream path can be enablea by calling:
-
int coresight_enable(FAR struct coresight_dev_s *srcdev, FAR struct coresight_dev_s *destdev);
The coresight_enable
function will build the path through srcdev and
destdev according the struct coresight_desc *desc
.