mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-24 17:23:25 -05:00
clk: mvebu: kirkwood: maintain clock init order
Init order of CLK_OF_DECLARE'd drivers depends on compile order. Unfortunately, clk_of_init does not allow drivers to return errors, e.g. -EPROBE_DEFER if parent clocks have not been registered, yet. To avoid init order woes for MVEBU clock drivers, we take care of proper init order ourselves. This patch joins core-clk and gating-clk init to maintain proper init order. Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> Tested-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com> Signed-off-by: Jason Cooper <jason@lakedaemon.net>
This commit is contained in:
parent
8f7fc5450b
commit
58d516ae95
1 changed files with 16 additions and 18 deletions
|
@ -193,13 +193,6 @@ static const struct coreclk_soc_desc kirkwood_coreclks = {
|
||||||
.num_ratios = ARRAY_SIZE(kirkwood_coreclk_ratios),
|
.num_ratios = ARRAY_SIZE(kirkwood_coreclk_ratios),
|
||||||
};
|
};
|
||||||
|
|
||||||
static void __init kirkwood_coreclk_init(struct device_node *np)
|
|
||||||
{
|
|
||||||
mvebu_coreclk_setup(np, &kirkwood_coreclks);
|
|
||||||
}
|
|
||||||
CLK_OF_DECLARE(kirkwood_core_clk, "marvell,kirkwood-core-clock",
|
|
||||||
kirkwood_coreclk_init);
|
|
||||||
|
|
||||||
static const struct coreclk_soc_desc mv88f6180_coreclks = {
|
static const struct coreclk_soc_desc mv88f6180_coreclks = {
|
||||||
.get_tclk_freq = kirkwood_get_tclk_freq,
|
.get_tclk_freq = kirkwood_get_tclk_freq,
|
||||||
.get_cpu_freq = mv88f6180_get_cpu_freq,
|
.get_cpu_freq = mv88f6180_get_cpu_freq,
|
||||||
|
@ -208,13 +201,6 @@ static const struct coreclk_soc_desc mv88f6180_coreclks = {
|
||||||
.num_ratios = ARRAY_SIZE(kirkwood_coreclk_ratios),
|
.num_ratios = ARRAY_SIZE(kirkwood_coreclk_ratios),
|
||||||
};
|
};
|
||||||
|
|
||||||
static void __init mv88f6180_coreclk_init(struct device_node *np)
|
|
||||||
{
|
|
||||||
mvebu_coreclk_setup(np, &mv88f6180_coreclks);
|
|
||||||
}
|
|
||||||
CLK_OF_DECLARE(mv88f6180_core_clk, "marvell,mv88f6180-core-clock",
|
|
||||||
mv88f6180_coreclk_init);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clock Gating Control
|
* Clock Gating Control
|
||||||
*/
|
*/
|
||||||
|
@ -239,9 +225,21 @@ static const struct clk_gating_soc_desc kirkwood_gating_desc[] __initconst = {
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
static void __init kirkwood_clk_gating_init(struct device_node *np)
|
static void __init kirkwood_clk_init(struct device_node *np)
|
||||||
{
|
{
|
||||||
mvebu_clk_gating_setup(np, kirkwood_gating_desc);
|
struct device_node *cgnp =
|
||||||
|
of_find_compatible_node(NULL, NULL, "marvell,kirkwood-gating-clock");
|
||||||
|
|
||||||
|
|
||||||
|
if (of_device_is_compatible(np, "marvell,mv88f6180-core-clock"))
|
||||||
|
mvebu_coreclk_setup(np, &mv88f6180_coreclks);
|
||||||
|
else
|
||||||
|
mvebu_coreclk_setup(np, &kirkwood_coreclks);
|
||||||
|
|
||||||
|
if (cgnp)
|
||||||
|
mvebu_clk_gating_setup(cgnp, kirkwood_gating_desc);
|
||||||
}
|
}
|
||||||
CLK_OF_DECLARE(kirkwood_clk_gating, "marvell,kirkwood-gating-clock",
|
CLK_OF_DECLARE(kirkwood_clk, "marvell,kirkwood-core-clock",
|
||||||
kirkwood_clk_gating_init);
|
kirkwood_clk_init);
|
||||||
|
CLK_OF_DECLARE(mv88f6180_clk, "marvell,mv88f6180-core-clock",
|
||||||
|
kirkwood_clk_init);
|
||||||
|
|
Loading…
Add table
Reference in a new issue