Hi all,
I am currently facing a problem about manually flushing traces. The traced user application runs on a Linux distribution with an FPGA Board based on a Zynq-7000 SoC. I am setting up coresight components for tracing only the user application PID and his address space, and I exclude tracing kernel. All traces are exported to a monitor present in the FPGA. The flow of the traces:
————————————— ——————— ————————— | | | | | | | ARM Cortex A9 (Core 0) | ==> | TPIU | ==> | FPGA Monitor | | / PTM | | | | | ————————————— ——————— —————————
When there is a syscall on the user application, I have the traces below:
… 16274 (a waypoint update packet) ffff0008 (the exception branch address) 16278 ..
The relative addresses/assembly instructions extracted from the ELF file are :
16270: e89c0078 ldm ip, {r3, r4, r5, r6} 16274: ef000000 svc 0x00000000 16278: e8bd00f0 pop {r4, r5, r6, r7}
During the execution of the syscall (on the Kernel side), the kernel needs to receive a response from the FPGA Monitor and wait actively for it. This response depends on calculations relative to all PTM traces before the syscall (SVC instruction at 16274). That’s why I need to flush all traces during the syscall, I tried to flush traces by setting the FOnMan_W of the Formatter and Flush Control Register (FFCR) into coresight-tpiu.c but that’s not working.
Do you have an idea of how correctly flushing all traces to the FPGA Monitor on the kernel?
Best regards, Mounir