From: "Arnd Bergmann" <arnd@arndb.de>
To: "Manikanta Guntupalli" <manikanta.guntupalli@amd.com>,
git@amd.com, "Michal Simek" <michal.simek@amd.com>,
"Alexandre Belloni" <alexandre.belloni@bootlin.com>,
"Frank Li" <Frank.Li@nxp.com>, "Rob Herring" <robh@kernel.org>,
krzk+dt@kernel.org, "Conor Dooley" <conor+dt@kernel.org>,
"Przemysław Gaj" <pgaj@cadence.com>,
"Wolfram Sang" <wsa+renesas@sang-engineering.com>,
tommaso.merciai.xr@bp.renesas.com, quic_msavaliy@quicinc.com,
Shyam-sundar.S-k@amd.com,
"Sakari Ailus" <sakari.ailus@linux.intel.com>,
"'billy_tsai@aspeedtech.com'" <billy_tsai@aspeedtech.com>,
"Kees Cook" <kees@kernel.org>,
"Gustavo A. R. Silva" <gustavoars@kernel.org>,
"Jarkko Nikula" <jarkko.nikula@linux.intel.com>,
"Jorge Marques" <jorge.marques@analog.com>,
"linux-i3c@lists.infradead.org" <linux-i3c@lists.infradead.org>,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
Linux-Arch <linux-arch@vger.kernel.org>,
linux-hardening@vger.kernel.org
Cc: radhey.shyam.pandey@amd.com, srinivas.goud@amd.com,
shubhrajyoti.datta@amd.com, manion05gk@gmail.com
Subject: Re: [PATCH V7 3/4] i3c: master: Add endianness support for i3c_readl_fifo() and i3c_writel_fifo()
Date: Tue, 23 Sep 2025 20:51:15 +0200 [thread overview]
Message-ID: <13bbd85e-48d2-4163-b9f1-2a2a870d4322@app.fastmail.com> (raw)
In-Reply-To: <20250923154551.2112388-4-manikanta.guntupalli@amd.com>
On Tue, Sep 23, 2025, at 17:45, Manikanta Guntupalli wrote:
> /**
> * i3c_writel_fifo - Write data buffer to 32bit FIFO
> * @addr: FIFO Address to write to
> * @buf: Pointer to the data bytes to write
> * @nbytes: Number of bytes to write
> + * @endian: Endianness of FIFO write
> */
> static inline void i3c_writel_fifo(void __iomem *addr, const void *buf,
> - int nbytes)
> + int nbytes, enum i3c_fifo_endian endian)
> {
> - writesl(addr, buf, nbytes / 4);
> + if (endian)
> + writesl_be(addr, buf, nbytes / 4);
> + else
> + writesl(addr, buf, nbytes / 4);
> +
This seems counter-intuitive: a FIFO doesn't really have
an endianness, it is instead used to transfer a stream of
bytes, so if the device has a fixed endianess, the
FIFO still needs to be read using a plain writesl().
I see that your writesl_be() has an incorrect definition, which
would lead to the i3c_writel_fifo() function accidentally still
working if both the device and CPU use big-endian registers:
static inline void writesl_be(volatile void __iomem *addr,
const void *buffer,
unsigned int count)
{
if (count) {
const u32 *buf = buffer;
do {
__raw_writel((u32 __force)__cpu_to_be32(*buf), addr);
buf++;
} while (--count);
}
}
The __cpu_to_be32() call that you add here means that the
FIFO data is swapped on little-endian CPUs but not swapped
on big-endian ones. Compare this to the normal writesl()
function that never swaps because it writes a byte stream.
> if (nbytes & 3) {
> u32 tmp = 0;
>
> memcpy(&tmp, buf + (nbytes & ~3), nbytes & 3);
> - writel(tmp, addr);
> +
> + if (endian)
> + writel_be(tmp, addr);
> + else
> + writel(tmp, addr);
This bit however seems to fix a bug, but does so in a
confusing way. The way the FIFO registers usually deal
with excess bytes is to put them into the first bytes
of the FIFO register, so this should just be a
writesl(addr, &tmp, 1);
to write one set of four bytes into the FIFO without
endian-swapping.
Could it be that you are just trying to use a normal
i3c adapter with little-endian registers on a normal
big-endian machine but ran into this bug?
Arnd
next prev parent reply other threads:[~2025-09-23 18:51 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-23 15:45 [PATCH V7 0/4] Add AMD I3C master controller driver and bindings Manikanta Guntupalli
2025-09-23 15:45 ` [PATCH V7 1/4] dt-bindings: i3c: Add AMD I3C master controller support Manikanta Guntupalli
2025-09-23 15:45 ` [PATCH V7 2/4] asm-generic/io.h: Add big-endian MMIO accessors Manikanta Guntupalli
2025-09-23 18:38 ` Arnd Bergmann
2025-09-24 8:59 ` Guntupalli, Manikanta
2025-09-24 9:46 ` Arnd Bergmann
2025-09-24 10:12 ` Guntupalli, Manikanta
2025-09-23 18:43 ` Frank Li
2025-09-24 20:34 ` kernel test robot
2025-09-25 6:15 ` kernel test robot
2025-09-23 15:45 ` [PATCH V7 3/4] i3c: master: Add endianness support for i3c_readl_fifo() and i3c_writel_fifo() Manikanta Guntupalli
2025-09-23 18:45 ` Frank Li
2025-09-23 18:51 ` Arnd Bergmann [this message]
2025-09-24 9:00 ` Guntupalli, Manikanta
2025-09-24 10:00 ` Arnd Bergmann
2025-09-24 12:22 ` Guntupalli, Manikanta
2025-09-24 14:05 ` Arnd Bergmann
2025-09-24 15:23 ` Guntupalli, Manikanta
2025-09-24 15:42 ` Arnd Bergmann
2025-09-25 9:26 ` Guntupalli, Manikanta
2025-09-25 12:14 ` Arnd Bergmann
2025-09-25 16:37 ` Guntupalli, Manikanta
2025-09-25 16:50 ` Frank Li
2025-09-25 12:22 ` kernel test robot
2025-09-23 15:45 ` [PATCH V7 4/4] i3c: master: Add AMD I3C bus controller driver Manikanta Guntupalli
2025-09-23 19:22 ` Frank Li
2025-09-25 5:42 ` Guntupalli, Manikanta
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=13bbd85e-48d2-4163-b9f1-2a2a870d4322@app.fastmail.com \
--to=arnd@arndb.de \
--cc=Frank.Li@nxp.com \
--cc=Shyam-sundar.S-k@amd.com \
--cc=alexandre.belloni@bootlin.com \
--cc=billy_tsai@aspeedtech.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=git@amd.com \
--cc=gustavoars@kernel.org \
--cc=jarkko.nikula@linux.intel.com \
--cc=jorge.marques@analog.com \
--cc=kees@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-hardening@vger.kernel.org \
--cc=linux-i3c@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=manikanta.guntupalli@amd.com \
--cc=manion05gk@gmail.com \
--cc=michal.simek@amd.com \
--cc=pgaj@cadence.com \
--cc=quic_msavaliy@quicinc.com \
--cc=radhey.shyam.pandey@amd.com \
--cc=robh@kernel.org \
--cc=sakari.ailus@linux.intel.com \
--cc=shubhrajyoti.datta@amd.com \
--cc=srinivas.goud@amd.com \
--cc=tommaso.merciai.xr@bp.renesas.com \
--cc=wsa+renesas@sang-engineering.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox