[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <d178cfb17e726597e2b4d4c49de5040646b9e55e.camel@pengutronix.de>
Date: Mon, 21 Jul 2025 13:01:30 +0200
From: Philipp Zabel <p.zabel@...gutronix.de>
To: Alex Elder <elder@...e.org>, Ze Huang <huang.ze@...ux.dev>, Greg
Kroah-Hartman <gregkh@...uxfoundation.org>, Rob Herring <robh@...nel.org>,
Krzysztof Kozlowski <krzk+dt@...nel.org>, Conor Dooley
<conor+dt@...nel.org>, Yixun Lan <dlan@...too.org>, Thinh Nguyen
<Thinh.Nguyen@...opsys.com>
Cc: linux-usb@...r.kernel.org, devicetree@...r.kernel.org,
linux-riscv@...ts.infradead.org, spacemit@...ts.linux.dev,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH v6 2/2] usb: dwc3: add generic driver to support
flattened
On Di, 2025-07-15 at 15:50 -0500, Alex Elder wrote:
> On 7/12/25 2:49 AM, Ze Huang wrote:
[...]
> > +static int dwc3_generic_probe(struct platform_device *pdev)
> > +{
> > + struct dwc3_probe_data probe_data = {};
> > + struct device *dev = &pdev->dev;
> > + struct dwc3_generic *dwc3;
> > + struct resource *res;
> > + int ret;
> > +
> > + dwc3 = devm_kzalloc(dev, sizeof(*dwc3), GFP_KERNEL);
> > + if (!dwc3)
> > + return -ENOMEM;
> > +
> > + dwc3->dev = dev;
> > +
> > + platform_set_drvdata(pdev, dwc3);
> > +
> > + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> > + if (!res) {
> > + dev_err(&pdev->dev, "missing memory resource\n");
> > + return -ENODEV;
> > + }
> > +
> > + dwc3->resets = devm_reset_control_array_get_optional_exclusive(dev);
> > + if (IS_ERR(dwc3->resets))
> > + return dev_err_probe(dev, PTR_ERR(dwc3->resets), "failed to get resets\n");
> > +
>
> It isn't enforced on exclusive resets, but I'm pretty sure
> resets are assumed to be asserted initially.
The reset controller API doesn't guarantee this. Whether reset controls
are initially asserted depends on the specific SoC/reset controller and
also on what the bootloader did before.
For example, there are self-deasserting reset controls that start out
deasserted and can only ever be asserted for a short pulse [1]. Even
the shared reset API only assumes that the reset line may have been
asserted at some point before the first assert() [2].
[1] https://docs.kernel.org/driver-api/reset.html#triggering
[2] https://docs.kernel.org/driver-api/reset.html#assertion-and-deassertion
Whether an explicit reset_control_assert() in the probe function is
needed depends on which assumptions the driver can make on its own (on
all platforms it is used on).
For example, for some devices it may be enough to assume that the
device has been reset at some point between power-on and probe.
regards
Philipp
Powered by blists - more mailing lists