
Ich habe eine Xilinx FPGA-PCIe-Karte (vcu1525) und habe sie so programmiert, dass sie über 2 BAR verfügt, die 64 KB und 4 MB Speicherplätze definieren.
02:00.0 Serial controller: Xilinx Corporation Device 903f (prog-if 01 [16450])
Subsystem: Xilinx Corporation Device 0007
Physical Slot: 4
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, Cache Line Size: 32 bytes
Interrupt: pin A routed to IRQ 26
Region 0: Memory at ee400000 (32-bit, non-prefetchable) [size=64K]
Region 1: Memory at ee000000 (32-bit, non-prefetchable) [size=4M]
Ich kann auch die Speicherhierarchie unter /proc/iomem sehen.
90000000-f7ffbfff : PCI Bus 0000:00
ee000000-f20fffff : PCI Bus 0000:02
ee000000-ee3fffff : 0000:02:00.0
ee000000-ee3fffff : xdma
ee400000-ee40ffff : 0000:02:00.0
ee400000-ee40ffff : xdma
Aber wenn ich die Größe des zweiten BAR auf 1 GB ändere, gibt der xdma-Treiber einen Fehler aus. Dies ist Teil der dmesg-Ausgabe.
[16608.863027] pci 0000:02:00.0: [10ee:903f] type 00 class 0x070001
[16608.863065] pci 0000:02:00.0: reg 0x10: [mem 0x00000000-0x0000ffff]
[16608.863074] pci 0000:02:00.0: reg 0x14: [mem 0x00000000-0x3fffffff]
[16608.863112] pci 0000:02:00.0: Max Payload Size set to 256 (was 128, max 1024)
[16608.867923] xdma:xdma_mod_init: Xilinx XDMA Reference Driver xdma v2017.1.47
[16608.867930] xdma:xdma_mod_init: desc_blen_max: 0xfffffff/268435455, sgdma_timeout: 10 sec.
[16608.870517] pci 0000:02:00.0: BAR 1: no space for [mem size 0x40000000]
[16608.870524] pci 0000:02:00.0: BAR 1: failed to assign [mem size 0x40000000]
[16608.870529] pci 0000:02:00.0: BAR 0: assigned [mem 0xee000000-0xee00ffff]
[16608.870540] ast 0000:08:00.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
[16608.870633] serial 0000:02:00.0: enabling device (0100 -> 0102)
[16608.870880] xdma:xdma_device_open: xdma device 0000:02:00.0, 0xffff882031e43000.
[16608.871018] xdma:map_single_bar: BAR0 at 0xee000000 mapped at 0xffffc9000d0a0000, length=65536(/65536)
Meine Fragen sind also
- Was muss ich tun, um 1 GB Speicher erfolgreich zuzuweisen?
- Wie kann ich die Balkenposition 0xee000000 an eine höhere Adresse verschieben? (Ich habe beobachtet, dass die Speicherpositionen der GPUs höhere Adressen haben und ihre Fenster groß genug sind.)
Ich habe die oben genannte 4G-Dekodierungsoption im BIOS aktiviert.
Es wäre eine große Hilfe, wenn Sie mir weiterhelfen könnten.