summaryrefslogtreecommitdiffstats
path: root/drivers/ufs/core/ufshcd.c
diff options
context:
space:
mode:
authorAndrew Halaney <ahalaney@redhat.com>2024-03-29 15:46:53 -0500
committerMartin K. Petersen <martin.petersen@oracle.com>2024-04-05 21:06:29 -0400
commit356a8ce7cd5037fa0863c2ac83a35c8ebf6e0e02 (patch)
treec404d0b6faf39fdec3105735e4df3c9e1e1ad1f8 /drivers/ufs/core/ufshcd.c
parentd3fb9a24a6023c744d498f5b4d575517726a42b4 (diff)
downloadlinux-stable-356a8ce7cd5037fa0863c2ac83a35c8ebf6e0e02.tar.gz
linux-stable-356a8ce7cd5037fa0863c2ac83a35c8ebf6e0e02.tar.bz2
linux-stable-356a8ce7cd5037fa0863c2ac83a35c8ebf6e0e02.zip
scsi: ufs: core: Remove unnecessary wmb() prior to writing run/stop regs
Currently a wmb() is used to ensure that writes to the UTP_TASK_REQ_LIST_BASE* regs are completed prior to following writes to the run/stop registers. wmb() ensures that the write completes, but completion doesn't mean that it isn't stored in a buffer somewhere. The recommendation for ensuring the bits have taken effect on the device is to perform a read back to force it to make it all the way to the device. This is documented in device-io.rst and a talk by Will Deacon on this can be seen over here: https://youtu.be/i6DayghhA8Q?si=MiyxB5cKJXSaoc01&t=1678 But, none of that is necessary here. All of the writel()/readl()'s here are to the same endpoint, so they will be ordered. There's no subsequent delay() etc that requires it to have taken effect already, so no readback is necessary here. For that reason just drop the wmb() altogether. Fixes: 897efe628d7e ("scsi: ufs: add missing memory barriers") Signed-off-by: Andrew Halaney <ahalaney@redhat.com> Link: https://lore.kernel.org/r/20240329-ufs-reset-ensure-effect-before-delay-v5-11-181252004586@redhat.com Reviewed-by: Bart Van Assche <bvanassche@acm.org> Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/ufs/core/ufshcd.c')
-rw-r--r--drivers/ufs/core/ufshcd.c6
1 files changed, 0 insertions, 6 deletions
diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index a2f2941450fd..cf6a24e550f0 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -4770,12 +4770,6 @@ int ufshcd_make_hba_operational(struct ufs_hba *hba)
REG_UTP_TASK_REQ_LIST_BASE_H);
/*
- * Make sure base address and interrupt setup are updated before
- * enabling the run/stop registers below.
- */
- wmb();
-
- /*
* UCRDY, UTMRLDY and UTRLRDY bits must be 1
*/
reg = ufshcd_readl(hba, REG_CONTROLLER_STATUS);