Commit 3fb20fcd authored by Bart Van Assche's avatar Bart Van Assche Committed by Martin K. Petersen

scsi: ufs: Remove locking from around single register writes

Single register writes are atomic and hence do not need to be surrounded by
locking. Additionally, MMIO writes are typically posted asynchronously.
Hence, there is no guarantee that these have finished by the time the
spin_unlock*() call has finished. See also the nonposted-mmio property of
the Open Firmware tree. See also pci_iomap().

Link: https://lore.kernel.org/r/20220419225811.4127248-21-bvanassche@acm.orgTested-by: default avatarBean Huo <beanhuo@micron.com>
Reviewed-by: default avatarAvri Altman <avri.altman@wdc.com>
Reviewed-by: default avatarBean Huo <beanhuo@micron.com>
Signed-off-by: default avatarBart Van Assche <bvanassche@acm.org>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 21c2e341
...@@ -171,7 +171,6 @@ static int ufs_mtk_hce_enable_notify(struct ufs_hba *hba, ...@@ -171,7 +171,6 @@ static int ufs_mtk_hce_enable_notify(struct ufs_hba *hba,
enum ufs_notify_change_status status) enum ufs_notify_change_status status)
{ {
struct ufs_mtk_host *host = ufshcd_get_variant(hba); struct ufs_mtk_host *host = ufshcd_get_variant(hba);
unsigned long flags;
if (status == PRE_CHANGE) { if (status == PRE_CHANGE) {
if (host->unipro_lpm) { if (host->unipro_lpm) {
...@@ -185,12 +184,8 @@ static int ufs_mtk_hce_enable_notify(struct ufs_hba *hba, ...@@ -185,12 +184,8 @@ static int ufs_mtk_hce_enable_notify(struct ufs_hba *hba,
ufs_mtk_crypto_enable(hba); ufs_mtk_crypto_enable(hba);
if (host->caps & UFS_MTK_CAP_DISABLE_AH8) { if (host->caps & UFS_MTK_CAP_DISABLE_AH8) {
spin_lock_irqsave(hba->host->host_lock, flags);
ufshcd_writel(hba, 0, ufshcd_writel(hba, 0,
REG_AUTO_HIBERNATE_IDLE_TIMER); REG_AUTO_HIBERNATE_IDLE_TIMER);
spin_unlock_irqrestore(hba->host->host_lock,
flags);
hba->capabilities &= ~MASK_AUTO_HIBERN8_SUPPORT; hba->capabilities &= ~MASK_AUTO_HIBERN8_SUPPORT;
hba->ahit = 0; hba->ahit = 0;
} }
...@@ -994,13 +989,10 @@ static void ufs_mtk_vreg_set_lpm(struct ufs_hba *hba, bool lpm) ...@@ -994,13 +989,10 @@ static void ufs_mtk_vreg_set_lpm(struct ufs_hba *hba, bool lpm)
static void ufs_mtk_auto_hibern8_disable(struct ufs_hba *hba) static void ufs_mtk_auto_hibern8_disable(struct ufs_hba *hba)
{ {
unsigned long flags;
int ret; int ret;
/* disable auto-hibern8 */ /* disable auto-hibern8 */
spin_lock_irqsave(hba->host->host_lock, flags);
ufshcd_writel(hba, 0, REG_AUTO_HIBERNATE_IDLE_TIMER); ufshcd_writel(hba, 0, REG_AUTO_HIBERNATE_IDLE_TIMER);
spin_unlock_irqrestore(hba->host->host_lock, flags);
/* wait host return to idle state when auto-hibern8 off */ /* wait host return to idle state when auto-hibern8 off */
ufs_mtk_wait_idle_state(hba, 5); ufs_mtk_wait_idle_state(hba, 5);
......
...@@ -4207,14 +4207,10 @@ EXPORT_SYMBOL_GPL(ufshcd_auto_hibern8_update); ...@@ -4207,14 +4207,10 @@ EXPORT_SYMBOL_GPL(ufshcd_auto_hibern8_update);
void ufshcd_auto_hibern8_enable(struct ufs_hba *hba) void ufshcd_auto_hibern8_enable(struct ufs_hba *hba)
{ {
unsigned long flags;
if (!ufshcd_is_auto_hibern8_supported(hba)) if (!ufshcd_is_auto_hibern8_supported(hba))
return; return;
spin_lock_irqsave(hba->host->host_lock, flags);
ufshcd_writel(hba, hba->ahit, REG_AUTO_HIBERNATE_IDLE_TIMER); ufshcd_writel(hba, hba->ahit, REG_AUTO_HIBERNATE_IDLE_TIMER);
spin_unlock_irqrestore(hba->host->host_lock, flags);
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment