Hi ARM专家们,有几个问题请教一下:
1、PoC是所有Agents能看到同一个memory copy的点,通常是external memory;CCN-5xx HN-F中实现了PoC,
用于管理RN-Fs间的coherency,假如CPU发出带PoC属性的cache maintenance操作,是否可以maintenance L3?
2、如果CPU发出的是带PoU但是带Inner-Shareable属性的cache maintenance操作,此时是否会maintenance L3?
因为CPU接口规定,如果是BROADCASTINNER=1,则BROADCASTOUTER也必须是1。
3、CCN-5xx L3中特别注明指令是pseudo-inclusive,这个与inclusive差别在哪呢?
4、DEN0024A_v8_architecture_PG.pdf文档p214,Table 14-1中,用Set/Way来maintenance cache不带Broadcast
可以理解,但为啥DC IVAC, Xt是一定Broadcast,而DC CVAC, Xt仅是Maybe Broadcast?
已经请几位同事帮忙看,请稍等
斑竹,帖子要沉了,帮忙顶起!
谈谈个人理解,PoUIS和PoC可以从CLIDR_EL1中读出来,对于A53/57来说,PoUIS是1,代表了PoU点在L1和L2(如果有的话)之间,换句话说对Cache进行PoU的操作,如果是Clean的话,数据会从L1中被Clean出去;PoC是2,同理,Clean操作会同时作用于L1,L2,这样Dirty数据就会出L2,对于L3因为是支持Cache Maintenance操作的,如果L2中的BROADCASTINNER被置为1(相应的BROADCASTOUTER也必须是1),则带PoC的Clean操作应该也会作用于L3,如果L3命中(L1、L2都Miss),则数据会被Clean。
Hello Steven,
>1、PoC是所有Agents能看到同一个memory copy的点,通常是external memory;CCN-5xx HN-F中实现了PoC,
> 用于管理RN-Fs间的coherency,假如CPU发出带PoC属性的cache maintenance操作,是否可以maintenance L3?
Yes. See CCN-504 TRM section 4.3.
>2、如果CPU发出的是带PoU但是带Inner-Shareable属性的cache maintenance操作,此时是否会maintenance L3?
> 因为CPU接口规定,如果是BROADCASTINNER=1,则BROADCASTOUTER也必须是1。
In ARMv8, I only see one type of PoU+Inner Shareable operation:
IC IALLUIS
Assuming BROADCASTINNER=1, this operation would generate a DVM operation on the cluster's master interface. CCN-5xx would broadcast it to other clusters.
The L3 is not affected.
>3、CCN-5xx L3中特别注明指令是pseudo-inclusive,这个与inclusive差别在哪呢?
Pseudo-inclusive means not strictly inclusive. So it is possible that an instruction line does not exist in L1/L2, but exists in L3.
>4、DEN0024A_v8_architecture_PG.pdf文档p214,Table 14-1中,用Set/Way来maintenance cache不带Broadcast
> 可以理解,但为啥DC IVAC, Xt是一定Broadcast,而DC CVAC, Xt仅是Maybe Broadcast?
---> zenonxiu for question #4.
Regards,
Xingguang
Correct.
Hi steven , fengxg 帮忙回复你了,你可以看看
感谢 xingguang的答复!还有个问题需要请教:
CCN-5XX中的L3在软件上如何做整体的flush?
Hi Steven,
>CCN-5XX中的L3在软件上如何做整体的flush?
You can do the following:
(1) Ensure there are no outstanding transactions.
(2) Write to hn_cfg_pstate_req[1:0] = 0b01 (HNF_PM_SFONLY) in each HN-F.
The hardware would handle the flushing of the L3 cache.
(3) Poll hn_cfg_pstate_status[3:0] in each HN-F until they are all in the HNF_PM_SFONLY state.
After step (3), the L3 cache will be disabled. If you want to enable it again, you should write to hn_cfg_pstate_req[1:0] = 0b11 (HNF_PM_FULL) and poll hn_cfg_pstate_status[3:0] in each HN-F until they are all in the HNF_PM_FULL state.
感谢 xingguang的答复!