# UFS 设备问题

发生 UFS 设备问题时，内核日志会记录 <cite>cmd pending in the device</cite> 或 <cite>no response from device</cite>。如需了解更多信息，请联系 UFS 设备供应商。

示例 1，

> 
> 
> [ 82.928056][01-01 00:02:05] ufshcd-qcom 1d84000.ufshc: ufshcd\_abort: Device abort task at tag 1
> [ 82.928059][01-01 00:02:05] sd 0:0:0:4: [sde] tag#1 CDB: Read(10) 28 00 00 00 44 49 00 00 20 00
> [ 82.936477][01-01 00:02:05] ufshcd-qcom 1d84000.ufshc: UPIU[1] - issue time 50955434 us
> [ 82.936479][01-01 00:02:05] ufshcd-qcom 1d84000.ufshc: UPIU[1] - complete time 0 us
> [ 82.936567][01-01 00:02:05] ufshcd-qcom 1d84000.ufshc: ufshcd\_abort: cmd pending in the device. tag = 1

示例 2，

> 
> 
> [ 1036.008147] [1230\_22:00:49]@0 ufshcd-qcom 1d84000.ufshc: ufshcd\_abort: Device abort task at tag 2
> [ 1036.008510] [1230\_22:00:49]@0 sd 0:0:0:0: tag#2 CDB: opcode=0xfa (vendor) fa 02 01 48 07 79 ae 03 50 00
> [ 1036.120287] [1230\_22:00:50]@1 ufshcd-qcom 1d84000.ufshc: ufshcd\_abort: no response from device. tag = 2, err -110.

## 物理适配器或数据链路错误

在内核日志中，具有非零值的 `pa_err_cnt_total` 和 `dl_err_cnt_total` 表示物理适配器或数据链路 (PA/DL) 错误问题。当 AP 和 UFS 设备之间的信号质量不强时，就会出现此问题，需要对硬件、软件和 UFS 设备供应商等三个组件进行修改才能解决。

要查看 PA/DL 错误计数，请使用 `debugfs` 路径 `/sys/kernel/debug/ufshcd/1d84000.ufs/stats`。

使用以下命令挂载 `debugfs`。此命令可确保调试节点仍然可以访问 `debugfs` 文件系统。

> 
> 
> mount -t debugfs none /sys/kernel/debug
>     Copy to clipboard

例如，

> 
> 
> [31709.438001] ufshcd-qcom 1d84000.ufshc: pa\_err\_cnt\_total=5086, pa\_lane\_0\_err\_cnt=3250, pa\_lane\_1\_err\_cnt=1405, pa\_line\_reset\_err\_cnt=431
> [31709.438008] ufshcd-qcom 1d84000.ufshc: dl\_err\_cnt\_total=4488, dl\_nac\_received\_err\_cnt=289, dl\_tcx\_replay\_timer\_expired\_err\_cnt=258
> [31709.438015] ufshcd-qcom 1d84000.ufshc: dl\_afcx\_request\_timer\_expired\_err\_cnt=0, dl\_fcx\_protection\_timer\_expired\_err\_cnt=0, dl\_crc\_err\_cnt=18

### 活动状态下的 UFS 设备功耗问题

> 
> 
> 按照以下步骤调试 UFS 设备在活动状态下功耗较高的问题。
> 
> 
> 1. 检查问题发生的频率。使用以下 SSH 命令检查当前时钟频率。
> 
> 
> 
> > 
> > 
> > > 
> > > 
> > > cat /sys/devices/platform/soc@0/1d84000.ufs/devfreq/1d84000.ufs/cur_freq
> > >         Copy to clipboard
> > 
> > 
> > 
> > Note
> > 
> > 
> > 如果频率为最大值，跳至步骤 3。
> 2. 检查是否已启用任何与 UFS 设备相关的功能（例如 WriteBooster）。
> 3. 检查时钟缩放是否被禁用。
> 
> 
> 
> > 
> > 
> > cat /sys/devices/platform/soc@0/1d84000.ufs/clkscale_enable
> >         Copy to clipboard
> 4. 监控 UFS 设备时钟频率和 UFS 设备电源轨。
> 
> 
>     该问题可能是由于初始设置或意外的 `devfreq` 事件所致。

### 休眠状态下功耗问题

> 
> 
> 在 Sleep 状态下，如果 UFS 设备功耗较高，按照以下步骤调试与 UFS 设备 suspend 相关的问题。
> 
> 1. 使用 sysfs 节点 `link_state`、`curr_freq` 和 `runtime_status` 检查电源管理状态，并检查 PM 级别（`PM_LVL` 3 的功耗高于 5）。
> 2. 使用 sysfs 节点 `dev_pm` 检查 UFS 设备状态，以判断 UFS 设备是否处于 Sleep 模式。
> 3. 检查 HPB 和 write booster 功能是否已启用，因为它们会导致高功耗。
> 4. 从硬件端检查 UFS 设备 VCC/VCCQ/VCCQ2 时序是否出现任何问题。

### 未处理的 UFS 设备 SMMU 问题

系统内存管理单元 (SMMU) 是一种内存管理单元 (MMU)，它将具有直接内存访问功能（DMA 功能）的 I/O 总线连接到物理内存。

每个设备都分配有一个唯一的 stream ID (SID)。UFS 设备控制器 SID 值为 0x80。

对于 UFS 设备 SMMU 导致的未处理的 SMMU 故障，请禁用 UFS 设备 SMMU。

arm-smmu 15000000.apps-smmu: Unhandled arm-smmu context fault from 1d84000.ufshc!
    Copy to clipboard

要禁用 UFS 设备 SMMU，请修改 `<workspace_root_path>/sources/kernel/kernel_platform/kernel/arch/arm64/boot/dts/qcom/sc7280.dtsi` 文件中的 `ufshc_mem` 节点。

-   qcom,iommu-dma = "fastmap";
    +   qcom,iommu-dma = "bypass";
    Copy to clipboard

Last Published: Jul 23, 2025

[Previous Topic
调试常见的存储驱动程序问题](https://docs.qualcomm.com/bundle/publicresource/80-70020-6SC/topics/debug.md) [Next Topic
使用 sysfs 或 debugfs 节点进行调试](https://docs.qualcomm.com/bundle/publicresource/80-70020-6SC/topics/ufs-sysfs-debugfs.md)