|
|
  |
PCIe enumeration |
|
|
|
Oct 27 2016, 11:45
|
Участник

Группа: Участник
Сообщений: 40
Регистрация: 6-10-10
Пользователь №: 59 958

|
Добрый день!
Собрал систему из отладочных плат для проверки PCIe. Линк работает, rootport перешел в L0
Теперь стоит задача сделать енумерацию устройств на шине, пока что одной endpoint, потом через switch.
Где можно как это делается, пример драйвера на С?
Спасибо!
|
|
|
|
|
Oct 28 2016, 13:02
|
Профессионал
    
Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596

|
как это делает BIOS, примерно так: перебираются bus, device, function. для каждого из них считываются размеры требуемых для выделения BARов. от адресуемого 32-битного пространства сверху от 4 Гбайт откусывается 512 Мбайт или 1024 Мбайт (зависит от конкретного BIOS) и методом бинарного поиска вычисляются адреса памяти, в которые может поместиться BAR, таким образом, чтобы адрес был кратен размеру BAR-а. если запрашиваемый размер BAR-ов больше чем откушенные BIOS-ом 512 Мбайт или 1024 Мбайт, то в зависимости от реализации BIOS либо всё виснет, либо устройства с большими BAR прокидываются либо ещё как. построенная карта памяти загоняется в соответствующие bus, device, function.
реализация в linux kernel есть.
--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
|
|
|
|
|
Oct 30 2016, 07:46
|
Местный
  
Группа: Свой
Сообщений: 301
Регистрация: 18-09-07
Из: Украина
Пользователь №: 30 647

|
Цитата(Zigor @ Oct 27 2016, 13:45)  Добрый день!
Собрал систему из отладочных плат для проверки PCIe. Линк работает, rootport перешел в L0
Теперь стоит задача сделать енумерацию устройств на шине, пока что одной endpoint, потом через switch.
Где можно как это делается, пример драйвера на С?
Спасибо! Добрый день. В архиве есть исходники поиска устройств на шине.
Прикрепленные файлы
pci32.zip ( 266.87 килобайт )
Кол-во скачиваний: 19
|
|
|
|
|
Oct 31 2016, 09:25
|
Участник

Группа: Участник
Сообщений: 40
Регистрация: 6-10-10
Пользователь №: 59 958

|
Цитата(krux @ Oct 28 2016, 17:02)  как это делает BIOS, примерно так: перебираются bus, device, function. для каждого из них считываются размеры требуемых для выделения BARов. от адресуемого 32-битного пространства сверху от 4 Гбайт откусывается 512 Мбайт или 1024 Мбайт (зависит от конкретного BIOS) и методом бинарного поиска вычисляются адреса памяти, в которые может поместиться BAR, таким образом, чтобы адрес был кратен размеру BAR-а. если запрашиваемый размер BAR-ов больше чем откушенные BIOS-ом 512 Мбайт или 1024 Мбайт, то в зависимости от реализации BIOS либо всё виснет, либо устройства с большими BAR прокидываются либо ещё как. построенная карта памяти загоняется в соответствующие bus, device, function.
реализация в linux kernel есть. rootport поднял на плате terasic DE1, будет работать под линуксами. Сейчас отлаживаюсь по Avalon-JTAG Master Сначала необходимо отладить enumeration без операционки. И вот тут возникает непонимание - 1. Что значит перебирать bus, device, function - когда у тебя в Qsys есть твой HIP Root и подключенный к нему Avalon-JTAG Master? Где их читать.. и как)) 2. Чтение документации Altera не дает понимания по какому адресу лежит Type 1 Configuration Space Header, в документации сказано 0x000:0x03C. Если имеется в виду абсолютное смещение в CRA, то чтение 0го адреса дает нули вместо Device ID и Vendor ID. Спасибо за помощь!
|
|
|
|
|
Oct 31 2016, 14:25
|
Профессионал
    
Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596

|
Цитата не дает понимания по какому адресу лежит Type 1 Configuration Space Header дык это вам стандарт PCIe читать надо, а не доку на альтеровскую корку. сама корка эти запросы генерить не будет, формировать пакеты типа Type 1 Configuration придётся вам.
--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
|
|
|
|
|
Nov 11 2016, 05:58
|
Участник

Группа: Участник
Сообщений: 40
Регистрация: 6-10-10
Пользователь №: 59 958

|
Цитата(Andrew Su @ Oct 31 2016, 21:08)  Как "перебирать" Bus numbers, Device Numbers, Function numbers и добираться до регистров пространства конфигурации конкретного устройства на шине описано в PCI LOCAL BUS SPECIFICATION, REV. 3.0 (3.2.2.3.2. Software Generation of Configuration Transactions). ... Two DWORD I/O locations are used to generate configuration transactions for PC-AT compatible systems. The first DWORD location (CF8h) references a read/write register that is named CONFIG_ADDRESS. The second DWORD address (CFCh) references a read/write register named CONFIG_DATA.... Затык в том, что непонятен сам механизм общения с HIP PCIe Altera. Пишу Configuration Type 0 Request в CRA TLP TX. В ответ тишина. Как прочитать Configuration Space рутпорта? Как отправить конф запрос в endpoint? Записывать пакет в CRA TLP TX и опрашивать RP_RXCPL_STATUS?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|