[Public]

Hi,

> -----Original Message-----
> From: Arnd Bergmann <[email protected]>
> Sent: Wednesday, September 24, 2025 3:16 PM
> To: Guntupalli, Manikanta <[email protected]>; git (AMD-Xilinx)
> <[email protected]>; Simek, Michal <[email protected]>; Alexandre Belloni
> <[email protected]>; Frank Li <[email protected]>; Rob Herring
> <[email protected]>; [email protected]; Conor Dooley <[email protected]>;
> Przemysław Gaj <[email protected]>; Wolfram Sang <wsa+renesas@sang-
> engineering.com>; [email protected];
> [email protected]; S-k, Shyam-sundar <[email protected]>;
> Sakari Ailus <[email protected]>; '[email protected]'
> <[email protected]>; Kees Cook <[email protected]>; Gustavo A. R. Silva
> <[email protected]>; Jarkko Nikula <[email protected]>; Jorge
> Marques <[email protected]>; [email protected];
> [email protected]; [email protected]; Linux-Arch <linux-
> [email protected]>; [email protected]
> Cc: Pandey, Radhey Shyam <[email protected]>; Goud, Srinivas
> <[email protected]>; Datta, Shubhrajyoti <[email protected]>;
> [email protected]
> Subject: Re: [PATCH V7 2/4] asm-generic/io.h: Add big-endian MMIO accessors
>
> On Wed, Sep 24, 2025, at 10:59, Guntupalli, Manikanta wrote:
> >> From: Arnd Bergmann <[email protected]>
> >> Sent: Wednesday, September 24, 2025 12:08 AM
> >> To: Guntupalli, Manikanta <[email protected]>; 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.
We have performed our validation on little-endian kernels, and in our testing, 
the helpers worked correctly without any issues.

Thanks,
Manikanta.

Reply via email to