Драйвер PCI не назначает память за мостом - PullRequest
0 голосов
/ 14 июля 2020

У меня есть устройство на шине PCI 09 за шиной 08:01, вот так:

0000:08:01.0 -> ../../../devices/pci0000:00/0000:00:03.0/0000:07:00.0/0000:08:01.0/0000:09:00.0

Мое устройство на шине 09 выключено, и после перезагрузки процессора я включаю устройство на шине 09. Итак, я повторно сканировал Шина PCI 0000: 08: 01.0. Но он не находит мое устройство.

bus 08:01 после перезагрузки:

root@localhost:~# lspci -s 0000\:08\:01.0 -v
08:01.0 PCI bridge: PLX Technology, Inc. PEX 8614 12-lane, 12-Port PCI Express Gen 2 (5.0 GT/s) Switch (rev ba) (prog-if 00 [Normal decode])
Flags: bus master, fast devsel, latency 0
Bus: primary=08, secondary=09, subordinate=09, sec-latency=0
Capabilities: [40] Power Management version 3
Capabilities: [48] MSI: Enable+ Count=1/4 Maskable+ 64bit+
Capabilities: [68] Express Downstream Port (Slot+), MSI 00
Capabilities: [a4] Subsystem: PLX Technology, Inc. PEX 8614 12-lane, 12-Port PCI Express Gen 2 (5.0 GT/s) Switch
Capabilities: [100] Device Serial Number ba-86-01-10-b5-df-0e-00
Capabilities: [fb4] Advanced Error Reporting
Capabilities: [148] Virtual Channel
Capabilities: [520] Access Control Services
Capabilities: [950] Vendor Specific Information: ID=0001 Rev=0 Len=010 <?>
Kernel driver in use: pcieport

Я заметил, что нет такого поля «Prefetchable memory behind bridge»:

#lspci -s 0000\:01\:00.0 -v
01:00.0 Class 0604: Device 10b5:8617 (rev ba)
Flags: bus master, fast devsel, latency 0, IRQ 9
Memory at c4b00000 (32-bit, non-prefetchable) [size=128K]
Bus: primary=01, secondary=02, subordinate=05, sec-latency=0
I/O behind bridge: None
Memory behind bridge: c0000000-c4afffff [size=75M]
Prefetchable memory behind bridge: 00000000c4c00000-00000000c96fffff [size=75M]
Capabilities: [40] Power Management version 3
Capabilities: [48] MSI: Enable- Count=1/4 Maskable+ 64bit+
Capabilities: [68] Express Upstream Port, MSI 00
Capabilities: [a4] Subsystem: Device 10b5:8617
Capabilities: [100] Device Serial Number ba-86-01-10-b5-df-0e-00
Capabilities: [fb4] Advanced Error Reporting
Capabilities: [138] Power Budgeting <?>
Capabilities: [148] Virtual Channel
Capabilities: [950] Vendor Specific Information: ID=0001 Rev=0 Len=010 <?>
Kernel driver in use: pcieport

ЦП находит устройство на шине 09 только тогда, когда я включаю устройство перед перезагрузкой. Есть ли способ, чтобы ЦП обнаружил устройство на шине PCI после перезагрузки? Или как я могу назначить память за мостом на шине 0000: 08: 01.0 без устройства при загрузке процессора?

1 Ответ

0 голосов
/ 15 июля 2020

благодарю за ответ, я просто новичок ie linux пользователь. Я попытался повторно сканировать шину PCI после загрузки, но не нашел устройство. Но в моем проекте я вижу приложение в системе, использующее ядро ​​4.14, которое может повторно сканировать устройство на шине PCI и обнаруживать его после перезагрузки без первоначального включения устройства.

Шина PCI после загрузки процессора

