реклама на сайте
подробности

 
 
> PCIe enumeration
Zigor
сообщение Oct 27 2016, 11:45
Сообщение #1


Участник
*

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



Добрый день!

Собрал систему из отладочных плат для проверки PCIe.
Линк работает, rootport перешел в L0

Теперь стоит задача сделать енумерацию устройств на шине, пока что одной endpoint, потом через switch.

Где можно как это делается, пример драйвера на С?

Спасибо!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
krux
сообщение Oct 28 2016, 13:02
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 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 есть.


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
AVR
сообщение Oct 28 2016, 13:06
Сообщение #3


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(krux @ Oct 28 2016, 16:02) *
если запрашиваемый размер BAR-ов больше чем откушенные BIOS-ом 512 Мбайт или 1024 Мбайт, то в зависимости от реализации BIOS либо всё виснет, либо устройства с большими BAR прокидываются либо ещё как
Интересный вопрос: а зачем вообще большие BARы? Я реально недопонимаю необходимость иметь их размера больше чем несколько килобайт, что я собственно и вижу у большинства устройств. А вот у видеокарты Memory at e0000000 (64-bit, prefetchable) [size=256M] - как правило несколько сотен мегабайт - а зачем, что это позволяет выполнять?


--------------------
Go to the top of the page
 
+Quote Post
krux
сообщение Oct 30 2016, 06:34
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



Цитата(AVR @ Oct 28 2016, 16:06) *
Интересный вопрос: а зачем вообще большие BARы? Я реально недопонимаю необходимость иметь их размера больше чем несколько килобайт, что я собственно и вижу у большинства устройств. А вот у видеокарты Memory at e0000000 (64-bit, prefetchable) [size=256M] - как правило несколько сотен мегабайт - а зачем, что это позволяет выполнять?

SLI у нвидии и crossfire у амд. несколько плат пишут сразу друг в друга, а не в general-purpose память, висящую на CPU.


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 02:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01378 секунд с 7
ELECTRONIX ©2004-2016