需要用am5726与6657通过pcie进行数据交互,写了一个驱动为什么在调用pci_enable_device()函数会失败加载模块是显示
0000:01:00.0: can't enable device: BAR 0 [mem 0x00000000-0x0fffffff] not claimed
5726为RC端,6657 为EP
5726查看EP的配置空间如下:
root@am57xx-evm:/# lspci -s 01:00.0 -xxv
01:00.0 Non-VGA unclassified device: Texas Instruments Device 8888 (rev 01)
Flags: bus master, fast devsel, latency 0
Memory at <unassigned> (32-bit, non-prefetchable) [size=256M]
Memory at 70000000 (32-bit, non-prefetchable) [size=256M]
Memory at <unassigned> (32-bit, prefetchable) [size=1M]
Memory at <unassigned> (32-bit, prefetchable) [size=64K]
Memory at <unassigned> (32-bit, prefetchable) [size=4K]
Memory at <unassigned> (32-bit, prefetchable) [size=64K]
Capabilities: [40] Power Management version 3
Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
Capabilities: [70] Express Endpoint, MSI 00
Capabilities: [100] Advanced Error Reporting
00: 4c 10 88 88 46 01 10 00 01 00 00 00 10 00 00 00
10: 00 00 00 00 00 00 00 70 08 00 00 00 08 00 00 00
20: 08 00 00 00 08 00 00 00 00 00 00 00 00 00 01 00
30: 00 00 00 00 40 00 00 00 00 00 00 00 00 01 00 00
感觉bar0并没有用,不知该怎么办了,请教各位大神指点,谢谢
Jian Zhou:
PCIe驱动编写请参考我们的例程:
http://processors.wiki.ti.com/index.php/Processor_SDK_Linux_PCIe
lu Cao2:
回复 Jian Zhou:
虽然没找到我要的东西,不过还是谢谢你。
yongt chen:
回复 lu Cao2:
bar寄存器的地址都没有找到,probe的时候先把bar寄存器的基址读出来
lu Cao2:
回复 yongt chen:
您好,您能说详细一点吗,在probre中怎么读bar的基址?谢谢
yongt chen:
回复 lu Cao2:
具体名字我忘了,你百度一下,专门读取配置空间的函数,然后你看看配置空间的地址分布,以及芯片手册中的bar寄存器的个数和用途,打出来打印一下。然后如果pci_dev那个结构体初始化的时候没有这些基地址,你可以探测的时候读出来再赋值赋进去
lu Cao2:
回复 yongt chen:
您说的是pci_read_config_**函数吧?读出的基址是bar0里的基址阿,况且用了pci_resource_**函数应该不用担心基址的问题吧。如果pci_enable_device失败,用pci_reenable_device好使吗?我是了一下貌似过了,我再测试。。。
yongt chen:
回复 lu Cao2:
过了就好啊,内核里很多函数其实没干什么事儿,封装来封装去的。反正实现功能就好了
TI中文支持网