使用"PCI Express Gen3.0 子系统的 AXI 桥接器"时,"lspci -vv"中未显示内存区域



我们正在使用Xilinx Vivado在VC709 FPGA中开发一个带有自定义处理器、Microblaze和一些外围设备的系统。我们在"AXI桥接PCI express"中使用了两个"PCIe:BAR"。

最初,命令"lspci-vv"用于显示Ubuntu teminal中的内存区域。

$ lspci -vv 
0a:00.0 Memory controller: Xilinx Corporation Device 7038         | 0a:00.0 Memory controller: Xilinx Corporation Device 7018             
Subsystem: Xilinx Corporation Device 0007                     |          Subsystem: Xilinx Corporation Device 0008                     
Physical Slot: 3                                              |          Physical Slot: 3
Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- Pa|          Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- Pa
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-|          Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
Interrupt: pin A routed to IRQ 16                             |          Interrupt: pin A routed to IRQ 16
Region 0: Memory at fbff0000 (32-bit, non-prefetchable) [size=|  ----------------------------------------------------------------------
Region 1: Memory at fb800000 (32-bit, non-prefetchable) [size=|  ----------------------------------------------------------------------
Capabilities: <access denied>                                 |          Capabilities: <access denied>
Kernel modules: riffa

我已经创建了该项目的副本,并在设计中编辑了一些内容(不幸的是,我不记得了(,现在"lspci-vv"的结果如下。请注意,区域0地区1现已丢失。

$ lspci -vv 
0a:00.0 Memory controller: Xilinx Corporation Device 7018
Subsystem: Xilinx Corporation Device 0008
Physical Slot: 3
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-
Interrupt: pin A routed to IRQ 16
Capabilities: <access denied>
Kernel modules: riffa

Q: 原因可能是什么?

注:

  1. 两个项目的块设计和连接完全相同
  2. 两个项目中的"PCI express Gen3.0子系统的AXI桥"选项相同

谢谢:(

社区需要的额外信息

$ sudo lspci -vv
0a:00.0 Memory controller: Xilinx Corporation Device 7018
Subsystem: Xilinx Corporation Device 0008
Physical Slot: 3
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-
Interrupt: pin A routed to IRQ 16
Capabilities: [80] Power Management version 3
	Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
	Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [90] MSI: Enable- Count=1/1 Maskable- 64bit+
	Address: 0000000000000000  Data: 0000
Capabilities: [c0] Express (v2) Endpoint, MSI 00
	DevCap:	MaxPayload 512 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
		ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
	DevCtl:	Report errors: Correctable- Non-Fatal+ Fatal+ Unsupported-
		RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
		MaxPayload 128 bytes, MaxReadReq 4096 bytes
	DevSta:	CorrErr+ UncorrErr- FatalErr- UnsuppReq+ AuxPwr- TransPend-
	LnkCap:	Port #0, Speed 2.5GT/s, Width x8, ASPM unknown, Latency L0 unlimited, L1 unlimited
		ClockPM- Surprise- LLActRep- BwNot-
	LnkCtl:	ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+
		ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
	LnkSta:	Speed 2.5GT/s, Width x4, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
	DevCap2: Completion Timeout: Range B, TimeoutDis+
	DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-
	LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- SpeedDis-, Selectable De-emphasis: -6dB
		 Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
		 Compliance De-emphasis: -6dB
	LnkSta2: Current De-emphasis Level: -6dB
Capabilities: [100 v2] 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 modules: riffa

$ sudo od -tx1z -Ax /proc/bus/pci/0a/00.0
000000 ee 10 38 70 43 00 10 00 00 00 80 05 10 00 00 00  >..8pC...........<
000010 00 00 ff fb 00 00 00 00 00 00 00 00 00 00 00 00  >................<
000020 00 00 00 00 00 00 00 00 00 00 00 00 ee 10 07 00  >................<
000030 00 00 00 00 80 00 00 00 00 00 00 00 0b 01 00 00  >................<
000040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
*
000080 01 90 03 00 08 00 00 00 00 00 00 00 00 00 00 00  >................<
000090 05 c0 80 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
0000a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
0000b0 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
0000c0 10 00 02 00 02 80 00 00 16 58 09 00 83 f0 43 00  >.........X....C.<
0000d0 40 00 42 10 00 00 00 00 00 00 00 00 00 00 00 00  >@.B.............<
0000e0 00 00 00 00 12 00 00 00 00 00 00 00 0e 00 00 00  >................<
0000f0 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
000100 01 00 02 30 00 00 10 00 00 00 10 00 20 00 00 00  >...0........ ...<
000110 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00  >. ..............<
000120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
*
000150 03 00 01 30 00 00 00 00 00 00 00 00 00 00 00 00  >...0............<
000160 04 00 41 27 00 00 00 00 f0 80 0b 00 00 00 00 00  >..A'............<
000170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
*
0001b0 00 00 00 00 00 00 00 00 18 00 01 30 00 00 00 00  >...........0....<
0001c0 16 00 01 30 07 00 00 00 00 00 00 00 00 01 00 00  >...0............<
0001d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
*
000270 00 00 00 00 17 00 01 30 05 00 00 00 00 00 00 00  >.......0........<
000280 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
*
000300 19 00 01 00 00 00 00 00 00 00 00 00 7f 7f 7f 7f  >................<
000310 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 00 00 00 00  >................<
000320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
*
0003c0 02 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
0003d0 00 00 00 00 01 00 00 80 00 00 00 00 00 00 00 00  >................<
0003e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
*
001000

您的设备中没有启用内存空间(我一开始没有注意到这一点(。

在左侧的设备列表中,在控制行中,您有"Mem+",但在右侧有"Mem-"(I/O访问同上(。在PCI规范中,Mem标志是命令寄存器的第1位。

通常,在linux中,驱动程序调用pci_enable_device函数,使设备联机,并根据驱动程序的指示启用内存和/或I/O访问(也就是说,它将1写入任一位或两位(。有关编写驱动程序的指导,请参阅Documentation/PCI/PCI.txt。

我的猜测是lspci只是没有显示BAR,因为设备的内存空间没有启用;看起来相同的地址——0xfbff0000-已经至少被分配给BAR 0[参见/proc/bus/pci转储中的偏移0x10]。BAR 1地址槽中偏移0x14处没有编程地址。

我可以看到这是一个不可预取的32位BAR

我在使用Altera FPGA时发现了类似的问题。如果我将BAR设置为32位,那么在执行lspci时它们不会出现。当我改为64位可预取BAR时,我在运行lspci时看到了它们。

相关内容

  • 没有找到相关文章

最新更新