加载中…
个人资料
swordhui
swordhui
  • 博客等级:
  • 博客积分:0
  • 博客访问:905
  • 关注人气:7
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

PCIE的MSI中断

(2022-11-23 10:02:01)
标签:

pcie

fpga

msi

分类: 计算机与 Internet
最近用FPGA实现一个PCIE Root complex以方便侦测/替换网络数据。用Xilinx的IP核实现root complex挂接到运行Linux内核的ARM上。数据读写都可以了,现在想加入MSI中断的仿真。网上搬运了很多资料,但都对PCIE MSI中断流程中Root complex扮演的角色语焉不详。现将相关知识梳理如下:

1. MSI中断设计到以下角色: 设备驱动,内核MSI服务, Root complex driver, Root Complex hardware, 设备.
2. 初始化流程:
a. 设备准备配置空间里的MSI capability 块。
b. 上电时,不知道哪个角色初始化设备的MSI capability块,写入不知道什么内存的基地址和ID.

3. 中断流程
a. 设备产生中断,需要准备一个写内存的TLP. 这个TLP将中断信息写入2b中指定的内存地址。
问题是这块内存是放在什么地方? 可能的答案:
(a) CPU的寄存器空间。部分CPU支持MSI可能有相应的内存,但这个内存读写是由谁完成的? Root complex driver吗? 从查阅的资料来看,可能某些CPU有MSI空间,但我不太确定是CPU内的空间还是CPU集成的PCIE控制器内存空间。如果是CPU内存空间,Root complex收到TLP后怎么处理内存操作呢?
(b) Root complex的BAR空间。每个Root complex都有2个BAR空间。我参考pcie_altera的PCIE控制器驱动里面如是说。这样更合理一些. Root complex收到TLP后直接写自己的内存空间,并用中断通知CPU有MSI到来。

我们先假设(b)是正确的,接着梳理流程:

b. 设备将中断信息通过TLP MEM write的方式写入Root complex的BAR空间,这里有Root complex预先设置的中断号。
c. Root complex driver 通知CPU有中断到来,并提供中断号。不知道MSI中断服务是否提供这样的通知接口。需要好好阅读linux kernel msi相关代码。
d. 中断产生,根据中断号调用对应注册的ISR.

还是带着问题研究吧,问题梳理:
1. PCIE设备驱动相关:
问题a. 如何注册msi中断? 
问题b. 如何确定中断号?
问题c. 如何初始化PCIE设备的msi structure? 地址写什么?

2. Root complex driver相关
问题a. 收到TLP后怎么操作以调用PCIE设备驱动注册的isr?


0

阅读 收藏 喜欢 打印举报/Report
前一篇:SGMII8b/10b解码
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有