转载 大话pcie
原文https://blog.csdn.net/abcamus/article/details/76167747
一、PCIe DMA机制
PCIe控制器也提供DMA(Direct Memory access)功能,用来批量地异步数据传输。
1.1 DMA读写的发起和结束
假设现在RC要从EP mem space读1MB数据,可以有这么两种方式:RC发起DMA读;EP发起DMA写。这两种方式结果是等效的,对最后完成中断的方式会不一样,前者通过local interrupt表示自己DMA读完了,后者需要EP发送一笔IMWr来表示DMA读完成了。
1.2 DMA配置
如图表示本地控制器发起一笔1MB写操作
1.2.1 SAR和DST
SAR表示DMA传输的数据源地址,如果RC发起从EP读操作,那么SAR必定是EP中某个BAR range内。目标地址DAR就是系统ddr中的地址。反之,如上图所示的写操作,DAR就是EP中mem space。
1.2.2 Max_Payload_Size
DMA读写本质上还是通过拆分成TLP来进行的,每次传输的size就是通过tlp header中的length来确定的,而length由控制器的Max_Payload_Size决定,这个值取EP和RC的capability中相应参数的最小值。
1.3、Linked List
对于大批量数据的传输,通常都会有所谓的Linked List Mode。试想一下,在Linux运行时要进行大批量数据传输的时候是很难分配到大块连续的物理地址的,那么势必需要重复发起DMA传输,这样的话DMA的异步传输功能岂不是被变相衰弱了。所以在硬件上要有这样一种机制来避免这个问题,这就是LL DMA。
这种机制广泛存在于各种高速设备中,USB3.0传输的时候内部通过链接trb实现的就是Linked List DMA。
如上图所示,Linked List中每个配置块称作element,每个element中的内容就是前面DMA传输时候的配置,硬件在发起DMA传输的时候把这块payload加载到指定的寄存器中。LL mode的结束通过CB来标志,toggle一下即表示到了LL的末尾。
二、PCIe MSI机制
PCIe采用data path才传递interrupt,这就是Message Signal Interrupt。假如RC收到一笔对应的写操作,那么在硬件实现上就会自动转换成中断信号给中断控制器,这笔写请求并不会到任何ram区域。
2.1 硬件支持
2.1.1 Generic Interrupt Controller
https://developer.arm.com/products/system-ip/system-controllers/interrupt-controllers
从CoreLink GIC-500开始支持MSI/MSI-X。CoreLink GIC-400不支持,所以就算PCIe设备支持也无法实现MSI(-X)机制。
2.1.2 PCIe设备支持
每一个具有MSI capability的device都有一组对应的寄存器来表示MSI能力。
MSI Control Register中的multiple message capable(三个比特,假设值为x)表示MSI可产生多少message,计算方法为2的x此方。另外有三个比特multiple message enable,和message capable对应,表示实际使能了多少message。还有一个MSI data寄存器和MSI address寄存器,要结合中断控制器配置,表示具体的message编码和message的目标地址。
到这篇文章为止涉及的知识已经能够让PCIe工作起来了,接下来开始写些Linux PCIe驱动相关的文章
转载 大话pcie的更多相关文章
- [转载]PCI/PCIe基础——配置空间
转载地址:http://blog.csdn.net/jiangwei0512/article/details/51603525 PCI/PCIe设备有自己的独立地址空间,这部分空间会映射到整个系统的地 ...
- 嵌入式开发之hi3519---PCIE DMA
http://blog.csdn.net/abcamus/article/details/76167747 大话pcie dma http://blog.csdn.net/qingfengtsing/ ...
- 转载:使用Xilinx IP核进行PCIE开发学习笔记(一)简介篇
https://zhuanlan.zhihu.com/p/32786076 最近接触到一个项目,需要使用PCIE协议,项目要求完成一个pcie板卡,最终可以通过电脑进行通信,完成电脑发送的指令.这当中 ...
- 【转载】Linux查看PCIe版本及速率【方法】PCIE的X4X8X16 查看 数量 怎么看
Linux查看PCIe版本及速率 PCIE有四种不同的规格,通过下图来了解下PCIE的其中2种规格 查看主板上的PCI插槽 # dmidecode | grep --color "P ...
- 【转载】认识SSD的SATA、mSATA 、PCIe和M.2四种主流接口
认识SSD的SATA.mSATA .PCIe和M.2四种主流接口 2018-09-25 • 工具 • 评论关闭 认识SSD的SATA.mSATA .PCIe和M.2四种主流接口
- Atitti 大话存储读后感 attilax总结
Atitti 大话存储读后感 attilax总结 1.1. 大话存储中心思想(主要讲了磁盘文件等存储)1 1.2. 最耐久的存储,莫过于石头了,要想几千万年的存储信息,使用石头是最好的方式了1 1.3 ...
- 转载-centos网络配置(手动设置,自动获取)的2种方法
转载地址:http://blog.51yip.com/linux/1120.html 重新启动网络配置 # service network restart 或 # /etc/init.d/networ ...
- 阿里面试回来,想和Java程序员谈一谈(转载)
引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...
- [转载] 单表60亿记录等大数据场景的MySQL优化和运维之道 | 高可用架构
原文: http://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=209406532&idx=1&sn=2e9b0cc02bdd ...
随机推荐
- pyspider环境部署2--pyspider安装
接上篇文章,在python3.6.4安装完成的基础上,安装相关依赖模块及pyspider. 依赖安装 1.setuptools和pip setuptools和pip是python的包管理工具,pyth ...
- Linux笔记-top命令和load average
参考资料 top相关: http://blog.csdn.net/zhangchenglikecc/article/details/52103737参考资料 cpu核数: https://www.cn ...
- UIToolBar - 官方文档
继承关系:UIToolBar -> UIView -> UIResponder -> NSObject. toolBar是一个工具栏,用于显示一个或多个按钮.其按钮叫做toolBar ...
- Java函数式编程和lambda表达式
为什么要使用函数式编程 函数式编程更多时候是一种编程的思维方式,是种方法论.函数式与命令式编程的区别主要在于:函数式编程是告诉代码你要做什么,而命令式编程则是告诉代码要怎么做.说白了,函数式编程是基于 ...
- FineUI经典项目展示(2)基础管理系统(附在线演示)
本系列<FineUI经典项目展示>文章将会集中展示一批使用FineUI(开源版).专业版.MVC版的经典项目. 如果你希望自己的FineUI项目出现在这个舞台,请到官网论坛提交申请: ht ...
- Js获取当前页面URL各种参数
JS获取当前页面URL各种参数 一:Location Location 对象包含有关当前 URL 的信息. Location 对象是 Window 对象的一个部分,可通过 window.locatio ...
- 使用PHPExcel将数据导出至Excel
安装类库 从GitHub上下载PHPExcel类库 地址:https://github.com/PHPOffice/PHPExcel 解压后将Classes文件夹移动到ThinkPHP的extend目 ...
- xampp 使用过程中刚遇到的问题记录
开始使用XAMPP的时候,都是可以正常连接的,但是过一段时间后,在用它创建表或其他操作,会报错,提示如下错误 Access denied for user ''@'localhost' to data ...
- Cat8 八类网线是什么?与Cat5、Cat6、Cat7网线的区别?
若您身处于网络通信行业,相信您应该了解一些以太网线缆,比如说超五类网线.六类网线和七类网线等等.但是您知道Cat8 八类网线 是什么吗?它与五类网线.六类/超六类网线及七类/超七类网线有着怎么样的区别 ...
- H5 60-浮动元素排序规则
60-浮动元素排序规则 <!DOCTYPE html><html lang="en"><head> <meta charset=" ...