登录后台

页面导航

概述

GIC600中包含了一个pmu组件,用于对chip上的gicd和its中的关键事件进行计数。gicr的事件不通过GIC中的pmu进行追踪。PPI和SGI中断可以通过核的中断服务函数进行计数。

pmu中共有5个计数器,每一个计数器都有快照功能以及溢出中断功能。

安全与非安全中断是一起计数的,所以非安全的软件在默认情况下,是无法访问GICP(pmu)寄存器空间。然而,安全软件可以决定是否允许非安全的访问。可以通过GICD_SAC.GICPNS比特位或者将gicp_allow_ns信号线tie 1实现。如果GICD_CTLR.DS==1,那么GICP寄存器空间可以被所有的软件访问。

计数配置

pmu中每一个计数器都可以被独立编程,用于计数一定范围内的事件

配置一个计数器:

  1. 设置GICP_EVCNTRn,用于设置起始计数值。可以将计数值设置为0,也可以设置为更大的值
  2. 设置GICP_EVTYPERn,用于设置需要计数的事件类型
  3. 设置GICP_FRn,用于设置需要过滤的事件类型
  4. 设置GICP_CNTENSET0,通过对应的bit位,用于使能相应的计数器
  5. 重复上述操作,用于配置所需的多个计数器
  6. 通过GICP_CR.E使能全局的计数器开关

pmu的寄存器中除了使能寄存器,是没有复位的。所以在使用之前必须设置

溢出中断

每一个计数器的溢出中断,可以通过GICP_INTENSET0寄存器的相应bit位进行使能。bit0对应使能GICP_EVCNTR0,bit1对应使能GICP_EVCNTR1。溢出中断的禁用可以通过GICP_INTENCLR0寄存器的相应bit位进行设置。

当溢出中断使能时,溢出中断会发生在以下事件时:

  • 为任意计数器设置GICP_OVSSET0寄存器
  • 在任意使能的计数器上发生溢出

GICP_OVSSET0和GICP_OVSCLR0寄存器可用于保存与恢复操作,并且可以用于测试pmu_int中断的正确性

pmu_int可用于触发额外的逻辑,例如触发一个读操作去读取捕获的数据

除此之外,通过GICP_IRQCR.SPIID字段,可以设置pmu_int的SPI中断号。并且与普通的SPI拥有一样的配置方法

快照

每一个pmu计数器都有相应的GICP_SVRn快照寄存器。在一个快照事件时,所有计数器会被复制到它们的备份寄存器中。

快照事件包括:

  • 四阶段 sample_req/sample_ack 外部握手
  • GICP_CAPR.CAPTURE字段写1
  • 当GICP_EVTYPERn.OVFCAP设置为1时,计数器发生了溢出事件
博主已关闭本页面的评论功能