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);
检查您是否定义了内核配置的 CONFIG_FSL_DMA 部分来编译 DMA 驱动程序。还要确保您的设备树具有片上 DMA 设备的条目。