В настоящее время я пишу драйвер ядра P CIe для linux ядра 4.19.
FPGA (Arria 10) под управлением Intel DMA IP подключен к процессору Linux (i7- 6700TE) через P CIe Gen 2.
Я хочу запустить передачу прямого DMA из FPGA в ОЗУ ЦП.
Сначала инициализируется драйвер P CIe. Я использую следующие инструкции по порядку:
- pci_enable_device
- pci_set_master
- pci_set_mwi
- pci_set_dma_mask DMA_BIT_MASK (64)
- pci_alloc_consistent
После выделения я добавляю sh физический адрес в конфигурацию DMA и начинаю передачу. После окончания я публикую MSI, который получен и обработан.
Проблема, с которой я столкнулся, заключается в том, что при чтении данных DMA с использованием виртуального адреса я читаю только нули, но не записываю нули через DMA.
Я также проверял область памяти, сначала записав рампу в память через ЦП, затем запустив DMA, затем снова считав, и рампа осталась неизменной, поэтому я совершенно уверен, что доступ к памяти в указанной области не происходил.
Почему передача MSI работает (ЦП адресного пространства), а доступ к ОЗУ - нет?
У вас есть идея, что делать дальше?
Заранее спасибо за помощь.