Перейти к содержанию
    

PCIe от ксайлинкс, режим хоста

Всем доброго дня.

Надо стало реализовать хост для PCIe X1 на ксайлинксе. Читаю-читаю, до сих пор не сложилось понимание, что должен сделать хост с PCIe эндпоинтом? Где-то пишут что только инициализация физики - Detection, Polling, Configuration. Где-то пишут что нужен enumeration. Опять же что входит в enumeration? Четкого ответа не нашел. Давно уже работал с PCI, там есть стандартное пространство регистров конфигурации, из них можно прочитать что в устройстве есть (регистры, память, и сколько их), назначить адреса и писать-читать по этим адресам. 

В PCIe есть что-то такое же? И что должен хост сделать с эндпоинтом, не имея драйвера конкретного устройства, чтобы далее передать работу драйверу для инициализации непосредственно эндпоинта? Ну например, воткнул я неизвестную плату PCIe в комп, операционка опознала его (понимая, что для этого устройства нет драйвера) и сделала что? Назначила (как?) адреса? Прочитала какие размеры и виды IO (памяти,регистров - по аналогии с PCI) поддерживает эндпоинт, прочитала ID (прочитала откуда?). В описании на PCIe от ксалинкс у IP куча интерфейсов:

image.png.cec88c015df9e40c4cba86e8388be7d6.png

Как понять что я хочу? 🙂 Т.е. как понять что из этого надо эндпоинту?

В общем какая-то каша пока в голове, перемешиваю 🙂 . Подскажите пожалуйста что можно почитать доступное (от общего к частному). Есть конечно спецификация, но там, как мне кажется, слишком много того, что не нужно, а чего-то я подозреваю и нет (в частности, того что делает операционка при обнаружении устройства на шине). Но все равно, читаю пока, вникаю...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Опишите вашу задачу, что именно и для чего должен делать ваш хост.

В общем случае порядок действий такой: ресет, подъём линка, энумерация, назначение базовых адресов, разрешение работы (настройка управляющих регистров в пространстве конфигурации), обмен данными (чтение/запись по адресам BAR и/или обмен в режиме DMA).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 часов назад, makc сказал:

Опишите вашу задачу, что именно и для чего должен делать ваш хост.

В общем случае порядок действий такой: ресет, подъём линка, энумерация, назначение базовых адресов, разрешение работы (настройка управляющих регистров в пространстве конфигурации), обмен данными (чтение/запись по адресам BAR и/или обмен в режиме DMA).

Хочу запустить акселератор Coral AI. Исходники драйверов есть. Там, глядя по диагонали все необходимое можно найти. Теперь только надо понять что я должен сделать со стороны хоста до начала работы драйвера, т.е. что делает с эндпоинтом операционка до запуска драйвера.

На компе вставил в PCIe - все работает как надо. Теперь вместо компа хочу прицепить это чудо к Zynq ultrascale+. Только у меня там операционок никаких нет, надо все руками делать. Интерфейс - PCIe.

А эти этапы, которые Вы указали, подробно где-то расписаны? Даже по запросу PCIe enumeration в топе ничего внятного не вылазит. Или я как-то не так смотрю...

Интересуют настройки эндпоинта PCIe со стороны хоста, которые для всех эндпоинтов должны выполняться, независимо от назначения и внутренней структуры.

И если работали с IP PCIe ксайлинкса, что из этого IP делает автоматически, сам, а что нужно конфигурировать через интерфейсы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, alexPec сказал:

А эти этапы, которые Вы указали, подробно где-то расписаны? Даже по запросу PCIe enumeration в топе ничего внятного не вылазит. Или я как-то не так смотрю...

Всё это описано в стандарте, но в разных его частях. Поэтому могу предложить вам почитать книгу, которая есть на местном FTP в /pub/DOC/STANDARDS/PCI/Whitepapers/Budruk R., Anderson D., Shanley T., PCI Express System Architecture(2003).pdf
Начните с главы 21.

2 часа назад, alexPec сказал:

И если работали с IP PCIe ксайлинкса, что из этого IP делает автоматически, сам, а что нужно конфигурировать через интерфейсы?

Такой опыт есть, правда не на Zynq, а на Artix. Но в целом разницы нет, и там, и там Root Complex.

Вы управляете ресетом, даёте ресет, IP поднимает линк, далее вы сами должны сформировать конфигурационные транзакции для поиска устройств (endpoint) на шине, записывает параметры в их регистры (назначает адреса, разрешает работу MEM/IO) и выполняет транзакции чтения/записи. В целом там нет ничего сложного, звучит это страшнее, чем есть на самом деле.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 минут назад, alexPec сказал:

Спасибо! Продолжу погружаться в PCIe...

Главное не забывайте, что с точки зрения логики энумерации PCIe это тот же PCI с дополнениями. Поэтому можно смело начинать читать, как это делалось/делается для PCI.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"прицепить это чудо к Zynq ultrascale+. Только у меня там операционок никаких нет, надо все руками делать. Интерфейс - PCIe."

А какая религия не позволяет работать с операционкой в ПЛИС? Там и PCI сразу готовый есть, ну разве что на на максимальной скорости (< 4Гбит). 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

45 минут назад, litv сказал:

А какая религия не позволяет работать с операционкой в ПЛИС? Там и PCI сразу готовый есть, ну разве что на на максимальной скорости (< 4Гбит). 

Моя личная. Мне нужен полный контроль над ядрами процессора. Иначе не успевает все работать как надо, плюс операционки себе забирают контроль над ядром, а то и над всеми (какие как). Стараюсь все в baremetal делать. Как мне кажется - так оно стабильнее работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...