问题标签 [pci-e]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - DMA 引擎在 PowerPC linux 上没有正确响应
DMA 引擎在PowerPC
linux 上没有正确响应。当我的PCIe
设备向主机发送读/写请求时,会发生超时。我在较低的地址范围内有 1GB 的 RAM。我已经调用了以下函数
DMA 内存分配在0x0F00_0000
并且能够从主机的用户空间访问该内存。我该如何调试这个问题。可能是什么原因?
memory-management - DMA 事务的内存对齐 (Windows Driver Foundation)
我们正在使用 Windows 7 的 WDF 为定制的 PCI-Express 设备编写基于 DMA 的驱动程序。
您可能知道,PCI-Express 总线事务不允许跨越 4k 内存边界。自定义设备不检查这一点,因此我们需要确保驱动程序只请求与 4k 内存边界对齐的 DMA 传输。
设备的配置文件是 WdfDmaProfilePacket64。
我们尝试使用 WdfDeviceSetAlignmentRequirement(DevExt->Device, 4095),但这不会导致 DMA 起始地址正确对齐。
我们如何配置 WDF 框架,使其只请求正确对齐的地址?
pci - pci_enable_device_mem 和 pci_enable_device 有什么区别?
pci_enable_device_mem 和 pci_enable_device 有什么区别?
在 ixgbe 中,pf 驱动程序使用 pci_enable_device_mem,vf 驱动程序使用 pci_enable_device。
embedded - PCI 扩展 ROM 头 INIT 函数的入口点
如第 6.3.3.1 节所述。ROM Header Extensions (PCI Local Bus Specification v2.3),偏移量 0x3h 是“INIT 函数的入口点。POST 对此位置进行 FAR CALL。”,该字段的长度为 3 个字节。
我有一个长度为 40448 字节的 PCI Rom 映像,入口点字节为 0xe9_cf_06(地址 0x3h 处的 0xe9,地址 0x4h 处的 0xcf 和地址 0x5h 处的 0x06)。此偏移量超过 ROM 映像长度。谁能帮忙解释一下这个字段的含义以及如何使用它来找出ROM上图像的入口点?
任何建议表示赞赏。谢谢!
linux - PCI配置空间的latency_timer寄存器无法设置值
我正在尝试使用以下命令设置我的英特尔 PCI 卡的延迟计时器值
但是当我读回这个寄存器的值时,它没有改变并显示以前的值。
我正在使用以下命令来显示寄存器的值
谁能告诉我为什么我无法更改延迟计时器的值?
我正在使用Linux
机器。
pci - PCI / PCIe BAR 大小如何确定?
我知道 PCI 配置空间中的基地址寄存器 (BAR) 定义了 PCI 地址的起始位置,但是这个区域的大小是如何确定的呢?
当然,这是硬件的一个属性,因为只有它知道它可以处理多远的地址空间。但是,我似乎在 PCI 配置结构中看不到 BAR 大小字段。
linux - DMA over PCIe 到其他设备
我正在尝试直接从 Linux 中的另一个 PCIe 设备访问 NIC 中的 DMA 地址。具体来说,我正在尝试从 NVIDIA GPU 读取它以绕过 CPU。我研究了零拷贝网络和 DMA 到用户空间的帖子,但他们要么没有回答问题,要么涉及从内核空间到用户空间的一些拷贝。由于延迟不一致,我试图避免使用任何 CPU 时钟,并且我有非常严格的延迟要求。
我获得了我使用的英特尔卡的 NIC 驱动程序(e1000e 驱动程序),并找到了分配环形缓冲区的位置。正如我从之前阅读的一篇论文中了解到的那样,我会对 dma_addr_t 类型的描述符感兴趣。它们还有一个名为 dma 的 rx_ring 结构的成员。我使用 ioctl 调用同时传递了 desc 和 dma 成员,但除了零之外,我无法在 GPU 中得到任何东西。
GPU代码如下:
我究竟做错了什么?
linux-kernel - CPU如何知道PCI地址空间
我了解 CPU 可以配置 PCI 和 PCIe 设备(通过 BIOS 或操作系统中的代码),通过写入设备配置空间的特定区域来响应某些物理内存地址。
事实上,考虑到设备的许多要求(内存对齐、DMA 功能等),Linux 内核具有相当复杂的算法来执行此操作。
看到该软件似乎可以控制该内存是否映射、何时以及在何处映射,我的问题是:一个软件如何控制物理内存的映射?
在这个配置之后,PCI 设备将知道响应给定的地址范围,但是 CPU 怎么知道它应该在 PCI 总线上为那些刚刚动态决定的特定地址?
linux - Linux上PCIe的重枚举和热插拔
我正在使用通过电缆连接到 linux RH6.4 机器的 PCIe 设备,我需要强制 linux 重新枚举 PCIe 设备(开机后)而不重新启动机器。
目前仅在重新启动后进行枚举。我尝试了以下但它不工作
echo "1" > /sys/bus/pci/rescan
任何想法谢谢
cuda - 将相同的数据发送到 N 个 GPU
在基于 Haswell 的系统上,我有 4 个 GPU 挂在同一个 PCIe 开关(PLX PEX 8747)上。我想向每个 GPU 发送相同的数据。PCIe 交换机是否可以将数据复制到 N 个目标,而不是进行 N 个单独的传输?实际上是否可以通过 PCIe 总线向 N 个 GPU 广播数据?
我想知道 SLI / Crosssfire 如何处理此类问题?我可以想象在渲染的给定场景中,每个 GPU 的大量数据都是相同的。我记得读到过旧的 NVIDIA 890 Ultra SLI 系统在他们的 SLI 开关中包含了这种广播机制。
http://www.nvidia.com/docs/IO/52280/NVIDIA_Broadcast_PWShort_TB.pdf
使用较新的 PCIe 交换机可以做到这一点吗?
更新:PCIe 标准似乎支持多播,如下面的答案所述。我在这找到了一些信息
www.pcisig.com/developers/main/training_materials/get_document?doc_id=31337695e3bc0310ea570c9df49e507b9d3eb4a5
是的,我特别想要一个 CUDA 或 OpenCL 接口来将数据传输到 N 个设备。似乎很遗憾 API 还不支持这一点。