免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: chenrvmldd
打印 上一主题 下一主题

pcie相关问题-代码已经分析,请大家帮忙看看什么原因导致的 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2012-02-22 15:58 |只看该作者
回复 10# embeddedlwp


    嗯,你这个说的很对,从代码中可以看出来alloc_resource这个函数中可以看出,但是为什么刚开始的分配地址会那么奇怪了?
PCI: Allocating 0000:01:00.0: Resource 4: 00000000000ec000..00000000000ec00f [20101]
分配失败后,后来内核会通过某种机制修正这个地址空间的,所以通过:
cat /proc/ioports可以看到,这个地址经过修正后,会变成:

/home # cat /proc/ioports
ff7d9000-ff7e8fff : /pcie@ffe0a000
  ff7d9000-ff7e8fff : PCI Bus 0001:03
ff7ec000-ff7fbfff : /pcie@ffe09000
  ff7ec000-ff7fbfff : PCI Bus 0000:01
    ff7ec000-ff7ec00f : 0000:01:00.0
奇怪的是,resource这个地址,怎么刚开始的时候是那样的

论坛徽章:
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
12 [报告]
发表于 2012-02-22 16:53 |只看该作者
本帖最后由 embeddedlwp 于 2012-02-22 16:53 编辑

回复 11# chenrvmldd


You can trace a function called pci_read_bases,it reads the resource start and resource size from 6 BARs.So they are just read from IO/MMIO BARs.


   

论坛徽章:
0
13 [报告]
发表于 2012-02-23 08:12 |只看该作者
回复 12# embeddedlwp


    呵呵,谢谢你的回复,这个代码,兄弟也已经早就看过了,在divers/pci/probe.c文件中,可是我读出来的值为:
  1. pci_setup_device 0000:01:00.0: Resource 0: 0000000000008000..0000000000008007 [20101]
  2. pci_setup_device 0000:01:00.0: Resource 1: 0000000000008040..0000000000008043 [20101]
  3. pci_setup_device 0000:01:00.0: Resource 2: 0000000000008200..0000000000008207 [20101]
  4. pci_setup_device 0000:01:00.0: Resource 3: 0000000000008800..0000000000008803 [20101]
  5. pci_setup_device 0000:01:00.0: Resource 4: 0000000000900000..000000000090000f [20101]
  6. pci_setup_device 0000:01:00.0: Resource 5: 0000000000800000..00000000008003ff [20200]
复制代码
与后来在alloc_resource函数中内核打印出来的值不一致:
  1. PCI: Allocating 0000:01:00.0: Resource 0: 00000000ff7f4000..00000000ff7f4007 [20101]
  2. pci_find_parent_resource 00000000ff7ec000..00000000ff7fbfff
  3. PCI: Allocating 0000:01:00.0: Resource 1: 00000000ff7f4040..00000000ff7f4043 [20101]
  4. pci_find_parent_resource 00000000ff7ec000..00000000ff7fbfff
  5. PCI: Allocating 0000:01:00.0: Resource 2: 00000000ff7f4200..00000000ff7f4207 [20101]
  6. pci_find_parent_resource 00000000ff7ec000..00000000ff7fbfff
  7. PCI: Allocating 0000:01:00.0: Resource 3: 00000000ff7f4800..00000000ff7f4803 [20101]
  8. pci_find_parent_resource 00000000ff7ec000..00000000ff7fbfff
  9. PCI: Allocating 0000:01:00.0: Resource 4: 00000000000ec000..00000000000ec00f [20101]
  10. PCI: Cannot allocate resource region 4 of device 0000:01:00.0, will remap
  11. PCI: Allocating 0000:01:00.0: Resource 5: 0000000000800000..00000000008003ff [20200]
  12. PCI: Cannot allocate resource region 5 of device 0000:01:00.0, will remap
复制代码
我想这两个地址是不是存在某种映射,或者经过了处理,但是怎么处理,在什么地方处理的?

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
14 [报告]
发表于 2012-03-02 16:00 |只看该作者
回复 1# chenrvmldd


        检查你4-5两个资源的合法性,在硬件里的存值可能有问题。找硬件人员核对BAR里的初始值时候合法。
前面4个都是分配在物理地址高端,这是正常的,后面2个明显有问题。

论坛徽章:
0
15 [报告]
发表于 2012-03-04 19:31 |只看该作者
请问,系统加载后,bar4 bar5的资源能够访问吗?

看上去是分配到资源了的,能够访问。

论坛徽章:
0
16 [报告]
发表于 2012-03-19 09:39 |只看该作者
回复 11# chenrvmldd


    此问题已经解决,在这里结个贴,谢谢各位大侠的热心回复,为了解决这个问题,花了三天的时间把王琦的那本pci导读那本书看了一遍,顺便读了一下内核关于pcie空间的配置的源码,最近在搞sata,这边还是有点问题,等这些问题搞定后,过来总结一下如何解决问题的,以及个人对Linux对pci这块的代码流程的理解

论坛徽章:
0
17 [报告]
发表于 2012-12-18 16:19 |只看该作者
本帖最后由 zs5577517 于 2012-12-19 09:51 编辑

楼主你好,我也碰到这个问题了,mpc8377的板子添加一个pcie的网卡,也出现了相同的问题,请问您当时是怎么解决的吗?dts文件需要自己添加pci-e的资源吗?
PCI: Probing PCI hardware
PCI: Cannot allocate resource region 1 of PCI bridge 3, will remap
PCI: Cannot allocate resource region 1 of PCI bridge 4, will remap
PCI: Failed to allocate mem resource #4:4000@0 for 0003:03:00.0
PCI: Failed to allocate mem resource #2:1000@0 for 0003:03:00.0

-sh-2.05b# cat /proc/ioports
00000000-000fffff : /pci@e0008500
ddffc000-de7fbfff : /pcie@e000a000
e67fd000-e6ffcfff : /pcie@e0009000
  e67fd000-e67fd0ff : 0003:03:00.0
eeffe000-ef7fdfff : /pci@e000a000
f77ff000-f7ffefff : /pci@e0009000
  f77ff000-f77ff0ff : 0001:01:00.0

论坛徽章:
0
18 [报告]
发表于 2012-12-21 09:47 |只看该作者
回复 17# zs5577517


    兄弟,你这个是出错了,你可以在DTS中修改,也可以不需要修改,一般DTS里面的东西不需要调整了

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
19 [报告]
发表于 2012-12-25 10:54 |只看该作者
BS lz不分享结果

论坛徽章:
0
20 [报告]
发表于 2013-01-03 19:58 |只看该作者
回复 19# smalloc


    楼主打酱油去了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP