[PATCH V7 2/4] asm-generic/io.h: Add big-endian MMIO accessors

Arnd Bergmann arnd at arndb.de
Wed Sep 24 02:46:09 PDT 2025


On Wed, Sep 24, 2025, at 10:59, Guntupalli, Manikanta wrote:
>> From: Arnd Bergmann <arnd at arndb.de>
>> Sent: Wednesday, September 24, 2025 12:08 AM
>> To: Guntupalli, Manikanta <manikanta.guntupalli at amd.com>; git (AMD-Xilinx)
>
> From both description and implementation, {read,write}{b,w,l,q}() 
> access little-endian memory and return the result in native endianness:
...
> This works on little-endian CPUs, but on big-endian CPUs the 
> {read,write}{b,w,l,q}() helpers already return data in big-endian 
> format.

> The extra byte swap in io{read,write}*be() therefore corrupts 
> the data, producing little-endian values when big-endian is expected.

> The newly introduced {read,write}{w,l,q}_be() helpers directly access 
> big-endian IO memory and return results in native endianness, avoiding 
> this mismatch.

No, in both your {read,write}{w,l,q}_be() and the existing io{read,write}*be()
helpers, big-endian platforms end up with an even number of swaps
(0 or 2), while little-endian platforms have exactly one swap.

The only exception is your {read,write}s{w,l,q}_be() string
helpers that are wrong because they have an extra swap and
are broken on FIFO registers in little-endian kernels.

     Arnd



More information about the linux-i3c mailing list