[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.
