2

I wrote a simple PCIe driver and I want to test if it works. For example, If it is possible to write and read to the memory which is used from the device as well.

How can I do that?

And which stuff should be proved too?

Peter
  • 1,629
  • 2
  • 25
  • 45

2 Answers2

1

You need to find the sysfs entry for your device, for example

/sys/devices/pci0000:00/0000:00:07.0/0000:28:00.0

(It can be easier to get there via the symlinks in other subdirectories of /sys, e.g. /sys/class/...)

In this directory there should be (pseudo-)files named resource... which correspond to the various address ranges (Base Address Registers) of your device. I think these can be mmap()ed (but I've never done that).

There's a lot of other stuff you can do with the entries in /sys. See the kernel documentation for more details.

Jens Kilian
  • 425
  • 2
  • 7
1

To test the memory you can follow this approach:

1) Do lspci -v

Output of this command will be something like this

0002:03:00.1 Ethernet controller: QUALCOMM Corporation Device ABCD (rev 11)
Subsystem: QUALCOMM Corporation Device 8470
Flags: fast devsel, IRQ 110
Memory at 11d00f1008000 (64-bit, prefetchable) [disabled] [size=32K]
Memory at 11d00f0800000 (64-bit, prefetchable) [disabled] [size=8M]
Capabilities: [48] Power Management version 3
Capabilities: [50] Vital Product Data
Capabilities: [58] MSI: Enable- Count=1/8 Maskable- 64bit+
Capabilities: [a0] MSI-X: Enable- Count=1 Masked-
Capabilities: [ac] Express Endpoint, MSI 00
Capabilities: [100] Advanced Error Reporting
Capabilities: [13c] Device Serial Number 00-00-00-00-00-00-00-00
Capabilities: [150] Power Budgeting <?>
Capabilities: [180] Vendor Specific Information: ID=0000 Rev=0 Len=028 <?>
Capabilities: [250] #12

2) We can see in the above output memory is disabled. To enable it we can execute the following:

setpci -s 0002:03:00.1 COMMAND=0x02

This command will enable the memory at the address: 11d00f1008000

Now, try to read this memory using your processor read command it should be accessible.

Eric Aya
  • 69,473
  • 35
  • 181
  • 253
Ankit Raj
  • 917
  • 1
  • 7
  • 18