AMD 传感器融合中心

AMD 传感器融合中心 (SFH) 是基于锐龙平台的 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 内存。固件始终向 DRAM 写入最少 32 个字节。因此,作为协议,驱动程序应分配至少 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|              |              |                           |                 |
    <-------|              |              |                           |                 |