PCIe主机控制器驱动程序 - 资源分配问题

时间:2015-07-07 03:37:43

标签: kernel device-driver pci

我正在开发基于Synopsys DW IP的PCIe主机控制器驱动程序。这基于x86,此处没有BIOS编程。 所以,我需要以ARM方式进行init编码,这可以在arch / arm / kernel / bios32.c中找到。 我正在重用主线3.14内核中可用的drivers / pci / host / pcie-designware.c驱动程序。 我的终点(EP)设备需要使用4K的两个存储空间编程为BAR0 / 1和BAR2 / 3寄存器,作为非预取。

现在,我能够在BUS 1上枚举EP设备,我可以读取设备/供应商ID,类和功能。但无法在EP上看到BAR正确编程。

在DT文件中,对于范围,我提供了一个内存作为IO mem,一个作为mem空间,如下所示:

<?php
 header('Location: https://itunes.apple.com/app/id', 301);
 exit;
?>

现在我看到这些没有被填充为总线1资源(而不是总线0资源)。 我知道总线0用于桥接器,总线1用于连接EP设备的桥接器。 如何确保为总线1分配这些资源?

我的lspci结果如下:

  #address-cells = <3>;
#size-cells = <2>;
ranges = <0x00000800 0 0xe4480000 0xe4480000 0 0x00002000 /* configuration space */
      0x81000000 0 0          0xe4482000 0 0x00001000 /* downstream I/O */
      0x82000000 0 0xe2083000 0xe4483000 0 0x00001000>; /* non-prefetchable memory */

我觉得,我可以在我的驱动程序中对这些BAR编程进行硬编码,但仍然可以使其工作。 但我想正确分配这些资源,以便pci驱动程序(与EP通信的测试驱动程序)可以使用pci_dev及其资源来提取所有这些信息而无需硬编码。

扫描总线1时的我的dmesg如下所示:

/sys/bus/pci # lspci
00:00.0 Class 0604: f00d:8087
01:00.0 Class 0d40: d00f:8086

我对PCIE非常陌生并在实施同样的过程中学习。 任何建议或指示都受到高度赞赏。

0 个答案:

没有答案