scsi: ufs: docs: Describe how to test with QEMU

QEMU emulates a UFS host controller and logical units, but the kernel
tree does not mention it, so developers without UFS hardware have no
documented way to exercise the UFS core.

Add a short section with the required kernel options, an example QEMU
command line, and what the emulation does not cover.

Signed-off-by: Stanley Jhu <stanleyjhu@google.com>
Reviewed-by: Bean Huo <beanhuo@micron.com>
Link: https://patch.msgid.link/20261012120059.1371653-1-stanleyjhu@google.com
Signed-off-by: Martin K. Petersen (Oracle) <mkp@kernel.org>
This commit is contained in:
Stanley Jhu 2026-10-12 20:00:59 +08:00 committed by Martin K. Petersen (Oracle)
parent fb20fe062b
commit beba4caa45

View File

@ -19,6 +19,7 @@ Universal Flash Storage
3.4 SCSI Error handling
4. BSG Support
5. UFS Reference Clock Frequency configuration
6. Testing with QEMU
1. Overview
@ -208,3 +209,40 @@ the UFS specification. UFS subsystem will attempt to read the value when
executing common controller initialization. If the value is available, UFS
subsystem will ensure the bRefClkFreq attribute of the UFS storage device is
set accordingly and will modify it if there is a mismatch.
6. Testing with QEMU
====================
QEMU emulates a UFS host controller as a PCI device named "ufs" and
logical units named "ufs-lu". This can be used to test changes to the
UFS core and to ufshcd-pci without UFS hardware.
The "ufs" and "ufs-lu" devices are available since QEMU 8.2, and the
"mcq" property since QEMU 9.1.
Enable the following kernel options on top of the architecture
defconfig::
CONFIG_SCSI_UFSHCD=y
CONFIG_SCSI_UFSHCD_PCI=y
CONFIG_BLK_DEV_SD=y
Example for an arm64 guest with one 1 GiB logical unit::
qemu-img create -f raw ufs.img 1G
qemu-system-aarch64 -M virt -cpu max -smp 4 -m 2G -nographic \
-kernel arch/arm64/boot/Image -initrd rootfs.cpio.gz \
-append "console=ttyAMA0" \
-drive file=ufs.img,if=none,id=lu0,format=raw \
-device ufs,id=ufs0,serial=0001,mcq=on \
-device ufs-lu,drive=lu0,bus=ufs0,lun=0
The logical unit appears as a SCSI disk (for example /dev/sda). Drop
"mcq=on" to test the single doorbell mode instead of MCQ. The same
-device options work with qemu-system-x86_64.
The emulation accepts the link startup and hibernate enter/exit UIC
commands and, since QEMU 11.1, DME get/set and the power mode change
sequence, but it does not model UniPro, M-PHY or the resulting link
state. Clock gating hardware and vendor host drivers are not exercised
either. Changes in those areas still need testing on real hardware.