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
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.