public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "Théo Lebrun" <theo.lebrun@bootlin.com>
To: "Théo Lebrun" <theo.lebrun@bootlin.com>,
	"Linus Walleij" <linus.walleij@linaro.org>
Cc: "Andi Shyti" <andi.shyti@kernel.org>,
	"Rob Herring" <robh+dt@kernel.org>,
	"Krzysztof Kozlowski" <krzysztof.kozlowski+dt@linaro.org>,
	"Conor Dooley" <conor+dt@kernel.org>,
	"Thomas Bogendoerfer" <tsbogend@alpha.franken.de>,
	<linux-arm-kernel@lists.infradead.org>,
	<linux-i2c@vger.kernel.org>, <devicetree@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>, <linux-mips@vger.kernel.org>,
	"Gregory Clement" <gregory.clement@bootlin.com>,
	"Vladimir Kondratiev" <vladimir.kondratiev@mobileye.com>,
	"Thomas Petazzoni" <thomas.petazzoni@bootlin.com>,
	"Tawfik Bayouk" <tawfik.bayouk@mobileye.com>
Subject: Re: [PATCH 10/13] i2c: nomadik: support Mobileye EyeQ5 I2C controller
Date: Mon, 19 Feb 2024 17:27:56 +0100	[thread overview]
Message-ID: <CZ973SP3M9PS.3GG13IHI2DNR4@bootlin.com> (raw)
In-Reply-To: <CZ952TBZGEVD.JYSAQGNL1ZAQ@bootlin.com>

Hello,

On Mon Feb 19, 2024 at 3:52 PM CET, Théo Lebrun wrote:
> On Mon Feb 19, 2024 at 3:35 PM CET, Linus Walleij wrote:
> > On Thu, Feb 15, 2024 at 5:52 PM Théo Lebrun <theo.lebrun@bootlin.com> wrote:
> >
> > > Add compatible for the integration of the same DB8500 IP block into the
> > > Mobileye EyeQ5 platform. Two quirks are present:
> > >
> > >  - The memory bus only supports 32-bit accesses. One writeb() is done to
> > >    fill the Tx FIFO which we replace with a writel().
> > >
> > >  - A register must be configured for the I2C speed mode; it is located
> > >    in a shared register region called OLB. We access that memory region
> > >    using a syscon & regmap that gets passed as a phandle (mobileye,olb).
> > >
> > >    A two-bit enum per controller is written into the register; that
> > >    requires us to know the global index of the I2C
> > >    controller (mobileye,id).
> > >
> > > We add #include <linux/mfd/syscon.h> and <linux/regmap.h> and sort
> > > headers.
> > >
> > > Signed-off-by: Théo Lebrun <theo.lebrun@bootlin.com>
> >
> > (...)
> >
> > > -               writeb(*priv->cli.buffer, priv->virtbase + I2C_TFR);
> > > +               if (priv->has_32b_bus)
> > > +                       writel(*priv->cli.buffer, priv->virtbase + I2C_TFR);
> > > +               else
> > > +                       writeb(*priv->cli.buffer, priv->virtbase + I2C_TFR);
> >
> > Are the other byte accessors working flawlessly? I get the shivers.
> > If it's needed in one place I bet the others prefer 32bit access too.
>
> I see where your shivers come from; I'll investigate as I don't remember
> my conclusion from the time when I worked on this driver (a few months
> ago).
>
> > Further the MIPS is big-endian is it not? It feels that this just happens
> > to work because of byte order access? writel() is little-endian by
> > definition.
>
> Actually, no. Our platform is little-endian.
>
> The full story, summarised: the endianness of our cores in kernel and
> hypervisor mode is defined by a pin read at reset. User mode can toggle
> the endianness at runtime I believe, but that is not of our concern.
> Our endianness in kernel mode is little-endian because the pin in
> question is hardwired to the value meaning little-endian.
>
> > What happens if you replace all writeb():s with something like
> >
> > static void nmk_write_reg(struct nmk_i2c_dev *priv, u32 reg, u8 val)
> > {
> >     if (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN))
> >         writeb(val, priv->virtbase + reg + 3);
> >         // if this doesn't work then use writeb((u32)val,
> > priv->virtbase + reg) I guess
> >    else
> >         writeb(val, priv->virtbase + reg);
> > }
> >
> > and conversely for readb()?
>
> As mentionned above, big endian isn't the worry for us. I'll be checking
> the readb() calls found in i2c_irq_handler() though.

Follow up on this. It was working by luck.

 - writeb() are generating Store Byte (sb) instructions which are
   unsupported on the memory bus.

 - readb() are generating Load Doubleword (ld) instructions and not the
   expected Load Byte (lb). It explains why readb() are working.

To be safe I'll make sure to use readl() and writel() everywhere for our
compatible. There is one writeb() and three readb(). Only the writeb()
was covered by this V1.

Thanks,

