TI中文支持网
TI专业的中文技术问题搜集分享网站

关于pcie驱动程序问题

需要用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:

过了就好啊,内核里很多函数其实没干什么事儿,封装来封装去的。反正实现功能就好了

赞(0)
未经允许不得转载:TI中文支持网 » 关于pcie驱动程序问题
分享到: 更多 (0)