novartis 0 1 августа, 2013 Опубликовано 1 августа, 2013 · Жалоба Добрый день. Имеется отладочная плата Strtatix IV GX Development Kit. Плата засунута в ПК в PCIE. На плате реализован некий контроллер/автомат (мы его гордно зовем DMA-контроллер :rolleyes: ), который может принимать запросы от ПК (Memory Write Request и Memory Read Request) и при необходимости отвечать на них (Completion with Data), а так же может засылать в ПК много-много пакетов (Memory Write Request). Это все работало. Появилась необходимость не только передавать в ПК данные из ПЛИС, но и вычитывать из ПК данные в ПЛИС. Для этого добавил в свой автомат еще один шаг - отправку в ПК из ПЛИС запроса Memory Read Request. В ответ я ожидаю получение нескольких Completion with Data. Но в ответ тишина. На стороне ПК в линуксе реализован драйвер, выдернул от туда строчки, может это поможет: addr = dma_map_single( dev, dest, size, DMA_FROM_DEVICE ); // выделение памяти, куда будут писаться данные из ПЛИС в ПК start( adev, devaddr, addr, devsize, DmaRead ); // команда для ПЛИС, чтобы она начала засылать данные в ПК, в плату сообщается адрес addr выделенной области памяти ... dma_unmap_single( dev, addr, size, DMA_FROM_DEVICE ); // закрываем выделенную память Соответственно для варианта чтения данных из ПК аргумент DMA_FROM_DEVICE был заменен на DMA_TO_DEVICE, а DmaRead на DmaWrite. По Signal Tap отслеживаю, что сигналы бегают от PCIE ядра, так как я и задумывал, запрос к ПК на чтение выделенной памяти отсылается, а вот ответ на него не приходит. При этом плата работает, pcie не отваливается, ПК не виснет. Вопросы у меня такие: Имеет ли право плата ПЛИС вообще засылать запросы на чтение (я к тому, что она ведь не ROOT, а Endpoint), хотя write запросы она ведь удачно засылает? Может в драйвере нужно чего еще прописать, проинициализировать? К сожалению, драйвер писал не я, и всех тонкостей не знаю, и не силен в линукс-программировании. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dsmv 0 1 августа, 2013 Опубликовано 1 августа, 2013 · Жалоба Вопросы у меня такие: Имеет ли право плата ПЛИС вообще засылать запросы на чтение (я к тому, что она ведь не ROOT, а Endpoint), хотя write запросы она ведь удачно засылает? Имеет. Все этим пользуются. Может в драйвере нужно чего еще прописать, проинициализировать? К сожалению, драйвер писал не я, и всех тонкостей не знаю, и не силен в линукс-программировании. Не нужно. На запрос чтения должен прийти ответ. Если ответов нет, что-то не так в запросе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novartis 0 2 августа, 2013 Опубликовано 2 августа, 2013 · Жалоба Имеет. Все этим пользуются. Вот за это спасибо, а то хрен его знает, вдруг я делаю что то не так (не так, как все). А проблема действительно заключалась в запросе. С помощью команды lspci выяснил, что плата висит на шине 01:00.0 (bus:slot.func). Подсунул в запросе Request ID = 0x0100 и отклик пришел. Буду дальше разбираться, как это правильно организовывать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться