一知半解 · 2020年01月03日

TBVAL_INTTRIG和TBVAL_INTSCHED是什么?

我这里有ARM给的一个关于cortex-a5的测试代码压缩包a5_validation.tar.gz. 我想把其中的ca5_max_power.s在我自己的soc上运行,

我用的ca5_max_power.s的信息是

; Revision : $Revision: 60190 $

;

; Release Information : CORTEX-A5-MPCore-r0p1-00rel0

我有两个问题想问一下,

  1. ca5_max_power.s测试需要soc有一些特别的硬件电路吗?在我自己的cortex-a5 soc上可以运行测试吗?
  2. ca5_max_power.s有调用macro: CPU_WFE_TRIGGER_EVENTI, 定义在validation_macros.hs,

    这个macro定义中有用到TBVAL_INTSEL, TBVAL_INTTRIG和TBVAL_INTSCHED, 请问这三个地址是什么,

    测试代码里定义在0xa2000000的偏移上, 请问如果porting到我自己的soc上,这个基地址应该是什么?

    这个macro定义如下:

            LDR     r7, =TBVAL_INTSEL
    
            MOV     r0, #0
    
            STR     r0, [r7]
    
            DSB
    
            ; Trigger condition: "All CPU's WFE must be set in order to set EVENTI"
    
            ; NB: depends on the number of CPUs implemented if MP case
    
            LDR     r7, =TBVAL_INTTRIG
    
            LDR     r1, =data_cpunb
    
            LDR     r0, [r1]
    
            MOV     r1, #1
    
            LSL     r1, r0
    
            SUB     r0, r1, #1
    
            LSL     r0, #4
    
            STR     r0, [r7]
    
            DSB
    
            ; EVENTI generation enabled (held until programmed trigger condition is true)
    
            LDR     r7, =TBVAL_INTSEL
    
            MOV     r0, #1<<8
    
            STR     r0, [r7]
    
            DSB
    
            ; Schedule trigger now (delay == 0 cycle)
    
            LDR     r7, =TBVAL_INTSCHED
    
            MOV     r0, #0
    
            STR     r0, [r7]
    
            DSB
1 个回答 得票排序 · 时间排序
潮声隔雨深 · 2020年01月03日

这个测试是用来测试CPU的最大功耗的,基本上就是使pipeline全开,包括dual issue, NEON, debug都跑起来。 因为只是个CPU本身的功耗,本来是不需要其他logic来支持的。

如果是Multicore的话, 刚开始的时候 代码控制只有CPU0往下走,其他CPU处于standy 状态(由WFI进入), 为了测 Multi-core全速运行的功耗,必须将其他的core也唤醒,所以问题2里面提到的 TBVAL_INTSEL, TBVAL_INTTRIG和TBVAL_INTSCHED是仿真环境的interrupt激励的触发方式,仿真环境可以通过写这些地址,让其产生一个IRQ/FIQ给其他CPU以唤醒他们。

如果需要更多的解释,而且你们是ARM的A5 licensee,我会建议你发一个support email 到 support-cores@arm.com 获取支持。

你的回答