Re: [PATCH v2 02/18] clk: intel: Add clock driver for Intel MIPS SoCs

From: Zhu, Yi Xin
Date: Wed Aug 29 2018 - 06:34:32 EST


+}
+
+CLK_OF_DECLARE(intel_grx500_cgu, "intel,grx500-cgu", grx500_clk_init);
Any reason a platform driver can't be used instead of CLK_OF_DECLARE()?
It provides CPU clock which is used in early boot stage.

Ok. What is the CPU clock doing in early boot stage? Some sort of timer
frequency? If the driver can be split into two pieces, one to handle the
really early stuff that must be in place to get timers up and running
and the other to register the rest of the clks that aren't critical from
a regular platform driver it would be good. That's preferred model if
something is super critical.

Just to make sure my approach is same as you think.

In the driver, there's two clock registrations.

- One through CLK_OF_DECLARE for early stage clocks.

- The other via platform driver for the non-critical clocks.

In the device tree, two clock device nodes are required.

e.g. device tree:

cgu: cgu@16200000 {
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ compatible = "intel,grx500-clk", "syscon";
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ reg = <0x16200000 0x200>;
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ #clock-cells = <1>;
};

clk: clk {
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ compatible = "intel,grx500-cgu";
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ #clock-cells = <1>;
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ intel,cgu-syscon = <&cgu>;
};

source code:

CLK_OF_DECLARE(intel_grx500_cgu, "intel,grx500-cgu", grx500_clk_init);

static const struct of_device_id of_intel_grx500_cgu_match[] = {
ÂÂÂÂÂÂÂ { .compatible = "intel,grx500-clk" },
ÂÂÂÂÂÂÂ {}
};

static struct platform_driver intel_grx500_clk_driver = {
 .probe = intel_grx500_clk_probe,
ÂÂÂÂÂÂÂ .driver = {
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ .name = "grx500-cgu",
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ .of_match_table = of_match_ptr(of_intel_grx500_cgu_match),
ÂÂÂÂÂÂÂ },
};

static int __init intel_grx500_cgu_init(void)
{
ÂÂÂÂÂÂÂ return platform_driver_register(&intel_grx500_clk_driver);
}
arch_initcall(intel_grx500_cgu_init);