QUP v3 概述
QUP v3 是一种高度灵活且可编程的硬件,可支持多种串行接口。单个 QUP v3 串行引擎硬件核心最多可提供八个串行接口。两个 QUP v3 硬件核心如下:- 16 串行引擎核心
- SSC QUP v3 硬件核心,在 SSC_I/O 中提供五个串行引擎

图:QUP v3 框图
QUP v3 支持的传输模式
QUP v3 串行引擎可配置为以下模式。- FIFO 模式:简单可靠,但 CPU 占用高。最适合低流量控制操作和基本启动(bring-up)。
- CPU DMA(SE DMA 模式):将数据搬移工作卸载,但仍依赖 CPU 协调。可带来中等程度的性能提升。
- 通用软件接口(GSI)DMA 模式(首选):完全由硬件驱动的传输,CPU 参与度极低。针对高性能、可扩展性和功耗效率进行了优化。
| 方面 | FIFO | CPU DMA | GSI DMA |
|---|---|---|---|
| CPU 参与度 | 高 | 中 | 极低 |
| 中断频率 | 高 | 中 | 非常低 |
| 功耗效率 | 低 | 中 | 高 |
| 性能可扩展性 | 差 | 中等 | 优秀 |
| 最适合 | 简单控制 | 中等传输 | 高性能系统 |
QUPv3 GENI 传输模式
QUPv3 GENI 支持多种数据搬移机制。传统上,传输可以使用 FIFO(基于 PIO)或 CPU 管理的 DMA 模式执行。虽然这些方式对于低吞吐量或不频繁的传输已经足够,但在高流量条件下,它们会给 CPU 带来持续负载并产生较高的中断率。 FIFO 模式
图:FIFO 模式
- ①:应用处理器配置通用接口(GENI)。
- ②:应用处理器处理 Rx/Tx 数据。数据在 GENI 和内存之间传输。

图:DMA 模式
- ①:应用处理器初始化 DMA。
- ②:串行引擎配置 GENI,并启动传输过程。
- 高速 I3C 设备
- 摄像头和以太网子系统
- 通过 I2C 的 PCIe 交换机
- 大幅减轻 CPU 负载
- 更少的中断
- 负载下更好的可扩展性
- 性能提升
- 大传输量下性能稳定
- 每次传输的中断率更低
- 延迟可预测
- 高速下吞吐量稳定
- 大数据负载下不会急剧劣化

图:GSI 模式
- ①:应用处理器准备 TRE。
- ②:应用处理器通知 QUP(GSI)。
- ③:GSI 处理 TRE。
- ④:TRE 处理完成后,发送给 GENI。
- ⑤:串行引擎处理 Rx/Tx 数据。
注意QUP v3 UART 串行引擎不支持 GSI 模式。
QUP v3 访问控制自定义
QUP v3 用户访问文件QUPAC_Access.c 指定串行引擎资源的所有者。它最初根据系统 I/O GPIO 分配进行填充。所有串行引擎都必须列出才能访问子系统。它足够灵活,可以只列出特定设备上可用的串行引擎。
要为所需的串行引擎协议自定义访问控制,请在 QUPAC_Access.c 文件中配置参数。QUPAC_Access.c 文件的 Qualcomm TEE 镜像位于 /firmware/qualcomm-linux-spf-1-0_ap_standard_oem_nomodem/TZ.XF.5.0/trustzone_images/core/settings/buses/qup_accesscontrol/qupv3/config/<chipset>/QUPAC_Access.c。
要指定串行引擎资源的所有者,请修改 QUPAC_Access.c 文件以适配板卡设计。
以下用例指定了在已启用的串行引擎上运行的默认协议。您可以根据自己的板卡设计修改代码。
QUP v3 串行引擎中的非安全模式用例
QUP v3 串行引擎支持以下非安全模式用例。
QUP v3 串行引擎访问列表说明
以下变量会传入QUPv3_se_security_permissions_type 结构体。
表:QUP v3 的安全权限变量
| 变量 | 说明 |
|---|---|
| PeriphID | 要配置和分配的串行引擎外设。 |
| ProtocolID | 所需协议的宏。 |
| Mode | FIFO/GSI/DMA 模式的宏。 |
| NsOwner | 存放需要访问权限的镜像的宏。 |
| bAllowFifo | 如果模式为 FIFO,则该布尔标志设为 True,否则设为 False。 |
| bLoad | 该布尔标志值设为 True 以加载协议固件。 |
| bModExcl | 此标志专用于 Qualcomm TEE。当 NsOwner 为 AC_TZ 时设为 True。 |
settings/buses/qup_accesscontrol/qupv3/interface/QupACCommonIds.h。
QUP v3 固件状态验证
要使串行引擎正常工作,必须正确烧写 QUP 固件。固件通过 metabuild 提供,位于common/core_qupv3fw/<chipset>/qupv3fw.elf。您可以通过检查 GENI_FW_REVISION_RO(0xa8c068)来验证固件状态。例如,在内核日志中查找该寄存器的 0x0000ffff 值。在以下日志中,0000ffff 错误表示固件未正确烧写。
QUPAC_Access.c 文件配置。
当加载后配置不匹配时,会显示以下示例日志。
相关文档
缩略语和术语
| 缩略语或术语 | 定义 |
|---|---|
| aDSP | 应用数字信号处理器 |
| ADB | Android 调试桥 |
| ASPM | 活动状态电源管理 |
| BDF | 总线设备功能 |
| CAN | 控制器局域网 |
| CRC | 循环冗余校验 |
| CTS | 清除发送 |
| DLLP | 数据链路层数据包 |
| DTS | 设备树源文件 |
| ECRC | 端到端 CRC |
| EE | 执行环境 |
| ESE | 执行安全环境 |
| FP | 指纹 |
| GPIO | 通用输入/输出 |
| GSI | 通用软件接口 |
| HID | 人机接口设备 |
| I/O | 输入/输出 |
| IOMMU | 输入/输出内存管理单元 |
| I2C | 集成电路间总线 |
| I3C | 改进型集成电路间总线 |
| LSP | 列表处理器 |
| MS | 大容量存储 |
| MSI | 消息信号中断 |
| NCM | 网络控制调制解调器 |
| NFC | 近场通信 |
| NIC | 网络接口卡 |
| PCIe | 外设组件互连高速总线 |
| QoS | 服务质量 |
| QIM | Qualcomm 智能多媒体 |
| RTS | 请求发送 |
| SCL | 串行时钟线 |
| SDK | 软件开发套件 |
| SDL | 串行数据线 |
| SE | 串行引擎 |
| SLPI | 传感器低功耗岛 |
| SPI | 串行外设接口 |
| SPMI | 系统电源管理接口 |
| SR-IOV | 单根 I/O 虚拟化 |
| SSC | Snapdragon 传感器核心 |
| TC | 流量类别 |
| TEE | 可信执行环境 |
| TLP | 事务层数据包 |
| UEFI | 统一可扩展固件接口 |
| UAC | USB 音频类 |
| UART | 通用异步收发器 |
| UCSI | USB Type-C 连接器系统软件接口 |
| V4L2 | Video4Linux2 |
| VC | 虚拟通道 |
| Yavta | 又一个 V4L2 测试应用 |

