UFS stack shows very low performance of FUA comparing to write and cache_flush. Let's add a quirk to adjust it. E.g., average latency according to the chunk size of write Write(us/KB) 4 64 256 1024 2048 FUA 873.792 754.604 995.624 1011.67 1067.99 CACHE_FLUSH 824.703 712.98 800.307 1019.5 1037.37 Signed-off-by: Jaegeuk Kim <jaegeuk@xxxxxxxxxx> --- drivers/scsi/ufs/ufshcd.c | 3 +++ drivers/scsi/ufs/ufshcd.h | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 3f9caafa91bf..811f3467879c 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -5035,6 +5035,9 @@ static int ufshcd_slave_configure(struct scsi_device *sdev) */ sdev->silence_suspend = 1; + if (hba->quirks & UFSHCD_QUIRK_BROKEN_FUA) + sdev->broken_fua = 1; + ufshcd_crypto_register(hba, q); return 0; diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index 94f545be183a..6c480c6741d6 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -602,6 +602,11 @@ enum ufshcd_quirks { * support physical host configuration. */ UFSHCD_QUIRK_SKIP_PH_CONFIGURATION = 1 << 16, + + /* + * This quirk disables FUA support. + */ + UFSHCD_QUIRK_BROKEN_FUA = 1 << 17, }; enum ufshcd_caps { -- 2.36.1.255.ge46751e96f-goog