9.4. PCI Test Function¶
- Author:
 Kishon Vijay Abraham I <kishon@ti.com>
Traditionally PCI RC has always been validated by using standard PCI cards like ethernet PCI cards or USB PCI cards or SATA PCI cards. However with the addition of EP-core in linux kernel, it is possible to configure a PCI controller that can operate in EP mode to work as a test device.
The PCI endpoint test device is a virtual device (defined in software) used to test the endpoint functionality and serve as a sample driver for other PCI endpoint devices (to use the EP framework).
The PCI endpoint test device has the following registers:
PCI_ENDPOINT_TEST_MAGIC
PCI_ENDPOINT_TEST_COMMAND
PCI_ENDPOINT_TEST_STATUS
PCI_ENDPOINT_TEST_SRC_ADDR
PCI_ENDPOINT_TEST_DST_ADDR
PCI_ENDPOINT_TEST_SIZE
PCI_ENDPOINT_TEST_CHECKSUM
PCI_ENDPOINT_TEST_IRQ_TYPE
PCI_ENDPOINT_TEST_IRQ_NUMBER
PCI_ENDPOINT_TEST_MAGIC
This register will be used to test BAR0. A known pattern will be written and read back from MAGIC register to verify BAR0.
PCI_ENDPOINT_TEST_COMMAND
This register will be used by the host driver to indicate the function that the endpoint device must perform.
Bitfield  | 
Description  | 
|---|---|
Bit 0  | 
raise legacy IRQ  | 
Bit 1  | 
raise MSI IRQ  | 
Bit 2  | 
raise MSI-X IRQ  | 
Bit 3  | 
read command (read data from RC buffer)  | 
Bit 4  | 
write command (write data to RC buffer)  | 
Bit 5  | 
copy command (copy data from one RC buffer to another RC buffer)  | 
PCI_ENDPOINT_TEST_STATUS
This register reflects the status of the PCI endpoint device.
Bitfield  | 
Description  | 
|---|---|
Bit 0  | 
read success  | 
Bit 1  | 
read fail  | 
Bit 2  | 
write success  | 
Bit 3  | 
write fail  | 
Bit 4  | 
copy success  | 
Bit 5  | 
copy fail  | 
Bit 6  | 
IRQ raised  | 
Bit 7  | 
source address is invalid  | 
Bit 8  | 
destination address is invalid  | 
PCI_ENDPOINT_TEST_SRC_ADDR
This register contains the source address (RC buffer address) for the COPY/READ command.
PCI_ENDPOINT_TEST_DST_ADDR
This register contains the destination address (RC buffer address) for the COPY/WRITE command.
PCI_ENDPOINT_TEST_IRQ_TYPE
This register contains the interrupt type (Legacy/MSI) triggered for the READ/WRITE/COPY and raise IRQ (Legacy/MSI) commands.
Possible types:
Legacy  | 
0  | 
MSI  | 
1  | 
MSI-X  | 
2  | 
PCI_ENDPOINT_TEST_IRQ_NUMBER
This register contains the triggered ID interrupt.
Admissible values:
Legacy  | 
0  | 
MSI  | 
[1 .. 32]  | 
MSI-X  | 
[1 .. 2048]  |