ufshci: Support ACPISupports UFS host controller attachment via ACPI. Tested on theSamsung Galaxy Book 4 Edge using Qualcomm Snapdragon X Elite.Additionally, a quirk related to power mode change
ufshci: Support ACPISupports UFS host controller attachment via ACPI. Tested on theSamsung Galaxy Book 4 Edge using Qualcomm Snapdragon X Elite.Additionally, a quirk related to power mode change has been added.For reference, it doesn't reach maximum speed yet. I plan to improveit later.Sponsored by: Samsung ElectronicsReviewed by: imp (mentor)Differential Revision: https://reviews.freebsd.org/D55986
show more ...
ufshci: Introduce the ufshci(4) driverThis commit adds a storage driver that supports the Universal FlashStorage Host Controller Interface (UFSHCI) on FreeBSD.Universal Flash Storage (UFS) is a
ufshci: Introduce the ufshci(4) driverThis commit adds a storage driver that supports the Universal FlashStorage Host Controller Interface (UFSHCI) on FreeBSD.Universal Flash Storage (UFS) is a flash-based mobile storage devicethat replaces eMMC, aiming for high performance with low power. The UFSHost Controller Interface (UFSHCI) is the host side controller andconnects UFS device to a system bus, such as PCIe.The code targets the latest standards:- UFS 4.1: https://www.jedec.org/standards-documents/docs/jesd220g- UFSHCI 4.1: https://www.jedec.org/standards-documents/docs/jesd223fThe ufshci(4) driver implements controller/device initialization,interrupt, single-doorbell(SDB) queue based IO requests. Support formulti-queue (MCQ) IO requests is planned for a later commit.Implemented features:- PCIe bus support- legacy(INTx) Interrupt Handling- UIC command support- UTP Transfer Request (UTR) support- UTP Task Management Request (UTMR) support- single doorbell queue (SDB) with multiple queue depth- SCSI command set support- sysctlWork in progress:- multi-Circular Queue (per-CPU IO queues)- MSI-X interrupt Support- write booster- write Protect- Host Performance Booster (HPB)- interrupt aggregation- ARM based system bus support- ufs-utils portTests were performed on QEMU and an Intel-based laptop.Since QEMU has an emulated UFS device, I tested on QEMU.How to test on QEMU:1. Run QEMU $ qemu-system-x86_64 ... -device ufs -drive file=blk1g.bin,format=raw,if=none,id=luimg -device ufs-lu,drive=luimg,lun=02. Loading/unloading the ufshci module on QEMU $ kldload /usr/obj/usr/src/amd64.amd64/sys/modules/ufshci/ufshci.ko $ kldunload ufshciTesting on real hardware:- Samsung Galaxy Book S (Intel Lakefield) with UFS 3.0- Lenovo duet 3 11ian8 (Intel N100) with UFS 2.1Sponsored by: Samsung ElectronicsReviewed by: impDifferential Revision: https://reviews.freebsd.org/D50370