免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-21 13:40 |只看该作者 |倒序浏览
最近在移植一个mv88se6121驱动到Powerpc平台,这个芯片是一个pcie to sata的芯片,我使用的CPU是freescale p1020,当我将pcie to sata这个芯片插入到CPU的pcie slot的时候,内核会打印出如下消息:
  1. PCI: Cannot allocate resource region 4 of device 0000:01:00.0, will remap
  2. PCI: Cannot allocate resource region 5 of device 0000:01:00.0, will remap
复制代码
后来我根据打印出来的消息定位到内核代码中去发现,内核报这样的错误是由于这下面的这个函数中,
  1. static inline void __devinit alloc_resource(struct pci_dev *dev, int idx)
复制代码
调用:
  1. pci_find_parent_resource
复制代码
返回的pr是空,为了验证,我在alloc_resource中加入了一些调用代码,发现打印出来的消息:
  1. PCI: Probing PCI hardware
  2. pci 0000:00:00.0: ignoring class b20 (doesn't match header type 01)
  3. pci 0000:00:00.0: PME# supported from D0 D1 D2 D3hot D3cold
  4. pci 0000:00:00.0: PME# disabled
  5. pci 0000:01:00.0: PME# supported from D0 D1 D3hot
  6. pci 0000:01:00.0: PME# disabled
  7. pci_dev->irq=16
  8. pci 0001:02:00.0: ignoring class b20 (doesn't match header type 01)
  9. pci 0001:02:00.0: PME# supported from D0 D1 D2 D3hot D3cold
  10. pci 0001:02:00.0: PME# disabled
  11. PCI: Allocating 0000:01:00.0: Resource 0: 00000000ff7f4000..00000000ff7f4007 [20101]
  12. pci_find_parent_resource 00000000ff7ec000..00000000ff7fbfff                                      //正常分配
  13. PCI: Allocating 0000:01:00.0: Resource 1: 00000000ff7f4040..00000000ff7f4043 [20101]
  14. pci_find_parent_resource 00000000ff7ec000..00000000ff7fbfff                                       //正常分配
  15. PCI: Allocating 0000:01:00.0: Resource 2: 00000000ff7f4200..00000000ff7f4207 [20101]
  16. pci_find_parent_resource 00000000ff7ec000..00000000ff7fbfff                                       //正常分配
  17. PCI: Allocating 0000:01:00.0: Resource 3: 00000000ff7f4800..00000000ff7f4803 [20101]
  18. pci_find_parent_resource 00000000ff7ec000..00000000ff7fbfff                                         //正常分配
  19. PCI: Allocating 0000:01:00.0: Resource 4: 00000000000ec000..00000000000ec00f [20101]
  20. PCI: Cannot allocate resource region 4 of device 0000:01:00.0, will remap                          //调用pci_find_parent_resource失败,返回一个空指针
  21. PCI: Allocating 0000:01:00.0: Resource 5: 0000000000800000..00000000008003ff [20200]
  22. PCI: Cannot allocate resource region 5 of device 0000:01:00.0, will remap                          //调用pci_find_parent_resource失败,返回一个空指针
  23. pci 0000:00:00.0: PCI bridge, secondary bus 0000:01
  24. pci 0000:00:00.0:   IO window: 0x00-0xffff
  25. pci 0000:00:00.0:   MEM window: 0xa0000000-0xbfffffff
  26. pci 0000:00:00.0:   PREFETCH window: disabled
  27. pci 0000:00:00.0: enabling device (0106 -> 0107)
  28. pci 0001:02:00.0: PCI bridge, secondary bus 0001:03
  29. pci 0001:02:00.0:   IO window: 0x00-0xffff
  30. pci 0001:02:00.0:   MEM window: 0xc0000000-0xdfffffff
  31. pci 0001:02:00.0:   PREFETCH window: disabled
  32. pci 0001:02:00.0: enabling device (0106 -> 0107)
复制代码
下面是内核在初始化的时候打印出来的关于pcie的消息:
  1. mpc85xx_rdb_setup_arch()
  2. Found FSL PCI host bridge at 0x00000000ffe09000. Firmware bus number: 0->255
  3. PCI host bridge /pcie@ffe09000  ranges:
  4. MEM 0x00000000a0000000..0x00000000bfffffff -> 0x00000000a0000000
  5.   IO 0x00000000ffc30000..0x00000000ffc3ffff -> 0x0000000000000000
  6. /pcie@ffe09000: PCICSRBAR @ 0xfff00000
  7. Found FSL PCI host bridge at 0x00000000ffe0a000. Firmware bus number: 0->255
  8. PCI host bridge /pcie@ffe0a000  ranges:
  9. MEM 0x00000000c0000000..0x00000000dfffffff -> 0x00000000c0000000
  10.   IO 0x00000000ffc20000..0x00000000ffc2ffff -> 0x0000000000000000
  11. /pcie@ffe0a000: PCICSRBAR @ 0xfff00000
  12. MPC85xx RDB board from Freescale Semiconductor
复制代码
后来我又将cat /proc/ioports的消息打印出来:
  1. /home # cat /proc/ioports
  2. ff7d9000-ff7e8fff : /pcie@ffe0a000
  3.   ff7d9000-ff7e8fff : PCI Bus 0001:03
  4. ff7ec000-ff7fbfff : /pcie@ffe09000
  5.   ff7ec000-ff7fbfff : PCI Bus 0000:01
  6.     ff7ec000-ff7ec00f : 0000:01:00.0
  7.     ff7f4000-ff7f4007 : 0000:01:00.0
  8.     ff7f4040-ff7f4043 : 0000:01:00.0
  9.     ff7f4200-ff7f4207 : 0000:01:00.0
  10.     ff7f4800-ff7f4803 : 0000:01:00.0
  11. /home #
复制代码
以及cat /proc/iomemd的消息也打印出来了:
  1. a0000000-bfffffff : /pcie@ffe09000
  2.   a0000000-bfffffff : PCI Bus 0000:01
  3.     a0000000-a00003ff : 0000:01:00.0
  4. c0000000-dfffffff : /pcie@ffe0a000
  5.   c0000000-dfffffff : PCI Bus 0001:03
  6. ec000000-efffffff : ec000000.nor
  7. ff87fff0-ff87ffff : rtc-cy14b108k.0
  8.   ff87fff0-ff87ffff : rtc-cy14b108k
  9. ffe04500-ffe04507 : serial
  10. ffe04600-ffe04607 : serial
  11. ffe07000-ffe07fff : fsl-espi
  12. ffe22000-ffe22fff : usb
复制代码
根据我的理解,前面的分配的六个资源(resource)分别是为BAR0-BAR5分配的,从我后来驱动中打印出来的值(mv88se6121的驱动)更能验证这一点,目前我不明白的是:
为什么BAR4-BAR5的资源空间分配会失败,从我目前的系统状态来看,会是什么原因导致的,如果有遇到类似问题的,或者对这块比较了解的兄弟,还望多多指教

论坛徽章:
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
2 [报告]
发表于 2012-02-21 14:03 |只看该作者

论坛徽章:
0
3 [报告]
发表于 2012-02-21 14:52 |只看该作者
回复 2# smalloc


    大家帮忙看看。。。。。

论坛徽章:
0
4 [报告]
发表于 2012-02-21 14:55 |只看该作者
有没有可能是resource conflict?
我猜的……

论坛徽章:
0
5 [报告]
发表于 2012-02-21 15:17 |只看该作者
回复 4# bingbuidea_cu


    和哪个resource冲突了?

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
6 [报告]
发表于 2012-02-21 16:06 |只看该作者
不懂,帮顶了!

论坛徽章:
0
7 [报告]
发表于 2012-02-21 16:13 |只看该作者
围观~

论坛徽章:
0
8 [报告]
发表于 2012-02-22 13:54 |只看该作者
回复 7# 无风之谷


    最近围观的人貌似不多啊,欢迎大家多来围观围观啊

论坛徽章:
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-22 14:41 |只看该作者
本帖最后由 embeddedlwp 于 2012-02-22 15:03 编辑

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

回复 1# chenrvmldd

我想你的PCIe device是可以正常工作的,貌似你那BAR4~BAR5对应的空间都已经正常分配了。
cat /proc/ioports
ff7ec000-ff7fbfff : PCI Bus 0000:01
    ff7ec000-ff7ec00f : 0000:01:00.0
    ff7f4000-ff7f4007 : 0000:01:00.0
    ff7f4040-ff7f4043 : 0000:01:00.0
    ff7f4200-ff7f4207 : 0000:01:00.0
    ff7f4800-ff7f4803 : 0000:01:00.0

cat /proc/iomem
a0000000-a00003ff : 0000:01:00.0

说明这6个BAR中,5个是IO BAR, 1个是MMIO BAR,而且都已经分配了

之前的分配失败是因为,你请求的resource的range无法在parent中找到。

PCI: Allocating 0000:01:00.0: Resource 4: 00000000000ec000..00000000000ec00f [20101]
PCI: Allocating 0000:01:00.0: Resource 5: 0000000000800000..00000000008003ff [20200]
是BAR4, BAR5请求的资源范围
parent中没有这个range,所以失败。不过内核会对这些unassinged device 重新assigned
内核会重新修改相应的PCI bridge的过滤windows,然后重新为你的设备分配。
So don't care the log, just enjoy it.
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP