Call Me Gavyn 2021-11-10 15:38 采纳率: 0%
浏览 46

PCI设备DMA访问,缓存不一致情况

  1. 主机X86,插上PCI卡,主机侧驱动和板侧驱动是自己写的;
  2. 卡侧DMA将数据从主机侧一块物理地址搬移到卡侧一块物理地址,物理地址都是使用dma_alloc_coherent() 接口分配的连续的一致性地址;
  3. 同样的程序,在两台不同的主机上进行跑,一台是正常的通信,一台是有问题的,数据表现为有的是正确的,有的是没写进去,好像跟CPU缓存有关系,但是内核接口的 关cache 操作已经能调的都调了。
  4. 不知道这是主板问题还是其他问题,求解答。
  • 写回答

2条回答 默认 最新

  • 老皮芽子 2021-11-10 17:28
    关注

    这是一个 Cache 一致性问题
    CPU 为了加速访问 DDR ,一般都是启用 Cache,通常 Cache 与 DDR 的数据是一致的,但是在一些 DMA 操作 DDR 时,DDR 数据变了 Cache 没变。也有 Cache 变化后 DDR 没有跟着变化,就使 Cache 与 DDR 不一致。
    消极的办法是禁止用 Cache 。
    也可以通过函数将 "Cache 内容刷新至DDR" 或 "将DDR内容拉进 Cache".使 Cache 与 DDR 保持一致
    xil_DCacheInvalidateRange //Cache 内容刷新至DDR
    xil_DCaheFlushRange //将DDR内容拉进 Cache
    这俩函数是 xilinx fpga cpu 中的,别的cpu也会有类似的函数。

    评论

报告相同问题?

问题事件

  • 创建了问题 11月10日