问题标签 [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.

0 投票
2 回答
333 浏览

linux - DMA 引擎在 PowerPC linux 上没有正确响应

DMA 引擎在PowerPClinux 上没有正确响应。当我的PCIe设备向主机发送读/写请求时,会发生超时。我在较低的地址范围内有 1GB 的 RAM。我已经调用了以下函数

DMA 内存分配在0x0F00_0000并且能够从主机的用户空间访问该内存。我该如何调试这个问题。可能是什么原因?

0 投票
1 回答
854 浏览

memory-management - DMA 事务的内存对齐 (Windows Driver Foundation)

我们正在使用 Windows 7 的 WDF 为定制的 PCI-Express 设备编写基于 DMA 的驱动程序。

您可能知道,PCI-Express 总线事务不允许跨越 4k 内存边界。自定义设备不检查这一点,因此我们需要确保驱动程序只请求与 4k 内存边界对齐的 DMA 传输。

设备的配置文件是 WdfDmaProfilePacket64。

我们尝试使用 WdfDeviceSetAlignmentRequirement(DevExt->Device, 4095),但这不会导致 DMA 起始地址正确对齐。

我们如何配置 WDF 框架,使其只请求正确对齐的地址?

0 投票
2 回答
1955 浏览

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。

0 投票
2 回答
680 浏览

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上图像的入口点?

任何建议表示赞赏。谢谢!

0 投票
1 回答
663 浏览

linux - PCI配置空间的latency_timer寄存器无法设置值

我正在尝试使用以下命令设置我的英特尔 PCI 卡的延迟计时器值

但是当我读回这个寄存器的值时,它没有改变并显示以前的值。

我正在使用以下命令来显示寄存器的值

谁能告诉我为什么我无法更改延迟计时器的值?

我正在使用Linux机器。

0 投票
3 回答
27719 浏览

pci - PCI / PCIe BAR 大小如何确定?

我知道 PCI 配置空间中的基地址寄存器 (BAR) 定义了 PCI 地址的起始位置,但是这个区域的大小是如何确定的呢?

当然,这是硬件的一个属性,因为只有它知道它可以处理多远的地址空间。但是,我似乎在 PCI 配置结构中看不到 BAR 大小字段。

0 投票
1 回答
2246 浏览

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代码如下:

我究竟做错了什么?

0 投票
2 回答
2221 浏览

linux-kernel - CPU如何知道PCI地址空间

我了解 CPU 可以配置 PCI 和 PCIe 设备(通过 BIOS 或操作系统中的代码),通过写入设备配置空间的特定区域来响应某些物理内存地址。
事实上,考虑到设备的许多要求(内存对齐、DMA 功能等),Linux 内核具有相当复杂的算法来执行此操作。

看到该软件似乎可以控制该内存是否映射、何时以及在何处映射,我的问题是:一个软件如何控制物理内存的映射?

在这个配置之后,PCI 设备将知道响应给定的地址范围,但是 CPU 怎么知道它应该在 PCI 总线上为那些刚刚动态决定的特定地址?

0 投票
1 回答
1857 浏览

linux - Linux上PCIe的重枚举和热插拔

我正在使用通过电缆连接到 linux RH6.4 机器的 PCIe 设备,我需要强制 linux 重新枚举 PCIe 设备(开机后)而不重新启动机器。

目前仅在重新启动后进行枚举。我尝试了以下但它不工作

echo "1" > /sys/bus/pci/rescan

任何想法谢谢

0 投票
1 回答
313 浏览

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 还不支持这一点。