UFS Clk Gate介绍

一 . UFS Clk Gate 概述

1.  什么是UFS Clk Gate

UFS Clk Gate是UFS Host Controller Driver的一个功能, 指的是UFS System 空闲的时候,将UFS Clock关闭,并且让UFS MPHY Link进入Hibernate状态,减少系统资源的开销。

2. 什么是UFS Clock

Host Memory(DDR内存)和UFS Host Controller数据通信是通过AIX总线传输进行的,其中UFS Clock指的是AXI总线上的时钟,目前Soc通常使用的是300MHz的UFS Clock。

 

3.  UFS Clk Gate的支持

目前Qcom 平台和MTK 平台支持UFS Clk Gate功能,Hisilicon970平台不支持Clk Gate。

根据ARM和内核的节能策略思想,是希望越来越多的平台支持Clk Gate功能,这样也可以证明ARM和内核的低功耗特性。

二 . UFS Clk Gate Detail 

1.  UFS CLK Gate Init初始化流程

(1). 设置相关的worker用来关闭UFS CLK和开启UFS CLK的函数。

(2). 设置高精度Timer, 在合适的时机调用ufs clk gate work 和ufs clk ungate work的时机。

gate_work: worker to turn off clocks

ungate_work: worker to turn on clocks that will be used in case of interrupt context

(3). 设置省电模式下延迟时间和性能模式下延迟时间,

(4). 注册CLK Gate 相关sysfs接口

#define UFSHCD_CLK_GATING_DELAY_MS_PWR_SAVE 10 #define UFSHCD_CLK_GATING_DELAY_MS_PERF    50 

2 . UFS CLK Gate Work流程

Gate Work流程:

(1). UFS 命令处理完成时,UFS Device会返回Response UPIU给UFS Host, UFS Host产生一个中断,CPU进入中断处理函数进行处理。

(2). 中断处理函数主要做的事情:会先检查Doorbell是否清零,Response UPIU有没有错误,检查Doorbell已经清零,Reponse UPIU也没有错误,然后释放相关资源,关闭UFS CLK.

(3). 现在的状态是:检查Doorbell已经清零,Reponse UPIU也没有错误,可以调用__ufshcd_release 关闭UFS CLK.

(4). 关闭CLK之前会先检查UFS Host Controllert是否支持CLK Gate,不支持则直接退出,支持的话则继续往下走。

(5). 减少clk gating active request 计数 。 Note: 只有当clk gating active request 计数为0的时候,才可以关闭UFS CLK.

(6). 检查Block CLK Gating Enter的位置: active_reqs/lrb_in_use/outstanding_tasks/active_uic_cmd/uic_async_done

active_reqs: number of requests that are pending and should be waited for completion before gating clocks

lrb_in_use:  lrb in use

outstanding_tasks: Bits representing outstanding task requests

active_uic_cmd: handle of active UIC command

uic_async_done:  uic cmd complete flag

(7). (re)start an hrtimer, 启动hrtimer, 然后间隔clk gating delay_ms之后,调用gating->gate_hrtimer.function = ufshcd_clkgate_hrtimer_handler;

(8). handler主要做的是驱动queue clk_gating.gate_work, 进入ufs clk gate work接口处理。

(9).  将UFS 连接层(Unipro/MPHY)放到Hibernate状态,然后关闭UFS CLK 。 

3.UFS CLK UnGate Work流程

Gate Work流程:

(1). 在需要访问UFS的时候,需要保证UFS Host Driver是Resume的状态,连接层(UniPro/MPHY)是Active的状态,UFS Clock要开启的状态。

(2).ufshcd_hold 做的事情是Enable UFS Clock 和 exit from hibern8 mode and set the link as active。

(3) . 开启CLK之前会先检查UFS Host Controllert是否支持CLK Gate,不支持则直接退出,支持的话则继续往下走。

(4). 增加clk gating active request 计数 。 Note: 只有当clk gating active request 计数为0的时候,才可以关闭UFS CLK.

(5). 检查clk_gating state: CLKS_ON/REQ_CLKS_OFF/CLKS_OFF/REQ_CLKS_ON CLKS_ON: 如果是此状态,会调用UFS clk ungate work REQ_CLKS_OFF: 如果是此状态,会将CLK Gate状态设置为REQ_CLKS_ON, 然后调用UFS clk ungate work CLKS_OFF: 如果是此状态,会尝试取消UFS CLK gate work REQ_CLKS_ON: 如果此状态,满足Link是Hibernate状态和支持Hibern8 during gating时,会调用UFS clk ungate work.

(6). UFS clk ungate work做的事情是先开启开启UFS CLK.,然后将UFS 连接层(Unipro/MPHY) Hibernate状态退出,使得连接层变为Active状态。

三, 参考资料

1. UFS驱动代码

2. UFS协议

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android UFS是指Android系统使用的一种闪存存储技术。在Android启动过程中,UFS扮演着重要的角色。Android启动可以被称为UFS启动,它包括以下几个阶段:开机、RomCode、Pre UEFI、UEFI、Kernel和Android。这些阶段依次进行,最终完成Android系统的启动。 在手机上,常见的文件系统包括F2FS、EXT4、EROFs和APFs。华为手机使用EROFs,苹果手机使用APFs。文件系统的选择对于提升闪存的随机读写能力非常重要。文件系统可以使闪存更高效地存储和管理数据,从而快速准确地找到所需的数据。就像在一个仓库中寻找特定物品一样,文件系统可以帮助我们快速找到我们想要的内容。 关于闪存协议,iPhone一直使用NVMe协议的闪存,而安卓手机从eMMC协议闪存逐渐升级到现在的UFS3.1协议闪存。一些高端安卓手机已经开始使用UFS3.1协议闪存,而一些中低端手机仍然使用UFS2.1、2.2或者甚至eMMC混合使用。这些不同的协议闪存具有不同的性能和速度特点,UFS3.1协议闪存通常具有更高的读写速度和更好的性能表现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [UFS 启动](https://blog.csdn.net/guozhidixian/article/details/120384068)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [iPhone上用的NVMe闪存,与Android旗舰上用的UFS2.1闪存,各自的优劣是什么?](https://blog.csdn.net/cwtxyi/article/details/120592346)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值