On 18/10/19 10:22 AM, Faiz Abbas wrote: > 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? Sure. Acked-by: Adrian Hunter <adrian.hunter@xxxxxxxxx>