[Public] Hi,
> -----Original Message----- > From: Arnd Bergmann <a...@arndb.de> > Sent: Wednesday, September 24, 2025 3:16 PM > To: Guntupalli, Manikanta <manikanta.guntupa...@amd.com>; git (AMD-Xilinx) > <g...@amd.com>; Simek, Michal <michal.si...@amd.com>; Alexandre Belloni > <alexandre.bell...@bootlin.com>; Frank Li <frank...@nxp.com>; Rob Herring > <r...@kernel.org>; krzk...@kernel.org; Conor Dooley <conor...@kernel.org>; > Przemysław Gaj <p...@cadence.com>; Wolfram Sang <wsa+renesas@sang- > engineering.com>; tommaso.merciai...@bp.renesas.com; > quic_msava...@quicinc.com; S-k, Shyam-sundar <shyam-sundar....@amd.com>; > Sakari Ailus <sakari.ai...@linux.intel.com>; 'billy_t...@aspeedtech.com' > <billy_t...@aspeedtech.com>; Kees Cook <k...@kernel.org>; Gustavo A. R. Silva > <gustavo...@kernel.org>; Jarkko Nikula <jarkko.nik...@linux.intel.com>; Jorge > Marques <jorge.marq...@analog.com>; linux-...@lists.infradead.org; > devicet...@vger.kernel.org; linux-ker...@vger.kernel.org; Linux-Arch <linux- > a...@vger.kernel.org>; linux-hardening@vger.kernel.org > Cc: Pandey, Radhey Shyam <radhey.shyam.pan...@amd.com>; Goud, Srinivas > <srinivas.g...@amd.com>; Datta, Shubhrajyoti <shubhrajyoti.da...@amd.com>; > manion0...@gmail.com > 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 <a...@arndb.de> > >> Sent: Wednesday, September 24, 2025 12:08 AM > >> To: Guntupalli, Manikanta <manikanta.guntupa...@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. We have performed our validation on little-endian kernels, and in our testing, the helpers worked correctly without any issues. Thanks, Manikanta.