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| | | | |
<-------| | | | |