问题描述:
A9对某个地址发起了读访问(起始该地址是已知地址),因slave的原因对该地址的读无response给A9,这就导致A9挂死。想利用PTM-A9 来trace其死前的执行轨迹。
发现挂死地址前的1~2个waypoints会丢失。有时候ETB中存储的最后一个waypoints也不完整,比如该wayponts是个branch packet占用2个字节,但发现ETB只是记录
下了该packet中的第一个字节,第二个字节值为0。
测试步骤:
1、core-x 启动trace开始记录,ETB设置为循环记录方式
2、core-y监控core-x 的ETB 写指针是否在变更,如果一段时间内不再变更则认为 core-x已经挂死
3、core-x访问挂死地址
4、core-y监控到x挂死后,disable core-x的ETB,导出ETB信息并进行分析
疑问:
1、硬件Trace会丢失最后1~2个waypoints,这些waypoints到底丢在了哪里?
可能会在PTM-A9的FIFO中,还是在ETB的formatter的FIFO中,还是在连接PTM-A9和ETB的 Async bridge中?
1)在disable core-x的ETB之前,对PTM-A9设置ETMCR.ProgBit= 1,这样能手动flush PTM中的FIFO,但无效果;最后的waypoints还是丢失
2)disable core-x的ETB,ETB会flush formatter中的FIFO
3)Async bridge没有接口可以flush。