linux - DMA 引擎在 PowerPC Linux 上无法正确响应

标签 linux powerpc dma pci-e

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/

相关文章:

macos - Xcode4 与 Mac OS X 10.4 SDK

assembly - 便宜的PowerPC评估板?

cpu-architecture - 直接内存访问

Linux Shell 脚本 : Storing the output of a command line program

windows - Subsystem for Unix Application on Windows 如何在汇编中实现系统调用?

linux - 使用 UNIX BASH 将文件复制到其他虚拟机

c++ - 用户空间缓冲区和内存映射文件之间的 DMA

linux - 查找和替换多个文件中的文本

assembly - PowerPC组件立即加载

c - SPI 闪存编程问题