GICv3-PMU
概述
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中每一个计数器都可以被独立编程,用于计数一定范围内的事件
配置一个计数器:
- 设置GICP_EVCNTRn,用于设置起始计数值。可以将计数值设置为0,也可以设置为更大的值
- 设置GICP_EVTYPERn,用于设置需要计数的事件类型
- 设置GICP_FRn,用于设置需要过滤的事件类型
- 设置GICP_CNTENSET0,通过对应的bit位,用于使能相应的计数器
- 重复上述操作,用于配置所需的多个计数器
- 通过GICP_CR.E使能全局的计数器开关