IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> HPB Not Work On Android System -> 正文阅读

[移动开发]HPB Not Work On Android System

目录

一. HPB 简介

二 .HPB Not Work On Android System?


一. HPB简介

HPB 全称为Host Performance Booster, 是将UFS Device端的L2P表缓存到Host Memory,提升Random Read性能。

HPB版本主要有HPB1.0, HPB1.5, HPB2.0

HPB Host Driver现在市场上是由两个版本,一个是三星版本的HPB Driver, 适用的产品有Samsung, Micron, 一个是海力士版本的HPB Driver,适用的产品有SKhynix, 一般UFS Device厂商都会有自己配套调试的驱动,可以针对自己的产品做一些优化,以便达到最好的性能和最稳定的表现。

HPB Host Platform主要是Qcom, MTK, Unisoc

HPB Host PlatformAndroid System Solution Vendor
Qcom? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Oppo,Vivo.Xiaomi,Honor,Huawei,Samsung,etc
MTKOppo,Vivo,Xiaomi,Honor.Huawei,Transsion,etc
UnisocHuawei,Samsung,Transsion,etc

HPB Feature这项技术前面也经常被手机厂商拿出来在发布会展示,UFS3.1+HPB,也是一大卖点,确实提升了用户体验,用户平时使用手机Random Read的场景蛮多的,比如打开APP, 打开小文件,打开图片,使用短视频等,有了HPB技术的加持,用户整体使用会感觉流畅一些。

二 .HPB Not Work On Android System?

1. 手机厂商拿到一款HPB Host Driver和一款UFS Device,需要做HPB Bringup, 让UFS Devices的HPB Function能在系统上正常工作起来,但是HPB Bringup完之后,我们遇到了系统上HPB不正常工作,我们应该怎么分析呢??

分析思路:

当HPB 在安卓系统上不能工作的时候,我们分析此类问题有两个思路,一种是从HPB Host Driver(这里以三星HPB Driver + HPB Device Control Mode为例)去分析问题,一种是从HPB Ufs Devices侧去分析问题

(1)HPB Host Driver侧分析是否正常:

a. HPB初始化流程是否成功?初始化开始的标志?初始化结束的标志?

HPB初始化初始化是否成功:这个可以检查下对应的HPB 相关日志以及HPB Sysfs目录是否存在

初始化开始的标志: 检查ufshpb_init初始化的时间点,检查HPB_INIT_START日志是否打印

初始化结束的标志:设置ufshpb state为HPB_PRESENT

b. HPB配置是否成功?

配置HPB lu_enable

配置HPB lu_max_active_hpb_rgns?

配置HPB lu_hpb_pinned_rgn_startidx

配置HPB lu_num_hpb_pinned_rgns

配置HPB Enable Flag(HPB Version >= 0x0200需要配置)

c. HPB初始化完成是否有做HPB Reset?

HPB Reset可以重置HPB相关信息,比如HPB推荐信息,HPB相关配置(HPB Version >= 0x0200需要配置)
如果在系统启动的时候Ufs Devices端HPB初始化有异常,我们就可以在HPB Host端初始化完成后做
一个HPB Reset的动作,重新建立Ufs HPB Host和Ufs HPB Devices端的HPB联系

? d. HPB Host Driver处理推荐是否正常??

HPB Host Driver只有在初始化完成的时候,才会去处理Device推荐上来的HPB Region。
这里就有一个问题,如果在?HPB Host Driver只有在初始化完成之前就收到了Device
推荐上来的HPB Region, 这个时候HPB Host Driver不会去处理推荐,
也不会去发read buffer读取L2P表到UFS Host Memory,此时UFS Device推荐了
HPB Region给UFS Host Driver,但是HPB Host没有处理,Ufs Devices会怎么
处理就需要看UFS Device侧代码怎么设计了。
#if defined(CONFIG_UFSFEATURE)
			if (scsi_status == SAM_STAT_GOOD)
				ufsf_hpb_noti_rb(&hba->ufsf, lrbp);
