RE: [EXT] Re: The problem about arm64: io: Relax implicit barriers in default I/O accessors
From: Frank Li <frank.li@nxp.com>
Date: 2021-08-09 14:48:47
-----Original Message----- From: Will Deacon <will@kernel.org> Sent: Monday, August 9, 2021 8:51 AM To: Frank Li <frank.li@nxp.com> Cc: Catalin Marinas <catalin.marinas@arm.com>; Zhi Li <redacted>; Shenwei Wang [off-list ref]; Han Xu [off-list ref]; Nitin Garg [off-list ref]; Jason Liu [off-list ref]; linux-arm- kernel@lists.infradead.org Subject: Re: [EXT] Re: The problem about arm64: io: Relax implicit barriers in default I/O accessors Caution: EXT Email On Thu, Jul 22, 2021 at 07:14:19PM +0000, Frank Li wrote:quoted
quoted
quoted
On Wed, Jun 23, 2021 at 03:48:10PM +0000, Frank Li wrote:quoted
quoted
I think you had a support case open with Arm [1] which I'm notablequoted
quoted
toquoted
quoted
quoted
access -- please can you ask them about the two examples above?Still not get feedback from ARM.Just wondering if you were able to solve this without the need tochangequoted
quoted
quoted
Linux?Sorry for late reply For CCI-500 and 550, ARM removed support for barrier transactions butCCI-quoted
quoted
400 supports barrier transactions. With CCI-400 it is a validconfigurationquoted
quoted
to have SYSBARDISABLE LOW in Cortex-A processors. This change in Linux kernel is assuming that the SYSBARDISABLE is set to HIGH hence its not correct change for all products having various versions of ARM CCI IP. Frank LiDeacon: Did you plan fix this problem by changing dma_wmb()?No. As far as I understand this problem, you're driving SYSBARDISABLE 'low' yet you have your own bus fabric downstream of the CCI which doesn't respect barrier transactions. Even if we bodge dma_wmb(), store-release to non-cacheable memory cannot be made to work on your system as you're effectively putting some of your non-coherent DMA devices into a separate outer-shareable domain from the CPUs.
Does it means the Linux expect all DMA devices in outer-shareable domain instead of system shared domain? Frank
So you have two options:
1. Drive SYSBARDISABLE 'high' so that the CPU handles ordering for you
- or -
2. Quirk Linux so that we patch dma_wmb() when we detect your system at
runtime (so we can extend this in future if we need to emit a
different
sequence for store release)
(1) is definitely the easiest option if it's possible.
Will_______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel