AMD 传感器融合中心

AMD 传感器融合中心 (SFH) 是从 Ryzen 平台开始的片上系统 (SOC) 的一部分。该解决方案在多个 OEM 产品上运行良好。AMD SFH 使用 PCIe 总线上的 HID。在架构方面,它类似于 ISH,但主要区别在于所有 HID 报告都作为内核驱动程序的一部分生成。

框图

    ---------------------------------
    |  HID User Space Applications  |
    - -------------------------------

---------------------------------------------
     ---------------------------------
    |               HID Core          |
     ---------------------------------

     ---------------------------------
    |     AMD HID Transport           |
     ---------------------------------

     --------------------------------
    |             AMD HID Client     |
    |       with HID Report Generator|
     --------------------------------

     --------------------------------
    |     AMD MP2 PCIe Driver        |
     --------------------------------
OS
---------------------------------------------
Hardware + Firmware
     --------------------------------
     |     SFH MP2 Processor         |
     --------------------------------

AMD HID 传输层

AMD SFH 传输也实现为总线。在 AMD MP2 中执行的每个客户端应用程序都作为此总线上的设备注册。这里,MP2 是一个连接到 x86 以处理传感器数据的 ARM 核心。该层绑定每个设备(AMD SFH HID 驱动程序),识别设备类型并向 HID 核心注册。传输层将一个常量“struct hid_ll_driver”对象附加到每个设备。一旦设备注册到 HID 核心,HID 核心就会使用通过此结构提供的回调与设备通信。AMD HID 传输层实现了同步调用。

AMD HID 客户端层

此层负责实现 HID 请求和描述符。由于固件是独立于操作系统的,HID 客户端层填充 HID 请求结构和描述符。HID 客户端层很复杂,因为它位于 MP2 PCIe 层和 HID 之间。HID 客户端层初始化 MP2 PCIe 层并持有 MP2 层的实例。它使用 MP2-PCIe 层识别连接的传感器数量。基于此,它为每个传感器分配 DRAM 地址并将其传递给 MP2-PCIe 驱动程序。在枚举每个传感器时,客户端层填充 HID 描述符结构和 HID 输入报告结构。HID 特征报告结构是可选的。报告描述符结构因传感器而异。

AMD MP2 PCIe 层

MP2 PCIe 层负责与固件通过 PCIe 进行所有事务处理。固件和 PCIe 之间的连接在此处建立。

X86 和 MP2 之间的通信分为三个部分。1. 通过 C2P 邮箱寄存器进行命令传输。2. 通过 DRAM 进行数据传输。3. 通过 P2C 寄存器获取支持的传感器信息。

使用 C2P 邮箱寄存器将命令发送到 MP2。写入 C2P 消息寄存器会向 MP2 生成中断。客户端层分配物理内存,并通过 PCI 层将其发送到 MP2。MP2 固件将命令输出写入客户端层分配的访问 DRAM 内存。固件总是至少写入 32 字节到 DRAM。因此,作为协议驱动程序应至少分配 32 字节 DRAM 空间。

枚举和探测流程

HID             AMD            AMD                       AMD -PCIe             MP2
Core         Transport      Client layer                   layer                FW
 |               |              |                           |                 |
 |               |              |                 on Boot Driver Loaded       |
 |               |              |                           |                 |
 |               |              |                        MP2-PCIe Int         |
 |               |              |                           |                 |
 |               |              |---Get Number of sensors-> |                 |
 |               |              |                       Read P2C              |
 |               |              |                        Register             |
 |               |              |                           |                 |
 |               |              | Loop(for No of Sensors)   |                 |
 |               |              |----------------------|    |                 |
 |               |              | Create HID Descriptor|    |                 |
 |               |              | Create Input  report |    |                 |
 |               |              |  Descriptor Map      |    |                 |
 |               |              |  the MP2 FW Index to |    |                 |
 |               |              |   HID Index          |    |                 |
 |               |              | Allocate the DRAM    |  Enable              |
 |               |              |        address       |  Sensors             |
 |               |              |----------------------|    |                 |
 |               | HID transport|                           |    Enable       |
 |               |<--Probe------|                           |---Sensor CMD--> |
 |               | Create the   |                           |                 |
 |               | HID device   |                           |                 |
 |               |    (MFD)     |                           |                 |
 |               | by Populating|                           |                 |
 |               |  the HID     |                           |                 |
 |               |  ll_driver   |                           |                 |
 | HID           |              |                           |                 |
 |  add          |              |                           |                 |
 |Device         |              |                           |                 |
 |<------------- |              |                           |                 |

从应用程序到 AMD SFH 驱动程序的数据流

            |              |              |                           |                 |
            |              |              |                           |                 |
            |              |              |                           |                 |
            |              |              |                           |                 |
            |              |              |                           |                 |
            |HID_req       |              |                           |                 |
            |get_report    |              |                           |                 |
            |------------->|              |                           |                 |
            |              | HID_get_input|                           |                 |
            |              |  report      |                           |                 |
            |              |------------->|------------------------|  |                 |
            |              |              |  Read the DRAM data for|  |                 |
            |              |              |  requested sensor and  |  |                 |
            |              |              |  create the HID input  |  |                 |
            |              |              |  report                |  |                 |
            |              |              |------------------------|  |                 |
            |              |Data received |                           |                 |
            |              | in HID report|                           |                 |
To          |<-------------|<-------------|                           |                 |
Applications|              |              |                           |                 |
    <-------|              |              |                           |                 |