mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 18:41:58 +09:00
UPSTREAM: 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.org
Tested-by: Bean Huo <beanhuo@micron.com>
Reviewed-by: Avri Altman <avri.altman@wdc.com>
Reviewed-by: Bean Huo <beanhuo@micron.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Bug: 234653003
(cherry picked from commit 3fb20fcd93)
Change-Id: I50811ddab2c745ac1fe898e83bf7a0cd4e4ce7e4
Signed-off-by: Bart Van Assche <bvanassche@google.com>
This commit is contained in:
committed by
Bart Van Assche
parent
97ce892ac4
commit
2d122e3802
@@ -171,7 +171,6 @@ static int ufs_mtk_hce_enable_notify(struct ufs_hba *hba,
|
||||
enum ufs_notify_change_status status)
|
||||
{
|
||||
struct ufs_mtk_host *host = ufshcd_get_variant(hba);
|
||||
unsigned long flags;
|
||||
|
||||
if (status == PRE_CHANGE) {
|
||||
if (host->unipro_lpm) {
|
||||
@@ -185,12 +184,8 @@ static int ufs_mtk_hce_enable_notify(struct ufs_hba *hba,
|
||||
ufs_mtk_crypto_enable(hba);
|
||||
|
||||
if (host->caps & UFS_MTK_CAP_DISABLE_AH8) {
|
||||
spin_lock_irqsave(hba->host->host_lock, flags);
|
||||
ufshcd_writel(hba, 0,
|
||||
REG_AUTO_HIBERNATE_IDLE_TIMER);
|
||||
spin_unlock_irqrestore(hba->host->host_lock,
|
||||
flags);
|
||||
|
||||
hba->capabilities &= ~MASK_AUTO_HIBERN8_SUPPORT;
|
||||
hba->ahit = 0;
|
||||
}
|
||||
@@ -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)
|
||||
{
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
|
||||
/* disable auto-hibern8 */
|
||||
spin_lock_irqsave(hba->host->host_lock, flags);
|
||||
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 */
|
||||
ufs_mtk_wait_idle_state(hba, 5);
|
||||
|
||||
@@ -4276,14 +4276,10 @@ EXPORT_SYMBOL_GPL(ufshcd_auto_hibern8_update);
|
||||
|
||||
void ufshcd_auto_hibern8_enable(struct ufs_hba *hba)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
if (!ufshcd_is_auto_hibern8_supported(hba))
|
||||
return;
|
||||
|
||||
spin_lock_irqsave(hba->host->host_lock, flags);
|
||||
ufshcd_writel(hba, hba->ahit, REG_AUTO_HIBERNATE_IDLE_TIMER);
|
||||
spin_unlock_irqrestore(hba->host->host_lock, flags);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user