linux 下PCIE控制器设备树 学习
本系列全部内容基于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空间。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)