Do I need to “enable” a PCIe memory region in a Linux 3.12 driver?

后端 未结 2 2025
没有蜡笔的小新
没有蜡笔的小新 2021-02-10 05:19

I have code, called from the probe() function of my PCIe driver (loosely based on this post):

EDIT: Based on Andreas Bombe\'s response, I changed th

相关标签:
2条回答
  • 2021-02-10 05:39

    You definitely have to enable it. These are the basic steps:

    pci_enable_device(dev);
    pci_request_regions(dev, "driver/device name");
    bar0 = pci_iomap(dev, 0, 0);
    x = ioread(bar0 + offset);  /* there you are */
    

    Error checking is required for all the pci_* calls. If the device needs to do DMA you also need to call pci_set_master and pci_set_dma_mask.

    To elaborate, bypassing the PCI kernel code and directly ioremapping the BARs may have worked a long time ago. I'm not sure if it is even legal anymore in current code but it certainly isn't advisable.

    0 讨论(0)
  • 2021-02-10 05:45

    To Enable the memory you can try out the below command directly.

    setpci -s <BUS_ADDR> COMMAND=0x02 -s : Used for device selection COMMAND : Asks for the word-sized command register, 0x02 is to enable memory

    lspci Output : 0000:01:00.0 RAM memory: Xilinx Corporation Default PCIe endpoint ID 0001:02:00.0 Memory controller: Xilinx Corporation Device 8011 Example : setpci -s 0001:02:00.0 COMMAND=0x02

    0 讨论(0)
提交回复
热议问题