免费注册 查看新帖 |

Chinaunix

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

还是不理解IOMMU、北桥、PCI的MMIO和ioremap [复制链接]

论坛徽章:
0
发表于 2008-03-24 16:43 |显示全部楼层
原帖由 zx_wing 于 2008-3-24 16:35 发表

可能是我用词不准确,不应该说是预留。
实际是这样的,linux中用resouce结构来描述PCI设备占用的资源。PCI设备是树状结构,所以linux中也有一个树状的resource(ISA设备的我不清楚)来描述所有的PCI设备。
...

哦 这样就懂了  结合ldd看  应该说是pci _resource_start返回物理地址  request_mem_region从物理地址开始分配空间  然后由ioremap映射得到可供内核访问的虚拟地址
应该是这样吧 谢谢

论坛徽章:
0
发表于 2008-03-24 17:01 |显示全部楼层
原帖由 epegasus 于 2008-3-24 16:43 发表
但是初始配置好以后呢?整个寻址过程是怎么样的?
通过pci bar在硬件上如何能寻址到pci设备上的寄存器去?


寻址过程,ioremap之后, 分2步: 1)MMU从页表中找到 物理地址; 2)北桥芯片拿到这个物理地址,寻址到设备上的具体寄存器或者设备内存。

第2步的细节不清楚, 但应该是北桥的行为,估计在datasheet中可以看到细节。

论坛徽章:
0
发表于 2008-03-24 17:08 |显示全部楼层
原帖由 albcamus 于 2008-3-24 17:01 发表


寻址过程,ioremap之后, 分2步: 1)MMU从页表中找到 物理地址; 2)北桥芯片拿到这个物理地址,寻址到设备上的具体寄存器或者设备内存。

第2步的细节不清楚, 但应该是北桥的行为,估计在datasheet中可 ...

关于第二步,x86架构有个IO基地址寄存器,是IO和MMIO空间的开始,北桥根据这个判断访问的地址是不是落在IO和MMIO空间,进而判断是否该把这个访问递交到南桥 ~~~
其它架构大多是通过firmware来decode地址判断滴,这个过程就不清楚鸟。

论坛徽章:
0
发表于 2008-03-24 17:17 |显示全部楼层
原帖由 zx_wing 于 2008-3-24 17:08 发表

关于第二步,x86架构有个IO基地址寄存器,是IO和MMIO空间的开始,北桥根据这个判断访问的地址是不是落在IO和MMIO空间,进而判断是否该把这个访问递交到南桥 ~~~
其它架构大多是通过firmware来decode地址判断 ...


这个IOBASE和IOLIMIT寄存器就是北桥里滴

论坛徽章:
0
发表于 2008-03-24 17:22 |显示全部楼层
原帖由 albcamus 于 2008-3-24 17:17 发表


这个IOBASE和IOLIMIT寄存器就是北桥里滴

汗,我一直以为在CPU中。。。
也对,有北桥就没有道理放到CPU中。

论坛徽章:
0
发表于 2008-03-24 17:52 |显示全部楼层
北桥的资料哪里有呢?
还有哦,这些东西硬件资料太关键了,linus 当年写内核也是得到了硬件资料才行吧?他怎么拿到的?

论坛徽章:
0
发表于 2008-03-24 17:54 |显示全部楼层

回复 #25 zx_wing 的帖子

我来了,哈哈
--------------------------------------------------------------------------------------
1.你说的那个预留,其实只是为了防止这个物理地址被多次映射。
--------------------------------------------------------------------------------------
2.北桥怎么区分bus和memory是通过TOM(top of memory),jinsong讲的时候你没有认真听哈,具体就是北桥划分的memory地址和MMIO的地址。(IO不用管的,指令都不一样,出去的信号也不一样。)
------------------------------------------------------------------------------------------------------
3.那位说不怎么用读配置空间的函数,其实你一直在用的,比如你获得这个MMIO空间的时候,request irq的时候,更改PCI 的timer的时候
-----------------------------------------------------------------------------------------------------
4.IOMMU其实你完全可以看作是MMU,唯一的区别在于:一个是CPU用,另一个是IO用而已。zx_wing说的IOMMU仅仅在DMA的时候用,那只是因为设备只有DMA的时候才会访存:)
------------------------------------------------------------------------------------------------------
5.zx_wing,EEPROM是byte读写的,有一种ROM叫SPROM是才串行的

论坛徽章:
0
发表于 2008-03-24 18:10 |显示全部楼层
原帖由 bluesky_jxc 于 2008-3-24 17:54 发表
我来了,哈哈
--------------------------------------------------------------------------------------
1.你说的那个预留,其实只是为了防止这个物理地址被多次映射。
--------------------------------- ...

--------------------------------------------------------------------------------------
>>1.你说的那个预留,其实只是为了防止这个物理地址被多次映射。
是,有这个作用,因为它是BUSY资源。但也是kernel用来检测resource confilict的手段
--------------------------------------------------------------------------------------
>>2.北桥怎么区分bus和memory是通过TOM(top of memory),jinsong讲的时候你没有认真听哈,具体就是北桥划分的memory地址和MMIO的地址。(IO不用管的,指令都不一样,出去的信号也不一样。)
恩,我是说是北桥。但具体流程我忘了,我认为就是通过IOBASE和IOLIMIT来区分的。
------------------------------------------------------------------------------------------------------
>>5.zx_wing,EEPROM是byte读写的,有一种ROM叫SPROM是才串行的
乱说,绝对是串行的。我读过EEPROM的spec的。
你说的byte是说通过mmio进行byte读写?

论坛徽章:
0
发表于 2008-03-25 09:04 |显示全部楼层

回复 #28 zx_wing 的帖子

>>5.zx_wing,EEPROM是byte读写的,有一种ROM叫SPROM是才串行的
>>乱说,绝对是串行的。我读过EEPROM的spec的。
>>你说的byte是说通过mmio进行byte读写?

兄弟,哪有绝对是串行这种说法。。。。。
EEPROM有两种,串行的叫SPROM,这种ROM优点是管脚少,但是速度稍慢。
另一种是并行的,管脚多(我们设计用了28个脚),速度快些。

当然,这都取决于设计者怎么选择芯片

论坛徽章:
0
发表于 2008-03-25 12:20 |显示全部楼层
原帖由 bluesky_jxc 于 2008-3-25 09:04 发表
>>5.zx_wing,EEPROM是byte读写的,有一种ROM叫SPROM是才串行的
>>乱说,绝对是串行的。我读过EEPROM的spec的。
>>你说的byte是说通过mmio进行byte读写?

兄弟,哪有绝对是串行这种说法。。。。。
EEPROM ...

但我看spec说是串行的,那可能我遇到的是串行的版本。
非串行的怎么访问?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP