Hello Christophe, 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. We are missing suppress_bind_attrs though. I can add that at next revision. Thanks, -- Théo Lebrun, Bootlin Embedded Linux and Kernel engineering https://bootlin.com