如何使PowerPC PQ-III e500上特定存储范围的L1数据缓存无效?

问题描述

| 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书。