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.przyw...@arm.com>
Reviewed-by: Philipp Tomsich <philipp.toms...@theobroma-systems.com>
[On my experimental RK3399 after modifying a few drivers:]
Tested-by: Philipp Tomsich <philipp.toms...@theobroma-systems.com>

Reviewed-by: Alexander Graf <ag...@suse.de>


Alex

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to