#endif

#if defined(CONFIG_UFSHPB)
inline void ufsf_hpb_noti_rb(struct ufsf_feature *ufsf, struct ufshcd_lrb *lrbp)
{
	if (ufshpb_get_state(ufsf) == HPB_PRESENT)
		ufshpb_rsp_upiu(ufsf, lrbp);
}

#else
inline void ufsf_hpb_noti_rb(struct ufsf_feature *ufsf,
			     struct ufshcd_lrb *lrbp) {}
#endif

/* routine : isr (ufs) */
void ufshpb_rsp_upiu(struct ufsf_feature *ufsf, struct ufshcd_lrb *lrbp)
{
	struct ufshpb_lu *hpb;
	struct ufshpb_rsp_field *rsp_field;
	int data_seg_len, ret;

	data_seg_len = be32_to_cpu(lrbp->ucd_rsp_ptr->header.dword_2)
		& MASK_RSP_UPIU_DATA_SEG_LEN;

	if (!data_seg_len) {
		bool do_task_work = false;

		if (!ufsf_is_valid_lun(lrbp->lun))
			return;

		hpb = ufsf->hpb_lup[lrbp->lun];
		ret = ufshpb_lu_get(hpb);
		if (unlikely(ret))
			return;

		do_task_work = !ufshpb_is_empty_rsp_lists(hpb);
		if (do_task_work)
			schedule_work(&hpb->task_work);

		goto put_hpb;
	}

	rsp_field = ufshpb_get_hpb_rsp(lrbp);

	if (ufshpb_may_field_valid(lrbp, rsp_field)) {
		WARN_ON(rsp_field->additional_len != DEV_ADDITIONAL_LEN);
		return;
	}

	hpb = ufsf->hpb_lup[lrbp->lun];
	ret = ufshpb_lu_get(hpb);
	if (unlikely(ret)) {
		ERR_MSG("ufshpb_lu_get failed. (%d)", ret);
		return;
	}

	if (hpb->force_map_req_disable)
		goto put_hpb;

	HPB_DEBUG(hpb, "**** HPB Noti %u LUN %u Seg-Len %u, #ACT %u, #INACT %u",
		  rsp_field->hpb_type, lrbp->lun,
		  be32_to_cpu(lrbp->ucd_rsp_ptr->header.dword_2) &
		  MASK_RSP_UPIU_DATA_SEG_LEN, rsp_field->active_rgn_cnt,
		  rsp_field->inactive_rgn_cnt);
	atomic64_inc(&hpb->rb_noti_cnt);

	switch (rsp_field->hpb_type) {
	case HPB_RSP_REQ_REGION_UPDATE:
		WARN_ON(data_seg_len != DEV_DATA_SEG_LEN);
		ufshpb_rsp_req_region_update(hpb, rsp_field);
		goto put_hpb;
	default:
		HPB_DEBUG(hpb, "hpb_type is not available : %d",
			  rsp_field->hpb_type);
		goto put_hpb;
	}

put_hpb:
	ufshpb_lu_put(hpb);
}

(2)HPB Devices侧分析是否正常:

? a. 分析HPB Ufs Device侧初始化是否正常?

抓取相关日志分析
分析代码流程

? ?b. 分析UFS Device侧 HPB 配置是否成功?

配置HPB lu_enable

配置HPB lu_max_active_hpb_rgns?

配置HPB lu_hpb_pinned_rgn_startidx

配置HPB lu_num_hpb_pinned_rgns

配置HPB Enable Flag(HPB Version >= 0x0200需要配置)

? c . 分析UFS Device侧HPB推荐是否正常??

1. 查看Ufs Devices推荐流程,没有正常推荐,需要Ufs Device继续分析原因
2,查看Ufs Devices推荐流程,有正常推荐,需要UFS Host侧协助分析为什么没有正常处
理Ufs Device侧的HPB Region推荐

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 13:11:02  更:2022-01-16 13:12:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:30:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码