
On 02/10/2019 05:17 PM, Andre Przywara wrote:
The normal MMIO accessor macros (readX/writeX) guarantee a strong ordering, even with normal memory accesses: https://lwn.net/Articles/698014/ For some MMIO operations (framebuffers being a prominent example) this is not needed, and the rather costly barrier inserted on weakly ordered systems like ARM costs some performance. To mitigate this issue, Linux introduced readX_relaxed and writeX_relaxed primitives, which only guarantee ordering between each other, so are typically faster due to the missing barrier.
We probably do not care so much about performance in U-Boot, but want to have those primitives for two other reasons:
- Being able to use the _relaxed macros simplifies porting drivers from Linux.
- The missing barrier typically allows to generate smaller code, which can relieve some chronically tight SPL builds.
Add those macros definitions by using the __raw versions of the accessors, which matches an earlier (and less complicated) version of the Linux implementation.
Signed-off-by: Andre Przywara andre.przywara@arm.com Reviewed-by: Philipp Tomsich philipp.tomsich@theobroma-systems.com [On my experimental RK3399 after modifying a few drivers:] Tested-by: Philipp Tomsich philipp.tomsich@theobroma-systems.com
Reviewed-by: Alexander Graf agraf@suse.de
Alex