HOST主桥实现(PowerPC MPC9548)

HOST主桥实现(PowerPC MPC9548)

《PCI Express体系结构导读》第2.2章节笔记。

1. 背景简介

MPC8548处理器是Freescale基于E500 V2内核的一个PowerPC处理器,该处理器继承了DDR控制器,多个eTSEC(Enhanced Three-Speed Ethernet Controller)、PCI/PCI-X和PCIe总线控制器等一系列接口。

MPC8548处理器的拓扑结构

1.1 Cache

  • L1 Cache在E500 V2内核中。
  • L2 Cache挂接到FSB总线上。
  • 在一些高端PowerPC处理器中,L2 Cache也在内核中,L3 Cache挂接在FSB总线上。

1.2 SoC平台总线

  • 挂载所有外部设备。
  • 与FSB通过Cache一致性模块连接。

1.3 OCeaN

  • OCeaN是连接快速外设使用的交叉互连总线。
  • 特点:使用OCeaN互连的总线控制器可以直接通信,而不需要占用SOC平台总线带宽。例如,PCI总线控制1的数据报文可以直接发向PCI总线控制器2

2. PCI设备配置空间的访问机制

  • 配置读写总线事务:读写PCI设备的配置空间。
  • 寻址:BDF,即Bus Number, Device Number, Function Number。
  • 总线号(Bus Number):HOST主桥遍历PCI总线树的时候确定,由系统软件决定。
  • 每个Device最多包含8个Function。
  • 每个Function有独立的配置空间。
  • Host主桥使用寄存器号访问配置空间的某个寄存器。

2.1 寄存器

2.1.1 CFG_ADDR & CFG_DATA

系统软件使用CFG_ADDRCFG_DATA寄存器访问PCI设备的配置空间。

  • CFG_ADDR寄存器保存PCI设备的BDF和寄存器号,具体字段如下:
    • Enable位:为1时,HOST主桥使能对PCI设备配置空间的访问,当HOST处理器对CFG_DATA寄存器进行访问时,HOST主桥将对这个寄存器的访问转换为PCI配置读写事务并发送的总线上。
    • Bus Number:总线号。
    • Device Number: 设备号。
    • Function Number: 功能号。
    • Register Number: 寄存器号。
2.1.2 INT_ACK

系统软件使用INT_ACK寄存器访问挂接在PCI总线上的中断控制器的中断向量,该寄存器只读。

2.2 流程分析

  • MPC8548处理器向CFG_ADDR寄存器写入BDF和Register Number,并设置Enable位。如果Enable位不设置,那么处理器对CFG_DATA的访问就只是一个普通的I/O访问,HOST主桥不能将其转换为PCI配置读写请求。
  • MPC8548处理器向CFG_DATA寄存器进行读/写访问,HOST主桥根据CFG_ADDR生成PCI配置读写事务,并将该事务路由到指定设备。

PCI设备的配置寄存器采用的是小端模式,如果与HOST处理器不同,则要考虑转码。

3. 地址转换

ATMU(Address Translation and Mapping Unit)寄存器组:

  • Outbound寄存器组:存储器域->PCI总线域
  • Inbound寄存器组:PCI总线域->存储器域

3.1 存储器域->PCI总线域

只有当CPU读写访问的地址范围在outbound寄存器组管理的地址空间之内时,HOST主桥才能接收CPU的读写访问,并将CPU在存储器域的读写访问转换为PCI总线域的读写访问,然后才能对PCI设备进行读写操作。

3.1.1 原理简介
  • 初始化阶段,配置Outbound寄存器组,常见的三个信息如下:
    • 要映射的存储器域起始地址,也就是想要把哪一段存储器域的地址映射到PCI域。
    • 映射到PCI域的起始地址,也就是要把存储器域的地址映射到PCI域的哪一段。
    • 映射长度,也就是要映射多长一段地址空间。
  • CPU对存储器域某地址x进行读写访问时,硬件首先检测x是否在cache中,如果在cache中,那么直接对cache进行访问。(绝大多数情况下,PCI等外围设备使用的地址空间是不可cache的,所以x不会落在cache中)
  • 检查相关配置,判断地址x是否输入PCI总线空间。如果属于PCI空间,则检测x是否在Outbound寄存器组中完成映射,如果已经映射,那么HOST主桥将该访问转换为PCI总线事务,发送到PCI总线上。
3.1.2 Outbound寄存器;POTARn和POTEARn
  • PCI总线域的地址。
3.1.3 Outbound寄存器;POWBARn和POWARn
  • 存储器域的地址。
  • 映射使能。
  • 读类型:存储器读,或者IO读。
  • 写类型:存储器写,或者IO写。
  • 窗口大小,即映射长度,4KB ~ 64GB。

在许多系统软件中,将Outbound窗口两边的寄存器使用“直接相等”的方法进行映射,将存储器域的地址和PCI总线地址设为相同的值。但需要注意,二者虽然值相同,但地址域不同。

3.2 PCI总线域->存储器域

PCI设备进行DMA读写时,只有访问的地址在Inbound窗口中,HOST主桥才能接收这些读写请求,并将其转发到存储控制器。

3.2.1 原理简介
  • 初始化时,配置Inbound寄存器组,常见的三个信息如下:
    • 源地址,即PCI域地址。
    • 目的地址,即存储器域地址。
    • 映射长度。
  • PCI设备使用DMA操作访问主存储器空间时,首先检查要访问的地址是否在Inbound寄存器组中完成映射,如果未映射,则禁止本次访问。
  • 如果Inbound寄存器中有对应映射配置,则HOST主桥将当前访问转换为存储器空间访问。
3.2.2 Inbound寄存器:PITARn
  • 存储器域地址。
3.2.3 Inbound寄存器;PIWBARn和PIWBEARn
  • PCI总线地址。
3.2.4 Inbound寄存器;PIWARn
  • 使能位。
  • 预读支持位。
  • Cache共享一致性操作配置。
  • 窗口大小,即映射长度。

4. 总结

HOST主要需要完成PCI设备的配置及读写访问,那么要实现一个HOST主桥,就需要实现PCI设备配置空间的访问和PCI域/存储器域地址空间的相互映射。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值