Adrian, On 16/10/19 5:46 PM, Faiz Abbas wrote: > 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. > Do you agree? Thanks, Faiz