Hi Ufedor
I studied the device driver deeper and I think to have understood the problem.
My device works in this way:
The DMA Subsystem for PCIe uses a linked list of descriptors that specify the source, destination, and length of the DMA transfers. Descriptor lists are created by the driver and stored in host memory. The DMA channel is initialized by the driver with a few control registers to begin fetching the descriptor lists and executing the DMA operations.
Descriptors describe the memory transfers that the DMA Subsystem for PCIe should perform.
After the channel is enabled, the descriptor channel begins to fetch descriptors from the initial address.
The host to device flow sequence is as follow:
1. Open the device and initialize the DMA.
2. The user program reads the data file, allocates a buffer pointer, and passes the pointer to write function with the specific device and data size.
3. The driver creates a descriptor based on input data/size and initializes the DMA with descriptor start address, and if there are any adjacent descriptor.
4. The driver writes a control register to start the DMA transfer.
5. The DMA reads descriptor from the host and starts processing each descriptor.
6. The DMA fetches data from the host and sends the data to the user side. After all data is transferred based on the settings, the DMA generates an interrupt to the host.
7. The ISR driver processes the interrupt to find out which engine is sending the interrupt and checks the status to see if there are any errors. It also checks how many descriptors are processed.
8. After the status is good, the driver returns the transfer byte length to the user side so it can check for the same.
----------------------------------------------------------------------------------------------------------------------------------------------------------
I think the PCI stops working at step 5. The PCI engine doesn't permit to the device to fetch the descriptor from the host memory.
In my opinion this is the reason of the unmapped inbound transaction detected by the PCI controller.
Why does the T2080 behaviour is different from a x86_64 PC?
Can I change the behaviour of the host PCI controller in order to permit this action?
If yes, what do I have to do?
Regards