PowerPC的PCI总线的dts配置

本文发布时间: 2019-Mar-22
这段时间要弄下PCI Express的相关调试和驱动开发工作,老规矩,先在网上找找资料,这类的东西还蛮少的,已经买了本书,打算边学边自己总结吧,这篇文章是PowerPc下对PCI总线的配置方法。 powerpc使用称为FDT 扁平设备描述树的机制传递给内核硬件配置参数,从而引导内核。 这样的优势是PowerPC在Linux上的移植基本上都是对dts文件的修改,而升级内核的工作量远远小于其他cpu体系结构。 只是目前介绍FDT或者OPEN Firmware的中文资料欠缺,这里记录我领悟的关于PCI总线树部分的ranges参数。pci0: pci@e0008500 {interrupt-map-mask = <0xf800 0 0 7>;interrupt-map = </* IRQ5 = 21 = 0×15, IRQ6 = 0×16, IRQ7 = 23 = 0×17 *//* IDSEL AD14 IRQ6 inta */0×7000 0×0 0×0 0×1 &ipic 0×12 0×8/* IDSEL AD15 IRQ5 inta, IRQ6 intb, IRQ7 intd */0×7800 0×0 0×0 0×1 &ipic 0×13 0×8>;interrupt-parent = <&ipic>;interrupts = <66 0×8>;bus-range = <0×0 0×0>;ranges = <0×02000000 0×0 0×90000000 0×90000000 0×0 0×100000000×42000000 0×0 0×80000000 0×80000000 0×0 0×100000000×01000000 0×0 0×00000000 0xe0300000 0×0 0×00100000>;sleep = <&pmc 0×00010000>;clock-frequency = <66666666>;#interrupt-cells = <1>;#size-cells = <2>;#address-cells = <3>;reg = <0xe0008500 0x100 /* internal registers */0xe0008300 0×8>; /* config space access registers */compatible = “fsl,mpc8349-pci”;device_type = “pci”;}; 这是一个mpc8379的dts配置文件,一些属性还是很好理解:pci@e0008500说明这个pci控制器的寄存器映射基地址为e0008500reg = <0xe0008500 0x100 /* internal registers */0xe0008300 0×8>; /* config space access registers */ 再次证明,pci控制器的寄存器映射基地址为e0008500,读取配置空间使用的寄存器映射基址为0xe0008300,后面是长度,8个字节。即CFG_ADDR和CFG_DATA这两个寄存器。 最最费解的是ranges,用来描述cpu地址空间和pci地址空间的映射关系。 对于e300内核来说,一组配置由6个32位16进制组成。ranges =<0×02000000 0×0 0×90000000 0×90000000 0×0 0×100000000×42000000 0×0 0×80000000 0×80000000 0×0 0×100000000×01000000 0×0 0×00000000 0xe0300000 0×0 0×00100000>;ranges =<0×02000000 0×0 0×90000000 0×90000000 0×0 0×100000000×42000000 0×0 0×80000000 0×80000000 0×0 0×100000000×01000000 0×0 0×00000000 0xe0300000 0×0 0×00100000>; 这里有3组,开头的第一个32位数表明映射的地址的属性。0x01000000是IO映射,0x02000000是内存映射,0x42000000也是内存映射,支持预取。 第2-3个双字表示pci总线的地址空间,用2个双字因为PCI总线可能是支持64位寻址的。 第4个双字表示放cpu_address ,即cpu存储器域地址空间,是cpu寻址的空间。e300是32位cpu,如果是e500内核,则需要2个双字了。 第5-6个双字表示映射长度 内核启动消息里显示view plaincopy to clipboardprint?mpc837x_rdb_setup_arch()Found FSL PCI host bridge at 0x00000000e0008500. Firmware bus number: 0->0PCI host bridge /pci@e0008500 (primary) ranges:MEM 0×0000000090000000..0x000000009fffffff -> 0×0000000090000000MEM 0×0000000080000000..0x000000008fffffff -> 0×0000000080000000 PrefetchIO 0x00000000e0300000..0x00000000e03fffff -> 0×0000000000000000mpc837x_rdb_setup_arch()Found FSL PCI host bridge at 0x00000000e0008500. Firmware bus number: 0->0PCI host bridge /pci@e0008500 (primary) ranges:MEM 0×0000000090000000..0x000000009fffffff -> 0×0000000090000000MEM 0×0000000080000000..0x000000008fffffff -> 0×0000000080000000 PrefetchIO 0x00000000e0300000..0x00000000e03fffff -> 0×0000000000000000正好与之匹配。分配配置空间要注意cpu存储器域地址空间,不要跟其他设备的cpu存储器域地址空间重复。


(以上内容不代表本站观点。)
---------------------------------
本网站以及域名有仲裁协议。
本網站以及域名有仲裁協議。

2024-Mar-04 02:11pm
栏目列表