关于cache请教如下2个问题:
1. 在进行cache一致性操作时。
WritebackInvalidCache(void * blockPtr, Uint32 byteCnt)
一次最大只能对256k(0xFFFF*4)的空间进行写回操作,如果缓存较大为512K等,是否需要多次调用该函数,然后基地址进行累加。
2. 对于DDR空间的数据cache一致性(在开了L1D和L2cache情况下)
是否只需要调用下面2个函数
CACHE_wbInvL2((void *)blockPtr, byteCnt,CACHE_WAIT);
CSL_XMC_invalidatePrefetchBuffer();
不需要调用下面函数
CACHE_wbInvL1d((void *)blockPtr, byteCnt,CACHE_WAIT);
Nancy Wang:
L1P/L1D最大能配置为32k的cache size,L2最大能配置为256k。
user4827424:
回复 Nancy Wang:
您好!
1. 就是假设我的缓存空间在DDR中,起始地址baseaddr=0x80000000,,大小为1024K,是否需要如下写法:
for(i=0;i<4;i++)
{
WritebackInvalidCache(baseaddr+1024*256*i, 1024*256);
}
即调用4次,每次累加。
2. 对于问题2,在打开了L1D和L2的cache的情况下,如果缓存空间在L2中,只需要调用函数1:
CACHE_wbInvL1d(baseaddr, byteCnt, CACHE_WAIT); //函数1
如果缓存空间在DDR中,在例子代码中只调用了如下函数2:
CACHE_wbInvL2(baseaddr, byteCnt, CACHE_WAIT); //函数2
是否需要如下写法:先调用函数1,再调函数2。
CACHE_wbInvL1d(baseaddr, byteCnt, CACHE_WAIT); //函数1
CACHE_wbInvL2(baseaddr, byteCnt, CACHE_WAIT); //函数2
网上有些博客是这种说法,不知道那个正确。
Ryan BL:
回复 user4827424:
记得好像是只需要回写L2,cache手册有类似描述:会同时对L1操作。
Ryan BL:
回复 Ryan BL:
请查阅c66 cache相关章节确认。
user4827424:
回复 Ryan BL:
谢谢,因为一次最大写回操作为256k,那如果是对比较大的DMA缓存进行cache写回操作,需要调用多次函数吗?