DMA引擎在PowerPC
linux上没有正确响应。当我的PCIe
设备向主机发送读/写请求时,会发生超时。我在较低的地址范围内有1GB的RAM。
我调用了以下函数
pci_device_enable()
pci_set_master()
DMA内存在0x0F00_0000
分配,并且能够从主机的用户空间访问此内存。我该如何调试此问题。可能是什么原因?
答案 0 :(得分:0)
请检查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);
答案 1 :(得分:0)
检查是否定义了内核配置的CONFIG_FSL_DMA部分以编译DMA驱动程序。还要确保您的设备树有一个片上DMA设备的条目。