[ALPS05208480] scsi: ufs: block request before shutdown

quiesce device when ufs shutdwon to prevent reqesut come in
shutdown flow.

MTK-Commit-Id: 2ef692ab7b7afb0e8761c9cf2531c99af4db1d33

Change-Id: I2b564f310826269a0ff6183d418c2906632e4265
Signed-off-by: Peter Wang <peter.wang@mediatek.com>
CR-Id: ALPS05208480
Feature: UFS Booting
This commit is contained in:
Peter Wang
2021-01-29 02:08:45 +08:00
parent e999ff0a3a
commit c95cc7bca2

View File

@@ -8673,6 +8673,32 @@ int ufshcd_runtime_idle(struct ufs_hba *hba)
}
EXPORT_SYMBOL(ufshcd_runtime_idle);
static void ufshcd_device_quiesce(struct ufs_hba *hba)
{
struct scsi_device *scsi_d;
int i;
/*
* Wait all cmds done & block user issue cmds to
* general LUs, wlun device, and wlun boot.
* To avoid new cmds coming after device has been
* stopped by SSU cmd in ufshcd_suspend().
*/
for (i = 0; i < hba->dev_info.max_lu_supported; i++) {
scsi_d = scsi_device_lookup(hba->host, 0, 0, i);
if (scsi_d)
scsi_device_quiesce(scsi_d);
}
scsi_d = scsi_device_lookup(hba->host, 0, 0,
ufshcd_upiu_wlun_to_scsi_wlun(UFS_UPIU_BOOT_WLUN));
if (scsi_d)
scsi_device_quiesce(scsi_d);
if (hba->sdev_ufs_device)
scsi_device_quiesce(hba->sdev_ufs_device);
}
/**
* ufshcd_shutdown - shutdown routine
* @hba: per adapter instance
@@ -8693,6 +8719,8 @@ int ufshcd_shutdown(struct ufs_hba *hba)
pm_runtime_get_sync(hba->dev);
ufshcd_device_quiesce(hba);
ret = ufshcd_suspend(hba, UFS_SHUTDOWN_PM);
out:
if (ret)