问题描述
|
DMA任务会定期更新特殊的存储块。当另一个任务试图在该块中频繁查找数据时,会出现有关L1数据高速缓存奇偶校验的MCE(机器校验异常)。
我是否可以使此存储块的L1数据高速缓存全部无效或仅在DMA更新之后无效?
libogc中有一个有趣的API,例如:
void DCInvalidaterange(void *startaddress,u32 len);
.globl DCInvalidaterange
DCInvalidaterange:
cmplwi r4,0 # zero or negative size?
blelr
clrlwi. r5,r3,27 # check for lower bits set in address
beq 1f
addi r4,r4,0x20
1:
addi r4,0x1f
srwi r4,5
mtctr r4
2:
dcbi r0,r3
addi r3,0x20
bdnz 2b
blr
我不熟悉ASM,也不熟悉PowerPC上的ASM。人们会为此操作推荐链接或说明吗?
解决方法
这是最佳资源,《 PowerPC编程环境手册》
您是否有关于缓存的特定问题?
使用DMA,您的选择是监听或缓存刷新。要获取此错误,您可能启用了监听功能。因此,问题可能出在L1缓存中有未初始化的数据。
还有第二个资源,即《 E500核心参考手册》,我目前无法下载,但是应该很好地描述如何初始化缓存。我一直在使用E-600书。