# ls -l /sys/bus/pci/devices/
lrwxrwxrwx    1 root     root             0 Jan  1 00:50 0000:00:00.0 -> ../../../devices/platform/bcm963xx-pcie.0/pci0000:00/0000:00:00.0
lrwxrwxrwx    1 root     root             0 Jan  1 00:50 0000:01:00.0 -> ../../../devices/platform/bcm963xx-pcie.0/pci0000:00/0000:00:00.0/0000:01:00.0
lrwxrwxrwx    1 root     root             0 Jan  1 00:50 0000:02:00.0 -> ../../../devices/platform/bcm963xx-pcie.0/pci0000:00/0000:00:00.0/0000:01:00.0/0000:02:00.0
lrwxrwxrwx    1 root     root             0 Jan  1 00:50 0000:02:02.0 -> ../../../devices/platform/bcm963xx-pcie.0/pci0000:00/0000:00:00.0/0000:01:00.0/0000:02:02.0
lrwxrwxrwx    1 root     root             0 Jan  1 00:50 0000:02:03.0 -> ../../../devices/platform/bcm963xx-pcie.0/pci0000:00/0000:00:00.0/0000:01:00.0/0000:02:03.0

Регистрировать при загрузке ЦП

pci 0000:02:03.0: PCI bridge to [bus 05]
pci 0000:02:03.0:   bridge window [mem 0xc3200000-0xc4afffff]
pci 0000:02:03.0:   bridge window [mem 0xc7e00000-0xc96fffff 64bit pref]

Я уверен, что на шине 5 есть устройство, готовое к взаимодействию с ЦП, но ЦП не находит его при загрузке. Но когда я повторно просканирую шину 02:03 и использую bcm_ll_pcie_init, устройство найдено.

После повторного сканирования

lrwxrwxrwx    1 root     root             0 Jan  1 01:13 0000:05:00.0 -> ../../../devices/platform/bcm963xx-pcie.0/pci0000:00/0000:00:00.0/0000:01:00.0/0000:02:03.0/0000:05:00.0

Журнал при повторном сканировании шины 02: 03

Maple netlink-based raw driver transport driver
bcm963xx-pcie: Core [0] PCIe Intr [PCIE_MSTR_UR_ATTN]
pci 0000:03:00.0: [14e4:6862] type 00 class 0x048000
pci 0000:03:00.0: reg 0x10: [mem 0x00000000-0x007fffff 64bit pref]
pci 0000:03:00.0: reg 0x18: [mem 0x00000000-0x00ffffff 64bit pref]
pci 0000:03:00.0: reg 0x20: [mem 0x00000000-0x0000ffff 64bit pref]
pci 0000:03:00.0: PME# supported from D0 D3hot
pcieport 0000:02:00.0: Checking PCIe ASPM for vendor 14e4 device 6862
pcieport 0000:02:00.0: Disabling PCIe ASPM for vendor 14e4 device 6862
pci 0000:04:00.0: [14e4:8470] type 00 class 0x020000
pci 0000:04:00.0: reg 0x10: [mem 0x00000000-0x00007fff 64bit pref]
pci 0000:04:00.0: reg 0x18: [mem 0x00000000-0x007fffff 64bit pref]
pci 0000:04:00.0: PME# supported from D0 D3hot D3cold
pci 0000:04:00.1: [14e4:8470] type 00 class 0x020000
pci 0000:04:00.1: reg 0x10: [mem 0x00000000-0x00007fff 64bit pref]
pci 0000:04:00.1: reg 0x18: [mem 0x00000000-0x007fffff 64bit pref]
pci 0000:04:00.1: PME# supported from D0 D3hot D3cold
pcieport 0000:02:02.0: Checking PCIe ASPM for vendor 14e4 device 8470
pcieport 0000:02:02.0: Disabling PCIe ASPM for vendor 14e4 device 8470
pci 0000:05:00.0: [14e4:6862] type 00 class 0x048000
pci 0000:05:00.0: reg 0x10: [mem 0x00000000-0x007fffff 64bit pref]
pci 0000:05:00.0: reg 0x18: [mem 0x00000000-0x00ffffff 64bit pref]
pci 0000:05:00.0: reg 0x20: [mem 0x00000000-0x0000ffff 64bit pref]
pci 0000:05:00.0: PME# supported from D0 D3hot
pcieport 0000:02:03.0: Checking PCIe ASPM for vendor 14e4 device 6862
pcieport 0000:02:03.0: Disabling PCIe ASPM for vendor 14e4 device 6862

Вы можете увидеть устройство на шине PCI 05, 0000: 05: 00.0: [14e4: 6862] найдено. Я также пробовал такое повторное сканирование в своей системе, но это не работает, устройство не найдено. Но я заметил, что у моего процессора нет «Prefetchable memory behind bridge», как в той рабочей системе, как я писал. Что вы думаете об этом?

...