Re: RPi4 can't deal with 64 bit PCI accesses
From: Christoph Hellwig <hch@infradead.org>
Date: 2021-02-24 20:27:14
Also in:
linux-devicetree, linux-pci
On Wed, Feb 24, 2021 at 08:55:10AM -0800, Florian Fainelli wrote:
quoted
Working around kernel I/O accessors is all very well, but another concern for PCI in particular is when things like framebuffer memory can get mmap'ed into userspace (or even memremap'ed within the kernel). Even in AArch32, compiled code may result in 64-bit accesses being generated depending on how the CPU and interconnect handle LDRD/STRD/LDM/STM/etc., so it's basically not safe to ever let that happen at all.Agreed, this makes finding a generic solution a tiny bit harder. Do you have something in mind Nicolas?
The only workable solution is a new bool 64bit_mmio_supported(void) check that is used like: if (64bit_mmio_supported()) readq(foodev->regs, REG_OFFSET); else lo_hi_readq(foodev->regs, REG_OFFSET); where 64bit_mmio_supported() return false for all 32-bit kernels, true for all non-broken 64-bit kernels and is an actual function for arm64 multiplatforms builds that include te RPi quirk. The above would then replace the existing magic from the <linux/io-64-nonatomic-lo-hi.h> and <linux/io-64-nonatomic-hi-lo.h> headers. _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel