上下文:
我目前想要刷新我的L1 DATA缓存(目标:NXP P2020 Qoriq e500)。
使用“dcbf”指令时出现问题:
dcbf r3, r4 // with r3 and r4 defining the address of the DATA cache
问题:
我的问题是我不知道给这条指令什么参数到达DATA缓存并刷新线路?
我尝试使用“刚刚创建的”变量:
int i = 0;
// let assume r3 = &i
dcbf 0, r3
isync
msync
我认为dcbf指令将通过& i参数到达数据缓存,但是当我进一步通过探针查看内存时,我看到缓存没有刷新而没有失效。
答案 0 :(得分:0)
我的根本问题是给dcbf的地址不在缓存中
参考手册说:Perform reads to any 48 Kbyte region, THEN execute dcbf instruction
。
我现在正在搜索如何读取L1数据缓存
答案 1 :(得分:0)
那么,
我最终这样做是为了替换我的L1数据缓存条目:
FlushL1DCache:
flushloop:
lwz r5, 0(r3) /* Load data to L1 data cache to replace current entries */
addi r3, r3, 0x20 /* adds 32 bytes to r3 */
cmpw r3, r4 /* if r3 == r4 -> exit the loop */
ble flushloop
msync
isync
blr
此代码在失效之前用虚拟代码替换L1数据高速缓存条目。