Re: [PATCH v10 2/4] clk: clk-loongson2: add clock controller driver support

From: zhuyinbo
Date: Mon Feb 20 2023 - 00:45:59 EST



在 2023/2/18 上午6:15, Stephen Boyd 写道:
Quoting zhuyinbo (2023-02-14 23:35:22)
在 2023/2/11 上午7:42, Stephen Boyd 写道:
Quoting Yinbo Zhu (2022-11-28 19:41:55)

+
+ mult = (val >> LOONGSON2_USB_FREQSCALE_SHIFT) &
+ clk_div_mask(LOONGSON2_USB_FREQSCALE_WIDTH);
+
+ rate = parent_rate * (mult + 1);
+ do_div(rate, 8);
Why is do_div() being used?
no expecial reason, I only want to get a result that rate divide 8.
Ok, you can use div_u64() here and simplify.
okay, I got it.

you meaning is to use clk_parent_data to rework
loongson2_clk_pll_register  and drop

loongson2_obtain_fixed_clk_hw ?
Yes

+}
+
+static void __init loongson2_clocks_init(struct device_node *np)
+{
+ struct clk_hw **hws;
+ struct clk_hw_onecell_data *clk_hw_data;
+ spinlock_t loongson2_clk_lock;
+
+ loongson2_pll_base = of_iomap(np, 0);
+
+ if (!loongson2_pll_base) {
+ pr_err("clk: unable to map loongson2 clk registers\n");
+ goto err;
return?
sorry, I don't get it.  you meaning is that  remove "goto err". Instead,
add a "return".
Yes.

+ }
+
+ clk_hw_data = kzalloc(struct_size(clk_hw_data, hws, LOONGSON2_CLK_END),
+ GFP_KERNEL);
+ if (WARN_ON(!clk_hw_data))
+ goto err;
[...]
+
+err:
+ iounmap(loongson2_pll_base);
+}
+
+CLK_OF_DECLARE(loongson2_clk, "loongson,ls2k-clk", loongson2_clocks_init);
Any reason this can't be a platform driver?

Your question is that  why I don't use the platform_driver_register to register  clk and use CLK_OF_DECLARE ?

I was  consider other clock controllers of Loongson-2 series may be different with 2k1000 and I can add a line

CLK_OF_DECLARE() for compatible other platform in the future. eg.

CLK_OF_DECLARE(loongson2_clk, "loongson,ls2k-clk", loongson2_clocks_init);

+  CLK_OF_DECLARE(xxx1, xxx2,  xxx3);  // for other clock controllers of Loongson-2 series

For the compatible consideration of other clock controllers of
Loongson-2 series in the future, the way of using dts can be

better compatible.

Sorry that sentence doesn't make sense to me. The use of dts doesn't
require the use of CLK_OF_DECLARE.

yes, the use of dts doesn't require the use of CLK_OF_DECLARE and can use platform_driver_register

but my drvier not use platform_driver_register to register  clk and use CLK_OF_DECLARE to match of_clk_init.