linux 下PCIE控制器设备树 学习

来源:互联网 发布:d3.js pdf 编辑:程序博客网 时间:2024/06/15 03:41

本系列全部内容基于Synopsys DesignWare进行学习与分析


在内核3.x之后开始使用设备树,所有和硬件相关部分均放在设备树中,在进行PCIE控制器学习时,对官方文档中各个变量的使用存在很大的迷惑,根据自己了解总结如下。

DesignWare官方文档中的例子如下:

pcie: pcie@dffff000 {
        compatible = "snps,dw-pcie";
        reg = <0xdffff000 0x1000>, /* Controller registers */
              <0xd0000000 0x2000>; /* PCI config space */
        reg-names = "ctrlreg", "config";
        #address-cells = <3>;
        #size-cells = <2>;
        device_type = "pci";
        ranges = <0x81000000 0 0x00000000 0xde000000 0 0x00010000
              0x82000000 0 0xd0400000 0xd0400000 0 0x0d000000>;
        interrupts = <25>, <24>;
        #interrupt-cells = <1>;
        num-lanes = <1>;
        num-viewport = <3>;
    };

     在基本属性中,主要有reg属性,ranges属性,和中断属性。

    其中reg属性主要用于声明:控制器的配置寄存器地址范围<0xdffff000 0x1000>和映射总线上设备的配置空间的地址范围<0xd0000000 0x2000>,使用官方的驱动时reg-names字段需要保持。

   控制器的配置寄存器地址主要用于对控制器进行相关操作,如对于CPU域到PCIE的映射等;

  映射总线上设备的配置空间的地址范围,主要用于在CPU域上分配一段内存空间,由于和PCI域上设备的配置空间进行映射,在映射之后通过操作这个空间对pcie设备的配置空间进行配置操作,例如在设备枚举时会使用。

   ranges属性主要用于表明 CPU域与pcie域的映射关系,第一个字段代表映射类型(0x81000000),第二、三个代表pcie域的基地址(0 0x00000000);第四个字段代表CPU域地址(0xde000000),最后两个字段代表映射区域的大小(0 0x00010000)。第一个字段,其中0x81000000表明IO空间,其中0x82000000表明MEM空间。

原创粉丝点击