免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234
最近访问板块 发新帖
楼主: gaoping561

疑问: PCIe BAR 只有32bit, 怎么在64bit kernel上使用?? [复制链接]

论坛徽章:
0
发表于 2010-09-06 19:21 |显示全部楼层
回复 30# Solaris12


    DMA访问内存需要的地址确实是总线地址没错.
因为设备一次DMA寻址总是经过2步.第一先寻址到总线主设备(或者就是北桥上).
第2步总线主设备将地址拿来寻址内存(或者叫物理地址空间).
从这个意思上.设备上有寻址功能的地址无一不是总线地址.
至于总线住设备如何寻到内存.有直通的(即物理地址=总线地址),有偏移的,也有IOMMU的.
本质上IOMMU就是总线地址到物理地址的一个映射.而且是单向访问使用.
而从CPU方向寻址设备上的地址,比如访问ROM仍然是使用非IOMMU的方式.
于是造成了2个方向的不对等性.
这样看来.有趣的是IOMMU实现了一个物理地址空间到物理地址空间自身的一个自影射...

LZ那本<导读>讲的听深入的.概念上比较明晰.不知道价格如何.如果条件允许我也去买本.

论坛徽章:
0
发表于 2010-09-06 21:52 |显示全部楼层
本帖最后由 gaoping561 于 2010-09-06 22:07 编辑

回复 31# epegasus


    楼上正解阿,不管有IOMMU还是没有, DMA操作的地址就是总线的物理地址, 然后都要经过RC这个物理单元才能访问到内存空间.

    没有IOMMU时, 先PCI寻址, 然后RC把对PCI地址的访问转换为相应内存物理地址的访问,  在x86上这个转换关系比较隐晦, 一般PCI总线地址和物理地址数值上相等,  因此说x86上没有明显的RC, 但是不代表RC不存在.

   有IOMMU时, 先PCI寻址, 然后也经由RC访问物理内存, 不同的是这个RC是可以配置的, 有个iotlb转换存在, 这个时候就可以灵活配置哪个PCI地址对应哪个物理内存地址了.

    PowerPC上,主要是PQ!!!系列, RC存在比较明显,有inbound和outbound寄存器组来管理PCI地址和物理内存的映射, 这个可以看作简单的IOMMU,只不过只能进行段式映射罢了.


   那个<导读>是相当好啊, 55RMB,是著的不是编的

论坛徽章:
0
发表于 2010-09-06 23:05 |显示全部楼层
本帖最后由 epegasus 于 2010-09-06 23:25 编辑

回复 32# gaoping561


    这本书很大篇幅和mindshare的 PCI PCIE 2本书相似啊.有哪些主要不同?
你说的那个知识点是第几章?
实际上我买了本pcie的放了很久了....
还有你对PowerPC好象比较熟,有什么可推荐的资料?powerPC好象找不到什么入门或者经典的好书.特别体系结构方面的.

论坛徽章:
0
发表于 2010-09-06 23:28 |显示全部楼层
mindshare的东西全部讲协议, 而这个主要讲在x86和powerpc上的实现,以及linux上相关代码分析. 协议也有两章,但比标准讲的更深入.总的来说,非常实用,为软件工程师量身打造.

我说的主要在前两章.

powerpc没有什么特别的资料,都是freescale网站上下载的文档, 同一作者还有一本powerpc的书值得一读

论坛徽章:
0
发表于 2010-09-07 00:20 |显示全部楼层
非常感谢.2本很好的书.

论坛徽章:
0
发表于 2010-09-07 22:38 |显示全部楼层
本帖最后由 Solaris12 于 2010-09-07 22:43 编辑
回复  epegasus

没有IOMMU时, 先PCI寻址, 然后RC把对PCI地址的访问转换为相应内存物理地址的访问,  在x86上这个转换关系比较隐晦, 一般PCI总线地址和物理地址数值上相等,  因此说x86上没有明显的RC, 但是不代表RC不存在.


上面你说的这句是硬件是怎么工作的,和软件怎么实现无关。

从软件层面,x86 没有IOMMU时,pci_alloc_consistent根本不需要program任何PCI层面的东西,它就是直接返回一个host memory的VA和PA.

这个HOST memory的PA被驱动程序初始化到了设备上,在使用ring-buffer的设备上,尽管BAR是32位的,但这个PA是有可能大于4G的,只要这个设备是64位的DMA能力。

以上都是软件的过程,这个过程里,从来没有touch任何总线设备。

等到设备DMA硬件真正开始做DMA的时候,开始对DMA地址寻址,才涉及到你说的这句话。


当有IOMMU的时候,pci_alloc_consistent 不但要反回host memory的VA,还要在返回DMA bus  address之前在IO mmu的地址空间分配一段资源,然后映射到Host memory的PA上。这个过程软件要program IO MMU硬件的。


另:兄弟如果想换工作,可以联系我,我们这边有Solaris内核 PCI/interrupt/DMA 方面的大项目要做,我们老大是PCI-SIG的board member,有不少学习的机会。

论坛徽章:
0
发表于 2010-09-09 11:17 |显示全部楼层
本帖最后由 gaoping561 于 2010-09-09 11:42 编辑

回复 36# Solaris12

    恩,还是前辈分析的更深入。

    哈哈,好啊,不过我在上海,你们上海有没有需求呢

论坛徽章:
0
发表于 2010-09-11 23:33 |显示全部楼层
回复  Solaris12

    恩,还是前辈分析的更深入。

    哈哈,好啊,不过我在上海,你们上海有没有需 ...
gaoping561 发表于 2010-09-09 11:17



      我们在北京。你考虑吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP