From: Philipp Zabel <p.zabel@pengutronix.de>
To: Phil Edworthy <phil.edworthy@renesas.com>,
Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk@kernel.org>,
Wolfram Sang <wsa@kernel.org>,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Jarkko Nikula <jarkko.nikula@linux.intel.com>,
Sam Protsenko <semen.protsenko@linaro.org>,
Sven Peter <sven@svenpeter.dev>, Jan Dabros <jsd@semihalf.com>,
Lukas Bulwahn <lukas.bulwahn@gmail.com>,
Tyrone Ting <kfting@nuvoton.com>, Arnd Bergmann <arnd@arndb.de>,
Olof Johansson <olof@lixom.net>,
Biju Das <biju.das.jz@bp.renesas.com>,
Geert Uytterhoeven <geert+renesas@glider.be>,
"open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS"
<devicetree@vger.kernel.org>,
Linux I2C <linux-i2c@vger.kernel.org>,
Linux-Renesas <linux-renesas-soc@vger.kernel.org>
Subject: Re: [PATCH v2 0/2] i2c: Add new driver for Renesas RZ/V2M controller
Date: Thu, 30 Jun 2022 16:45:15 +0200 [thread overview]
Message-ID: <be61be2446998c40b51a33453dda4d0b5f1518c3.camel@pengutronix.de> (raw)
In-Reply-To: <TYYPR01MB7086706381CDCEF4F582690CF5BA9@TYYPR01MB7086.jpnprd01.prod.outlook.com>
Hi Phil,
On Do, 2022-06-30 at 13:43 +0000, Phil Edworthy wrote:
> Hi Philipp, Geert,
>
> On 29 June 2022 18:18 Geert Uytterhoeven wrote:
> > On Wed, Jun 29, 2022 at 6:21 PM Philipp Zabel wrote:
> > > On Di, 2022-06-28 at 20:45 +0100, Phil Edworthy wrote:
> > > > The Renesas RZ/V2M SoC (r9a09g011) has a new i2c controller. This
> > series
> > > > add the driver. One annoying problem is that the SoC uses a single
> > reset
> > > > line for two i2c controllers, and unfortunately one of the controllers
> > > > is managed by some firmware, not by Linux. Therefore, the driver just
> > > > deasserts the reset.
> > >
> > > This sounds scary. If the driver is never loaded, and the reset is
> > > never deasserted, what happens to the firmware trying to access the
> > > other i2c controller? Does it hang? Or write to the reset controller
> > > registers to deassert the reset? If so, is there any protection against
> > > concurrent access from firmware and reset controller driver?
> Where a common reset is used by Linux and some firmware, I think we have to
> ensure/assume that both only ever de-assert it.
We also have to make sure that no read-modify-write cycles are required
to deassert the resets if we can't lock between firmware and kernel.
Otherwise concurrent access could cause a deassert to be reverted.
> In this particular SoC, the register used to assert/de-assert the reset
> has write enable bits in the upper half of the reg. There shouldn't be any
> issues with both trying to de-assert the reset at the same time.
Which reset driver is handling the reset for this i2c module?
> > In response to v1, I wrote
> >
> > > That is actually an integration issue, not an i2c controller issue.
> > >
> > > Perhaps we need a RESET_IS_CRITICAL flag, cfr. CLK_IS_CRITICAL,
> > > to be set by the reset provider?
>
> From what I understand, there are two main use cases for resets:
> 1. Often reset lines may be asserted at power on and so a driver needs to
> de-assert them so that the module can be used.
There are resets that are not initially asserted (among them the self-
deasserting resets) that are required to be asserted some time during
boot, to put some hardware into a well defined state.
I don't think those should be shared, but they sometimes are.
> 2. A driver may need to reset the module for some reason. I have only
> seen this with watchdog timers with no way out.
Grep for device_reset() or reset_control_reset() for some examples.
Also there are quite a few assert/udelay/deassert calls in drivers.
Also many drivers assert the reset again during remove(). Whether that
is always necessary or useful, I can't say.
It's sometimes nice during development, to be able to reload a kernel
module or rebind a driver to reset some locked up hardware.
> So if a driver does not need to reset the module, shouldn't the driver
> only ever be de-asserting the reset line?
I'm not sure the driver can always know this if it is used on different
platforms.
> If so, it also doesn’t matter whether the reset is shared with other
> modules or not.
> If a driver needs to reset the module, then the reset cannot be shared
> with other modules used by firmware or Linux, or we cannot use any
> other modules that share the reset line.
It can be shared for the special case of multiple modules requiring a
shared reset line to be asserted once, at some time before the modules
are used. The reset controller API supports this for the
reset_control_reset() call.
regards
Philipp
next prev parent reply other threads:[~2022-06-30 14:45 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-28 19:45 [PATCH v2 0/2] i2c: Add new driver for Renesas RZ/V2M controller Phil Edworthy
2022-06-28 19:45 ` [PATCH v2 1/2] dt-bindings: i2c: Document RZ/V2M I2C controller Phil Edworthy
2022-06-29 2:09 ` Rob Herring
2022-06-29 6:53 ` Geert Uytterhoeven
2022-06-29 8:15 ` Krzysztof Kozlowski
2022-06-29 13:50 ` Rob Herring
2022-06-29 8:22 ` Krzysztof Kozlowski
2022-06-30 11:43 ` Phil Edworthy
2022-06-28 19:45 ` [PATCH v2 2/2] i2c: Add Renesas RZ/V2M controller Phil Edworthy
2022-06-28 21:08 ` Andy Shevchenko
2022-06-29 6:52 ` Geert Uytterhoeven
2022-06-29 10:43 ` Andy Shevchenko
2022-06-29 15:58 ` Geert Uytterhoeven
2022-06-29 16:10 ` Andy Shevchenko
2022-06-30 9:41 ` Phil Edworthy
2022-06-30 9:54 ` Andy Shevchenko
2022-06-29 16:26 ` Philipp Zabel
2022-06-29 16:20 ` [PATCH v2 0/2] i2c: Add new driver for " Philipp Zabel
2022-06-29 17:18 ` Geert Uytterhoeven
2022-06-30 13:43 ` Phil Edworthy
2022-06-30 14:45 ` Philipp Zabel [this message]
2022-06-30 15:16 ` Phil Edworthy
2022-07-01 15:40 ` Philipp Zabel
2022-07-01 16:18 ` Phil Edworthy
2022-07-01 15:40 ` Philipp Zabel
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=be61be2446998c40b51a33453dda4d0b5f1518c3.camel@pengutronix.de \
--to=p.zabel@pengutronix.de \
--cc=andriy.shevchenko@linux.intel.com \
--cc=arnd@arndb.de \
--cc=biju.das.jz@bp.renesas.com \
--cc=devicetree@vger.kernel.org \
--cc=geert+renesas@glider.be \
--cc=geert@linux-m68k.org \
--cc=jarkko.nikula@linux.intel.com \
--cc=jsd@semihalf.com \
--cc=kfting@nuvoton.com \
--cc=krzk@kernel.org \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=lukas.bulwahn@gmail.com \
--cc=olof@lixom.net \
--cc=phil.edworthy@renesas.com \
--cc=robh@kernel.org \
--cc=semen.protsenko@linaro.org \
--cc=sven@svenpeter.dev \
--cc=wsa@kernel.org \
/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;
as well as URLs for NNTP newsgroup(s).