On Fri, Mar 1, 2019 at 1:52 PM Arnd Bergmann <arnd@xxxxxxxx> wrote: > > Without that, using __raw_xyz() to copy between RAM and > buffers in PCI memory space is broken, as you said, but the > assumption would be broken on certain older machines that > do a hardware endian swap by swizzling the address lines rather > than swapping bytes on the data bus. Honestly, there's no way we can ever fix that. The fact is, __raw_readl/writel simply isn't portable. If a driver uses them, the driver HAS TO KNOW what the situation is on the hardware it runs on. Because the "byte order" of the end result will basically be random on some machines. And you know what? We absolutely do not care. Not one whit. Because no new CPU's will ever be designed where the byte order isn't little-endian, and nobody will ever make those broken "we'll do random things in hardware to worfk around the fact that we're doing crazy things" machines. So it's all legacy anyway, and it's absolutely not worth over-designing or over-thinking this issue. If you have a random SoC that does insane things, that random SoC may (a) need its own drivers that know exactly how it works (b) not be able to use some drivers for IP that the SoC has, but the SoC designers screwed up and did some random crazy byte lane swizzling and that's all perfectly fine. We don't care. That SoC gets to do its own drivers. And 99% of truly generic drivers won't have any of these issues, because they don't use __raw_readl/writel to begin with. So don't make this any stranger than it is. Just accept that by design, and by definition, __raw_readl/writel is a bit non-portable, and won't work for everything. The corollary of that is that __raw_readl/writel() may also then be used _for_ that mis-designed piece of garbage SoC to implement the special driver needed for just that SoC. But as mentioned, this simply isn't a problem in practice. Sure, people can do insane things if they really want to. Maybe some "stable genius" decides to do a big-endian RISC-V core. We don't care, and we don't make everybody else have to worry about that kind of insanity. Linus