Zigor 0 27 октября, 2016 Опубликовано 27 октября, 2016 · Жалоба Добрый день! Собрал систему из отладочных плат для проверки PCIe. Линк работает, rootport перешел в L0 Теперь стоит задача сделать енумерацию устройств на шине, пока что одной endpoint, потом через switch. Где можно как это делается, пример драйвера на С? Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 28 октября, 2016 Опубликовано 28 октября, 2016 · Жалоба Добрый день! Собрал систему из отладочных плат для проверки PCIe. Линк работает, rootport перешел в L0 Теперь стоит задача сделать енумерацию устройств на шине, пока что одной endpoint, потом через switch. Где можно как это делается, пример драйвера на С? Спасибо! Какая операционная система? Кстати, энцумерация устройств делается операционной системой (а может даже биосом, если x86) без участия драйвера. Так что если корка живая, то она должна видеться просто сходу. Какие же отладочные платы задействованы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
krux 8 28 октября, 2016 Опубликовано 28 октября, 2016 · Жалоба как это делает BIOS, примерно так: перебираются bus, device, function. для каждого из них считываются размеры требуемых для выделения BARов. от адресуемого 32-битного пространства сверху от 4 Гбайт откусывается 512 Мбайт или 1024 Мбайт (зависит от конкретного BIOS) и методом бинарного поиска вычисляются адреса памяти, в которые может поместиться BAR, таким образом, чтобы адрес был кратен размеру BAR-а. если запрашиваемый размер BAR-ов больше чем откушенные BIOS-ом 512 Мбайт или 1024 Мбайт, то в зависимости от реализации BIOS либо всё виснет, либо устройства с большими BAR прокидываются либо ещё как. построенная карта памяти загоняется в соответствующие bus, device, function. реализация в linux kernel есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 28 октября, 2016 Опубликовано 28 октября, 2016 · Жалоба если запрашиваемый размер BAR-ов больше чем откушенные BIOS-ом 512 Мбайт или 1024 Мбайт, то в зависимости от реализации BIOS либо всё виснет, либо устройства с большими BAR прокидываются либо ещё какИнтересный вопрос: а зачем вообще большие BARы? Я реально недопонимаю необходимость иметь их размера больше чем несколько килобайт, что я собственно и вижу у большинства устройств. А вот у видеокарты Memory at e0000000 (64-bit, prefetchable) - как правило несколько сотен мегабайт - а зачем, что это позволяет выполнять? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
krux 8 30 октября, 2016 Опубликовано 30 октября, 2016 · Жалоба Интересный вопрос: а зачем вообще большие BARы? Я реально недопонимаю необходимость иметь их размера больше чем несколько килобайт, что я собственно и вижу у большинства устройств. А вот у видеокарты Memory at e0000000 (64-bit, prefetchable) - как правило несколько сотен мегабайт - а зачем, что это позволяет выполнять? SLI у нвидии и crossfire у амд. несколько плат пишут сразу друг в друга, а не в general-purpose память, висящую на CPU. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_su 1 30 октября, 2016 Опубликовано 30 октября, 2016 · Жалоба Добрый день! Собрал систему из отладочных плат для проверки PCIe. Линк работает, rootport перешел в L0 Теперь стоит задача сделать енумерацию устройств на шине, пока что одной endpoint, потом через switch. Где можно как это делается, пример драйвера на С? Спасибо! Добрый день. В архиве есть исходники поиска устройств на шине. pci32.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zigor 0 31 октября, 2016 Опубликовано 31 октября, 2016 · Жалоба как это делает 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. Спасибо за помощь! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
krux 8 31 октября, 2016 Опубликовано 31 октября, 2016 · Жалоба не дает понимания по какому адресу лежит Type 1 Configuration Space Header дык это вам стандарт PCIe читать надо, а не доку на альтеровскую корку. сама корка эти запросы генерить не будет, формировать пакеты типа Type 1 Configuration придётся вам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_su 1 31 октября, 2016 Опубликовано 31 октября, 2016 · Жалоба Как "перебирать" 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.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 31 октября, 2016 Опубликовано 31 октября, 2016 · Жалоба SLI у нвидии и crossfire у амд. несколько плат пишут сразу друг в друга, а не в general-purpose память, висящую на CPU.Спасибо! Это действительно всё объясняет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zigor 0 11 ноября, 2016 Опубликовано 11 ноября, 2016 · Жалоба Как "перебирать" 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? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться