public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "Théo Lebrun" <theo.lebrun@bootlin.com>
To: "Krzysztof Kozlowski" <krzysztof.kozlowski@linaro.org>,
	"Gregory CLEMENT" <gregory.clement@bootlin.com>,
	"Michael Turquette" <mturquette@baylibre.com>,
	"Stephen Boyd" <sboyd@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>,
	"Linus Walleij" <linus.walleij@linaro.org>,
	"Rafał Miłecki" <rafal@milecki.pl>,
	"Philipp Zabel" <p.zabel@pengutronix.de>
Cc: "Vladimir Kondratiev" <vladimir.kondratiev@mobileye.com>,
	<linux-mips@vger.kernel.org>, <linux-clk@vger.kernel.org>,
	<devicetree@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	"Thomas Petazzoni" <thomas.petazzoni@bootlin.com>,
	"Tawfik Bayouk" <tawfik.bayouk@mobileye.com>,
	<linux-gpio@vger.kernel.org>
Subject: Re: [PATCH v3 09/17] reset: eyeq5: add platform driver
Date: Wed, 24 Jan 2024 17:52:13 +0100	[thread overview]
Message-ID: <CYN3C7XGTG1T.2U3RS9E2ENWGJ@bootlin.com> (raw)
In-Reply-To: <b9b8aa19-aa08-42ff-8b2f-dedb1e64700c@linaro.org>

Hello,

On Wed Jan 24, 2024 at 8:00 AM CET, Krzysztof Kozlowski wrote:
> On 23/01/2024 19:46, Théo Lebrun wrote:
> > Add the Mobileye EyeQ5 reset controller driver. It belongs to a syscon
> > region called OLB. It might grow to add later support of other
> > platforms from Mobileye.

[...]

> > +static int _eq5r_busy_wait(struct eq5r_private *priv, struct device *dev,
> > +			   u32 domain, u32 offset, bool assert)
> > +{
> > +	unsigned int val, mask;
> > +	int i;
> > +
> > +	lockdep_assert_held(&priv->mutexes[domain]);
> > +
> > +	switch (domain) {
> > +	case 0:
> > +		for (i = 0; i < D0_TIMEOUT_POLL; i++) {
> > +			regmap_read(priv->olb, EQ5R_OLB_SARCR1, &val);
> > +			val = !(val & BIT(offset));
> > +			if (val == assert)
> > +				return 0;
> > +			__udelay(1);
>
> What is even "__udelay"? It is the first use in drivers. Please use
> common methods, like fsleep or udelay... but actually you should rather
> use regmap_read_poll_timeout() or some variants instead of open-coding it.

udelay is an alias to __udelay on MIPS, which is why this didn't look
odd to me. Fixed.

[...]

> > +static void _eq5r_assert(struct eq5r_private *priv, u32 domain, u32 offset)
>
> Drop leading _ and name the function in some informative way.

Fixed by turning `_eq5r_assert` into `eq5r_assert_withlock`, and co.

[...]

> > +
> > +static int eq5r_probe(struct platform_device *pdev)
> > +{
> > +	struct device *dev = &pdev->dev;
> > +	struct device_node *np = dev->of_node;
> > +	struct device_node *parent_np = of_get_parent(np);
> > +	struct eq5r_private *priv;
> > +	int ret, i;
> > +
> > +	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
> > +	if (!priv)
> > +		return -ENOMEM;
>
> You leak parent.

Fixed in all three clk+reset+pinctrl drivers. They all had this issue.

>
> > +
> > +	dev_set_drvdata(dev, priv);
> > +
> > +	priv->olb = ERR_PTR(-ENODEV);
> > +	if (parent_np) {
> > +		priv->olb = syscon_node_to_regmap(parent_np);
> > +		of_node_put(parent_np);
> > +	}
> > +	if (IS_ERR(priv->olb))
>
> Also here
>
> > +		return PTR_ERR(priv->olb);
>
> This looks over-complicated. First, you cannot just
> dev_get_regmap(pdev->dev.parent)?

No dev_get_regmap() cannot be used as it doesn't pick up syscon regmaps.
I've just tried it.

However I've simplified the logic, it looks better now.

	static int eq5r_probe(struct platform_device *pdev)
	{
		struct device_node *parent_np;

		/* ... */

		parent_np = of_get_parent(np);
		if (!parent_np)
			return -ENODEV;

		priv->olb = syscon_node_to_regmap(parent_np);
		of_node_put(parent_np);
		if (IS_ERR(priv->olb))
			return PTR_ERR(priv->olb);

		/* ... */
	}

[...]

> > +static struct platform_driver eq5r_driver = {
> > +	.probe = eq5r_probe,
> > +	.driver = {
> > +		.name = "eyeq5-reset",
> > +		.of_match_table = eq5r_match_table,
> > +	},
> > +};
> > +
> > +static int __init eq5r_init(void)
> > +{
> > +	return platform_driver_register(&eq5r_driver);
> > +}
> > +
> > +arch_initcall(eq5r_init);
>
> This is does not look like arch code, but driver or subsys. Use regular
> module_driver. I see there is such pattern in reset but I doubt this is
> something good.

Indeed I've moved things to using the builtin_platform_driver() macro.

Thanks,

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

  reply	other threads:[~2024-01-24 16:52 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-23 18:46 [PATCH v3 00/17] Add support for Mobileye EyeQ5 system controller Théo Lebrun
2024-01-23 18:46 ` [PATCH v3 01/17] clk: fixed-factor: add optional accuracy support Théo Lebrun
2024-01-23 18:46 ` [PATCH v3 02/17] clk: fixed-factor: add fwname-based constructor functions Théo Lebrun
2024-01-23 18:46 ` [PATCH v3 03/17] dt-bindings: pinctrl: allow pin controller device without unit address Théo Lebrun
2024-01-23 20:57   ` Rob Herring
2024-01-23 18:46 ` [PATCH v3 04/17] dt-bindings: soc: mobileye: add EyeQ5 OLB system controller Théo Lebrun
2024-01-23 20:58   ` Rob Herring
2024-01-24 15:14   ` Rob Herring
2024-01-24 17:28     ` Théo Lebrun
2024-01-24 17:40       ` Théo Lebrun
2024-01-24 19:22         ` Rob Herring
2024-01-25 11:40           ` Théo Lebrun
2024-01-26 11:52             ` Krzysztof Kozlowski
2024-01-26 12:28               ` Théo Lebrun
2024-01-26 14:54                 ` Krzysztof Kozlowski
2024-01-25  7:51     ` Krzysztof Kozlowski
2024-01-25 11:01       ` Théo Lebrun
2024-01-25 14:33         ` Andrew Davis
2024-01-25 14:49           ` Théo Lebrun
2024-01-25 15:11             ` Andrew Davis
2024-01-26 11:51         ` Krzysztof Kozlowski
2024-01-23 18:46 ` [PATCH v3 05/17] dt-bindings: clock: mobileye,eyeq5-clk: add bindings Théo Lebrun
2024-01-24  6:45   ` Krzysztof Kozlowski
2024-01-23 18:46 ` [PATCH v3 06/17] dt-bindings: reset: mobileye,eyeq5-reset: " Théo Lebrun
2024-01-24  6:47   ` Krzysztof Kozlowski
2024-01-23 18:46 ` [PATCH v3 07/17] dt-bindings: pinctrl: mobileye,eyeq5-pinctrl: " Théo Lebrun
2024-01-24  6:52   ` Krzysztof Kozlowski
2024-01-23 18:46 ` [PATCH v3 08/17] clk: eyeq5: add platform driver Théo Lebrun
2024-01-24  7:05   ` Krzysztof Kozlowski
2024-01-24 16:41     ` Théo Lebrun
2024-01-25  7:46       ` Krzysztof Kozlowski
2024-01-25 11:53         ` Théo Lebrun
2024-01-26 11:56           ` Krzysztof Kozlowski
2024-01-23 18:46 ` [PATCH v3 09/17] reset: " Théo Lebrun
2024-01-24  7:00   ` Krzysztof Kozlowski
2024-01-24 16:52     ` Théo Lebrun [this message]
2024-01-24 10:54   ` Philipp Zabel
2024-01-24 17:07     ` Théo Lebrun
2024-01-23 18:46 ` [PATCH v3 10/17] pinctrl: " Théo Lebrun
2024-01-24  7:03   ` Krzysztof Kozlowski
2024-01-24 16:55     ` Théo Lebrun
2024-01-24 15:19   ` Rob Herring
2024-01-24 17:31     ` Théo Lebrun
2024-01-23 18:46 ` [PATCH v3 11/17] MIPS: mobileye: eyeq5: rename olb@e00000 to system-controller@e00000 Théo Lebrun
2024-01-23 18:46 ` [PATCH v3 12/17] MIPS: mobileye: eyeq5: remove reg-io-width property from OLB syscon Théo Lebrun
2024-01-24  8:33   ` Sergei Shtylyov
2024-01-24 16:56     ` Théo Lebrun
2024-01-23 18:46 ` [PATCH v3 13/17] MIPS: mobileye: eyeq5: use OLB clocks controller Théo Lebrun
2024-01-23 18:46 ` [PATCH v3 14/17] MIPS: mobileye: eyeq5: add OLB reset controller node Théo Lebrun
2024-01-23 18:47 ` [PATCH v3 15/17] MIPS: mobileye: eyeq5: add reset properties to uarts Théo Lebrun
2024-01-23 18:47 ` [PATCH v3 16/17] MIPS: mobileye: eyeq5: add pinctrl nodes & pinmux function nodes Théo Lebrun
2024-01-23 18:47 ` [PATCH v3 17/17] MIPS: mobileye: eyeq5: add pinctrl properties to UART nodes Théo Lebrun
2024-01-24  6:43 ` [PATCH v3 00/17] Add support for Mobileye EyeQ5 system controller Krzysztof Kozlowski
2024-01-24 16:44   ` 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=CYN3C7XGTG1T.2U3RS9E2ENWGJ@bootlin.com \
    --to=theo.lebrun@bootlin.com \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=gregory.clement@bootlin.com \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=krzysztof.kozlowski@linaro.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-clk@vger.kernel.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@vger.kernel.org \
    --cc=mturquette@baylibre.com \
    --cc=p.zabel@pengutronix.de \
    --cc=rafal@milecki.pl \
    --cc=robh+dt@kernel.org \
    --cc=sboyd@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