Adrian, On 15/10/19 7:15 PM, Adrian Hunter wrote: > On 15/10/19 10:55 AM, Faiz Abbas wrote: >> Hi, >> >> On 15/10/19 12:08 AM, Faiz Abbas wrote: >>> Add a write memory barrier to make sure that descriptors are actually >>> written to memory before ringing the doorbell. >>> >>> Signed-off-by: Faiz Abbas <faiz_abbas@xxxxxx> >>> --- >>> >>> This patch fixes a very infrequent ADMA error (1 out of 100 times) that >>> I have been seeing after enabling command queuing for J721e. >>> Also looking at memory-barriers.txt and this commit[1], >>> it looks like we should be doing this before any descriptor write >>> followed by a doorbell ring operation. It'll be nice if someone with more >>> expertise in memory barriers can comment. >>> >>> [1] ad1a1b9cd67a ("scsi: ufs: commit descriptors before setting the >>> doorbell") >> >> So I see that cqhci_readl/writel() use readl/writel_relaxed() which >> seems to be causing this issue. Should I just fix this by converting >> those to readl/writel with memory barriers instead? > > Perhaps we could do both changes i.e. add wmb() and convert to non-relaxed > readl/writel > readl is implemented as readl_relaxed(); __rmb(); and writel is implemented as wmb(); writel_relaxed(); I think another wmb() before writel will be redundant. Maybe this patch is good enough in itself. Thanks, Faiz