contents
该文档描述了UFS Host Controller的主要运作流程以及在开源内核代码hisi平台中的host controller的接口函数设计
文档大部分内容参考来自JEDEC STANDARD JESD223C 标准配置文档以及 hisi平台内核ufs源代码。
UFS架构图
UFS协议为UFS定义了一个通用的host controller interface(HCI),主机的驱动程序通过与HCI工作,达到与UFS设备进行交互的目的。该标准定义列寄存器级的HCI设计,负责主机Software和UFS设备间的接口管理和数据传输,其架构如下图所示:

蓝色箭头上方为主机软件部分,下方为硬件部分(即host controller以及UFS设备),该文档中分析的ufshcd代码主要是为了实现UFS host controller Interface的功能。
HCI接口架构
主机的Software通过内存中的一系列host register和一些称为Transfer Request Descriptors 的数据结构来与 Host controller 硬件进行交互。UFSHCI定义了两种接口。MIMO Space以及Host Memory Space,下图展示了UFS HCI的框图。

- MMIO Space:在这个空间,hardware register 被定义为 host software 的接口,通过 MMIO 的方式被实现,主要包含了下面三种类型的寄存器:
- Host Controller Capability Registers,这些寄存器提供了关于Host Controller功能的描述。包括 UFS 标准版本、主机控制器支持的命令队列的大小以及主机控制器标识数据。
- Runtime and Operation Registers。
- Interrupt configuration:这些寄存器为 host software 提供了使能/中止以及中断状态的接口。
- Host controller status. 该寄存器显示 host controller 的状态,并允许主机 software 初始化/禁用 host controller。
- UTP transfer Request List management. 这些寄存器给 UTP Transfer Request List 提供了接口。
- UTP Task Management request lists management. 这些寄存器为 UTP Task Management request list 提供了一个接口。
- UIC Command Registers。这些寄存器为 Unipro 配置以及控制提供了接口。
- Vendor Specific Registers. 由供应商进行定义。
- Host Memory Space:该空间中包含了能够描述将执行命令和命令中数据缓存的数据结构。简单地可以理解为:UTP Transfer Request List 管理通用的 IO 命令,而 UTP Task Mangement Request List 对应管理命令。
传输请求接口(Transfer Request Interface)
一个 UFS 的 host system 由一些硬件和软件层组成(host controller 和 host software)。下图展示了其层次结构。

前面定义的数据结构和寄存器就是为了实现上图中的这 4 个 service access points(SAPs) 而定义。分别为 UIO_SAP, UDM_SAP, UTP_CMD, UTP_TM_SAP。为了管理 host software 和 UFS 设备间的通信,host controller 为主机 software 发送出传输请求提供了如下 3 个独立的接口。
- UTP Tranfer Request List:主机软件使用此列表来实现 UTP_CMD_SAP 和 UDM_SAP。
- UTP_CMD_SAP 包括对以下命令类型的支持: UFS 采用的所有 INCITS T10 草案标准功能。本机 UFS 命令集。
- UDM_SAP 包括对以下命令类型的支持: 通过 QUERY REQUEST UPIU/QUERY RESPONSE UPIU 和 NOP IN/NOP OUT UPIU 的设备管理功能。
- 该列表由系列称为 UFS 传输请求描述符 (UTRD) 的数据结构组成,最多32个。 UTRD 描述了要执行的命令以及相关的数据。 UFS 主机软件通过将UTRD插入到这个列表向主机控制器发出命令,然后为列表响铃主机控制器门铃。命令由 UFSHCI 按照它们在列表中的顺序分派执行,即使它们可能不按顺序完成。主机控制器代表主机处理器管理与命令相关的所有数据传输操作。对于正在更新的列表中的命令,所有命令都可能导致命令完成中断或 UTRD 的状态字段。 UFS SW 可能会在运行时向列表添加命令。主机控制器支持中断聚合,从而为预定义数量的命令完成生成单个命令完成中断。
- UTP Task Management Request List: 主机软件使用此列表来实现 UTP_TM_SAP,该列表包名为 UFS Task Management Request Descriptor(UTMRD)的数据结构组成,最多8个。UTMRD 详细描述了 host software 希望设备执行的任务管理函数。所有的 Task Management Request 将优先于上面 UTP Transfer Request 的执行,UFS 主机软件通过在列表上放置一个 UTMRD 向主机控制器发出任务管理功能,然后为列表响铃主机控制器门铃。 UFSHCI 会按照它们在列表中的顺序分派函数执行,即使它们可能会不按顺序完成。所有任务管理功能都可能导致更新列表中功能的请求完成中断或 UTMRD 状态字段。 UFS SW 可以在运行时向列表中添加任务管理功能。此列表不支持中断聚合。
- UIC Command Register. 这个寄存器集是被主机 software 直接用来执行一个 UIC 命令
UFS 主机控制器寄存器接口(host controller Interface)
主机控制器寄存器是内存映射的,存在于 MMIO 空间中。寄存器访问的最大大小为 64 位; 且以8字节对齐。UFSHCI 寄存器用于控制主机控制器的操作以及从主机控制器读取状态和中断信息。以下是UFSHCI的标准寄存器映射。

UTP 层数据传输
host driver与utp层是直接通信的,而二者的数据交互被分成一系列的消息,这些消息根据标准组织为UTP Protocol Information Units(UPIU)的格式,UFS协议文档中的表10-2描述了不同种类的UPIU信息,比如 NOP Out, Command, Response,Data Out 等类型。UPIU 的内容是存放在名为 UTP Command Descriptor(UCD)的数据结构中,而前面所介绍的 UTRD(UTP Transfer Request descriptor)中存放有指向 UCD 的指针。
数据在 host memory, host controller, device 三者之间都可以理解为以 UPIU 的形式来进行传递。下图给出了一个从 host 端到 device 端传输 577 byte 数据的例子:

本文深入解析UFS架构,包括UFS主机控制器的主要运作流程、HCI接口设计、传输请求接口及其实现细节。同时介绍了UFS协议如何通过UTP层进行数据传输,以及hostsoftware与hostcontroller之间的交互机制。
最低0.47元/天 解锁文章
1599

被折叠的 条评论
为什么被折叠?