--
Théo Lebrun, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

  reply	other threads:[~2024-02-19 16:27 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-15 16:52 [PATCH 00/13] Add Mobileye EyeQ5 support to the Nomadik I2C controller & use hrtimers for timeouts Théo Lebrun
2024-02-15 16:52 ` [PATCH 01/13] dt-bindings: i2c: nomadik: add timeout-usecs property bindings Théo Lebrun
2024-02-16  2:27   ` Rob Herring
2024-02-16  9:16     ` Théo Lebrun
2024-02-16  9:17       ` Krzysztof Kozlowski
2024-02-19 14:06       ` Linus Walleij
2024-02-19 14:29         ` Théo Lebrun
2024-02-21 16:58           ` Théo Lebrun
2024-02-21 17:43             ` Wolfram Sang
2024-02-22 17:14               ` Rob Herring
2024-02-22 19:28                 ` Wolfram Sang
2024-02-23 16:34                   ` Rob Herring
2024-02-26  8:41                     ` Wolfram Sang
2024-02-15 16:52 ` [PATCH 02/13] dt-bindings: i2c: nomadik: add mobileye,eyeq5-i2c bindings and example Théo Lebrun
2024-02-15 19:26   ` Rob Herring
2024-02-16  2:22   ` Rob Herring
2024-02-16 10:18     ` Théo Lebrun
2024-02-16 10:33       ` Krzysztof Kozlowski
2024-02-16 10:40         ` Théo Lebrun
2024-02-17  8:25           ` Krzysztof Kozlowski
2024-02-19 13:41             ` Théo Lebrun
2024-02-20  9:49               ` Krzysztof Kozlowski
2024-02-15 16:52 ` [PATCH 03/13] dt-bindings: hwmon: lm75: add label property Théo Lebrun
2024-02-16  7:41   ` Krzysztof Kozlowski
2024-02-16  8:00     ` Krzysztof Kozlowski
2024-02-16 10:22       ` Théo Lebrun
2024-02-24 17:30   ` Guenter Roeck
2024-02-26  7:43     ` Krzysztof Kozlowski
2024-02-15 16:52 ` [PATCH 04/13] i2c: nomadik: rename private struct pointers from dev to priv Théo Lebrun
2024-02-19 14:12   ` Linus Walleij
2024-02-15 16:52 ` [PATCH 05/13] i2c: nomadik: simplify IRQ masking logic Théo Lebrun
2024-02-19 14:15   ` Linus Walleij
2024-02-15 16:52 ` [PATCH 06/13] i2c: nomadik: use bitops helpers Théo Lebrun
2024-02-19 14:16   ` Linus Walleij
2024-02-15 16:52 ` [PATCH 07/13] i2c: nomadik: support short xfer timeouts using waitqueue & hrtimer Théo Lebrun
2024-02-19 14:19   ` Linus Walleij
2024-02-19 14:31     ` Théo Lebrun
2024-02-15 16:52 ` [PATCH 08/13] i2c: nomadik: replace jiffies by ktime for FIFO flushing timeout Théo Lebrun
2024-02-19 14:21   ` Linus Walleij
2024-02-19 14:38     ` Théo Lebrun
2024-02-19 14:53       ` Linus Walleij
2024-02-15 16:52 ` [PATCH 09/13] i2c: nomadik: fetch timeout-usecs property from devicetree Théo Lebrun
2024-02-19 14:22   ` Linus Walleij
2024-02-27 12:14   ` Wolfram Sang
2024-02-27 13:38     ` Théo Lebrun
2024-02-28 10:49       ` Wolfram Sang
2024-02-28 13:39         ` Théo Lebrun
2024-02-29  9:25           ` Wolfram Sang
2024-02-29  9:31             ` Théo Lebrun
2024-02-15 16:52 ` [PATCH 10/13] i2c: nomadik: support Mobileye EyeQ5 I2C controller Théo Lebrun
2024-02-19 14:35   ` Linus Walleij
2024-02-19 14:52     ` Théo Lebrun
2024-02-19 16:27       ` Théo Lebrun [this message]
2024-02-15 16:52 ` [PATCH 11/13] MIPS: mobileye: eyeq5: add 5 I2C controller nodes Théo Lebrun
2024-02-15 16:52 ` [PATCH 12/13] MIPS: mobileye: eyeq5: add evaluation board I2C temp sensor Théo Lebrun
2024-02-16  7:59   ` Krzysztof Kozlowski
2024-02-15 16:52 ` [PATCH 13/13] MIPS: mobileye: eyeq5: add resets to I2C controllers Théo Lebrun
2024-02-16  7:59   ` Krzysztof Kozlowski
2024-02-16  9:05     ` Théo Lebrun
2024-02-16  9:17       ` Krzysztof Kozlowski
2024-02-16 10:26         ` Théo Lebrun
2024-02-19 14:11 ` [PATCH 00/13] Add Mobileye EyeQ5 support to the Nomadik I2C controller & use hrtimers for timeouts Linus Walleij
2024-02-19 14:22   ` Théo Lebrun

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=CZ973SP3M9PS.3GG13IHI2DNR4@bootlin.com \
    --to=theo.lebrun@bootlin.com \
    --cc=andi.shyti@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=gregory.clement@bootlin.com \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@vger.kernel.org \
    --cc=robh+dt@kernel.org \
    --cc=tawfik.bayouk@mobileye.com \
    --cc=thomas.petazzoni@bootlin.com \
    --cc=tsbogend@alpha.franken.de \
    --cc=vladimir.kondratiev@mobileye.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