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空间。
在内核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设备驱动程序学习(8)-分配内存
- Linux设备驱动程序学习(12)
- 面对不断升级的内核,如何学习linux设备驱动
- Linux字符设备驱动学习
- linux学习笔记-读《Linux编程技术详解》(6-1)-设备文件
- Linux设备驱动程序学习(0)
- LINUX下USB1.1设备学习小记(1)
- Linux设备驱动程序学习(3)-并发和竞态
- Linux设备驱动程序学习(2)-调试技术
- LINUX下USB1.1设备学习小记(2)_协议
- Linux设备驱动程序学习(14)
- linux字符设备驱动程序学习实验记录
- Linux设备驱动程序学习(3)-并发和竞态
- Linux设备驱动程序学习(9)-与硬件通信
- Linux设备驱动程序学习(1)-字符设备驱动程序
- Linux设备驱动程序学习(9)-与硬件通信
- Linux设备驱动程序学习(2)-调试技术
- Linux设备驱动程序学习(2)-调试技术
- Linux网管日记(20)学习Linux设备开发的趣闻轶事
- LINUX下USB1.1设备学习小记