On 23/02/2023 05:19, Sam Protsenko wrote: > Extract parent clock enabling from exynos_arm64_register_cmu() to > dedicated function. > > Acked-by: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx> > Tested-by: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx> > Signed-off-by: Sam Protsenko <semen.protsenko@xxxxxxxxxx> > --- > Changes in v3: > - Rebased on top of latest soc/for-next tree > - Added Marek's Acked-by tag > > Changes in v2: > - Rebased on top of latest soc/for-next tree > - Improved English in kernel doc comment > - Added clk_prepare_enable() return value check > - Added exynos_arm64_enable_bus_clk() check in > exynos_arm64_register_cmu() > - Changed the commit message to reflect code changes > > drivers/clk/samsung/clk-exynos-arm64.c | 51 ++++++++++++++++++-------- > 1 file changed, 35 insertions(+), 16 deletions(-) > > diff --git a/drivers/clk/samsung/clk-exynos-arm64.c b/drivers/clk/samsung/clk-exynos-arm64.c > index b921b9a1134a..2aa3f0a5644e 100644 > --- a/drivers/clk/samsung/clk-exynos-arm64.c > +++ b/drivers/clk/samsung/clk-exynos-arm64.c > @@ -56,6 +56,37 @@ static void __init exynos_arm64_init_clocks(struct device_node *np, > iounmap(reg_base); > } > > +/** > + * exynos_arm64_enable_bus_clk - Enable parent clock of specified CMU > + * > + * @dev: Device object; may be NULL if this function is not being > + * called from platform driver probe function > + * @np: CMU device tree node > + * @cmu: CMU data > + * > + * Keep CMU parent clock running (needed for CMU registers access). > + * > + * Return: 0 on success or a negative error code on failure. > + */ > +static int __init exynos_arm64_enable_bus_clk(struct device *dev, > + struct device_node *np, const struct samsung_cmu_info *cmu) > +{ > + struct clk *parent_clk; > + > + if (!cmu->clk_name) > + return 0; > + > + if (dev) > + parent_clk = clk_get(dev, cmu->clk_name); > + else > + parent_clk = of_clk_get_by_name(np, cmu->clk_name); > + > + if (IS_ERR(parent_clk)) > + return PTR_ERR(parent_clk); > + > + return clk_prepare_enable(parent_clk); > +} > + > /** > * exynos_arm64_register_cmu - Register specified Exynos CMU domain > * @dev: Device object; may be NULL if this function is not being > @@ -72,23 +103,11 @@ static void __init exynos_arm64_init_clocks(struct device_node *np, > void __init exynos_arm64_register_cmu(struct device *dev, > struct device_node *np, const struct samsung_cmu_info *cmu) > { > - /* Keep CMU parent clock running (needed for CMU registers access) */ > - if (cmu->clk_name) { > - struct clk *parent_clk; > - > - if (dev) > - parent_clk = clk_get(dev, cmu->clk_name); > - else > - parent_clk = of_clk_get_by_name(np, cmu->clk_name); > - > - if (IS_ERR(parent_clk)) { > - pr_err("%s: could not find bus clock %s; err = %ld\n", > - __func__, cmu->clk_name, PTR_ERR(parent_clk)); > - } else { > - clk_prepare_enable(parent_clk); > - } > - } > + int err; > > + err = exynos_arm64_enable_bus_clk(dev, np, cmu); > + if (err) > + panic("%s: could not enable bus clock\n", __func__); The error handling is changed and not equivalent. I would say that we could still try to boot even if this failed, so kernel should not panic. Maybe the parent clock is enabled by bootloader. Best regards, Krzysztof