分析一篇我的知识文章:
https://developer.arm.com/doc...
DC IVAC/ DC CIVAC指令用于将一个虚拟地址对应的cache line从data cache或是unified cache失效或清除失效到PoC点。N2 core硬件默认会将DC IVAC升级为DC CIVAC操作。
Point of Coherency (PoC)位于:确保系统中所有可以访问内存的agent访问这个地址可以看到同样的copy的地方,不管它的访问内存类型(memory type)和cache属性(cacheable or non cacheable)是什么。
在很多系统中,它都位于系统主内存。
在一个N2+CMN-700的系统中,
CMN-700的system level cache (SLC)是invisible cache, 如果device发出的non cacheable访问的地址被RN-SAM指定到HN-F,这个non cacheable访问还是会查找HN-F的SLC,也可以snoop CPU的cache。
这是否意味着,这样的系统的PoC点在CMN-700的SLC,而不需要在系统主内存呢?因为DC IVAC/ DC CIVAC只需要将数据失效/清除失效到SLC,不需要失效/清除失效掉SLC中对应的cache line,其他CPU和Device就可以看到同样的copy了。
确实,如果系统中所有可以访问内存的master都接到CMN-700的RN-F,RN-I, RN-D上,并且他们访问的地址是在RN-SAM里面指定到HN-F,PoC只到SLC是可以的。
但是如果系统中有其他不接到CMN-700的master,或者它们访问的地址RN-SAM里面不是指定到HN-F,那么就无法显示PoC要求的:确保系统中所有可以访问内存的agent访问这个地址可以看到同样的copy的地方,不管它的访问内存类型(memory type)和cache属性(cacheable or non cacheable)是什么。
因此,在N2+CMN-700的系统,DC IVAC/ DC CIVAC还是需要失效/清除掉SLC中对应的cache line。
CMN-700支持将这些cache maintanance operation (CMO)下传到内存控制器,如果CMN-700之下还接有其他更低level的cache的话,下传这些CMO可以进一步使CMO PoC的操作影响到更低level的cache。控制是否下传是可以通过编程每个SN-F对应的HF-N寄存器cmn_hns_sam_sn_properties中的cmo_prop_en来实现。