gpt4 book ai didi

linux - 如何将CPU的DMA地址写入FPGA(PCIe Endpoint)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:47:13 26 4
gpt4 key购买 nike

我正在尝试使用流式 DMA 映射将 DMA 添加到我的 PCIe Linux 驱动程序。 FPGA(端点)为 DMA 配置了 BAR4,在我的设置函数中我做了(按顺序):

pci_set_master()
pci_enable_msi()
pci_set_dma_mask()
pci_set_consistent_dma_mask()
__get_free_pages()
dma_addr = pci_map_single(..., PCI_DMA_FROMDEVICE)

此时我不知道如何告诉 FPGA 我的 DMA 地址 dma_addr 是从 pci_map_single() 返回的。我是否使用 pci_write_config_dword()dma_addr 写入 BAR4?在使用 DMA 时,必须有一些方法来告诉 FPGA 它需要写入的位置,或者我在这里完全遗漏了什么?

最佳答案

要在 PCIe 的 BARx 中读取/写入数据,您必须使用函数映射 BARx:void __iomem *pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen);

例如,您可以执行以下操作:

/* declare the bar4 buffer */
static volatile u32 __iomem * bar4;

/* map the bar4 */
bar4 = pcim_iomap(&pdev->dev, 4, BAR4_SIZE);

bar4[DMA_VECTOR_REGISTER_ADDRESS] = dma_addr;

请参阅 kernel Documentation 中有关 BARx/MMIO 的更多文档.

DMA_VECTOR_REGISTER_ADDRESS 的地址取决于您的 FPGA 架构。正如我在评论中看到的那样,您使用的是 CycloneV GT。您应该查看 CRA(配置寄存器访问)寄存器。在 CycloneV GX PCIe Hard ip for Avalon-MM (第 83 页),DMA 向量的寄存器地址从 0x1000(Avalon-MM-to-PCI Express 地址转换表)开始。

关于linux - 如何将CPU的DMA地址写入FPGA(PCIe Endpoint)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35786693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com