This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

当Cortex-A9挂死时,硬件Trace会丢失最后1~2个waypoints,这些waypoints到底丢在了哪里?

问题描述:

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。

Parents
  • > 1、硬件Trace会丢失最后1~2个waypoints,这些waypoints到底丢在了哪里?

    > 可能会在PTM-A9的FIFO中,还是在ETB的formatter的FIFO中,还是在连接PTM-A9和ETB的 Async bridge中?

    都有可能。

    可以试下program ETB FFCR register bit-6 发起一个flush request。这个flush request 应该会一级级传递到 PTM (前提是硬件在集成的时候有设计正确),把trace path上所有的Buffer都 drain一下, 可能可以解决这个问题。

Reply
  • > 1、硬件Trace会丢失最后1~2个waypoints,这些waypoints到底丢在了哪里?

    > 可能会在PTM-A9的FIFO中,还是在ETB的formatter的FIFO中,还是在连接PTM-A9和ETB的 Async bridge中?

    都有可能。

    可以试下program ETB FFCR register bit-6 发起一个flush request。这个flush request 应该会一级级传递到 PTM (前提是硬件在集成的时候有设计正确),把trace path上所有的Buffer都 drain一下, 可能可以解决这个问题。

Children