免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1393 | 回复: 0
打印 上一主题 下一主题

解决pcie中断次数比预想的要多的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-02-13 23:46 |只看该作者 |倒序浏览
原理:tilepro36外接pcie接口的fpga板卡,通过中断的方式通知系统数据接收完毕
现象:由于是高速数据采集,pcie中断次数较多,正常情况下每秒7000次左右,不知道网卡中断次数能达到多少,但是有时上电启动发现pcie次数远远多于预想值,造成linux没有时间去执行中断处理程序,fpga端显示死机。此现象随机出现。
分析原因:
通过认真分析hv/drivers/pcie/rootcomplex_default.c和pcie.c文件的得出pcie中断的原理如下是:
1.rc_init中注册pcie device model,同时注册中断回调函数intcall;
2.rc_service中一直都有一个mailloop函数在pcie dedicated tile上运行,作用是接收pcie接口的message,分析后调用回调函数intcall,根据分析后的参数不同,该回调函数发送ibound内部消息到linux驱动运行的tile,该tile再解析该内部消息并产生linux中断给OS。

问题是回调函数intcall中发送的ibound内部消息应该分为INTx assert和deassert两种,但在错误发生的情况下我一直收到assert消息,没有收到deassert消息,所以认为fpga根本没有发送对本次中断无效的消息,造成hv一直认为中断有效,次数比预想要多。

解决方法:
fpga之前在pc机上使用的是MSI中断,没有使用fpga内部的assert线,但在tilepro36系统中通过观察msi_enable线发现给line一直为低,说明tilepro36硬件部分不支持MSI中断。所以需要使用fpga的assert线来发送INTx的中断消息。

疑点是在hv/drivers/pcie/shim_config.c中ibound init时对pcie寄存器的配置中使能了assert INTA-INTD 4根中断,但没有使能deassert的4根中断。这样配置为什么deassert消息接收后仍然能正确识别呢?

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP