|
|
|
PCI driver не читает BAR |
|
|
|
Apr 6 2018, 06:34
|
Участник
Группа: Участник
Сообщений: 66
Регистрация: 20-10-09
Пользователь №: 53 097
|
Доброго времени суток. Разбираюсь с написанием PCI драйвера для PCIe EP устройства на Linux для PowerPC (P2020 процессор, кастомная плата). Для эксперимента использую сетевую плату Intel X520. Конфигурационные регистры читаются/записываются без проблем, но чтение BAR всегда возвращает 0xffffffff. Для эксперимента скомпилировал мой драйвер под x86_64 Arch Linux. BAR читается без проблем, значит дело не в моем драйвере. Сравнивая выводы lcpi -vvv для Arch и для Embedded Linux я заметил, что в Embedded для PCI bridge не назначен Interrup pin (конфигурационный регистр 0x3D = 0x00) С чем связана невозможность чтения BAR на кастомной плате PowerPC? - 1 Может быть причина в отсутствии interrupt pin для pcibridge в embedded linux?
- 2 Разная разрядность? Область BAR 64 разрядная. Мой драйвер нормально читает BAR на 64 разрядной Arch, но не может прочитать на 32 разрядной Embedded Linux
lspci -vvv для PCI bridge на Embedded linux CODE # lspci -s a000:00:00.0 -vv a000:00:00.0 PCI bridge: Freescale Semiconductor Inc P2020 (rev 21) (prog-if 00 [Normal decode]) Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx- Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx- Latency: 0 Interrupt: pin ? routed to IRQ 24 Region 0: Memory at <ignored> (32-bit, non-prefetchable) [size=1M] Bus: primary=00, secondary=01, subordinate=01, sec-latency=0 I/O behind bridge: 00000000-00000fff Memory behind bridge: c0000000-dfffffff Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR- BridgeCtl: Parity- SERR- NoISA- VGA- MAbort- >Reset- FastB2B- PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn- Capabilities: [44] Power Management version 2 Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0+,D1+,D2+,D3hot+,D3cold+) Status: D0 NoSoftRst- PME-Enable+ DSel=0 DScale=0 PME- Capabilities: [4c] Express (v1) Root Port (Slot-), MSI 00 DevCap: MaxPayload 256 bytes, PhantFunc 0 ExtTag- RBE- DevCtl: Report errors: Correctable+ Non-Fatal+ Fatal+ Unsupported+ RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+ MaxPayload 128 bytes, MaxReadReq 512 bytes DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend- LnkCap: Port #0, Speed 2.5GT/s, Width x4, ASPM L0s, Exit Latency L0s <2us, L1 unlimited ClockPM- Surprise- LLActRep- BwNot- ASPMOptComp- LnkCtl: ASPM Disabled; RCB 128 bytes Disabled- CommClk- ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt- LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt- RootCtl: ErrCorrectable- ErrNon-Fatal- ErrFatal- PMEIntEna+ CRSVisible- RootCap: CRSVisible- RootSta: PME ReqID 0000, PMEStatus- PMEPending- Capabilities: [100 v1] Advanced Error Reporting UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol- UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol- UESvrt: DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol- CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr- CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr- AERCap: First Error Pointer: 00, GenCap+ CGenEn- ChkCap+ ChkEn- Kernel driver in use: pcieport Добавил исходный код драйвера, dmesg загрузки/выгрузки драйвера, полный вывод lspci -vvv. Ремаппинг для BAR0 происходит в probe, чтение из BAR0 в sol_write(). Карта X520 имеет два номера функции, драйвер ремапит и читает bar в a000:01:00.1
Сообщение отредактировал Fenolftalein - Apr 6 2018, 11:47
|
|
|
|
|
Apr 10 2018, 16:01
|
Участник
Группа: Участник
Сообщений: 66
Регистрация: 20-10-09
Пользователь №: 53 097
|
Цитата(AVR @ Apr 10 2018, 17:30) Я не понял, это PowerPC выступает в роли PCI-E EP? Или суть в том, что есть некое устройство (на базе чего?), которое подключаем к x86 хосту и всё нормуль, а когда к PowerPC хосту то BAR считывает 0xFFFFFFFF? А что должно возвращать чтение BAR по-хорошему? PowerPC выступает в роли PCI-E RC, на кастомной плате разведен слот для PCI, куда вставлена карта X520. По хорошему (на x86 с установленной X520) драйвер читает значения не равные 0xffffffff. Например, первые регистры BAR0 X520 на x86 Код [ 1743.634529] bar 0x0000 : 0x00000000 [ 1743.634531] bar 0x0004 : 0x00000000 [ 1743.634532] bar 0x0008 : 0x00080000 [ 1743.634533] bar 0x000c : 0xdeadbeef [ 1743.634534] bar 0x0010 : 0xdeadbeef [ 1743.634536] bar 0x0014 : 0xdeadbeef [ 1743.634537] bar 0x0018 : 0x00010000 [ 1743.634538] bar 0x001c : 0xdeadbeef То что драйвер не работает именно на плате PowerPC указывает, что проблема не в нем. Поскольку конфиг хедер X520 читается без проблем, я исключаю аппаратные косяки в плате. Значит проблема или в linux/dtb, или в u-boot. При загрузке в логе есть сообщения вида (a000:00:00.0 - RC) Код [ 4608.157545] pci a000:00:00.0: PCI bridge to [bus 01-ff] [ 4608.162894] pci a000:00:00.0: BAR 0: assigned [mem 0xc0000000-0xc00fffff] [ 4608.169711] ====================__find_resource: 650=============== [ 4608.176082] pci a000:00:00.0: BAR 8: no space for [mem size 0x20000000] [ 4608.182700] pci a000:00:00.0: BAR 8: failed to assign [mem size 0x20000000] [ 4608.189674] pci a000:00:00.0: BAR 9: assigned [mem 0xc0100000-0xc02fffff 64bit pref] [ 4608.197414] ====================__find_resource: 650=============== [ 4608.203764] pci a000:00:00.0: BAR 7: no space for [io size 0x10000] [ 4608.210127] pci a000:00:00.0: BAR 7: failed to assign [io size 0x10000] Что может быть причиной таких сообщений? Может ли это влиять на чтение BAR ов устройств, подключенных к RC?
|
|
|
|
|
Apr 11 2018, 06:16
|
фанат Linux'а
Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008
|
Цитата(Fenolftalein @ Apr 10 2018, 19:01) Код [ 4608.157545] pci a000:00:00.0: PCI bridge to [bus 01-ff] [ 4608.162894] pci a000:00:00.0: BAR 0: assigned [mem 0xc0000000-0xc00fffff] [ 4608.169711] ====================__find_resource: 650=============== [ 4608.176082] pci a000:00:00.0: BAR 8: no space for [mem size 0x20000000] [ 4608.182700] pci a000:00:00.0: BAR 8: failed to assign [mem size 0x20000000] [ 4608.189674] pci a000:00:00.0: BAR 9: assigned [mem 0xc0100000-0xc02fffff 64bit pref] [ 4608.197414] ====================__find_resource: 650=============== [ 4608.203764] pci a000:00:00.0: BAR 7: no space for [io size 0x10000] [ 4608.210127] pci a000:00:00.0: BAR 7: failed to assign [io size 0x10000] Что может быть причиной таких сообщений? Может ли это влиять на чтение BAR ов устройств, подключенных к RC? Могу ошибаться, но чето IO какие-то большие оно хочет откушать. Эта область совсем не резиновая. А может другое устройство попробовать? Сомневаюсь что Intel заботит то, как работает их балалайка на не-x86. Взять любое дешевое не-Intel устройство с PCI-E.
--------------------
|
|
|
|
|
Apr 11 2018, 07:05
|
Участник
Группа: Участник
Сообщений: 66
Регистрация: 20-10-09
Пользователь №: 53 097
|
Цитата(AVR @ Apr 11 2018, 09:16) Могу ошибаться, но чето IO какие-то большие оно хочет откушать. Эта область совсем не резиновая. А может другое устройство попробовать? Сомневаюсь что Intel заботит то, как работает их балалайка на не-x86. pci a000:00:00.0 это не X520, а PCI bridge. Код # lspci -tv -+-[a000:00]---00.0-[01]--+-00.0 Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection | \-00.1 Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection \-[0000:00]- Цитата Взять любое дешевое не-Intel устройство с PCI-E. Подключал другое устройство, PCIe плата от Xlinx. Та же история, BAR читается на x86 но не читается на PowerPC
|
|
|
|
|
Apr 11 2018, 08:26
|
фанат Linux'а
Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008
|
Цитата(Fenolftalein @ Apr 11 2018, 10:05) Подключал другое устройство, PCIe плата от Xlinx. Та же история, BAR читается на x86 но не читается на PowerPC Есть возможность сделать расширенную отладку этой платы? Добавить свои какие-то проверки, вывести принятые конфигурационные пакеты? У меня подозрения, что BIOS на x86 делает что-то такое (конфигурирует), что не делается на PowerPC. Возможно ядро Linux можно попросить это делать каким-то образом. (я свою карточку на ARM пробовал, BARы видит и всё конфигурит, хотя там простой u-boot, который ничего с PCI не делает)
--------------------
|
|
|
|
|
Apr 11 2018, 12:35
|
Участник
Группа: Участник
Сообщений: 66
Регистрация: 20-10-09
Пользователь №: 53 097
|
Цитата(AVR @ Apr 11 2018, 11:26) Есть возможность сделать расширенную отладку этой платы? Добавить свои какие-то проверки, вывести принятые конфигурационные пакеты? Смотрели со стороны платы на Xlinx, при чтении BAR на Xlinx тишина. Цитата У меня подозрения, что BIOS на x86 делает что-то такое (конфигурирует), что не делается на PowerPC. Возможно ядро Linux можно попросить это делать каким-то образом.
(я свою карточку на ARM пробовал, BARы видит и всё конфигурит, хотя там простой u-boot, который ничего с PCI не делает) Такая мысль тоже была. u-boot видит PCI bridge и X520. Я не могу проверить, может ли u-boot читать BAR.
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|