Re: [PATCH v4 4/4] clk: eyeq: add driver

From: Théo Lebrun
Date: Mon Oct 07 2024 - 09:57:02 EST


On Fri Oct 4, 2024 at 11:20 PM CEST, Christophe JAILLET wrote:
> Le 04/10/2024 à 18:55, Théo Lebrun a écrit :
> > On Fri Oct 4, 2024 at 6:34 PM CEST, Christophe JAILLET wrote:
> >> Le 04/10/2024 à 17:45, Théo Lebrun a écrit :
> >>> +static void eqc_probe_init_plls(struct device *dev, struct eqc_priv *priv)
> >>> +{
> >>> + const struct eqc_match_data *data = priv->data;
> >>> + unsigned long mult, div, acc;
> >>> + const struct eqc_pll *pll;
> >>> + struct clk_hw *hw;
> >>> + unsigned int i;
> >>> + u32 r0, r1;
> >>> + u64 val;
> >>> + int ret;
> >>> +
> >>> + for (i = 0; i < data->pll_count; i++) {
> >>> + pll = &data->plls[i];
> >>> +
> >>> + val = readq(priv->base + pll->reg64);
> >>> + r0 = val;
> >>> + r1 = val >> 32;
> >>> +
> >>> + ret = eqc_pll_parse_registers(r0, r1, &mult, &div, &acc);
> >>> + if (ret) {
> >>> + dev_warn(dev, "failed parsing state of %s\n", pll->name);
> >>> + priv->cells->hws[pll->index] = ERR_PTR(ret);
> >>> + continue;
> >>> + }
> >>> +
> >>> + hw = clk_hw_register_fixed_factor_with_accuracy_fwname(dev,
> >>> + dev->of_node, pll->name, "ref", 0, mult, div, acc);
> >>
> >> Should this be freed somewhere or is it auto-magically freed by a
> >> put_something()?
> >> Maybe devm_action_or_reset()?
> >
> > This driver does not support being removed. It provides essential PLLs
> > and the system has not chance of working without them.
> >
> > Almost all instances will be instantiated at of_clk_init() stage by the
> > way (ie before platform bus infrastructure init). Devres isn't a
> > solution in those cases.
>
> eqc_probe_init_plls() and eqc_probe_init_divs() are called from
> eqc_probe(), which has several devm_ function calls.
>
> Would it make sense to remove these devm_ ?
>
>
> devm_platform_ioremap_resource(),
> devm_kzalloc(),
> devm_of_clk_add_hw_provider(),
> eqc_auxdev_create() which calls devm_add_action_or_reset().
>
> I sent this patch because of these calls.
>
> Either I miss something, either maybe things can be simplified.

You are right, mixing devres and non-devres handled resources was a
mistake. Things have been simplified in revision v5 [0]. It sets
suppress_bind_attrs to true and switches to 100% non-devres calls.

[0]: https://lore.kernel.org/lkml/20241007-mbly-clk-v5-0-e9d8994269cb@xxxxxxxxxxx/

Thanks,

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