免费注册 查看新帖 |

Chinaunix

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

pci64bit 地址配置 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-18 20:15 |只看该作者 |倒序浏览
最近需要x86平台上支持大量pcie设备,每个设备需要映射近百兆内存到x86的pci空间。
基于此需要采用pci64bit地址配置。

现有一个实验设备
x86上pci 主桥下分出一个pcie桥,接上面种类的一个pcie设备。只有一个该设备,所以bios的32bit空间足够分配,使用起来没有问题。

下面进行了pci64bit地址分配试验
修改pcie设备配置,使其成为64bit设备
主桥总线号0
分出的pcie桥分得总线号2

在bios启动后
我在fixup.c中配置pcie桥
base memory limit memory是对应32bit地址总线的,由bios配置,没改
prefetch base memory 和 prefetch limit memory,我配置到0x2,0000,0000 - 0x2,ffff,ffff

配置pcie设备
bar0 4k不支持prefetch,没有修改,让其映射到4G空间内
bar1 8M支持prefetch,修改,让其映射到0x2,0000,0000 - 0x2,007f,ffff
bar2 64M支持prefetch,修改,让其映射到0x2,0400,0000 - 0x2,07ff,ffff
64bit只有3个bar

完成后,用查看/proc/iomem信息,按照我分配的没有问题
bus2分配空间是0x2,0000,0000 - 0x2,ffff,ffff
pcie设备
bar1 8M分配到0x2,0000,0000 - 0x2,007f,ffff
bar2 64M分配到0x2,0400,0000 - 0x2,07ff,ffff

出现的问题:
用nocache_ioremap()将bar1 0x2,0000,0000 - 0x2,007f,ffff和bar2 0x2,0400,0000 - 0x2,07ff,ffff映射到x86内核虚拟空间后访问不正确,不能正常读写。
写入0xaaaaaaaa,读出来是0xffffffff

在pci32bit地址情况下是正确的。

请教各位高手,是不是还少了哪些地方没有配置,或者我的配置有误?
缺少pci64bit地址的知识,网上也比较少,看手册也实在看不出什么。
谢谢

论坛徽章:
0
2 [报告]
发表于 2012-02-18 20:16 |只看该作者
补充,采用的是linux-2.6.37内核,x86_64
谢谢

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
3 [报告]
发表于 2012-02-19 13:58 |只看该作者
本帖最后由 embeddedlwp 于 2012-02-19 13:58 编辑
moon146 发表于 2012-02-18 20:16
补充,采用的是linux-2.6.37内核,x86_64
谢谢


既然bar1,bar2支持prefetch,那你改成ioremap()试试呢?

论坛徽章:
0
4 [报告]
发表于 2012-02-19 16:46 |只看该作者
static inline void __iomem *ioremap(resource_size_t offset, unsigned long size)
{
        return ioremap_nocache(offset, size);
}
看上去,两个是一样的

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
5 [报告]
发表于 2012-02-20 10:48 |只看该作者
回复 4# moon146


    如果问题解决了,就share一下啊,帮你顶了!

论坛徽章:
0
6 [报告]
发表于 2012-02-20 14:27 |只看该作者
谢谢楼主分享!

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
7 [报告]
发表于 2012-02-22 15:10 |只看该作者
回复 1# moon146


这位大侠有没有解决问题啊,解决了就分享一下啊


   

论坛徽章:
0
8 [报告]
发表于 2012-02-29 12:28 |只看该作者
触发linux内核的机制,重新把pci设备扫描一遍,就可以了。

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
9 [报告]
发表于 2012-02-29 15:56 |只看该作者
moon146 发表于 2012-02-29 12:28
触发linux内核的机制,重新把pci设备扫描一遍,就可以了。




为什么重新遍历一遍就可以了呢?

论坛徽章:
0
10 [报告]
发表于 2012-03-01 15:22 |只看该作者
如前直接配置桥,不对,重新扫一遍,用内核机制来配置,同时也设定了相关的资源。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP