mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Conor Dooley <conor@kernel.org>
To: Alex Elder <elder@riscstar.com>
Cc: p.zabel@pengutronix.de, robh@kernel.org, krzk+dt@kernel.org,
	conor+dt@kernel.org, mohd.anwar@oss.qualcomm.com,
	lorenzo.bianconi@oss.qualcomm.com, danielt@kernel.org,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
	Daniel Thompson <daniel@riscstar.com>
Subject: Re: [PATCH 1/2] dt-bindings: reset: introduce toshiba,tc9564-reset.yaml
Date: Thu, 22 Oct 2026 19:34:25 +0100	[thread overview]
Message-ID: <20261022-clench-drum-5907c17cb8d2@spud> (raw)
In-Reply-To: <b904f4ea-e198-488e-a6dd-476d744593da@riscstar.com>

[-- Attachment #1: Type: text/plain, Size: 11937 bytes --]

On Wed, Oct 21, 2026 at 02:50:41PM -0500, Alex Elder wrote:
> On 10/13/26 12:51 PM, Conor Dooley wrote:
> > On Tue, Oct 13, 2026 at 08:22:50AM -0500, Alex Elder wrote:
> > > On 10/12/26 4:22 PM, Conor Dooley wrote:
> > > > On Mon, Oct 12, 2026 at 02:10:01PM -0500, Alex Elder wrote:
> > > > > On 10/12/26 1:51 PM, Conor Dooley wrote:
> > > > > > On Mon, Oct 12, 2026 at 11:43:52AM -0500, Alex Elder wrote:
> > > > > > > Define the binding for the reset controller functionality present in
> > > > > > > the Toshiba TC9564 SoC.
> > > > > > > 
> > > > > > > Co-developed-by: Daniel Thompson <daniel@riscstar.com>
> > > > > > > Signed-off-by: Daniel Thompson <daniel@riscstar.com>
> > > > > > > Signed-off-by: Alex Elder <elder@riscstar.com>
> > > > > > > ---
> 
> Finally back to looking at this again.  Sorry for the delay.
> 
> > > > > > >     .../bindings/reset/toshiba,tc9564-reset.yaml  | 56 +++++++++++++++++++
> > > > > > >     MAINTAINERS                                   |  7 +++
> > > > > > >     include/dt-bindings/reset/toshiba,tc9564.h    | 26 +++++++++
> > > > > > >     3 files changed, 89 insertions(+)
> > > > > > >     create mode 100644 Documentation/devicetree/bindings/reset/toshiba,tc9564-reset.yaml
> > > > > > >     create mode 100644 include/dt-bindings/reset/toshiba,tc9564.h
> > > > > > > 
> > > > > > > diff --git a/Documentation/devicetree/bindings/reset/toshiba,tc9564-reset.yaml b/Documentation/devicetree/bindings/reset/toshiba,tc9564-reset.yaml
> > > > > > > new file mode 100644
> > > > > > > index 0000000000000..1908e9539abac
> > > > > > > --- /dev/null
> > > > > > > +++ b/Documentation/devicetree/bindings/reset/toshiba,tc9564-reset.yaml
> > > > > > > @@ -0,0 +1,56 @@
> > > > > > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> > > > > > > +%YAML 1.2
> > > > > > > +---
> > > > > > > +$id: http://devicetree.org/schemas/reset/toshiba,tc9564-reset.yaml#
> > > > > > > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > > > > > > +
> > > > > > > +title: Toshiba TC9564 Reset Controller
> > > > > > > +
> > > > > > > +maintainers:
> > > > > > > +  - Alex Elder <elder@riscstar.com>
> > > > > > > +  - Daniel Thompson <daniel@riscstar.com>
> > > > > > > +
> > > > > > > +description:
> > > > > > > +  The Toshiba TC9564 is an SoC accessed by a host system through the
> > > > > > > +  upstream PCIe port on the PCIe switch it implements.  The switch
> > > > > > > +  includes an embedded PCIe endpoint that provides access to various
> > > > > > > +  SoC peripherals (including a reset controller) via its BARs.
> > > > > > > +
> > > > > > > +  A total of 13 resets are implemented, though two of these are not
> > > > > > > +  controllable.  Access to the reset controller relies on PCIe being
> > > > > > > +  functional, so the PCIe reset is assumed to be deasserted.  Similarly,
> > > > > > > +  the PCIe controller relies on I2C, so the I2C reset is also assumed
> > > > > > > +  to be deasserted.
> > > > > > > +
> > > > > > > +  Reset ids are defined in <dt-bindings/reset/toshiba,tc9564.h>.
> > > > > > > +
> > > > > > > +  The reset controller uses registers within the same page as a
> > > > > > > +  clock controller, so both devices are defined as children of a
> > > > > > > +  "config" syscon.
> > > > > > > +
> > > > > > > +properties:
> > > > > > > +  compatible:
> > > > > > > +    const: toshiba,tc9564-reset
> > > > > > 
> > > > > > Why does this need to exist as a standalone device, rather than be
> > > > > > rolled up into the parent syscon node? It doesn't have any resources, so
> > > > > > it should be doable.
> > > > > 
> > > > > This is along the lines of what Krzysztof has mentioned, and it
> > > > > seems clear I must be missing something.
> > > > > 
> > > > > > This kind of thing for a syscon is always difficult to review when only
> > > > > > one element is present - where is the rest of the syscon's
> > > > > > functionality?
> > > > > 
> > > > > The reason a syscon was used was simply for the benefit of
> > > > > having a shared regmap that the reset, clock, and DWMAC drivers
> > > > > can use.  All three of those drivers use registers that reside
> > > > > within a single page of addressible MMIO space.
> > > > 
> > > > What does the dwmac use the region for? I assume it's for some misc
> > > > register and you don't mean that the dwmac lies within the region?
> > > 
> > > That's right.  There is one register (per DWMAC--there are two)
> > > that contains one bit (bit 21) that is used to signal that initialization of
> > > the PMA is done.  We assert reset, set up
> > > clocks, then deassert, and finally wait for this bit to be set.
> > > The DWMAC code uses a phandle property to refer to the syscon,
> > > like:
> > >      toshiba,config-syscon = <&tc9564_config_syscon0 0x1070>
> > > 
> > > So again, the purpose of the syscon was to get the automatic
> > > regmap for managing the region, which contains registers used
> > > for distinct purposes.
> > > 
> > > After making the syscon be the parent of both the reset and
> > > clock nodes, I *removed* the "reg" properties and just defined
> > > those offsets in the driver.  Maybe that was a mistake.
> > 
> > No, that's typically what happens in the setup I describe below, so
> > that's not abnormal.
> 
> Thank you for confirming this.
> 
> > > > There's nothing inherently wrong with the act of using of a syscon here,
> > > > what I am actually complaining about is how you are using it.
> > > > In cases where a syscon region contains clock and reset, the typical way
> > > > we want people to do this is via something like
> > > > 
> > > > syscon@f00 {
> > > > 	compatible = "toshiba,tc9564-bla-syscon", "syscon", "simple-mfd";
> > > > 	reg = <0x0 0x2000>;
> > > > 	#reset-cells = <1>;
> > > > 	#clock-cells = <1>;
> > > > };
> > > 
> > > In this case it seems I must create a syscon driver that provides
> > > combined reset and clock functionality.  Is that right?  (This
> > > series is the result of separating the reset code from the clock
> > > code in a combined driver.)
> > 
> > There's two ways to do it, depending on what sort of device you have.
> > If you have a clock controller that also does reset, the preferred thing
> > to do is something like
> > 
> > clock-controller@f00 {
> > 	compatible = "toshiba,tc9564-clk";
> > 	reg = <0x0 0x2000>;
> > 	#reset-cells = <1>;
> > 	#clock-cells = <1>;
> > };
> > 
> > and in the clock controller driver probe the reset controller driver as
> > a auxiliary bus device.
> 
> My last version combined these two but did not make the
> reset an auxiliary device.
> 
> > You have something else though, because there's assorted other functions
> > in here, including the dwmac and things you don't use yet. In that case,
> > I would make a node like
> > 
> > syscon@f00 {
> > 	compatible = "toshiba,tc9564-bla-syscon", "syscon";
> > 	reg = <0x0 0x2000>;
> > 	#reset-cells = <1>;
> > 	#clock-cells = <1>;
> > };
> > 
> > and in the syscon driver use MFD_CELL_NAME() to probe both clock and
> > reset drivers, and can use device_node_to_regmap(). Your dwmac stuff
> > (and any other future stuff that needs a syscon reference) can use the
> > automagic syscon regmap stuff that we've already talked about.
> 
> This sounds like the way to go.
> 
> > Note, there's no "simple-mfd" here, because you have no child nodes.
> > The point of "simple-mfd" is to probe those kinds of devices.
> 
> OK.  Let's see if I understand what you're saying.
> 
> This approach uses:
> - A single top-level syscon driver (under drivers/mfd?) which
>   probes based on a devicetree node compatible string ("toshiba,...")

I'm not sure if it needs to be under mfd (there's some in soc/foo too)
but I guess so.

> - That compatible string will require a (fairly simple) devicetree
>   binding
> - That driver initializes a regmap which will cover the space
>   defined in its devicetree node (<0x0 0x2000>)

I don't think the driver has to even do this at all, e.g.
sg2044-topsys.c doesn't. Whenever someone requests the regmap it will
get created automatically since you're a syscon.

> - That driver has an array that uses MFD_CELL_NAME() to define
>   cells for clock and reset
> - That driver will call some form of mfd_add_devices() using the
>   MFD cell array
> - The stmmac driver can refer to this device node with a phandle
>   property to specify the syscon that provides the regmap it needs
> 
> And then, for the clock and reset devices:
> - A clock platform driver (under drivers/clk) will match based
>   on the driver name (matching what's supplied by MFD_CELL_NAME())
> - A reset driver will be similar (under drivers/reset)
> - As you mentioned, these drivers get at the regmap they need using
>   device_node_to_regmap() (or dev_get_regmap() or something)

I think "regmap = device_node_to_regmap(pdev->dev.parent->of_node);" is
the correct way to do it.

> - And despite these being separate drivers (from the syscon driver)
>   they don't have devicetree nodes, and the syscon node itself
>   defines the clock-controller and reset-controller properties.
> 
> Does that sound right?  Am I missing anything?

Sounds about right.

> 
> 
> > > To be honest I don't have a lot of experience with proper use of
> > > syscons.  I have no problem writing or restructuring the code,
> > > it just seems I need help knowing what the final structure should
> > > look like.
> > > 
> > > > because the child node exists for no other reason than to access linux
> > > > driver probing in the most trivial way. If there's some features that
> > > > actually need a child node, that's fine, but those will end up being
> > > > things with significantly more properties or things with competing
> > > > property use (e.g. if there were devices with buses that need
> > > > address/size cells).
> > > 
> > > I'm not sure I understand this statement (and that might be part
> > > of the problem).
> > > 
> > > There are other devices (currently just two DWMACs, plus an
> > > interrupt controller that generates MSIs for each PCI function)
> > > that use the reset and clock signals.  I haven't yet
> > > posted the reworked DWMAC code but I just sent the first version
> > > of the interrupt driver yesterday.
> > >    https://lore.kernel.org/lkml/20261012190245.3988619-1-elder@riscstar.com/
> > 
> > Here I am talking about why child nodes aren't correct in your case.
> > Neither clock nor reset needs anything other than the relevant #cells
> > property, so the only benefit of a child node over having these in the
> > syscon node itself are to use the compatible to probe the driver.
> 
> Yes I now see what you mean.  By using a MFD model the child device
> is just a function provided by the top-level syscon device.  The
> driver code still benefits from the device model, but the subordinate
> devices match based on the device name and not a devicetree compatible
> string.  And no nodes exposed in devicetree are needed for the clock
> and reset.
> 
> > Child nodes should only be used when the functions provided by the
> > syscon have conflicting properties or are very complicated (I would
> > probably always use a child node for pinctrl for example). It'd also be
> > reasonable if the functions are reused across devices, but that's
> > rarely the case with clock or reset controllers (or really anything
> > that appears in these kinds of "random register regions" in SoCs).
> > 
> > Does that make more sense?
> 
> Yes, it definitely helps a lot.  I realize I might not have every
> detail right, but I feel much better about how to organize this
> (and presumably this also addresses what Krzysztof was asking for).

Yeah presumably!

Cheers,
Conor.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

  reply	other threads:[~2026-10-22 18:34 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-12 16:43 [PATCH 0/2] reset: introduce TC9564 reset support Alex Elder
2026-10-12 16:43 ` [PATCH 1/2] dt-bindings: reset: introduce toshiba,tc9564-reset.yaml Alex Elder
2026-10-12 18:51   ` Conor Dooley
2026-10-12 19:10     ` Alex Elder
2026-10-12 21:22       ` Conor Dooley
2026-10-13 13:22         ` Alex Elder
2026-10-13 17:51           ` Conor Dooley
2026-10-21 19:50             ` Alex Elder
2026-10-22 18:34               ` Conor Dooley [this message]
2026-10-22 19:05                 ` Alex Elder
2026-10-13  9:25     ` Krzysztof Kozlowski
2026-10-12 16:43 ` [PATCH 2/2] reset: toshiba: introduce a TC9564 SoC reset driver Alex Elder
2026-10-13 13:28   ` 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=20261022-clench-drum-5907c17cb8d2@spud \
    --to=conor@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=daniel@riscstar.com \
    --cc=danielt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=elder@riscstar.com \
    --cc=krzk+dt@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lorenzo.bianconi@oss.qualcomm.com \
    --cc=mohd.anwar@oss.qualcomm.com \
    --cc=p.zabel@pengutronix.de \
    --cc=robh@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

all inboxes | Powered by JetHome®