MHI Host 控制器、通道与状态机
1. 定位
MHI(Modem Host Interface)用于Host处理器通过PCIe等高速transport控制modem。drivers/bus/mhi/host实现协议Core,mhi_pci_generic提供常见PCI modem glue。
1 | MHI function driver |
2. 对象
mhi_controller:transport callback、MMIO、DMA、IRQ、PM和ring集合;mhi_device:controller或成对UL/DL channel设备;mhi_driver:按channel name匹配的功能driver;mhi_chan:方向、TRE ring、doorbell、状态;mhi_event:完成和状态事件ring;mhi_cmd:start/stop/reset channel等命令ring。
3. 注册
mhi_register_controller():
- 校验controller config;
- 分配channel/event/command对象;
- 初始化锁、workqueue、waitqueue和状态;
- 创建controller
mhi_device; - 注册到
mhibus; - 可选创建debugfs。
注册不自动给modem上电。Transport随后调用:
1 | mhi_prepare_for_power_up |
4. Ring
Host在一致性DMA内存中维护:
- channel TRE ring;
- event ring;
- command ring;
- channel/event/command context。
Queue传输:
1 | mhi_queue_buf/mhi_queue_skb/mhi_queue_dma |
Modem写event ring并触发IRQ。Host解析completion code,回收TRE、unmap DMA并调用client callback。
5. Doorbell与并发
Doorbell可按burst mode配置,避免每个TRE都写MMIO。Ring更新需保证:
- descriptor和payload mapping对device可见;
- write pointer先更新;
- barrier之后再doorbell。
Channel/event各有锁;controller PM使用pm_lock和状态转换work。不能在持有spinlock时执行会睡眠的runtime PM或固件操作。
6. 状态机
MHI设备状态主要为RESET、READY、M0、M1、M2、M3、SYS_ERR:
- M0:活动;
- M1:进入低功耗的过渡;
- M2:轻度低功耗,Host仍可唤醒;
- M3:深度低功耗;
- SYS_ERR:协议/设备错误,需要恢复。
Execution Environment包括PBL、SBL、AMSS、RDDM等,决定当前是boot、mission还是RAM dump。
mhi_queue_state_transition()把变化排入单线程state transition worker,按序执行READY、MISSION_MODE等复杂流程。
7. 固件和崩溃转储
boot.c实现BHI/BHIE:
- 装载modem firmware;
- 分段DMA传输;
- 等待boot状态;
- 进入mission mode;
- RDDM时收集RAM dump。
固件名和超时来自controller profile。固件必须按产品信任链校验,不能仅依赖文件路径。
8. PCI Generic
mhi_pci_generic按PCI ID选择不同controller config,覆盖Qualcomm SDX、Quectel、Foxconn、Sierra、Telit等设备。
Probe:
1 | pci_enable_device |
PCI AER、health check或SYS_ERR会调度recovery work,power down、reset PCI function、重新prepare/power up。
9. PM
功能driver使用mhi_device_get[_sync]()/mhi_device_put()维持device wake。Controller suspend要求channel可挂起并进入M3;resume重新进入M0。
计数不配对会导致modem无法休眠或I/O期间被挂起。
10. RK3588
MHI协议与SoC无关。受支持MHI PCI modem可以物理插到RK3588 PCIe,但还需要:
CONFIG_MHI_BUS和CONFIG_MHI_BUS_PCI_GENERIC;- 对应PCI ID;
- PCIe、MSI和DMA正常;
- firmware文件;
-供电/reset/W_DISABLE等板级控制。
本树Rockchip defconfig未启用MHI,故不是默认数据路径。
正在加载留言…