您的位置:首页 > 运维架构 > Linux

linux 下PCIE控制器设备树 学习

2017-07-12 20:15 453 查看
本系列全部内容基于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空间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 设备树 pcie