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

Arnd Bergmann
2025-09-24T09:46:35Z

On Wed, Sep 24, 2025, at 10:59, Guntupalli, Manikanta wrote:
>> From: Arnd Bergmann <arnd@arndb.de>
>> Sent: Wednesday, September 24, 2025 12:08 AM
>> To: Guntupalli, Manikanta <manikanta.guntupalli@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