2024-01-22 18:11:05

by Andrew Halaney

[permalink] [raw]
Subject: [PATCH RFC v4 06/11] scsi: ufs: cdns-pltfrm: Perform read back after writing HCLKDIV

Currently, HCLKDIV is written to and then completed with an mb().



mb() ensure that the write completes, but completion doesn't mean that

it isn't stored in a buffer somewhere. The recommendation for

ensuring this bit has 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



Let's do that to ensure the bit hits the device. Because the mb()'s

purpose wasn't to add extra ordering (on top of the ordering guaranteed

by writel()/readl()), it can safely be removed.



Fixes: d90996dae8e4 ("scsi: ufs: Add UFS platform driver for Cadence UFS")

Reviewed-by: Manivannan Sadhasivam <[email protected]>

Signed-off-by: Andrew Halaney <[email protected]>

---

drivers/ufs/host/cdns-pltfrm.c | 2 +-

1 file changed, 1 insertion(+), 1 deletion(-)



diff --git a/drivers/ufs/host/cdns-pltfrm.c b/drivers/ufs/host/cdns-pltfrm.c

index bb30267da471..66811d8d1929 100644

--- a/drivers/ufs/host/cdns-pltfrm.c

+++ b/drivers/ufs/host/cdns-pltfrm.c

@@ -136,7 +136,7 @@ static int cdns_ufs_set_hclkdiv(struct ufs_hba *hba)

* Make sure the register was updated,

* UniPro layer will not work with an incorrect value.

*/

- mb();

+ ufshcd_readl(hba, CDNS_UFS_REG_HCLKDIV);



return 0;

}



--

2.43.0