DMA 引擎在 PowerPC
Linux 上无法正确响应。当我的 PCIe 设备向主机发送读/写请求时,发生超时。我在较低地址范围内有 1GB RAM。
我调用了以下函数
pci_device_enable()
pci_set_master()
DMA 内存分配在 0x0F00_0000
处,并且能够从主机的用户空间访问该内存。我该如何调试这个问题。可能是什么原因?
最佳答案
请检查 PCIe 设备是否使用正确的 DMA 内存地址。您只提到一个地址,但用户空间和内核空间中的 DMA 内存地址将与从 PCIe 总线看到的 DMA 内存地址不同。
您没有说明如何分配 DMA 内存,有几种不同的方法。 例如,如果您使用以下调用来获取 DMA 内存,则 dma_addr_t 是地址 在 PCIe 设备中使用。
void *pci_alloc_consistent(struct pci_dev *dev, size_t size,
dma_addr_t *dma_handle);
关于linux - DMA 引擎在 PowerPC Linux 上无法正确响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18046466/