免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: smr
打印 上一主题 下一主题

linux启动后添加pci设备问题(非hotplug) [复制链接]

论坛徽章:
0
11 [报告]
发表于 2011-01-19 13:43 |只看该作者
本帖最后由 smr 于 2011-01-19 13:56 编辑

回复 10# wenzhouyip


    这样也是试过,是不行的。

不过昨天问题已经解决了。
在这一并谢过楼上几位回复。我也把详细过程写一下希望对大家以后的工作也有点帮助或启发.

需求:
在已经启动的平台上,通过写一个内核模块,将外存中的fpga逻辑,下载到芯片中,然后将此pci设备初始化,使之可加载驱动后正常工作。

思路:
在下载完fpga逻辑到芯片中后
通过重新扫描pci子系统、分配资源、添加设备到内核中。以期能完成在内核启动后,达到新添加一个PCI设备的目的。

过程和问题:
在下载完逻辑之后,执行上述操作,关键代码大致如下
  1. pci_scan_child_bus(fpga_bridge->subordinate)
  2. pci_bus_assign_resources(fpga_bridge->subordinate)
  3. pci_bus_add_devices(fpga_bridge->subordinate
复制代码
这里的参数试过fpga所在桥的bus和根之下所有的bus.情况一样
均会出现一些“can't allocate mem resouces"之类的错误。
此时是可以从桥下一级的设备中遍历到fpga的pci_dev了。
但pci_get_device是找不到的。*

然后做的修改是在download之前,
对桥的PCI_MEMORY_BASE和PCI_MEMORY_LIMIT设置了值(根据重启后读到的pci桥的数据)
然后对桥复位。
再行上述代码,分配资源的时候,出现了collision的错误。
但这次,pci_get_device是可以找到设备了,也可访问配置空间。只是加载驱动后,不能正常操作。
设备直接重启了(有watchdog,在死锁或无响应的时候会自动重启)

分析原因,应该是桥上的配置与其它设备冲突,在驱动操作fpga时,下发的事务不能正确路由到fpga上。
于是设备僵死,重启了系统。



昨天请同事在bootloader中配置了fpga所在的pci桥,这样系统启动时,会自动根据bar分配资源。
我在download完成fpga后,再执行一遍扫描、分配、添加的操作。也将fpga初始化完整。
这样,设备可正常运行了!!

等后期测试如果有其它问题,再回来补充。
谢谢大家的关注。

评分

参与人数 1可用积分 +24 收起 理由
dreamice + 24 感谢分享问题解决方法

查看全部评分

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
12 [报告]
发表于 2011-01-19 14:46 |只看该作者
回复 11# smr


    感谢分享问题解决方法!

论坛徽章:
0
13 [报告]
发表于 2012-03-23 20:15 |只看该作者
感谢分享!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP