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 08/17] clk: eyeq5: add platform driver
Date: Wed, 24 Jan 2024 17:41:25 +0100 [thread overview]
Message-ID: <CYN33YJ10HYS.2YDXB158LFZPL@bootlin.com> (raw)
In-Reply-To: <127fd51b-cd64-4e00-99d6-7be9b79f2dcc@linaro.org>
Hello,
On Wed Jan 24, 2024 at 8:05 AM CET, Krzysztof Kozlowski wrote:
> On 23/01/2024 19:46, Théo Lebrun wrote:
> > Add the Mobileye EyeQ5 clock controller driver. It might grow to add
> > support for other platforms from Mobileye.
> >
> > It handles 10 read-only PLLs derived from the main crystal on board. It
> > exposes a table-based divider clock used for OSPI. Other platform
> > clocks are not configurable and therefore kept as fixed-factor
> > devicetree nodes.
> >
> > Two PLLs are required early on and are therefore registered at
> > of_clk_init(). Those are pll-cpu for the GIC timer and pll-per for the
> > UARTs.
> >
>
>
> > +#define OLB_PCSR1_RESET BIT(0)
> > +#define OLB_PCSR1_SSGC_DIV GENMASK(4, 1)
> > +/* Spread amplitude (% = 0.1 * SPREAD[4:0]) */
> > +#define OLB_PCSR1_SPREAD GENMASK(9, 5)
> > +#define OLB_PCSR1_DIS_SSCG BIT(10)
> > +/* Down-spread or center-spread */
> > +#define OLB_PCSR1_DOWN_SPREAD BIT(11)
> > +#define OLB_PCSR1_FRAC_IN GENMASK(31, 12)
> > +
> > +static struct clk_hw_onecell_data *eq5c_clk_data;
> > +static struct regmap *eq5c_olb;
>
> Drop these two. No file-scope regmaps for drivers. Use private container
> structures.
I wouldn't know how to handle the two steps then. Two clocks and the clk
provider are registered at of_clk_init() using CLK_OF_DECLARE_DRIVER().
The rest is at platform device probe. Without a static, there are no
way to pass the struct clk_hw_onecell_data from one to the other.
I've looked at all clock drivers that do CLK_OF_DECLARE_DRIVER() and
register a platform driver.
- The following use a static variable:
drivers/clk/axis/clk-artpec6.c
drivers/clk/clk-aspeed.c
drivers/clk/clk-ast2600.c
drivers/clk/clk-eyeq5.c
drivers/clk/clk-gemini.c
drivers/clk/clk-milbeaut.c
drivers/clk/mediatek/clk-mt2701.c
drivers/clk/mediatek/clk-mt6797.c
drivers/clk/mediatek/clk-mt8173-infracfg.c
drivers/clk/nxp/clk-lpc18xx-creg.c
drivers/clk/ralink/clk-mt7621.c
drivers/clk/ralink/clk-mtmips.c
drivers/clk/sunxi/clk-mod0.c
drivers/clk/axis/clk-artpec6.c
- Those two declare different clock providers at init and probe:
drivers/clk/ralink/clk-mt7621.c
drivers/clk/sunxi/clk-mod0.c
- It doesn't register new clocks at probe (only resets) so no need to
share variables.
drivers/clk/ralink/clk-mtmips.c
>
> ...
>
> > +static void __init eq5c_init(struct device_node *np)
> > +{
> > + struct device_node *parent_np = of_get_parent(np);
> > + int i, ret;
> > +
> > + eq5c_clk_data = kzalloc(struct_size(eq5c_clk_data, hws, EQ5C_NB_CLKS),
> > + GFP_KERNEL);
> > + if (!eq5c_clk_data) {
> > + ret = -ENOMEM;
> > + goto err;
> > + }
> > +
> > + eq5c_clk_data->num = EQ5C_NB_CLKS;
> > +
> > + /*
> > + * Mark all clocks as deferred. We register some now and others at
> > + * platform device probe.
> > + */
> > + for (i = 0; i < EQ5C_NB_CLKS; i++)
> > + eq5c_clk_data->hws[i] = ERR_PTR(-EPROBE_DEFER);
> > +
> > + /*
> > + * Currently, if OLB is not available, we log an error, fail init then
>
> How it could be not available? Only with broken initcall ordering. Fix
> your initcall ordering and then simplify all this weird code.
of_syscon_register() and regmap_init_mmio() lists many reasons for
it to not be available. Am I missing something?
Thanks,
--
Théo Lebrun, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
next prev parent reply other threads:[~2024-01-24 16:41 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 [this message]
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
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=CYN33YJ10HYS.2YDXB158LFZPL@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.