在扁平设备配置树文件中添加pci设备----基于MPC8313
2012-08-21 13:58
281 查看
今天使用MPC8313的DMO板套件跑我们自己的板子,出现了PCI设备找不到的情况,最后通过上网查资料,总结如下:
Powerpc使用扁平设备配置书文件引导内核,内核在启动过程中会扫描PCI设备,此时硬件上最重要的连线IDSEL起作用了。
先总结一下PCI设备启动过程。内核启动时,pci设备自由bios会扫描自身信息,然后生成含有pci设备信息的数据结构,然后保存起来。内核在扫描32位pci设备的时候,因为在硬件上IDSEL[11:31]实际上相当于pci设备的片选信号(图一),所以内核根据dts文件(即扁平设备配置树)扫描响应IDSEL对应的PCI设备,然后读取PCI设备的数据结构存储起来,以备以后使用。
具体的对应关系看8313的datasheet。见图二和图三。
图一:PCI设备IDSEL脚的连接方式 图二:LDSEL对应的编号 1 图三:LDSEL对应的编号 2 图四:CPU硬件终端号 图五:PCI硬件连接图 注:1:IDSEL连PCI_AD14 3:INTA连IRQ2。 修改好的dts文件中PCI相关代码如下: pci@8500 {
interrupt-map-mask = <f800 0 0 7>;
interrupt-map = <
/* IDSEL 0x0E - 380 */
7000 0 0 1 &ipic 11 8 /*注意红色部分, f800 & 7000,然后去高5位,值为0x0E即(01110),表示它的IDSEL脚连在PCI地址*/
/*线的PCI_AD14号管脚上,蓝色部分代表此设备所连到CPU的硬件终端号(注意:16进制),如图四和五。*/
7000 0 0 2 &ipic 11 8
7000 0 0 3 &ipic 11 8
7000 0 0 4 &ipic 11 8
/* IDSEL 0x0F - Audio */
7800 0 0 1 &ipic 12 8
7800 0 0 2 &ipic 12 8
7800 0 0 3 &ipic 12 8
7800 0 0 4 &ipic 12 8
/* IDSEL 0xA0 - 3602_01 */
A000 0 0 1 &ipic 30 8
A000 0 0 2 &ipic 30 8
A000 0 0 3 &ipic 30 8
A000 0 0 4 &ipic 30 8
/* IDSEL 0xA8 - 3602_02 */
A800 0 0 1 &ipic 13 8
A800 0 0 2 &ipic 13 8
A800 0 0 3 &ipic 13 8
A800 0 0 4 &ipic 13 8>;
interrupt-parent = < &ipic >;
interrupts = <42 8>;
bus-range = <0 0>;
ranges = <02000000 0 90000000 90000000 0 10000000
42000000 0 80000000 80000000 0 10000000
01000000 0 00000000 e2000000 0 00100000>;
clock-frequency = <3f940aa>;
#interrupt-cells = <1>;
#size-cells = <2>;
#address-cells = <3>;
reg = <8500 100>;
compatible = \"fsl,mpc8349-pci\
Powerpc使用扁平设备配置书文件引导内核,内核在启动过程中会扫描PCI设备,此时硬件上最重要的连线IDSEL起作用了。
先总结一下PCI设备启动过程。内核启动时,pci设备自由bios会扫描自身信息,然后生成含有pci设备信息的数据结构,然后保存起来。内核在扫描32位pci设备的时候,因为在硬件上IDSEL[11:31]实际上相当于pci设备的片选信号(图一),所以内核根据dts文件(即扁平设备配置树)扫描响应IDSEL对应的PCI设备,然后读取PCI设备的数据结构存储起来,以备以后使用。
具体的对应关系看8313的datasheet。见图二和图三。
图一:PCI设备IDSEL脚的连接方式 图二:LDSEL对应的编号 1 图三:LDSEL对应的编号 2 图四:CPU硬件终端号 图五:PCI硬件连接图 注:1:IDSEL连PCI_AD14 3:INTA连IRQ2。 修改好的dts文件中PCI相关代码如下: pci@8500 {
interrupt-map-mask = <f800 0 0 7>;
interrupt-map = <
/* IDSEL 0x0E - 380 */
7000 0 0 1 &ipic 11 8 /*注意红色部分, f800 & 7000,然后去高5位,值为0x0E即(01110),表示它的IDSEL脚连在PCI地址*/
/*线的PCI_AD14号管脚上,蓝色部分代表此设备所连到CPU的硬件终端号(注意:16进制),如图四和五。*/
7000 0 0 2 &ipic 11 8
7000 0 0 3 &ipic 11 8
7000 0 0 4 &ipic 11 8
/* IDSEL 0x0F - Audio */
7800 0 0 1 &ipic 12 8
7800 0 0 2 &ipic 12 8
7800 0 0 3 &ipic 12 8
7800 0 0 4 &ipic 12 8
/* IDSEL 0xA0 - 3602_01 */
A000 0 0 1 &ipic 30 8
A000 0 0 2 &ipic 30 8
A000 0 0 3 &ipic 30 8
A000 0 0 4 &ipic 30 8
/* IDSEL 0xA8 - 3602_02 */
A800 0 0 1 &ipic 13 8
A800 0 0 2 &ipic 13 8
A800 0 0 3 &ipic 13 8
A800 0 0 4 &ipic 13 8>;
interrupt-parent = < &ipic >;
interrupts = <42 8>;
bus-range = <0 0>;
ranges = <02000000 0 90000000 90000000 0 10000000
42000000 0 80000000 80000000 0 10000000
01000000 0 00000000 e2000000 0 00100000>;
clock-frequency = <3f940aa>;
#interrupt-cells = <1>;
#size-cells = <2>;
#address-cells = <3>;
reg = <8500 100>;
compatible = \"fsl,mpc8349-pci\
相关文章推荐
- 如何把设备驱动文件添加到Linux内核编译选项配置的menuconfig中
- 基于S2SH框架的项目—web.xml文件配置
- 利用Openfiler配置基于文件系统的网络存储
- Linux下MySQL5.7.18二进制包安装(手动添加配置文件my_default.cnf)
- 4----apache主配置文件模板和基于域名虚拟主机配置文件模板
- Spring--IoC--基于XML的DI-为应用指定多个配置文件-包含关系
- 基于 Azure 托管磁盘配置高可用共享文件系统
- 在web项目中添加自定义配置文件
- python实现数通设备tftp备份配置文件示例
- 基于 MVC 三层架构,Spring 配置文件(08.10.31号)
- 基于visual c++之windows核心编程代码分析(64)现有的exe文件中添加自己的代码
- JAVA WEB开发之基于xml配置文件的分页实现(一) 分页配置原理
- 读取 为 指定 dll 添加的 配置文件App.config
- 路由器交换机密码恢复、IOS与配置文件更新、IOS灾难恢复(网络设备的维护和管理)
- myBatis实例应用(基于配置文件)
- 在.NET中怎样添加App.config配置文件
- win7 IIS7 添加默认文档 无法写入配置文件 解决方法
- 基于linux-2.6.35的class_create,device_create解析 (可自动生成设备文件)
- 004.添加pch文件_项目配置
- 动软中,在连接服务器时,出现“添加服务器配置失败,请检查是否有写入权限或文件是否存在“错误